Browse Source

Skip records if DataSource provider is set

data-source-schema
Artur Arseniev 5 months ago
parent
commit
8f0512d5db
  1. 14
      packages/core/src/data_sources/index.ts
  2. 23
      packages/core/test/specs/data_sources/model/DataSource.ts

14
packages/core/src/data_sources/index.ts

@ -21,6 +21,7 @@
* @module DataSources * @module DataSources
*/ */
import { isEmpty } from 'underscore';
import { ItemManagerModule, ModuleConfig } from '../abstract/Module'; import { ItemManagerModule, ModuleConfig } from '../abstract/Module';
import { AddOptions, collectionEvents, ObjectAny, RemoveOptions } from '../common'; import { AddOptions, collectionEvents, ObjectAny, RemoveOptions } from '../common';
import EditorModel from '../editor/model/Editor'; import EditorModel from '../editor/model/Editor';
@ -164,15 +165,16 @@ export default class DataSourceManager extends ItemManagerModule<ModuleConfig, D
* @returns {Array} Stored data sources. * @returns {Array} Stored data sources.
*/ */
store() { store() {
const data: any[] = []; const data: DataSourceProps[] = [];
this.all.forEach((dataSource) => { this.all.forEach((dataSource) => {
const skipFromStorage = dataSource.get('skipFromStorage'); const { skipFromStorage, transformers, records, schema, ...rest } = dataSource.attributes;
if (!skipFromStorage) { if (!skipFromStorage) {
data.push({ data.push({
id: dataSource.id, ...rest,
name: dataSource.get('name' as any), id: rest.id!,
records: dataSource.records.toJSON(), schema: !isEmpty(schema) ? schema : undefined,
skipFromStorage, records: !rest.provider ? records : undefined,
}); });
} }
}); });

23
packages/core/test/specs/data_sources/model/DataSource.ts

@ -19,6 +19,7 @@ const serializeRecords = (records: any[]) => JSON.parse(JSON.stringify(records))
describe('DataSource', () => { describe('DataSource', () => {
let em: Editor; let em: Editor;
let editor: Editor['Editor'];
let dsm: DataSourceManager; let dsm: DataSourceManager;
let ds: DataSource<TestRecord>; let ds: DataSource<TestRecord>;
const categoryRecords = [ const categoryRecords = [
@ -42,7 +43,7 @@ describe('DataSource', () => {
}; };
beforeEach(() => { beforeEach(() => {
({ em, dsm } = setupTestEditor()); ({ em, dsm, editor } = setupTestEditor());
}); });
afterEach(() => { afterEach(() => {
@ -174,11 +175,12 @@ describe('DataSource', () => {
records: blogRecords, records: blogRecords,
schema: getMockSchema(), schema: getMockSchema(),
}); });
const getProviderBlogsGet = () => ({ url: testApiUrl, headers: testHeaders });
const addBlogsWithProvider = () => { const addBlogsWithProvider = () => {
return dsm.add({ return dsm.add({
id: 'blogs', id: 'blogs',
provider: { provider: {
get: { url: testApiUrl, headers: testHeaders }, get: getProviderBlogsGet(),
}, },
}); });
}; };
@ -229,5 +231,22 @@ describe('DataSource', () => {
expect(ds.schema).toEqual({}); expect(ds.schema).toEqual({});
expect(ds.getRecords().length).toBe(0); expect(ds.getRecords().length).toBe(0);
}); });
test('ensure records loaded from the provider are not persisted', async () => {
const ds = addBlogsWithProvider();
await ds.loadProvider();
expect(editor.getProjectData().dataSources).toEqual([
{ id: 'categories', records: categoryRecords },
{ id: 'users', records: userRecords },
{
id: 'blogs',
schema: getMockSchema(),
provider: {
get: getProviderBlogsGet(),
},
},
]);
});
}); });
}); });

Loading…
Cancel
Save