UNPKG

@gpa-gemstone/common-pages

Version:
77 lines (76 loc) 3.04 kB
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 {};