diff --git a/frontend/src/Settings/ImportLists/Options/ImportListOptions.tsx b/frontend/src/Settings/ImportLists/Options/ImportListOptions.tsx index 72a546b1a..28d06b1dc 100644 --- a/frontend/src/Settings/ImportLists/Options/ImportListOptions.tsx +++ b/frontend/src/Settings/ImportLists/Options/ImportListOptions.tsx @@ -16,8 +16,6 @@ import { setImportListOptionsValue, } from 'Store/Actions/settingsActions'; import createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector'; -import ImportListOptionsSettings from 'typings/ImportListOptionsSettings'; -import { PendingSection } from 'typings/pending'; import translate from 'Utilities/String/translate'; const SECTION = 'importListOptions'; @@ -61,8 +59,7 @@ function ImportListOptions(props: ImportListOptionsPageProps) { hasSettings, } = selected; - const { listSyncLevel, listSyncTag } = - settings as PendingSection; + const { listSyncLevel, listSyncTag } = settings; const dispatch = useDispatch(); diff --git a/frontend/src/Store/Selectors/createSettingsSectionSelector.js b/frontend/src/Store/Selectors/createSettingsSectionSelector.js deleted file mode 100644 index a9f6cbff6..000000000 --- a/frontend/src/Store/Selectors/createSettingsSectionSelector.js +++ /dev/null @@ -1,32 +0,0 @@ -import { createSelector } from 'reselect'; -import selectSettings from 'Store/Selectors/selectSettings'; - -function createSettingsSectionSelector(section) { - return createSelector( - (state) => state.settings[section], - (sectionSettings) => { - const { - isFetching, - isPopulated, - error, - item, - pendingChanges, - isSaving, - saveError - } = sectionSettings; - - const settings = selectSettings(item, pendingChanges, saveError); - - return { - isFetching, - isPopulated, - error, - isSaving, - saveError, - ...settings - }; - } - ); -} - -export default createSettingsSectionSelector; diff --git a/frontend/src/Store/Selectors/createSettingsSectionSelector.ts b/frontend/src/Store/Selectors/createSettingsSectionSelector.ts new file mode 100644 index 000000000..f43e4e59b --- /dev/null +++ b/frontend/src/Store/Selectors/createSettingsSectionSelector.ts @@ -0,0 +1,49 @@ +import { createSelector } from 'reselect'; +import AppSectionState, { + AppSectionItemState, +} from 'App/State/AppSectionState'; +import AppState from 'App/State/AppState'; +import selectSettings from 'Store/Selectors/selectSettings'; +import { PendingSection } from 'typings/pending'; + +type SettingNames = keyof Omit; +type GetSectionState = AppState['settings'][Name]; +type GetSettingsSectionItemType = + GetSectionState extends AppSectionItemState + ? R + : GetSectionState extends AppSectionState + ? R + : never; + +type AppStateWithPending = { + item?: GetSettingsSectionItemType; + pendingChanges?: Partial>; + saveError?: Error; +} & GetSectionState; + +function createSettingsSectionSelector( + section: Name +) { + return createSelector( + (state: AppState) => state.settings[section], + (sectionSettings) => { + const { item, pendingChanges, saveError, ...other } = + sectionSettings as AppStateWithPending; + + const { settings, ...rest } = selectSettings( + item, + pendingChanges, + saveError + ); + + return { + ...other, + saveError, + settings: settings as PendingSection>, + ...rest, + }; + } + ); +} + +export default createSettingsSectionSelector;