From 47956123fb1ee12f0cb8a8be5cb2c68605cc3bbe Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 5 Nov 2022 14:42:42 +0400 Subject: [PATCH] Add LayerManagerConfig --- src/navigator/config/config.ts | 118 ++++++++++++++++++++++++--------- src/navigator/index.ts | 6 +- 2 files changed, 88 insertions(+), 36 deletions(-) diff --git a/src/navigator/config/config.ts b/src/navigator/config/config.ts index df8cdbba9..ad31fa1a9 100644 --- a/src/navigator/config/config.ts +++ b/src/navigator/config/config.ts @@ -1,46 +1,78 @@ -export default { - stylePrefix: '', +export interface LayerManagerConfig { + stylePrefix?: string; - // Specify the element to use as a container, string (query) or HTMLElement - // With the empty value, nothing will be rendered - appendTo: '', + /** + * Specify the element to use as a container, string (query) or HTMLElement. + * With the empty value, nothing will be rendered. + * @default '' + */ + appendTo?: string | HTMLElement; - // Enable/Disable globally the possibility to sort layers - sortable: true, + /** + * Enable/Disable globally the possibility to sort layers. + * @default true + */ + sortable?: boolean; - // Enable/Disable globally the possibility to hide layers - hidable: true, + /** + * Enable/Disable globally the possibility to hide layers. + * @default true + */ + hidable?: boolean; - // Hide textnodes - hideTextnode: true, + /** + * Hide textnodes. + * @default true + */ + hideTextnode?: boolean; - // Indicate a query string of the element to be selected as the root of layers. - // By default the root is the wrapper - root: '', + /** + * Indicate a query string of the element to be selected as the root of layers. + * By default the root is the wrapper. + * @default '' + */ + root?: string; - // Indicates if the wrapper is visible in layers - showWrapper: true, + /** + * Indicates if the wrapper is visible in layers. + * @default true + */ + showWrapper?: boolean; - // Show hovered components in canvas - showHover: true, + /** + * Show hovered components in canvas. + * @default true + */ + showHover?: boolean; - // Scroll to selected component in Canvas when it's selected in Layers - // true, false or `scrollIntoView`-like options, - // `block: 'nearest'` avoids the issue of window scrolling - scrollCanvas: { behavior: 'smooth', block: 'nearest' }, + /** + * Scroll to selected component in Canvas when it's selected in Layers. + * true, false or `scrollIntoView`-like options, + * `block: 'nearest'` avoids the issue of window scrolling. + * @default { behavior: 'smooth', block: 'nearest' } + */ + scrollCanvas?: boolean | ScrollIntoViewOptions; - // Scroll to selected component in Layers when it's selected in Canvas - // true, false or `scrollIntoView`-like options - scrollLayers: { behavior: 'auto', block: 'nearest' }, + /** + * Scroll to selected component in Layers when it's selected in Canvas. + * @default { behavior: 'auto', block: 'nearest' } + */ + scrollLayers?: boolean | ScrollIntoViewOptions; - // Highlight when a layer component is hovered - highlightHover: true, + /** + * Highlight when a layer component is hovered. + * @default true + */ + highlightHover?: boolean; - // Avoid rendering the default layer manager. - custom: false, + /** + * Avoid rendering the default layer manager. + * @default false + */ + custom?: boolean; /** - * WARNING: Experimental option + * WARNING: Experimental option. * A callback triggered once the component layer is initialized. * Useful to trigger updates on some component prop change. * @example @@ -48,10 +80,10 @@ export default { * listenTo(component, 'change:some-prop', render); * }; */ - onInit: () => {}, + onInit?: () => void; /** - * WARNING: Experimental option + * WARNING: Experimental option. * A callback triggered once the component layer is rendered. * A callback useful to update the layer DOM on some component change * @example @@ -61,7 +93,7 @@ export default { * } * } */ - onRender: () => {}, + onRender?: () => void; /** * Extend Layer view object (view/ItemView.js) @@ -73,5 +105,25 @@ export default { * }, * }, */ + extend?: Record; +} + +const config: LayerManagerConfig = { + stylePrefix: '', + appendTo: '', + sortable: true, + hidable: true, + hideTextnode: true, + root: '', + showWrapper: true, + showHover: true, + scrollCanvas: { behavior: 'smooth', block: 'nearest' }, + scrollLayers: { behavior: 'auto', block: 'nearest' }, + highlightHover: true, + custom: false, + onInit: () => {}, + onRender: () => {}, extend: {}, }; + +export default config; diff --git a/src/navigator/index.ts b/src/navigator/index.ts index 4621a376e..8989bfc7a 100644 --- a/src/navigator/index.ts +++ b/src/navigator/index.ts @@ -45,7 +45,7 @@ import Module from '../abstract/Module'; import Component from '../dom_components/model/Component'; import EditorModel from '../editor/model/Editor'; import { hasWin, isComponent, isDef } from '../utils/mixins'; -import defaults from './config/config'; +import defaults, { LayerManagerConfig } from './config/config'; import View from './view/ItemView'; interface LayerData { @@ -81,7 +81,7 @@ const isStyleHidden = (style: any = {}) => { return (style.display || '').trim().indexOf('none') === 0; }; -export default class LayerManager extends Module { +export default class LayerManager extends Module { model!: Model; view?: View; @@ -104,7 +104,7 @@ export default class LayerManager extends Module { model.listenTo(em, propsToListen, this.__onComponent); this.componentChanged(); model.listenToOnce(em, 'load', () => { - this.setRoot(config.root); + this.setRoot(config.root!); this.__appendTo(); }); }