export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned' | 'nonDefault'; export type ChangeProp = | 'name' | 'hash' | 'url' | 'lines' | 'project' | 'projectUrl' | 'reqLevel' | 'signalType' | 'controlType' | 'SUP' | 'routesInfo' | 'checkpoints' | 'authors' | 'availability' | 'hidden'; export enum HeaderTypes { name = 'Nazwa', abbr = 'Skrót posterunku', url = 'URL', hash = 'Hash', lines = 'Linie', project = 'Projekt', projectUrl = 'URL projektu', reqLevel = 'Wym. poziom', signalType = 'Sygnalizacja', controlType = 'Sterowanie', SUP = 'SUP', authors = 'Autorzy', routesInfo = 'Szlaki', checkpoints = 'Posterunki', availability = 'Dostępność', hidden = 'Ukryty', toRemove = 'Usuń', } export enum AvailabilityTypes { 'default' = 'w paczce', 'nonDefault' = 'poza paczką', 'nonPublic' = 'niepubliczna', 'abandoned' = 'wycofana', 'unavailable' = 'niedostępna', } export interface SceneryRoutesInfo { routeName: string; isElectric: boolean; isRouteSBL: boolean; isInternal: boolean; routeSpeed: number; routeLength: number; routeTracks: number; hidden?: boolean; } export interface SceneryRowItem { id: string | number; hash: string; name: string; abbr: string; url: string; lines: string; project: string | null; projectUrl: string | null; reqLevel: number; signalType: string; controlType: string; SUP: boolean; hidden: boolean; routes: string; routesInfo: SceneryRoutesInfo[]; checkpoints: string; authors: string; availability: Availability; } export type ChangeItem = { [key in ChangeProp]?: any; } & { id: string | number; name: string; toRemove?: boolean; }; export enum AuthState { 'LOADING' = 0, 'AUTHORIZED' = 1, 'UNAUTHORIZED' = 2, } export interface IUser { name: string; id: number; iat?: number; } export interface IStore { dataState: string; authState: AuthState; stationList: SceneryRowItem[]; backupList: SceneryRowItem[]; stationsToRemove: string[]; searchedSceneryName: string; changeList: ChangeItem[]; newStationsCount: number; routesModalVisible: boolean; currentStation: SceneryRowItem | null; selectedStationName: string; // token: string | null; user: IUser | null; notifyDiscord: boolean; alertMessage: string; confirmMessage: string; maxVisibleResults: number; changesResponse: string[]; } export interface ILoginResponse { token: string; user: IUser; }