UNPKG

@orchestrator-ui/orchestrator-ui-components

Version:

Library of UI Components used to display the workflow orchestrator frontend

70 lines (61 loc) 2.52 kB
import { configureStore } from '@reduxjs/toolkit'; import type { EnhancedStore } from '@reduxjs/toolkit'; import type { Dispatch, UnknownAction } from '@reduxjs/toolkit'; import { CombinedState } from '@reduxjs/toolkit/query'; import { CustomApiConfig, getCustomApiSlice } from '@/rtk/slices'; import { OrchestratorComponentOverride, getOrchestratorComponentOverrideSlice, } from '@/rtk/slices/orchestratorComponentOverride'; import { PydanticForm, getPydanticFormSlice } from '@/rtk/slices/pydanticForm'; import type { OrchestratorConfig } from '@/types'; import { orchestratorApi } from './api'; import { getOrchestratorConfigSlice, toastMessagesReducer } from './slices'; export type RootState = { orchestratorApi: CombinedState< Record<string, never>, 'engineStatus', 'orchestratorApi' >; toastMessages: ReturnType<typeof toastMessagesReducer>; orchestratorConfig: OrchestratorConfig; orchestratorComponentOverride?: OrchestratorComponentOverride; pydanticForm?: PydanticForm; customApis: CustomApiConfig[]; }; export type InitialOrchestratorStoreConfig = Pick< RootState, | 'orchestratorConfig' | 'customApis' | 'orchestratorComponentOverride' | 'pydanticForm' >; export const getOrchestratorStore = ({ orchestratorConfig, orchestratorComponentOverride = {}, pydanticForm = {}, customApis, }: InitialOrchestratorStoreConfig): EnhancedStore<RootState> => { const configSlice = getOrchestratorConfigSlice(orchestratorConfig); const orchestratorComponentOverrideSlice = getOrchestratorComponentOverrideSlice(orchestratorComponentOverride); const customApisSlice = getCustomApiSlice(customApis); const componentMatcherSlice = getPydanticFormSlice(pydanticForm); const orchestratorStore = configureStore({ reducer: { [orchestratorApi.reducerPath]: orchestratorApi.reducer, toastMessages: toastMessagesReducer, orchestratorConfig: configSlice.reducer, orchestratorComponentOverride: orchestratorComponentOverrideSlice.reducer, customApis: customApisSlice?.reducer, pydanticForm: componentMatcherSlice?.reducer, }, middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: false, }).concat(orchestratorApi.middleware), }); return orchestratorStore; }; export type AppDispatch = Dispatch<UnknownAction>;