diff --git a/src/dataSources/index.ts b/src/dataSources/index.ts index 1e32c5156..4e635d2be 100644 --- a/src/dataSources/index.ts +++ b/src/dataSources/index.ts @@ -1,7 +1,27 @@ import { ItemManagerModule } from '../abstract/Module'; +import { ObjectAny } from '../common'; +import EditorModel from '../editor/model/Editor'; +import { get } from '../utils/mixins'; import { DataSources } from './model/DataSources'; +import { DataSourcesEvents } from './types'; export default class DataSourceManager extends ItemManagerModule<{}, DataSources> { storageKey = ''; destroy(): void {} + + constructor(em: EditorModel) { + super(em, 'DataSources', new DataSources([], em), DataSourcesEvents); + } + + getValue(key: string | string[], defValue: any) { + const context = this.all.reduce((acc, ds) => { + acc[ds.id] = ds.records.reduce((accR, dr, i) => { + accR[dr.id || i] = dr.attributes; + return accR; + }, {} as ObjectAny); + return acc; + }, {} as ObjectAny); + console.log('getValue', { context }); + return get(context, key, defValue); + } } diff --git a/src/dataSources/model/DataRecords.ts b/src/dataSources/model/DataRecords.ts index 90b195747..f7f3dc84b 100644 --- a/src/dataSources/model/DataRecords.ts +++ b/src/dataSources/model/DataRecords.ts @@ -6,7 +6,7 @@ import { DataSource } from './DataSource'; export class DataRecords extends Collection { dataSource: DataSource; - constructor(models: DataRecord[] | Array, options: { dataSource: DataSource }) { + constructor(models: DataRecord[] | DataRecordProps[], options: { dataSource: DataSource }) { super(models, options); this.dataSource = options.dataSource; } diff --git a/src/dataSources/model/DataSources.ts b/src/dataSources/model/DataSources.ts index 338aeb1c2..158a573a6 100644 --- a/src/dataSources/model/DataSources.ts +++ b/src/dataSources/model/DataSources.ts @@ -1,4 +1,13 @@ import { Collection } from '../../common'; +import EditorModel from '../../editor/model/Editor'; +import { DataSourceProps } from '../types'; import { DataSource } from './DataSource'; -export class DataSources extends Collection {} +export class DataSources extends Collection { + em: EditorModel; + + constructor(models: DataSource[] | DataSourceProps[], em: EditorModel) { + super(models, em); + this.em = em; + } +} diff --git a/src/dataSources/types.ts b/src/dataSources/types.ts index 26f3aaa97..1e3177ad3 100644 --- a/src/dataSources/types.ts +++ b/src/dataSources/types.ts @@ -20,3 +20,37 @@ export interface DataRecordProps extends ObjectAny { */ id: string; } + +/**{START_EVENTS}*/ +export enum DataSourcesEvents { + /** + * @event `data:add` Added new data source. + * @example + * editor.on('data:add', (dataSource) => { ... }); + */ + add = 'data:add', + addBefore = 'data:add:before', + + /** + * @event `data:remove` Data source removed. + * @example + * editor.on('data:remove', (dataSource) => { ... }); + */ + remove = 'data:remove', + removeBefore = 'data:remove:before', + + /** + * @event `data:update` Data source updated. + * @example + * editor.on('data:update', (dataSource, changes) => { ... }); + */ + update = 'data:update', + + /** + * @event `data` Catch-all event for all the events mentioned above. + * @example + * editor.on('data', ({ event, model, ... }) => { ... }); + */ + all = 'data', +} +/**{END_EVENTS}*/ diff --git a/src/dom_components/model/ComponentDataVariable.ts b/src/dom_components/model/ComponentDataVariable.ts index eca20be20..cb8284537 100644 --- a/src/dom_components/model/ComponentDataVariable.ts +++ b/src/dom_components/model/ComponentDataVariable.ts @@ -9,7 +9,8 @@ export default class ComponentDataVariable extends Component { // @ts-ignore ...super.defaults, type, - source: '', + path: '', + value: '', }; } diff --git a/src/dom_components/view/ComponentDataVariableView.ts b/src/dom_components/view/ComponentDataVariableView.ts index dbd3129e0..f19e9377c 100644 --- a/src/dom_components/view/ComponentDataVariableView.ts +++ b/src/dom_components/view/ComponentDataVariableView.ts @@ -10,9 +10,10 @@ export default class ComponentDataVariableView extends ComponentView