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
*/
import { isEmpty } from 'underscore';
import { ItemManagerModule, ModuleConfig } from '../abstract/Module';
import { AddOptions, collectionEvents, ObjectAny, RemoveOptions } from '../common';
import EditorModel from '../editor/model/Editor';
@ -164,15 +165,16 @@ export default class DataSourceManager extends ItemManagerModule<ModuleConfig, D
* @returns {Array} Stored data sources.
*/
store() {
const data: any[] = [];
const data: DataSourceProps[] = [];
this.all.forEach((dataSource) => {
const skipFromStorage = dataSource.get('skipFromStorage');
const { skipFromStorage, transformers, records, schema, ...rest } = dataSource.attributes;
if (!skipFromStorage) {
data.push({
id: dataSource.id,
name: dataSource.get('name' as any),
records: dataSource.records.toJSON(),
skipFromStorage,
...rest,
id: rest.id!,
schema: !isEmpty(schema) ? schema : undefined,
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', () => {
let em: Editor;
let editor: Editor['Editor'];
let dsm: DataSourceManager;
let ds: DataSource<TestRecord>;
const categoryRecords = [
@ -42,7 +43,7 @@ describe('DataSource', () => {
};
beforeEach(() => {
({ em, dsm } = setupTestEditor());
({ em, dsm, editor } = setupTestEditor());
});
afterEach(() => {
@ -174,11 +175,12 @@ describe('DataSource', () => {
records: blogRecords,
schema: getMockSchema(),
});
const getProviderBlogsGet = () => ({ url: testApiUrl, headers: testHeaders });
const addBlogsWithProvider = () => {
return dsm.add({
id: 'blogs',
provider: {
get: { url: testApiUrl, headers: testHeaders },
get: getProviderBlogsGet(),
},
});
};
@ -229,5 +231,22 @@ describe('DataSource', () => {
expect(ds.schema).toEqual({});
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