@gpa-gemstone/common-pages
Version:
Common UI pages for GPA products
77 lines (76 loc) • 3.04 kB
TypeScript
import { Application } from '@gpa-gemstone/application-typings';
import { Search } from '@gpa-gemstone/react-interactive';
import { ActionCreatorWithPayload, AsyncThunk, ActionCreatorWithoutPayload } from '@reduxjs/toolkit';
type DBAction = 'POST' | 'DELETE' | 'PATCH';
export type UserValidation = 'Resolving' | 'Valid' | 'Invalid' | 'Unknown';
export interface IGenericSlice<T> {
Fetch: (AsyncThunk<any, void | number | string, {}>);
DBAction: (AsyncThunk<any, {
verb: DBAction;
record: T;
}, {}>);
Sort: AsyncThunk<any, {
SortField: keyof T;
Ascending: boolean;
}, {}>;
Data: (state: any) => T[];
Status: (state: any) => Application.Types.Status;
SortField: (state: any) => keyof T;
Ascending: (state: any) => boolean;
ParentID?: (state: any) => number | string;
}
export interface ISearchableSlice<T> extends IGenericSlice<T> {
DBSearch: (AsyncThunk<any, {
filter: Search.IFilter<T>[];
sortField?: keyof T;
ascending?: boolean;
}, {}>);
SearchFilters: (state: any) => Search.IFilter<T>[];
SearchResults: (state: any) => T[];
SearchStatus: (state: any) => Application.Types.Status;
}
export interface IAdditionalFieldSlice<F, V> {
FetchField: AsyncThunk<any, void, {}>;
FieldAction: AsyncThunk<any, {
Verb: DBAction;
Record: F;
}, {}>;
FetchValues: AsyncThunk<any, number | string, {}>;
UpdateValues: AsyncThunk<any, {
ParentID: number | string;
Values: V[];
}, {}>;
Sort: ActionCreatorWithPayload<{
SortField: keyof F;
Ascending: boolean;
}, string>;
Fields: (state: any) => F[];
Values: (state: any) => V[];
FieldStatus: (state: any) => Application.Types.Status;
ValueStatus: (state: any) => Application.Types.Status;
ValueParentId: (state: any) => number | string;
SortField: (state: any) => keyof F;
Ascending: (state: any) => boolean;
}
export interface IUserAccountSlice extends ISearchableSlice<Application.Types.iUserAccount> {
ADUpdate: (AsyncThunk<any, void, {}>);
SetCurrentUser: (AsyncThunk<any, Application.Types.iUserAccount, {}>);
LoadExistingUser: (AsyncThunk<any, string, {}>);
SetNewUser: ActionCreatorWithoutPayload;
CurrentID: (state: any) => string | undefined;
CurrentUser: (state: any) => Application.Types.iUserAccount;
ADValidation: (state: any) => UserValidation;
}
export interface ISecurityRoleSlice {
FetchRoles: (AsyncThunk<any, void, {}>);
FetchUserRoles: (AsyncThunk<any, string, {}>);
SetUserRoles: (AsyncThunk<any, {
UserId: string;
Roles: Application.Types.iApplicationRoleUserAccount[];
}, {}>);
Status: (state: any) => Application.Types.Status;
CurrentRoleStatus: (state: any) => Application.Types.Status;
Roles: (state: any) => Application.Types.iApplicationRoleUserAccount[];
AvailableRoles: (state: any) => Application.Types.iApplicationRole<Application.Types.SecurityRoleName>[];
}
export {};