import { createReducer } from "@reduxjs/toolkit"; import { providerUpdateList, systemMarkTasksDirty, systemUpdateHealth, systemUpdateLanguages, systemUpdateLanguagesProfiles, systemUpdateLogs, systemUpdateReleases, systemUpdateSettings, systemUpdateStatus, systemUpdateTasks, } from "../actions"; import { AsyncUtility } from "../utils/async"; import { createAsyncItemReducer } from "../utils/factory"; interface System { languages: Async.Item; languagesProfiles: Async.Item; status: Async.Item; health: Async.Item; tasks: Async.Item; providers: Async.Item; logs: Async.Item; releases: Async.Item; settings: Async.Item; } const defaultSystem: System = { languages: AsyncUtility.getDefaultItem(), languagesProfiles: AsyncUtility.getDefaultItem(), status: AsyncUtility.getDefaultItem(), health: AsyncUtility.getDefaultItem(), tasks: AsyncUtility.getDefaultItem(), providers: AsyncUtility.getDefaultItem(), logs: AsyncUtility.getDefaultItem(), releases: AsyncUtility.getDefaultItem(), settings: AsyncUtility.getDefaultItem(), }; const reducer = createReducer(defaultSystem, (builder) => { createAsyncItemReducer(builder, (s) => s.languages, { all: systemUpdateLanguages, }); createAsyncItemReducer(builder, (s) => s.languagesProfiles, { all: systemUpdateLanguagesProfiles, }); createAsyncItemReducer(builder, (s) => s.status, { all: systemUpdateStatus }); createAsyncItemReducer(builder, (s) => s.settings, { all: systemUpdateSettings, }); createAsyncItemReducer(builder, (s) => s.releases, { all: systemUpdateReleases, }); createAsyncItemReducer(builder, (s) => s.logs, { all: systemUpdateLogs, }); createAsyncItemReducer(builder, (s) => s.health, { all: systemUpdateHealth, }); createAsyncItemReducer(builder, (s) => s.tasks, { all: systemUpdateTasks, dirty: systemMarkTasksDirty, }); createAsyncItemReducer(builder, (s) => s.providers, { all: providerUpdateList, }); }); export default reducer;