/** * 编辑可视区域 */ import { ObservableMap } from 'mobx'; import Application from './application'; export default class Viewport { private application; constructor(application: Application); /** * 已实例化在编辑区域组件的集合 */ components: ObservableMap; /** * 根节点的唯一 id */ rootMapUniqueKey: string; /** * 生成根节点唯一 id */ createRootUniqueId(): string; /** * 设置根节点唯一 id */ setRootUniqueId(uniqueId: string): void; /** * 添加一个新实例元素, 不要用 componentsSet */ setComponents(mapUniqueKey: string, componentInfo: FitGaea.ViewportComponentInfo): void; /** * 生成一个唯一 */ createUniqueId(): string; /** * 将某个元素重置为默认配置 */ resetComponent(mapUniqueKey: string): void; /** * 添加 component, 根据情况分为新添加、移动已存在组件 */ addComponent(parentMapUniqueKey: string, index: number): { mapUniqueKey: string; component: FitGaea.ViewportComponentFullInfo; }; /** * 同一个父级下子元素移动位置 */ sortComponents(parentMapUniqueKey: string, beforeIndex: number, afterIndex: number): void; /** * 当前是否在移动元素 */ isMovingComponent: boolean; /** * 开始拖拽 */ startDragging(childMapUniqueKey: string, uniqueKey: string, isNew: boolean, dragStartParentElement?: Element, dragStartIndex?: number): void; /** * 结束拖拽 */ endDragging(): void; /** * 是否显示布局元素轮廓 */ showLayoutBorder: boolean; setShowLayoutBorder(isShow: boolean): void; /** * 当前正在移动元素的信息 */ currentMovingComponent: FitGaea.MovingComponent; /** * 当前 viewport 正在 hover 的元素, 在 viewport 上的 x, y, width, height * 位置相对于 viewport */ viewportHoverComponentSpec: FitGaea.HoverComponentSpec; /** * 当前 tree 正在 hover 的元素, 在 viewport 上的 x, y, width, height * 位置相对于 tree */ treeHoverComponentSpec: FitGaea.HoverComponentSpec; /** * 拖拽开始时的父级元素 element */ dragStartParentElement: Element; /** * 拖拽开始时, 元素的位置 */ dragStartIndex: number; /** * gaea 编辑器跟元素 dom 对象 */ rootDomInstance: Element; /** * 设置根 dom 元素 */ setRootDomInstance(rootDomInstance: Element): void; /** * viewport dom 元素 */ viewportDomInstance: Element; /** * 设置 viewport dom 元素 */ setViewportDomInstance(viewportDomInstance: Element): void; /** * section-container dom 元素 */ sectionContainerDomInstance: Element; /** * 设置 section-container dom 元素 */ setSectionContainerDomInstance(sectionContainerDomInstance: Element): void; /** * 临时存储当前 hover 元素的 element */ currentHoverElement: Element; /** * 设置某个元素为 hover 元素 */ setHoverComponent(element: Element): void; /** * 校准当前 hover 元素边框虚线的位置 */ resetComponentOutline(): void; /** * 设置脱离 hover 状态 */ setLeaveHover(): void; /** * 设置 tree 脱离 hover 状态 */ setTreeLeaveHover(): void; /** * 树组件的根元素 */ treeDomInstance: Element; /** * 设置树组件跟元素 */ setTreeDomInstance(treeDomInstance: Element): void; /** * 设置某个树元素为 hover 元素 */ setHoverTreeComponent(element: Element): void; /** * 当前编辑组件的 mapUniqueKey */ currentEditComponentMapUniqueKey: string; /** * 设置当前编辑组件 */ setCurrentEditComponentMapUniqueKey(mapUniqueKey: string): void; /** * 取消编辑当前组件 */ cancelEditComponent(): void; /** * 根据子元素的 mapUniqueKey 寻找从跟元素开始的路径 * 因为渲染的时候是嵌套渲染的, 从打平 map 中找到关系路径, 便于元素直接搜索任意子组件 */ findComponentPathFromRoot(mapUniqueKey: string): string[]; /** * 编辑当前组件, 某个选项的值,附带保存历史 */ updateComponentOptionsValue(editOptions: FitGaea.ComponentPropsGaeaEdit, value: FitGaea.ComponentPropsOptionValue): void; /** * 根据 editOption 修改值 */ updateComponentOptionsValueByOptions(mapUniqueKey: string, editOptions: FitGaea.ComponentPropsGaeaEdit, value: FitGaea.ComponentPropsOptionValue): void; /** * 最后一次选择中组件 id, 会随着取消选择变成 null */ lastSelectMapUniqueKey: string; /** * 设置最后一次高亮选择组件 id */ setLastSelectMapUniqueKey(mapUniqueKey: string): void; /** * 获取增量编辑信息 */ getIncrementComponentsInfo(): any; /** * 添加一个新组件, 这个方法会在从工具栏拖拽新组件过来时使用 */ addNewComponent(mapUniqueKey: string, parentMapUniqueKey: string, uniqueId: string, index: number): void; /** * 添加一个已存在的 component 到它的父级 * 需要保证这个组件的信息已经是完备的 * 1. 存在于 this.components 中 * 2. 如果是布局组件, 所有子元素也都存在于 this.components 中 */ addToParent(mapUniqueKey: string, parentMapUniqueKey: string, index: number): void; /** * 添加一个复杂组件 * 这个方法会在恢复元素时使用, 保证所有 key 都原封不动的恢复 */ addComplexComponent(parentMapUniqueKey: string, mapUniqueKey: string, index: number, componentFullInfo: FitGaea.ViewportComponentFullInfo): void; /** * 操作记录 是 fast-json-patch 产生的 diff 对象 */ operates: Array; /** * 上一次操作的值 */ lastOperateComponents: any; /** * 初始化上次操作记录 */ initLastOperateComponents(lastOperateComponents: any): void; /** * 当前操作的 index */ nowOperateIndex: number; /** * 保存操作记录 需要保存的时机: * 新增元素 ok * 移动元素 ok * 交换元素 ok * 删除元素 ok * 修改元素 ok */ saveOperate(diff: FitGaea.Diff): void; /** * 删除 component */ deleteComponent(mapUniqueKey: string, deleteChildComponents?: { [mapUniqueKey: string]: FitGaea.ViewportComponentInfo; }): { [mapUniqueKey: string]: FitGaea.ViewportComponentInfo; }; /** * 操作 undo */ undo(): void; /** * 操作 redo */ redo(): void; /** * 是否能 undo */ canUndo: boolean; /** * 是否能 redo */ canRedo: boolean; /** * 移动元素到另外一个父级是两个动作, 所以需要先存储移动到父级的 mapKey, 和移动到的位置 */ dragTargetMapUniqueKey: string; dragTargetIndex: number; /** * 设置元素信息: 这个元素正在移动到另一个父级 */ setDragTarget(mapUniqueKey: string, index: number): void; /** * 鼠标 hover 状态元素的 mapUniqueKey */ hoveringComponentMapUniqueKey: string; /** * 设置鼠标 hover 状态元素的 mapUniqueKey */ setHoveringComponentMapUniqueKey(mapUniqueKey: string): void; /** * 当前复制的组件的信息 */ copyComponent: FitGaea.ViewportComponentFullInfo; /** * 复制组件 */ copy(mapUniqueKey: string): boolean; /** * 返回一个新的复制对象, 把所有 mapUniqueKey 都换成新的, 但引用关系保持不变 */ createCopyComponentWithNewUniqueKey(originComponent: FitGaea.ViewportComponentFullInfo, parentMapUniqueKey: string): FitGaea.ViewportComponentFullInfo; /** * 粘贴到某个组件上 */ paste(parentMapUniqueKey: string): boolean; /** * 获取一个已存在组件的完整信息 */ getComponentFullInfoByMapUniqueKey(mapUniqueKey: string): FitGaea.ViewportComponentFullInfo; /** * 是否显示右侧附加工具条 */ isShowSidebarAddon: boolean; showSidebarAddon(): void; hideSidebarAddon(): void; /** * 是否显示左侧附加工具条 */ isShowLeftBar: boolean; /** * 左侧附加工具条显示的是哪种板块 */ leftBarType: string; showLeftBar(leftBarType: string): void; hideLeftBar(): void; }