import { ConfigEntity } from '../../../common'; import { SelectorBoundsProps } from '../selector/selector-bounds'; import { SelectorEntityRenderer, DefaultSelectorEntityRenderer } from '../selector/selector-entity-renderer'; import { deepClone } from '@gedit/utils'; import { FormSchema } from '@gedit/ui'; export interface SelectorExtend { type: string; title?: string; className?: string; parentClassName?: string; category?: number; order?: number; icon?: React.JSX.Element; visible?: (node?: any, register?: any) => boolean; event?: FormSchema; } export interface SelectorConfigEntityData { // Hover框配置 selectHoveredBounds?: SelectorBoundsProps // 选中配置 selectSelectedBounds?: SelectorBoundsProps // 是否禁用选择框 disabled?: boolean } export const SelectorConfigEntityDefaultData: SelectorConfigEntityData = { selectHoveredBounds: { strokeWidth: 1, borderType: 'dashed', padding: 0, }, selectSelectedBounds: { strokeWidth: 1, borderType: 'solid', padding: 0, }, }; /** * 选择器配置 */ export class SelectorConfigEntity extends ConfigEntity { static type = 'SelectorConfigEntity'; protected selectorRenderer?: SelectorEntityRenderer; extendSchema: SelectorExtend[] = []; registerExtendSchema(schema: SelectorExtend[]): void { schema.forEach(s => { const inData = this.extendSchema.some(e => e.type === s.type); if (!inData) { this.extendSchema.push(s); } }); this.fireChanged(); } getDefaultConfig(): SelectorConfigEntityData { return deepClone(SelectorConfigEntityDefaultData); } /** * 自定义实体渲染器 */ customSelectorEntityRenderer(selectorRenderer: SelectorEntityRenderer): void { this.selectorRenderer = selectorRenderer; } getSelectorEntityRenderer(): SelectorEntityRenderer { return this.selectorRenderer || DefaultSelectorEntityRenderer; } get disabled(): boolean { return this.config && !!this.config.disabled; } set disabled(disabled: boolean) { this.updateConfig({ disabled }); } }