feat: add datasets detail context and provider for improved data vali… (#16451)

This commit is contained in:
Wu Tianwei 2025-03-24 14:30:26 +08:00 • committed by GitHub
commit 9701b573e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 192 additions and 35 deletions

View file

@ -0,0 +1,38 @@
import { useContext } from 'react'
import { createStore, useStore } from 'zustand'
import type { DataSet } from '@/models/datasets'
import { DatasetsDetailContext } from './provider'
import produce from 'immer'
type DatasetsDetailStore = {
datasetsDetail: Record<string, DataSet>
updateDatasetsDetail: (datasetsDetail: DataSet[]) => void
}
export const createDatasetsDetailStore = () => {
return createStore<DatasetsDetailStore>((set, get) => ({
datasetsDetail: {},
updateDatasetsDetail: (datasets: DataSet[]) => {
const oldDatasetsDetail = get().datasetsDetail
const datasetsDetail = datasets.reduce<Record<string, DataSet>>((acc, dataset) => {
acc[dataset.id] = dataset
return acc
}, {})
// Merge new datasets detail into old one
const newDatasetsDetail = produce(oldDatasetsDetail, (draft) => {
Object.entries(datasetsDetail).forEach(([key, value]) => {
draft[key] = value
})
})
set({ datasetsDetail: newDatasetsDetail })
},
}))
}
export const useDatasetsDetailStore = <T>(selector: (state: DatasetsDetailStore) => T): T => {
const store = useContext(DatasetsDetailContext)
if (!store)
throw new Error('Missing DatasetsDetailContext.Provider in the tree')
return useStore(store, selector)
}