@gulibs/vgrove-ui
Version:
VGrove UI component library built with HeroUI and React
99 lines • 3.6 kB
TypeScript
/**
* VGrove 标准化 Action 工具
* 提供基于 React Router v7+ action 模式的标准化表单处理和数据变更
* 替代原有的复杂中间件系统
*/
import { type ActionFunction } from 'react-router';
import type { AuthCheck } from './loaders';
import type { BaseUser } from './types';
/**
* 表单验证错误
*/
export interface ValidationError {
field: string;
message: string;
}
/**
* Action 响应类型
*/
export interface ActionResponse<T = unknown> {
success: boolean;
data?: T;
errors?: ValidationError[];
message?: string;
}
/**
* 表单验证函数类型
*/
export type FormValidator = (formData: FormData) => Promise<ValidationError[]> | ValidationError[];
/**
* 数据处理函数类型
*/
export type DataProcessor<TUser extends BaseUser = BaseUser, TReturn = unknown> = (formData: FormData, user?: TUser) => Promise<TReturn> | TReturn;
/**
* Action 配置选项
*/
export interface ActionOptions<TUser extends BaseUser = BaseUser, TReturn = unknown> {
/** 表单验证函数 */
validator?: FormValidator;
/** 数据处理函数 */
processor?: DataProcessor<TUser, TReturn>;
/** 成功后的重定向路径 */
successRedirect?: string;
/** 失败后的重定向路径 */
errorRedirect?: string;
/** 是否需要认证 */
requireAuth?: boolean;
/** 需要的角色 */
requiredRoles?: string[];
/** 需要的权限 */
requiredPermissions?: string[];
/** 认证检查函数 */
authCheck?: AuthCheck<TUser>;
}
/**
* 配置全局 action 选项
*/
export declare function configureActions<TUser extends BaseUser = BaseUser>(options: Partial<ActionOptions<TUser>>): void;
/**
* 创建基础 action
* 处理表单提交的基础逻辑
*/
export declare function createAction<TUser extends BaseUser = BaseUser, TReturn = unknown>(options: ActionOptions<TUser, TReturn>): ActionFunction;
/**
* 创建登录 action
*/
export declare function createLoginAction<TUser extends BaseUser = BaseUser, TCredentials = {
username: string;
password: string;
}, TReturn = unknown>(loginProcessor: (credentials: TCredentials) => Promise<{
user: TUser;
token: string;
}>, options?: Partial<ActionOptions<TUser, TReturn>>): ActionFunction;
/**
* 创建注册 action
*/
export declare function createRegisterAction<TUser extends BaseUser = BaseUser, TReturn = unknown>(registerProcessor: (userData: Record<string, unknown>) => Promise<{
user: TUser;
token: string;
}>, options?: Partial<ActionOptions<TUser, TReturn>>): ActionFunction;
/**
* 创建登出 action
*/
export declare function createLogoutAction<TUser extends BaseUser = BaseUser, TReturn = unknown>(logoutProcessor?: () => Promise<void>, options?: Partial<ActionOptions<TUser, TReturn>>): ActionFunction;
/**
* 创建 CRUD action
*/
export declare function createCrudAction<TUser extends BaseUser = BaseUser, TReturn = unknown>(operation: 'create' | 'update' | 'delete', processor: DataProcessor<TUser, TReturn>, options?: Partial<ActionOptions<TUser, TReturn>>): ActionFunction;
/**
* 创建文件上传 action
*/
export declare function createFileUploadAction<TUser extends BaseUser = BaseUser, TReturn = unknown>(uploadProcessor: (files: File[], formData: FormData, user?: TUser) => Promise<{
urls: string[];
}>, options?: Partial<ActionOptions<TUser, TReturn>>): ActionFunction;
/**
* 组合多个 action
* 按顺序执行多个 action 的处理逻辑
*/
export declare function combineActions(...actions: ActionFunction[]): ActionFunction;
//# sourceMappingURL=actions.d.ts.map