Browse Source

Up TS naming

data-source-import-policy
Artur Arseniev 6 months ago
parent
commit
20d1d46353
  1. 6
      packages/core/src/data_sources/config/config.ts
  2. 18
      packages/core/src/data_sources/types.ts
  3. 22
      packages/core/src/dom_components/model/ModelResolverWatcher.ts
  4. 4
      packages/core/src/dom_components/types.ts
  5. 10
      packages/core/src/index.ts
  6. 18
      packages/core/test/specs/data_sources/import_policy.ts

6
packages/core/src/data_sources/config/config.ts

@ -1,4 +1,4 @@
import type { DataSourcePropertyHandler } from '../types'; import type { DataBindingImportPolicy } from '../types';
export interface DataSourcesConfig { export interface DataSourcesConfig {
/** /**
@ -11,12 +11,12 @@ export interface DataSourcesConfig {
* Controls how parsed static HTML/CSS updates interact with existing data source bindings. * Controls how parsed static HTML/CSS updates interact with existing data source bindings.
* @default 'overwrite' * @default 'overwrite'
*/ */
onDataSourceProperty?: DataSourcePropertyHandler; dataBindingImportPolicy?: DataBindingImportPolicy;
} }
const config: () => DataSourcesConfig = () => ({ const config: () => DataSourcesConfig = () => ({
autoloadProviders: false, autoloadProviders: false,
onDataSourceProperty: 'overwrite', dataBindingImportPolicy: 'overwrite',
}); });
export default config; export default config;

18
packages/core/src/data_sources/types.ts

