| 123456789101112131415161718192021222324252627282930313233343536373839 | 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)}
 |