From 8f0512d5db607df6a0e04467f5ffb7c8b278ceca Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 23 Oct 2025 22:50:08 +0400 Subject: [PATCH] Skip records if DataSource provider is set --- packages/core/src/data_sources/index.ts | 14 ++++++----- .../specs/data_sources/model/DataSource.ts | 23 +++++++++++++++++-- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/packages/core/src/data_sources/index.ts b/packages/core/src/data_sources/index.ts index b9d1cbc9b..b2d19e979 100644 --- a/packages/core/src/data_sources/index.ts +++ b/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 { - 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, }); } }); diff --git a/packages/core/test/specs/data_sources/model/DataSource.ts b/packages/core/test/specs/data_sources/model/DataSource.ts index 3d839eae5..33644ebd7 100644 --- a/packages/core/test/specs/data_sources/model/DataSource.ts +++ b/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; 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(), + }, + }, + ]); + }); }); });