@ -168,16 +168,16 @@ export interface DataSourceTransformers {
onRecordSetValue?: (args: { id: string | number; key: string; value: any }) => any; onRecordSetValue?: (args: { id: string | number; key: string; value: any }) => any;
} }
export type DataSourceImportSource = 'html' | 'css'; export type DataBindingImportSource = 'html' | 'css';
export type DataSourcePropertyKind = 'property' | 'attribute' | 'style'; export type DataBindingKind = 'property' | 'attribute' | 'style';
export type DataSourcePropertyAction = 'overwrite' | 'update' | 'skip'; export type DataBindingImportAction = 'overwrite' | 'update' | 'skip';
export interface DataSourcePropertyContext { export interface DataBindingImportContext {
target: StyleableModel; target: StyleableModel;
kind: DataSourcePropertyKind; kind: DataBindingKind;
source: DataSourceImportSource; source: DataBindingImportSource;
key: string; key: string;
value: any; value: any;
resolvedValue: any; resolvedValue: any;
@ -185,9 +185,9 @@ export interface DataSourcePropertyContext {
path?: string; path?: string;
} }
export type DataSourcePropertyHandler = export type DataBindingImportPolicy =
| DataSourcePropertyAction | DataBindingImportAction
| ((context: DataSourcePropertyContext) => DataSourcePropertyAction); | ((context: DataBindingImportContext) => DataBindingImportAction);
type DotSeparatedKeys<T> = T extends object type DotSeparatedKeys<T> = T extends object
? { ? {

22
packages/core/src/dom_components/model/ModelResolverWatcher.ts

@ -1,10 +1,10 @@
import { ObjectAny, ObjectHash } from '../../common'; import { ObjectAny, ObjectHash } from '../../common';
import DataResolverListener from '../../data_sources/model/DataResolverListener'; import DataResolverListener from '../../data_sources/model/DataResolverListener';
import { import {
DataSourceImportSource, DataBindingImportContext,
DataSourcePropertyContext, DataBindingImportPolicy,
DataSourcePropertyHandler, DataBindingImportSource,
DataSourcePropertyKind, DataBindingKind,
} from '../../data_sources/types'; } from '../../data_sources/types';
import { getDataResolverInstance, getDataResolverInstanceValue, isDataResolverProps } from '../../data_sources/utils'; import { getDataResolverInstance, getDataResolverInstanceValue, isDataResolverProps } from '../../data_sources/utils';
import type StyleableModel from '../../domain_abstract/model/StyleableModel'; import type StyleableModel from '../../domain_abstract/model/StyleableModel';
@ -14,7 +14,7 @@ import { isFunction } from 'underscore';
export interface DataWatchersOptions { export interface DataWatchersOptions {
skipWatcherUpdates?: boolean; skipWatcherUpdates?: boolean;
fromDataSource?: boolean; fromDataSource?: boolean;
parsedImportSource?: DataSourceImportSource; parsedImportSource?: DataBindingImportSource;
} }
export interface ModelResolverWatcherOptions { export interface ModelResolverWatcherOptions {
@ -31,7 +31,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
constructor( constructor(
private model: WatchableModel<T>, private model: WatchableModel<T>,
private updateFn: UpdateFn<T>, private updateFn: UpdateFn<T>,
private kind: DataSourcePropertyKind, private kind: DataBindingKind,
options: ModelResolverWatcherOptions, options: ModelResolverWatcherOptions,
) { ) {
this.em = options.em; this.em = options.em;
@ -125,7 +125,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
private applyImportPolicy(values: ObjectAny | undefined, options: DataWatchersOptions = {}) { private applyImportPolicy(values: ObjectAny | undefined, options: DataWatchersOptions = {}) {
const { parsedImportSource } = options; const { parsedImportSource } = options;
const { onDataSourceProperty } = this.em.DataSources.config; const { dataBindingImportPolicy } = this.em.DataSources.config;
if (!values || !parsedImportSource) return values; if (!values || !parsedImportSource) return values;
@ -142,7 +142,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
const resolver = resolverListener.resolver.toJSON(); const resolver = resolverListener.resolver.toJSON();
const path = 'path' in resolver ? resolver.path : undefined; const path = 'path' in resolver ? resolver.path : undefined;
const context: DataSourcePropertyContext = { const context: DataBindingImportContext = {
target: this.model as StyleableModel, target: this.model as StyleableModel,
kind: this.kind, kind: this.kind,
source, source,
@ -152,7 +152,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
resolver, resolver,
path, path,
}; };
const action = this.resolveImportAction(onDataSourceProperty, context); const action = this.resolveImportAction(dataBindingImportPolicy, context);
if (action === 'overwrite') { if (action === 'overwrite') {
return; return;
@ -172,7 +172,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
return nextValues; return nextValues;
} }
private resolveImportAction(handler: DataSourcePropertyHandler | undefined, context: DataSourcePropertyContext) { private resolveImportAction(handler: DataBindingImportPolicy | undefined, context: DataBindingImportContext) {
const action = isFunction(handler) ? handler(context) : handler; const action = isFunction(handler) ? handler(context) : handler;
return action === 'skip' || action === 'update' || action === 'overwrite' ? action : 'overwrite'; return action === 'skip' || action === 'update' || action === 'overwrite' ? action : 'overwrite';
@ -190,7 +190,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
} }
} }
private warnImportFallback(key: string, source: DataSourceImportSource, path?: string) { private warnImportFallback(key: string, source: DataBindingImportSource, path?: string) {
this.em.logWarning( this.em.logWarning(
`[DataSources]: Failed to update the data source bound to "${key}" during ${source} import; keeping the existing binding.`, `[DataSources]: Failed to update the data source bound to "${key}" during ${source} import; keeping the existing binding.`,
{ key, source, path }, { key, source, path },

4
packages/core/src/dom_components/types.ts

@ -13,7 +13,7 @@ import type {
ComponentResizeEventStartProps, ComponentResizeEventStartProps,
ComponentResizeEventUpdateProps, ComponentResizeEventUpdateProps,
} from '../commands/view/Resize'; } from '../commands/view/Resize';
import type { DataSourceImportSource } from '../data_sources/types'; import type { DataBindingImportSource } from '../data_sources/types';
import type { StyleProps } from '../domain_abstract/model/StyleableModel'; import type { StyleProps } from '../domain_abstract/model/StyleableModel';
import type Selector from '../selector_manager/model/Selector'; import type Selector from '../selector_manager/model/Selector';
import type Component from './model/Component'; import type Component from './model/Component';
@ -40,7 +40,7 @@ export interface SymbolInfo {
export interface ParseStringOptions extends AddOptions, OptionAsDocument, WithHTMLParserOptions { export interface ParseStringOptions extends AddOptions, OptionAsDocument, WithHTMLParserOptions {
keepIds?: string[]; keepIds?: string[];
cloneRules?: boolean; cloneRules?: boolean;
parsedImportSource?: DataSourceImportSource; parsedImportSource?: DataBindingImportSource;
} }
export enum ComponentsEvents { export enum ComponentsEvents {

10
packages/core/src/index.ts

@ -160,11 +160,11 @@ export type {
ExpressionProps, ExpressionProps,
} from './data_sources/model/conditional_variables/DataCondition'; } from './data_sources/model/conditional_variables/DataCondition';
export type { export type {
DataSourceImportSource, DataBindingImportAction,
DataSourcePropertyAction, DataBindingImportContext,
DataSourcePropertyContext, DataBindingImportPolicy,
DataSourcePropertyHandler, DataBindingImportSource,
DataSourcePropertyKind, DataBindingKind,
} from './data_sources/types'; } from './data_sources/types';
export default grapesjs; export default grapesjs;

18
packages/core/test/specs/data_sources/import_policy.ts

@ -1,4 +1,4 @@
import type { CssRule, DataSourcePropertyContext, Editor } from '../../../src'; import type { CssRule, DataBindingImportContext, Editor } from '../../../src';
import type DataSourceManager from '../../../src/data_sources'; import type DataSourceManager from '../../../src/data_sources';
import { DataConditionType } from '../../../src/data_sources/model/conditional_variables/DataCondition'; import { DataConditionType } from '../../../src/data_sources/model/conditional_variables/DataCondition';
import { StringOperation } from '../../../src/data_sources/model/conditional_variables/operators/StringOperator'; import { StringOperation } from '../../../src/data_sources/model/conditional_variables/operators/StringOperator';
@ -110,7 +110,7 @@ describe('Data source import policy', () => {
test('skips static HTML updates and preserves existing bindings', () => { test('skips static HTML updates and preserves existing bindings', () => {
init({ init({
dataSources: { onDataSourceProperty: 'skip' }, dataSources: { dataBindingImportPolicy: 'skip' },
}); });
addBaseDataSource(); addBaseDataSource();
const component = createBoundComponent(); const component = createBoundComponent();
@ -130,7 +130,7 @@ describe('Data source import policy', () => {
test('updates datasource values and keeps bindings on parsed HTML import', () => { test('updates datasource values and keeps bindings on parsed HTML import', () => {
init({ init({
dataSources: { onDataSourceProperty: 'update' }, dataSources: { dataBindingImportPolicy: 'update' },
}); });
addBaseDataSource(); addBaseDataSource();
const component = createBoundComponent(); const component = createBoundComponent();
@ -164,7 +164,7 @@ describe('Data source import policy', () => {
test('skips static CSS updates and preserves existing rule bindings', () => { test('skips static CSS updates and preserves existing rule bindings', () => {
init({ init({
dataSources: { onDataSourceProperty: 'skip' }, dataSources: { dataBindingImportPolicy: 'skip' },
}); });
addBaseDataSource(); addBaseDataSource();
const rule = createBoundRule(); const rule = createBoundRule();
@ -181,7 +181,7 @@ describe('Data source import policy', () => {
test('applies policy to parsed CSS string imports for existing rules', () => { test('applies policy to parsed CSS string imports for existing rules', () => {
init({ init({
dataSources: { onDataSourceProperty: 'update' }, dataSources: { dataBindingImportPolicy: 'update' },
}); });
addBaseDataSource(); addBaseDataSource();
const rule = createBoundRule(); const rule = createBoundRule();
@ -199,7 +199,7 @@ describe('Data source import policy', () => {
test('supports callback policies per key and kind', () => { test('supports callback policies per key and kind', () => {
init({ init({
dataSources: { dataSources: {
onDataSourceProperty: ({ key, kind, source }: DataSourcePropertyContext) => { dataBindingImportPolicy: ({ key, kind, source }: DataBindingImportContext) => {
if (source === 'html' && kind === 'attribute' && key === 'data-attr') { if (source === 'html' && kind === 'attribute' && key === 'data-attr') {
return 'skip'; return 'skip';
} }
@ -221,7 +221,7 @@ describe('Data source import policy', () => {
test('keeps bindings and warns when update cannot write data-condition values', () => { test('keeps bindings and warns when update cannot write data-condition values', () => {
init({ init({
dataSources: { onDataSourceProperty: 'update' }, dataSources: { dataBindingImportPolicy: 'update' },
}); });
addBaseDataSource(); addBaseDataSource();
const warningSpy = jest.spyOn(em, 'logWarning'); const warningSpy = jest.spyOn(em, 'logWarning');
@ -244,7 +244,7 @@ describe('Data source import policy', () => {
test('keeps bindings and warns when datasource updates fail', () => { test('keeps bindings and warns when datasource updates fail', () => {
init({ init({
dataSources: { onDataSourceProperty: 'update' }, dataSources: { dataBindingImportPolicy: 'update' },
}); });
addBaseDataSource({ id: 'rec1', title: 'Initial Title', color: 'red', content: 'Dynamic Content', mutable: false }); addBaseDataSource({ id: 'rec1', title: 'Initial Title', color: 'red', content: 'Dynamic Content', mutable: false });
const warningSpy = jest.spyOn(em, 'logWarning'); const warningSpy = jest.spyOn(em, 'logWarning');
@ -259,7 +259,7 @@ describe('Data source import policy', () => {
test('does not change direct setter overwrite behavior', () => { test('does not change direct setter overwrite behavior', () => {
init({ init({
dataSources: { onDataSourceProperty: 'skip' }, dataSources: { dataBindingImportPolicy: 'skip' },
}); });
addBaseDataSource(); addBaseDataSource();
const component = createBoundComponent(); const component = createBoundComponent();

Loading…
Cancel
Save