UNPKG

magner

Version:

Universal admin panel magnetic to any backend

63 lines (62 loc) 2.81 kB
import type { SupportedDataTypes } from '../../utils/form/form'; import type { ApiError } from '../../utils/api/api-error'; import type { TranslateData } from '../../utils/core/translate'; import type { ProxyFunc, RequestWrap, RequestCallback } from '../utils/api'; type DataBody = Record<string, any>; /** Proxy function from the request data to URL needed in GET requests */ export type DataToUrlHelper = ProxyFunc<DataBody, string>; /** Proxy function from the URL query to the data object, opposite to 'dataToUrl' function */ export type UrlToDataHelper = ProxyFunc<DataBody, DataBody>; export interface ApiErrorType { fields: Record<string, string>; message: TranslateData; } export type ErrorParser<ERR = Record<string, unknown>> = (err: ApiError<ERR> | Error) => ApiErrorType; export interface ProfileRequestResponse { role: string | null; user: unknown; } export type ProfileRequestFunc = <DATA = any>(cb: RequestCallback<ProfileRequestResponse, DATA>) => RequestWrap<ProfileRequestResponse, DATA>; export type SupportedValidators = 'password' | 'email' | 'phone' | 'empty'; export type ValidatorWrapper = (data: { rule: SupportedValidators; value: any; form: Record<string, any>; }, callback: Function) => void; export type ValidatorFunc = (rule: SupportedValidators, value: any, callback: Function) => ReturnType<ValidatorWrapper>; export interface ValidationField { type: SupportedDataTypes; validator: ValidatorFunc; trigger: 'blur' | 'change' | 'input'; } export type Validators<CUSTOM_VALIDATION extends string> = Record<CUSTOM_VALIDATION, ValidatorWrapper>; export interface FormValidator extends HTMLFormElement { validate: Function; validateField: (name: string) => void; } export interface DevelopmentConfig { /** Constants that should be hidden */ envs: { /** Base URL of any backend endpoints */ API_URL: string; }; /** * Used for creating the admin panel during first stages of development if you still don't have a backend. * It disables the roles feature and helps logging in.<br> * But it still requires request functions to be written which you can simple make empty (return void). */ noBackendMode?: boolean; /** * Defines the position of the button that opens and closes the sidebar menu. * At the bottom of the sidebar or in the header */ toggleBtnPositionTop?: boolean; /** Request to be used each time user enters the app to check for token validity and quickly authorize them */ profileRequest: RequestWrap<ProfileRequestResponse>; /** Request that clears user session */ logoutRequest: RequestWrap<null>; validation: Validators<string>; /** Accepts the current version of the application */ appVersion?: string; } export {};