diff --git a/frontend/src/App/State/AppState.ts b/frontend/src/App/State/AppState.ts index e07f42f13..38d075023 100644 --- a/frontend/src/App/State/AppState.ts +++ b/frontend/src/App/State/AppState.ts @@ -1,4 +1,8 @@ -import IndexerAppState, { IndexerIndexAppState } from './IndexerAppState'; +import CommandAppState from './CommandAppState'; +import IndexerAppState, { + IndexerIndexAppState, + IndexerStatusAppState, +} from './IndexerAppState'; import IndexerStatsAppState from './IndexerStatsAppState'; import SettingsAppState from './SettingsAppState'; import TagsAppState from './TagsAppState'; @@ -36,8 +40,10 @@ export interface CustomFilter { } interface AppState { + commands: CommandAppState; indexerIndex: IndexerIndexAppState; indexerStats: IndexerStatsAppState; + indexerStatus: IndexerStatusAppState; indexers: IndexerAppState; settings: SettingsAppState; tags: TagsAppState; diff --git a/frontend/src/App/State/CommandAppState.ts b/frontend/src/App/State/CommandAppState.ts new file mode 100644 index 000000000..1bde37371 --- /dev/null +++ b/frontend/src/App/State/CommandAppState.ts @@ -0,0 +1,6 @@ +import AppSectionState from 'App/State/AppSectionState'; +import Command from 'Commands/Command'; + +export type CommandAppState = AppSectionState<Command>; + +export default CommandAppState; diff --git a/frontend/src/App/State/IndexerAppState.ts b/frontend/src/App/State/IndexerAppState.ts index df79776ff..ee769b59c 100644 --- a/frontend/src/App/State/IndexerAppState.ts +++ b/frontend/src/App/State/IndexerAppState.ts @@ -1,6 +1,6 @@ import Column from 'Components/Table/Column'; import SortDirection from 'Helpers/Props/SortDirection'; -import Indexer from 'Indexer/Indexer'; +import Indexer, { IndexerStatus } from 'Indexer/Indexer'; import AppSectionState, { AppSectionDeleteState, AppSectionSaveState, @@ -30,4 +30,6 @@ interface IndexerAppState AppSectionDeleteState, AppSectionSaveState {} +export type IndexerStatusAppState = AppSectionState<IndexerStatus>; + export default IndexerAppState; diff --git a/frontend/src/App/State/SettingsAppState.ts b/frontend/src/App/State/SettingsAppState.ts index bded59754..213955245 100644 --- a/frontend/src/App/State/SettingsAppState.ts +++ b/frontend/src/App/State/SettingsAppState.ts @@ -7,6 +7,11 @@ import DownloadClient from 'typings/DownloadClient'; import Notification from 'typings/Notification'; import { UiSettings } from 'typings/UiSettings'; +export interface AppProfileAppState + extends AppSectionState<Application>, + AppSectionDeleteState, + AppSectionSaveState {} + export interface ApplicationAppState extends AppSectionState<Application>, AppSectionDeleteState, @@ -24,6 +29,7 @@ export interface NotificationAppState export type UiSettingsAppState = AppSectionState<UiSettings>; interface SettingsAppState { + appProfiles: AppProfileAppState; applications: ApplicationAppState; downloadClients: DownloadClientAppState; notifications: NotificationAppState; diff --git a/frontend/src/Commands/Command.ts b/frontend/src/Commands/Command.ts new file mode 100644 index 000000000..45a5beed7 --- /dev/null +++ b/frontend/src/Commands/Command.ts @@ -0,0 +1,37 @@ +import ModelBase from 'App/ModelBase'; + +export interface CommandBody { + sendUpdatesToClient: boolean; + updateScheduledTask: boolean; + completionMessage: string; + requiresDiskAccess: boolean; + isExclusive: boolean; + isLongRunning: boolean; + name: string; + lastExecutionTime: string; + lastStartTime: string; + trigger: string; + suppressMessages: boolean; + seriesId?: number; +} + +interface Command extends ModelBase { + name: string; + commandName: string; + message: string; + body: CommandBody; + priority: string; + status: string; + result: string; + queued: string; + started: string; + ended: string; + duration: string; + trigger: string; + stateChangeTime: string; + sendUpdatesToClient: boolean; + updateScheduledTask: boolean; + lastExecutionTime: string; +} + +export default Command; diff --git a/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx b/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx index 7a5f5cc10..a3d694e9d 100644 --- a/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx +++ b/frontend/src/Indexer/Index/Table/IndexerStatusCell.tsx @@ -12,7 +12,7 @@ interface IndexerStatusCellProps { className: string; enabled: boolean; redirect: boolean; - status: IndexerStatus; + status?: IndexerStatus; longDateFormat: string; timeFormat: string; component?: React.ElementType; diff --git a/frontend/src/Store/Selectors/createAllIndexersSelector.js b/frontend/src/Store/Selectors/createAllIndexersSelector.ts similarity index 71% rename from frontend/src/Store/Selectors/createAllIndexersSelector.js rename to frontend/src/Store/Selectors/createAllIndexersSelector.ts index 178c54eed..76641025f 100644 --- a/frontend/src/Store/Selectors/createAllIndexersSelector.js +++ b/frontend/src/Store/Selectors/createAllIndexersSelector.ts @@ -1,8 +1,9 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; function createAllIndexersSelector() { return createSelector( - (state) => state.indexers, + (state: AppState) => state.indexers, (indexers) => { return indexers.items; } diff --git a/frontend/src/Store/Selectors/createCommandsSelector.js b/frontend/src/Store/Selectors/createCommandsSelector.ts similarity index 71% rename from frontend/src/Store/Selectors/createCommandsSelector.js rename to frontend/src/Store/Selectors/createCommandsSelector.ts index 7b9edffd9..2dd5d24a2 100644 --- a/frontend/src/Store/Selectors/createCommandsSelector.js +++ b/frontend/src/Store/Selectors/createCommandsSelector.ts @@ -1,8 +1,9 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; function createCommandsSelector() { return createSelector( - (state) => state.commands, + (state: AppState) => state.commands, (commands) => { return commands.items; } diff --git a/frontend/src/Store/Selectors/createExecutingCommandsSelector.js b/frontend/src/Store/Selectors/createExecutingCommandsSelector.ts similarity index 78% rename from frontend/src/Store/Selectors/createExecutingCommandsSelector.js rename to frontend/src/Store/Selectors/createExecutingCommandsSelector.ts index 266865a8a..dd16571fc 100644 --- a/frontend/src/Store/Selectors/createExecutingCommandsSelector.js +++ b/frontend/src/Store/Selectors/createExecutingCommandsSelector.ts @@ -1,9 +1,10 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; import { isCommandExecuting } from 'Utilities/Command'; function createExecutingCommandsSelector() { return createSelector( - (state) => state.commands.items, + (state: AppState) => state.commands.items, (commands) => { return commands.filter((command) => isCommandExecuting(command)); } diff --git a/frontend/src/Store/Selectors/createIndexerAppProfileSelector.js b/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts similarity index 70% rename from frontend/src/Store/Selectors/createIndexerAppProfileSelector.js rename to frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts index dabb98b2e..7ac0889ae 100644 --- a/frontend/src/Store/Selectors/createIndexerAppProfileSelector.js +++ b/frontend/src/Store/Selectors/createIndexerAppProfileSelector.ts @@ -1,9 +1,10 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; import { createIndexerSelectorForHook } from './createIndexerSelector'; -function createIndexerAppProfileSelector(indexerId) { +function createIndexerAppProfileSelector(indexerId: number) { return createSelector( - (state) => state.settings.appProfiles.items, + (state: AppState) => state.settings.appProfiles.items, createIndexerSelectorForHook(indexerId), (appProfiles, indexer = {}) => { return appProfiles.find((profile) => { diff --git a/frontend/src/Store/Selectors/createIndexerStatusSelector.js b/frontend/src/Store/Selectors/createIndexerStatusSelector.js deleted file mode 100644 index 1912ea1a0..000000000 --- a/frontend/src/Store/Selectors/createIndexerStatusSelector.js +++ /dev/null @@ -1,13 +0,0 @@ -import _ from 'lodash'; -import { createSelector } from 'reselect'; - -function createIndexerStatusSelector(indexerId) { - return createSelector( - (state) => state.indexerStatus.items, - (indexerStatus) => { - return _.find(indexerStatus, { indexerId }); - } - ); -} - -export default createIndexerStatusSelector; diff --git a/frontend/src/Store/Selectors/createIndexerStatusSelector.ts b/frontend/src/Store/Selectors/createIndexerStatusSelector.ts new file mode 100644 index 000000000..035dfc3c4 --- /dev/null +++ b/frontend/src/Store/Selectors/createIndexerStatusSelector.ts @@ -0,0 +1,15 @@ +import { find } from 'lodash'; +import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; +import { IndexerStatus } from 'Indexer/Indexer'; + +function createIndexerStatusSelector(indexerId: number) { + return createSelector( + (state: AppState) => state.indexerStatus.items, + (indexerStatus) => { + return find(indexerStatus, { indexerId }) as IndexerStatus | undefined; + } + ); +} + +export default createIndexerStatusSelector; diff --git a/frontend/src/Store/Selectors/createTagsSelector.js b/frontend/src/Store/Selectors/createTagsSelector.ts similarity index 68% rename from frontend/src/Store/Selectors/createTagsSelector.js rename to frontend/src/Store/Selectors/createTagsSelector.ts index fbfd91cdb..f653ff6e3 100644 --- a/frontend/src/Store/Selectors/createTagsSelector.js +++ b/frontend/src/Store/Selectors/createTagsSelector.ts @@ -1,8 +1,9 @@ import { createSelector } from 'reselect'; +import AppState from 'App/State/AppState'; function createTagsSelector() { return createSelector( - (state) => state.tags.items, + (state: AppState) => state.tags.items, (tags) => { return tags; }