diff --git a/src/renderer/src/store/ocr.ts b/src/renderer/src/store/ocr.ts new file mode 100644 index 0000000000..a3ae44a1dd --- /dev/null +++ b/src/renderer/src/store/ocr.ts @@ -0,0 +1,39 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import { BUILTIN_OCR_PROVIDERS, DEFAULT_OCR_PROVIDER } from '@renderer/config/ocr' +import { OcrProvider } from '@renderer/types/ocr' + +export interface OcrState { + providers: OcrProvider[] + imageProvider: OcrProvider +} + +const initialState: OcrState = { + providers: BUILTIN_OCR_PROVIDERS, + imageProvider: DEFAULT_OCR_PROVIDER.image +} + +const ocrSlice = createSlice({ + name: 'ocr', + initialState, + reducers: { + setOcrProviders(state, action: PayloadAction) { + state.providers = action.payload + }, + addOcrProvider(state, action: PayloadAction) { + state.providers.push(action.payload) + }, + removeOcrProvider(state, action: PayloadAction) { + state.providers = state.providers.filter((provider) => provider.id !== action.payload.id) + }, + updatePreprocessProvider(state, action: PayloadAction>) { + const index = state.providers.findIndex((provider) => provider.id === action.payload.id) + if (index !== -1) { + Object.assign(state.providers[index], action.payload) + } + } + } +}) + +export const { setOcrProviders, addOcrProvider, removeOcrProvider, updatePreprocessProvider } = ocrSlice.actions + +export default ocrSlice.reducer