From e51b85449d3216efdd19658c25e7b96abb064f77 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 30 Jul 2023 13:04:17 +0300 Subject: [PATCH] Convert store selectors to Typescript --- frontend/src/App/State/AppState.ts | 2 ++ frontend/src/App/State/IndexerAppState.ts | 4 ++- frontend/src/App/State/ReleaseAppState.ts | 10 ++++++ frontend/src/App/State/SettingsAppState.ts | 5 +-- frontend/src/App/State/SystemAppState.ts | 10 ++++++ frontend/src/App/State/TagsAppState.ts | 18 ++++++++++- .../Delete/DeleteIndexerModalContent.tsx | 5 ++- .../Indexer/Index/Table/IndexerIndexRow.tsx | 3 +- .../Index/createIndexerIndexItemSelector.ts | 3 +- frontend/src/Indexer/Indexer.ts | 7 +++++ .../Indexer/Info/IndexerInfoModalContent.tsx | 4 +-- .../Selectors/createAppProfileSelector.js | 15 --------- .../Selectors/createAppProfileSelector.ts | 14 +++++++++ ...r.js => createCommandExecutingSelector.ts} | 11 +++---- .../Store/Selectors/createCommandSelector.js | 14 --------- .../Store/Selectors/createCommandSelector.ts | 11 +++++++ .../Selectors/createDeepEqualSelector.js | 9 ------ .../Selectors/createDeepEqualSelector.ts | 6 ++++ ...or.js => createExistingIndexerSelector.ts} | 8 +++-- .../createIndexerAppProfileSelector.ts | 7 ++--- .../Store/Selectors/createIndexerSelector.js | 24 -------------- .../Store/Selectors/createIndexerSelector.ts | 25 +++++++++++++++ .../Selectors/createProfileInUseSelector.js | 24 -------------- .../Selectors/createProfileInUseSelector.ts | 21 +++++++++++++ ...ector.js => createSystemStatusSelector.ts} | 3 +- ...elector.js => createTagDetailsSelector.ts} | 5 +-- ...elector.js => createUISettingsSelector.ts} | 3 +- frontend/src/typings/Indexer.ts | 27 ---------------- frontend/src/typings/Release.ts | 28 +++++++++++++++++ frontend/src/typings/SystemStatus.ts | 31 +++++++++++++++++++ 30 files changed, 216 insertions(+), 141 deletions(-) create mode 100644 frontend/src/App/State/ReleaseAppState.ts create mode 100644 frontend/src/App/State/SystemAppState.ts delete mode 100644 frontend/src/Store/Selectors/createAppProfileSelector.js create mode 100644 frontend/src/Store/Selectors/createAppProfileSelector.ts rename frontend/src/Store/Selectors/{createCommandExecutingSelector.js => createCommandExecutingSelector.ts} (50%) delete mode 100644 frontend/src/Store/Selectors/createCommandSelector.js create mode 100644 frontend/src/Store/Selectors/createCommandSelector.ts delete mode 100644 frontend/src/Store/Selectors/createDeepEqualSelector.js create mode 100644 frontend/src/Store/Selectors/createDeepEqualSelector.ts rename frontend/src/Store/Selectors/{createExistingIndexerSelector.js => createExistingIndexerSelector.ts} (59%) delete mode 100644 frontend/src/Store/Selectors/createIndexerSelector.js create mode 100644 frontend/src/Store/Selectors/createIndexerSelector.ts delete mode 100644 frontend/src/Store/Selectors/createProfileInUseSelector.js create mode 100644 frontend/src/Store/Selectors/createProfileInUseSelector.ts rename frontend/src/Store/Selectors/{createSystemStatusSelector.js => createSystemStatusSelector.ts} (70%) rename frontend/src/Store/Selectors/{createTagDetailsSelector.js => createTagDetailsSelector.ts} (62%) rename frontend/src/Store/Selectors/{createUISettingsSelector.js => createUISettingsSelector.ts} (69%) delete mode 100644 frontend/src/typings/Indexer.ts create mode 100644 frontend/src/typings/Release.ts create mode 100644 frontend/src/typings/SystemStatus.ts diff --git a/frontend/src/App/State/AppState.ts b/frontend/src/App/State/AppState.ts index 38d075023..3d8f78443 100644 --- a/frontend/src/App/State/AppState.ts +++ b/frontend/src/App/State/AppState.ts @@ -5,6 +5,7 @@ import IndexerAppState, { } from './IndexerAppState'; import IndexerStatsAppState from './IndexerStatsAppState'; import SettingsAppState from './SettingsAppState'; +import SystemAppState from './SystemAppState'; import TagsAppState from './TagsAppState'; interface FilterBuilderPropOption { @@ -46,6 +47,7 @@ interface AppState { indexerStatus: IndexerStatusAppState; indexers: IndexerAppState; settings: SettingsAppState; + system: SystemAppState; tags: TagsAppState; } diff --git a/frontend/src/App/State/IndexerAppState.ts b/frontend/src/App/State/IndexerAppState.ts index ee769b59c..c75c8abb0 100644 --- a/frontend/src/App/State/IndexerAppState.ts +++ b/frontend/src/App/State/IndexerAppState.ts @@ -28,7 +28,9 @@ export interface IndexerIndexAppState { interface IndexerAppState extends AppSectionState, AppSectionDeleteState, - AppSectionSaveState {} + AppSectionSaveState { + itemMap: Record; +} export type IndexerStatusAppState = AppSectionState; diff --git a/frontend/src/App/State/ReleaseAppState.ts b/frontend/src/App/State/ReleaseAppState.ts new file mode 100644 index 000000000..325a429fa --- /dev/null +++ b/frontend/src/App/State/ReleaseAppState.ts @@ -0,0 +1,10 @@ +import AppSectionState, { + AppSectionDeleteState, +} from 'App/State/AppSectionState'; +import Release from 'typings/Release'; + +interface ReleaseAppState + extends AppSectionState, + AppSectionDeleteState {} + +export default ReleaseAppState; diff --git a/frontend/src/App/State/SettingsAppState.ts b/frontend/src/App/State/SettingsAppState.ts index 213955245..45ca011aa 100644 --- a/frontend/src/App/State/SettingsAppState.ts +++ b/frontend/src/App/State/SettingsAppState.ts @@ -1,5 +1,6 @@ import AppSectionState, { AppSectionDeleteState, + AppSectionItemState, AppSectionSaveState, } from 'App/State/AppSectionState'; import Application from 'typings/Application'; @@ -26,14 +27,14 @@ export interface NotificationAppState extends AppSectionState, AppSectionDeleteState {} -export type UiSettingsAppState = AppSectionState; +export type UiSettingsAppState = AppSectionItemState; interface SettingsAppState { appProfiles: AppProfileAppState; applications: ApplicationAppState; downloadClients: DownloadClientAppState; notifications: NotificationAppState; - uiSettings: UiSettingsAppState; + ui: UiSettingsAppState; } export default SettingsAppState; diff --git a/frontend/src/App/State/SystemAppState.ts b/frontend/src/App/State/SystemAppState.ts new file mode 100644 index 000000000..d43c1d0ee --- /dev/null +++ b/frontend/src/App/State/SystemAppState.ts @@ -0,0 +1,10 @@ +import SystemStatus from 'typings/SystemStatus'; +import { AppSectionItemState } from './AppSectionState'; + +export type SystemStatusAppState = AppSectionItemState; + +interface SystemAppState { + status: SystemStatusAppState; +} + +export default SystemAppState; diff --git a/frontend/src/App/State/TagsAppState.ts b/frontend/src/App/State/TagsAppState.ts index d1f1d5a2f..53a0d847f 100644 --- a/frontend/src/App/State/TagsAppState.ts +++ b/frontend/src/App/State/TagsAppState.ts @@ -1,12 +1,28 @@ import ModelBase from 'App/ModelBase'; import AppSectionState, { AppSectionDeleteState, + AppSectionSaveState, } from 'App/State/AppSectionState'; export interface Tag extends ModelBase { label: string; } -interface TagsAppState extends AppSectionState, AppSectionDeleteState {} +export interface TagDetail extends ModelBase { + label: string; + applicationIds: number[]; + indexerIds: number[]; + indexerProxyIds: number[]; + notificationIds: number[]; +} + +export interface TagDetailAppState + extends AppSectionState, + AppSectionDeleteState, + AppSectionSaveState {} + +interface TagsAppState extends AppSectionState, AppSectionDeleteState { + details: TagDetailAppState; +} export default TagsAppState; diff --git a/frontend/src/Indexer/Delete/DeleteIndexerModalContent.tsx b/frontend/src/Indexer/Delete/DeleteIndexerModalContent.tsx index 7373ba885..4052d13bc 100644 --- a/frontend/src/Indexer/Delete/DeleteIndexerModalContent.tsx +++ b/frontend/src/Indexer/Delete/DeleteIndexerModalContent.tsx @@ -6,6 +6,7 @@ import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import { kinds } from 'Helpers/Props'; +import Indexer from 'Indexer/Indexer'; import { deleteIndexer } from 'Store/Actions/indexerActions'; import { createIndexerSelectorForHook } from 'Store/Selectors/createIndexerSelector'; import translate from 'Utilities/String/translate'; @@ -18,7 +19,9 @@ interface DeleteIndexerModalContentProps { function DeleteIndexerModalContent(props: DeleteIndexerModalContentProps) { const { indexerId, onModalClose } = props; - const { name } = useSelector(createIndexerSelectorForHook(indexerId)); + const { name } = useSelector( + createIndexerSelectorForHook(indexerId) + ) as Indexer; const dispatch = useDispatch(); const onConfirmDelete = useCallback(() => { diff --git a/frontend/src/Indexer/Index/Table/IndexerIndexRow.tsx b/frontend/src/Indexer/Index/Table/IndexerIndexRow.tsx index fd148a038..69afaeeba 100644 --- a/frontend/src/Indexer/Index/Table/IndexerIndexRow.tsx +++ b/frontend/src/Indexer/Index/Table/IndexerIndexRow.tsx @@ -12,6 +12,7 @@ import { icons } from 'Helpers/Props'; import DeleteIndexerModal from 'Indexer/Delete/DeleteIndexerModal'; import EditIndexerModalConnector from 'Indexer/Edit/EditIndexerModalConnector'; import createIndexerIndexItemSelector from 'Indexer/Index/createIndexerIndexItemSelector'; +import Indexer from 'Indexer/Indexer'; import IndexerTitleLink from 'Indexer/IndexerTitleLink'; import { SelectStateInputProps } from 'typings/props'; import firstCharToUpper from 'Utilities/String/firstCharToUpper'; @@ -47,7 +48,7 @@ function IndexerIndexRow(props: IndexerIndexRowProps) { fields, added, capabilities, - } = indexer; + } = indexer as Indexer; const baseUrl = fields.find((field) => field.name === 'baseUrl')?.value ?? diff --git a/frontend/src/Indexer/Index/createIndexerIndexItemSelector.ts b/frontend/src/Indexer/Index/createIndexerIndexItemSelector.ts index 7e6a4854b..4d6b9d803 100644 --- a/frontend/src/Indexer/Index/createIndexerIndexItemSelector.ts +++ b/frontend/src/Indexer/Index/createIndexerIndexItemSelector.ts @@ -1,5 +1,4 @@ import { createSelector } from 'reselect'; -import Indexer from 'Indexer/Indexer'; import createIndexerAppProfileSelector from 'Store/Selectors/createIndexerAppProfileSelector'; import { createIndexerSelectorForHook } from 'Store/Selectors/createIndexerSelector'; import createIndexerStatusSelector from 'Store/Selectors/createIndexerStatusSelector'; @@ -11,7 +10,7 @@ function createIndexerIndexItemSelector(indexerId: number) { createIndexerAppProfileSelector(indexerId), createIndexerStatusSelector(indexerId), createUISettingsSelector(), - (indexer: Indexer, appProfile, status, uiSettings) => { + (indexer, appProfile, status, uiSettings) => { return { indexer, appProfile, diff --git a/frontend/src/Indexer/Indexer.ts b/frontend/src/Indexer/Indexer.ts index 07db30d8d..96a67f446 100644 --- a/frontend/src/Indexer/Indexer.ts +++ b/frontend/src/Indexer/Indexer.ts @@ -25,11 +25,13 @@ export interface IndexerCapabilities extends ModelBase { } export interface IndexerField extends ModelBase { + order: number; name: string; label: string; advanced: boolean; type: string; value: string; + privacy: string; } interface Indexer extends ModelBase { @@ -54,6 +56,11 @@ interface Indexer extends ModelBase { capabilities: IndexerCapabilities; indexerUrls: string[]; legacyUrls: string[]; + appProfileId: number; + implementationName: string; + implementation: string; + configContract: string; + infoLink: string; } export default Indexer; diff --git a/frontend/src/Indexer/Info/IndexerInfoModalContent.tsx b/frontend/src/Indexer/Info/IndexerInfoModalContent.tsx index 09091ee48..fb796a398 100644 --- a/frontend/src/Indexer/Info/IndexerInfoModalContent.tsx +++ b/frontend/src/Indexer/Info/IndexerInfoModalContent.tsx @@ -29,7 +29,7 @@ import styles from './IndexerInfoModalContent.css'; function createIndexerInfoItemSelector(indexerId: number) { return createSelector( createIndexerSelectorForHook(indexerId), - (indexer: Indexer) => { + (indexer?: Indexer) => { return { indexer, }; @@ -58,7 +58,7 @@ function IndexerInfoModalContent(props: IndexerInfoModalContentProps) { tags, protocol, capabilities, - } = indexer; + } = indexer as Indexer; const { onModalClose } = props; diff --git a/frontend/src/Store/Selectors/createAppProfileSelector.js b/frontend/src/Store/Selectors/createAppProfileSelector.js deleted file mode 100644 index 42452ccfd..000000000 --- a/frontend/src/Store/Selectors/createAppProfileSelector.js +++ /dev/null @@ -1,15 +0,0 @@ -import { createSelector } from 'reselect'; - -function createAppProfileSelector() { - return createSelector( - (state, { appProfileId }) => appProfileId, - (state) => state.settings.appProfiles.items, - (appProfileId, appProfiles) => { - return appProfiles.find((profile) => { - return profile.id === appProfileId; - }); - } - ); -} - -export default createAppProfileSelector; diff --git a/frontend/src/Store/Selectors/createAppProfileSelector.ts b/frontend/src/Store/Selectors/createAppProfileSelector.ts new file mode 100644 index 000000000..b26ab71a4 --- /dev/null +++ b/frontend/src/Store/Selectors/createAppProfileSelector.ts @@ -0,0 +1,14 @@ +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; + +function createAppProfileSelector() { + return createSelector( + (_: AppState, { appProfileId }: { appProfileId: number }) => appProfileId, + (state: AppState) => state.settings.appProfiles.items, + (appProfileId, appProfiles) => { + return appProfiles.find((profile) => profile.id === appProfileId); + } + ); +} + +export default createAppProfileSelector; diff --git a/frontend/src/Store/Selectors/createCommandExecutingSelector.js b/frontend/src/Store/Selectors/createCommandExecutingSelector.ts similarity index 50% rename from frontend/src/Store/Selectors/createCommandExecutingSelector.js rename to frontend/src/Store/Selectors/createCommandExecutingSelector.ts index 6037d5820..6a80e172b 100644 --- a/frontend/src/Store/Selectors/createCommandExecutingSelector.js +++ b/frontend/src/Store/Selectors/createCommandExecutingSelector.ts @@ -2,13 +2,10 @@ import { createSelector } from 'reselect'; import { isCommandExecuting } from 'Utilities/Command'; import createCommandSelector from './createCommandSelector'; -function createCommandExecutingSelector(name, contraints = {}) { - return createSelector( - createCommandSelector(name, contraints), - (command) => { - return isCommandExecuting(command); - } - ); +function createCommandExecutingSelector(name: string, contraints = {}) { + return createSelector(createCommandSelector(name, contraints), (command) => { + return isCommandExecuting(command); + }); } export default createCommandExecutingSelector; diff --git a/frontend/src/Store/Selectors/createCommandSelector.js b/frontend/src/Store/Selectors/createCommandSelector.js deleted file mode 100644 index 709dfebaf..000000000 --- a/frontend/src/Store/Selectors/createCommandSelector.js +++ /dev/null @@ -1,14 +0,0 @@ -import { createSelector } from 'reselect'; -import { findCommand } from 'Utilities/Command'; -import createCommandsSelector from './createCommandsSelector'; - -function createCommandSelector(name, contraints = {}) { - return createSelector( - createCommandsSelector(), - (commands) => { - return findCommand(commands, { name, ...contraints }); - } - ); -} - -export default createCommandSelector; diff --git a/frontend/src/Store/Selectors/createCommandSelector.ts b/frontend/src/Store/Selectors/createCommandSelector.ts new file mode 100644 index 000000000..cced7b186 --- /dev/null +++ b/frontend/src/Store/Selectors/createCommandSelector.ts @@ -0,0 +1,11 @@ +import { createSelector } from 'reselect'; +import { findCommand } from 'Utilities/Command'; +import createCommandsSelector from './createCommandsSelector'; + +function createCommandSelector(name: string, contraints = {}) { + return createSelector(createCommandsSelector(), (commands) => { + return findCommand(commands, { name, ...contraints }); + }); +} + +export default createCommandSelector; diff --git a/frontend/src/Store/Selectors/createDeepEqualSelector.js b/frontend/src/Store/Selectors/createDeepEqualSelector.js deleted file mode 100644 index 85562f28b..000000000 --- a/frontend/src/Store/Selectors/createDeepEqualSelector.js +++ /dev/null @@ -1,9 +0,0 @@ -import _ from 'lodash'; -import { createSelectorCreator, defaultMemoize } from 'reselect'; - -const createDeepEqualSelector = createSelectorCreator( - defaultMemoize, - _.isEqual -); - -export default createDeepEqualSelector; diff --git a/frontend/src/Store/Selectors/createDeepEqualSelector.ts b/frontend/src/Store/Selectors/createDeepEqualSelector.ts new file mode 100644 index 000000000..9d4a63d2e --- /dev/null +++ b/frontend/src/Store/Selectors/createDeepEqualSelector.ts @@ -0,0 +1,6 @@ +import { isEqual } from 'lodash'; +import { createSelectorCreator, defaultMemoize } from 'reselect'; + +const createDeepEqualSelector = createSelectorCreator(defaultMemoize, isEqual); + +export default createDeepEqualSelector; diff --git a/frontend/src/Store/Selectors/createExistingIndexerSelector.js b/frontend/src/Store/Selectors/createExistingIndexerSelector.ts similarity index 59% rename from frontend/src/Store/Selectors/createExistingIndexerSelector.js rename to frontend/src/Store/Selectors/createExistingIndexerSelector.ts index af16973b7..df98ab8d5 100644 --- a/frontend/src/Store/Selectors/createExistingIndexerSelector.js +++ b/frontend/src/Store/Selectors/createExistingIndexerSelector.ts @@ -1,13 +1,15 @@ -import _ from 'lodash'; +import { some } from 'lodash'; import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; import createAllIndexersSelector from './createAllIndexersSelector'; function createExistingIndexerSelector() { return createSelector( - (state, { definitionName }) => definitionName, + (_: AppState, { definitionName }: { definitionName: string }) => + definitionName, createAllIndexersSelector(), (definitionName, indexers) => { - return _.some(indexers, { definitionName }); + return some(indexers, { definitionName }); } ); } diff --git a/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts b/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts index 7ac0889ae..ea95a9443 100644 --- a/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts +++ b/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts @@ -1,15 +1,14 @@ import { createSelector } from 'reselect'; import AppState from 'App/State/AppState'; +import Indexer from 'Indexer/Indexer'; import { createIndexerSelectorForHook } from './createIndexerSelector'; function createIndexerAppProfileSelector(indexerId: number) { return createSelector( (state: AppState) => state.settings.appProfiles.items, createIndexerSelectorForHook(indexerId), - (appProfiles, indexer = {}) => { - return appProfiles.find((profile) => { - return profile.id === indexer.appProfileId; - }); + (appProfiles, indexer = {} as Indexer) => { + return appProfiles.find((profile) => profile.id === indexer.appProfileId); } ); } diff --git a/frontend/src/Store/Selectors/createIndexerSelector.js b/frontend/src/Store/Selectors/createIndexerSelector.js deleted file mode 100644 index 566678313..000000000 --- a/frontend/src/Store/Selectors/createIndexerSelector.js +++ /dev/null @@ -1,24 +0,0 @@ -import { createSelector } from 'reselect'; - -export function createIndexerSelectorForHook(indexerId) { - return createSelector( - (state) => state.indexers.itemMap, - (state) => state.indexers.items, - (itemMap, allIndexers) => { - return indexerId ? allIndexers[itemMap[indexerId]]: undefined; - } - ); -} - -function createIndexerSelector() { - return createSelector( - (state, { indexerId }) => indexerId, - (state) => state.indexers.itemMap, - (state) => state.indexers.items, - (indexerId, itemMap, allIndexers) => { - return allIndexers[itemMap[indexerId]]; - } - ); -} - -export default createIndexerSelector; diff --git a/frontend/src/Store/Selectors/createIndexerSelector.ts b/frontend/src/Store/Selectors/createIndexerSelector.ts new file mode 100644 index 000000000..7227d18a6 --- /dev/null +++ b/frontend/src/Store/Selectors/createIndexerSelector.ts @@ -0,0 +1,25 @@ +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; + +export function createIndexerSelectorForHook(indexerId: number) { + return createSelector( + (state: AppState) => state.indexers.itemMap, + (state: AppState) => state.indexers.items, + (itemMap, allIndexers) => { + return indexerId ? allIndexers[itemMap[indexerId]] : undefined; + } + ); +} + +function createIndexerSelector() { + return createSelector( + (_: AppState, { indexerId }: { indexerId: number }) => indexerId, + (state: AppState) => state.indexers.itemMap, + (state: AppState) => state.indexers.items, + (indexerId, itemMap, allIndexers) => { + return allIndexers[itemMap[indexerId]]; + } + ); +} + +export default createIndexerSelector; diff --git a/frontend/src/Store/Selectors/createProfileInUseSelector.js b/frontend/src/Store/Selectors/createProfileInUseSelector.js deleted file mode 100644 index 807bf4673..000000000 --- a/frontend/src/Store/Selectors/createProfileInUseSelector.js +++ /dev/null @@ -1,24 +0,0 @@ -import _ from 'lodash'; -import { createSelector } from 'reselect'; -import createAllIndexersSelector from './createAllIndexersSelector'; - -function createProfileInUseSelector(profileProp) { - return createSelector( - (state, { id }) => id, - (state) => state.settings.appProfiles.items, - createAllIndexersSelector(), - (id, profiles, indexers) => { - if (!id) { - return false; - } - - if (_.some(indexers, { [profileProp]: id }) || profiles.length <= 1) { - return true; - } - - return false; - } - ); -} - -export default createProfileInUseSelector; diff --git a/frontend/src/Store/Selectors/createProfileInUseSelector.ts b/frontend/src/Store/Selectors/createProfileInUseSelector.ts new file mode 100644 index 000000000..8137db693 --- /dev/null +++ b/frontend/src/Store/Selectors/createProfileInUseSelector.ts @@ -0,0 +1,21 @@ +import { some } from 'lodash'; +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; +import createAllIndexersSelector from './createAllIndexersSelector'; + +function createProfileInUseSelector(profileProp: string) { + return createSelector( + (_: AppState, { id }: { id: number }) => id, + (state: AppState) => state.settings.appProfiles.items, + createAllIndexersSelector(), + (id, profiles, indexers) => { + if (!id) { + return false; + } + + return some(indexers, { [profileProp]: id }) || profiles.length <= 1; + } + ); +} + +export default createProfileInUseSelector; diff --git a/frontend/src/Store/Selectors/createSystemStatusSelector.js b/frontend/src/Store/Selectors/createSystemStatusSelector.ts similarity index 70% rename from frontend/src/Store/Selectors/createSystemStatusSelector.js rename to frontend/src/Store/Selectors/createSystemStatusSelector.ts index df586bbb9..f5e276069 100644 --- a/frontend/src/Store/Selectors/createSystemStatusSelector.js +++ b/frontend/src/Store/Selectors/createSystemStatusSelector.ts @@ -1,8 +1,9 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; function createSystemStatusSelector() { return createSelector( - (state) => state.system.status, + (state: AppState) => state.system.status, (status) => { return status.item; } diff --git a/frontend/src/Store/Selectors/createTagDetailsSelector.js b/frontend/src/Store/Selectors/createTagDetailsSelector.ts similarity index 62% rename from frontend/src/Store/Selectors/createTagDetailsSelector.js rename to frontend/src/Store/Selectors/createTagDetailsSelector.ts index dd178944c..2a271cafe 100644 --- a/frontend/src/Store/Selectors/createTagDetailsSelector.js +++ b/frontend/src/Store/Selectors/createTagDetailsSelector.ts @@ -1,9 +1,10 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; function createTagDetailsSelector() { return createSelector( - (state, { id }) => id, - (state) => state.tags.details.items, + (_: AppState, { id }: { id: number }) => id, + (state: AppState) => state.tags.details.items, (id, tagDetails) => { return tagDetails.find((t) => t.id === id); } diff --git a/frontend/src/Store/Selectors/createUISettingsSelector.js b/frontend/src/Store/Selectors/createUISettingsSelector.ts similarity index 69% rename from frontend/src/Store/Selectors/createUISettingsSelector.js rename to frontend/src/Store/Selectors/createUISettingsSelector.ts index b256d0e98..ff539679b 100644 --- a/frontend/src/Store/Selectors/createUISettingsSelector.js +++ b/frontend/src/Store/Selectors/createUISettingsSelector.ts @@ -1,8 +1,9 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; function createUISettingsSelector() { return createSelector( - (state) => state.settings.ui, + (state: AppState) => state.settings.ui, (ui) => { return ui.item; } diff --git a/frontend/src/typings/Indexer.ts b/frontend/src/typings/Indexer.ts deleted file mode 100644 index 6e31aa0c6..000000000 --- a/frontend/src/typings/Indexer.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ModelBase from 'App/ModelBase'; - -export interface Field { - order: number; - name: string; - label: string; - value: boolean | number | string; - type: string; - advanced: boolean; - privacy: string; -} - -interface Indexer extends ModelBase { - enable: boolean; - appProfileId: number; - protocol: string; - priority: number; - name: string; - fields: Field[]; - implementationName: string; - implementation: string; - configContract: string; - infoLink: string; - tags: number[]; -} - -export default Indexer; diff --git a/frontend/src/typings/Release.ts b/frontend/src/typings/Release.ts new file mode 100644 index 000000000..5b832b1da --- /dev/null +++ b/frontend/src/typings/Release.ts @@ -0,0 +1,28 @@ +import ModelBase from 'App/ModelBase'; +import { IndexerCategory } from 'Indexer/Indexer'; + +interface Release extends ModelBase { + guid: string; + categories: IndexerCategory[]; + protocol: string; + title: string; + sortTitle: string; + fileName: string; + infoUrl: string; + downloadUrl?: string; + magnetUrl?: string; + indexerId: number; + indexer: string; + age: number; + ageHours: number; + ageMinutes: number; + publishDate: string; + size?: number; + files?: number; + grabs?: number; + seeders?: number; + leechers?: number; + indexerFlags: string[]; +} + +export default Release; diff --git a/frontend/src/typings/SystemStatus.ts b/frontend/src/typings/SystemStatus.ts new file mode 100644 index 000000000..e72be2c5c --- /dev/null +++ b/frontend/src/typings/SystemStatus.ts @@ -0,0 +1,31 @@ +interface SystemStatus { + appData: string; + appName: string; + authentication: string; + branch: string; + buildTime: string; + instanceName: string; + isAdmin: boolean; + isDebug: boolean; + isDocker: boolean; + isLinux: boolean; + isNetCore: boolean; + isOsx: boolean; + isProduction: boolean; + isUserInteractive: boolean; + isWindows: boolean; + migrationVersion: number; + mode: string; + osName: string; + osVersion: string; + packageUpdateMechanism: string; + runtimeName: string; + runtimeVersion: string; + sqliteVersion: string; + startTime: string; + startupPath: string; + urlBase: string; + version: string; +} + +export default SystemStatus;