magner
Version:
Universal admin panel magnetic to any backend
63 lines (62 loc) • 2.81 kB
TypeScript
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 {};