interface IdState { [key: number]: Readonly; } interface OrderIdState { items: IdState; order: (number | null)[]; } interface ReduxStore { system: ReduxStore.System; series: ReduxStore.Series; movie: ReduxStore.Movie; site: ReduxStore.Site; } namespace ReduxStore { interface Notification { type: "error" | "warning" | "info"; message: string; timestamp: Date; id: string; } interface Site { // Initialization state or error message initialized: boolean | string; auth: boolean; pageSize: number; notifications: Notification[]; sidebar: string; badges: Badge; offline: boolean; } interface System { languages: AsyncState>; enabledLanguage: AsyncState>; languagesProfiles: AsyncState>; status: AsyncState; tasks: AsyncState>; providers: AsyncState>; logs: AsyncState>; releases: AsyncState>; settings: AsyncState; } interface Series { seriesList: AsyncState>; wantedEpisodesList: AsyncState>; episodeList: AsyncState>; historyList: AsyncState>; blacklist: AsyncState>; } interface Movie { movieList: AsyncState>; wantedMovieList: AsyncState>; historyList: AsyncState>; blacklist: AsyncState>; } }