Browse Source

Up

ci/dependabot
Artur Arseniev 3 years ago
parent
commit
5b2b60de1d
  1. 39
      src/dataSources/index.ts
  2. 18
      test/specs/dataSources/index.ts

39
src/dataSources/index.ts

@ -16,24 +16,40 @@ export default class DataSourceManager extends ItemManagerModule<ModuleConfig, D
super(em, 'DataSources', new DataSources([], em), DataSourcesEvents); super(em, 'DataSources', new DataSources([], em), DataSourcesEvents);
} }
getValue(key: string | string[], defValue: any) { /**
return get(this.getContext(), key, defValue); * Add new data source.
} * @param {Object} props Data source properties.
* @returns {[DataSource]} Added data source.
* @example
* const ds = dsm.add({
* id: 'my_data_source_id',
* records: [
* { id: 'id1', name: 'value1' },
* { id: 'id2', name: 'value2' }
* ]
* });
*/
add(props: DataSourceProps, opts: AddOptions = {}) { add(props: DataSourceProps, opts: AddOptions = {}) {
const { all } = this; const { all } = this;
props.id = props.id || this._createId(); props.id = props.id || this._createId();
return all.add(props, opts); return all.add(props, opts);
} }
/**
* Get data source.
* @param {String} id Data source id.
* @returns {[DataSource]} Data source.
* @example
* const ds = dsm.get('my_data_source_id');
*/
get(id: string) { get(id: string) {
return this.all.get(id); return this.all.get(id);
} }
/** /**
* Remove data source. * Remove data source.
* @param {String|[DataSource]} id Id of the data source * @param {String|[DataSource]} id Id of the data source.
* @returns {[DataSource]} Removed data source * @returns {[DataSource]} Removed data source.
* @example * @example
* const removed = dsm.remove('DS_ID'); * const removed = dsm.remove('DS_ID');
*/ */
@ -41,6 +57,17 @@ export default class DataSourceManager extends ItemManagerModule<ModuleConfig, D
return this.__remove(id, opts); return this.__remove(id, opts);
} }
/**
* Get value from data sources by key
* @param {String} key Path to value.
* @param {any} defValue
* @returns {any}
* const value = dsm.getValue('ds_id.record_id.propName', 'defaultValue');
*/
getValue(key: string | string[], defValue: any) {
return get(this.getContext(), key, defValue);
}
getContext() { getContext() {
return this.all.reduce((acc, ds) => { return this.all.reduce((acc, ds) => {
acc[ds.id] = ds.records.reduce((accR, dr, i) => { acc[ds.id] = ds.records.reduce((accR, dr, i) => {

18
test/specs/dataSources/index.ts

@ -48,9 +48,15 @@ describe('DataSourceManager', () => {
expect(dsm.get(dsTest.id)).toBe(ds); expect(dsm.get(dsTest.id)).toBe(ds);
}); });
test.todo('remove DataSource'); test('remove DataSource', () => {
test.todo('update DataSource'); const event = jest.fn();
test.todo('update DataSource record'); em.on(dsm.events.remove, event);
const ds = addDataSource();
dsm.remove('ds1');
expect(dsm.getAll().length).toBe(0);
expect(event).toBeCalledTimes(1);
expect(event).toBeCalledWith(ds, expect.any(Object));
});
describe('DataSource with DataVariable component', () => { describe('DataSource with DataVariable component', () => {
let fixtures: HTMLElement; let fixtures: HTMLElement;
@ -89,6 +95,12 @@ describe('DataSourceManager', () => {
const cmpVar = addDataVariable(); const cmpVar = addDataVariable();
expect(cmpVar.toHTML()).toBe('<div>Name1</div>'); expect(cmpVar.toHTML()).toBe('<div>Name1</div>');
}); });
test('component exports properly with variable', () => {
addDataSource();
const cmpVar = addDataVariable();
expect(cmpVar.getInnerHTML({ keepVariables: true })).toBe('ds1.id1.name');
});
}); });
test('component is properly initiliazed with default value', () => { test('component is properly initiliazed with default value', () => {

Loading…
Cancel
Save