From 88a1f7f18b3456a79fa8950b42213c95c849774d Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 24 Feb 2024 15:54:52 +0400 Subject: [PATCH] Start data variable component --- src/dom_components/index.ts | 7 +++++++ .../model/ComponentDataVariable.ts | 19 +++++++++++++++++++ .../view/ComponentDataVariableView.ts | 19 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/dom_components/model/ComponentDataVariable.ts create mode 100644 src/dom_components/view/ComponentDataVariableView.ts diff --git a/src/dom_components/index.ts b/src/dom_components/index.ts index 10ad17217..a59b97337 100644 --- a/src/dom_components/index.ts +++ b/src/dom_components/index.ts @@ -101,6 +101,8 @@ import ComponentVideoView from './view/ComponentVideoView'; import ComponentView, { IComponentView } from './view/ComponentView'; import ComponentWrapperView from './view/ComponentWrapperView'; import ComponentsView from './view/ComponentsView'; +import ComponentDataVariable, { type as typeVariable } from './model/ComponentDataVariable'; +import ComponentDataVariableView from './view/ComponentDataVariableView'; export type ComponentEvent = | 'component:create' @@ -165,6 +167,11 @@ export interface CanMoveResult { export default class ComponentManager extends ItemManagerModule { componentTypes: ComponentStackItem[] = [ + { + id: typeVariable, + model: ComponentDataVariable, + view: ComponentDataVariableView, + }, { id: 'cell', model: ComponentTableCell, diff --git a/src/dom_components/model/ComponentDataVariable.ts b/src/dom_components/model/ComponentDataVariable.ts new file mode 100644 index 000000000..eca20be20 --- /dev/null +++ b/src/dom_components/model/ComponentDataVariable.ts @@ -0,0 +1,19 @@ +import { toLowerCase } from '../../utils/mixins'; +import Component from './Component'; + +export const type = 'data-variable'; + +export default class ComponentDataVariable extends Component { + get defaults() { + return { + // @ts-ignore + ...super.defaults, + type, + source: '', + }; + } + + static isComponent(el: HTMLElement) { + return toLowerCase(el.tagName) === type; + } +} diff --git a/src/dom_components/view/ComponentDataVariableView.ts b/src/dom_components/view/ComponentDataVariableView.ts new file mode 100644 index 000000000..dbd3129e0 --- /dev/null +++ b/src/dom_components/view/ComponentDataVariableView.ts @@ -0,0 +1,19 @@ +import ComponentDataVariable from '../model/ComponentDataVariable'; +import ComponentView from './ComponentView'; + +export default class ComponentDataVariableView extends ComponentView { + initialize(opt = {}) { + super.initialize(opt); + const { model, em } = this; + const { key } = model.attributes; + this.listenTo(em, key, () => this.postRender()); + } + + postRender() { + const { key, default: def } = this.model.attributes; + // this.el.innerHTML = getValue(key, def); + this.el.innerHTML = def; + console.log('this.el.innerHTML', { key, def }); + super.postRender(); + } +}