UNPKG

@cn-ui/core

Version:

The @cn-ui/core is a collection of UI components and utilities for building modern web applications with SolidJS.

52 lines (49 loc) 2.07 kB
import { createBlackBoard } from "@cn-ui/reactive"; import { type Component, lazy } from "solid-js"; export const ControlCenter = createBlackBoard<Record<string, any>>({ allowSameRegister: true, }); const createLazyComponent = <T>(load: () => Promise<T>, prop: keyof T) => { return lazy(async () => { return { default: (await load())[prop] as Component, }; }); }; /** * 注册所有的 Form 控件 * @example * await registerAllControlComponent(true) * preload: true 表示预加载所有组件,false 表示不预加载,[] 表示预加载指定的组件 */ export const registerAllControlComponent = (preload: boolean | string[] = false) => { return Promise.all( Object.entries({ text: createLazyComponent(() => import("../input/FormInput"), "FormInput"), select: createLazyComponent(() => import("../select/FormSelect"), "FormSelect"), // TODO // number: createLazyComponent( // () => import("../inputNumber/FormInputNumber"), // "FormInputNumber", // ), date: createLazyComponent( () => import("../datePicker/FormDatePicker"), "FormDatePicker", ), "date-range": createLazyComponent( () => import("../datePicker/FormDatePicker"), "FormDateRangePicker", ), radio: createLazyComponent(() => import("../checkbox/FormRadio"), "FormRadio"), checkbox: createLazyComponent(() => import("../checkbox/FormCheckBox"), "FormCheckBox"), cascader: createLazyComponent(() => import("../cascader/FormCascader"), "FormCascader"), switch: createLazyComponent(() => import("../switch/FormSwitch"), "FormSwitch"), }).map(([key, value]) => { ControlCenter.register(key, value); if (preload === false) return; if (preload === true || preload.includes(key)) { return value.preload(); } }), ); };