Skip to content

Commit 54320d4

Browse files
Add collection component stringfication
1 parent 369caed commit 54320d4

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

packages/core/src/data_sources/model/collection_component/CollectionComponent.ts

+18-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { DataVariableType } from './../DataVariable';
22
import { isArray } from 'underscore';
3-
import Component from '../../../dom_components/model/Component';
3+
import Component, { keySymbol, keySymbolOvrd, keySymbols } from '../../../dom_components/model/Component';
44
import { ComponentDefinition, ComponentOptions, ComponentProperties } from '../../../dom_components/model/types';
55
import { toLowerCase } from '../../../utils/mixins';
66
import DataSource from '../DataSource';
77
import { ObjectAny } from '../../../common';
88
import EditorModel from '../../../editor/model/Editor';
99
import { keyCollectionsStateMap } from '../../../dom_components/model/Component';
10-
import { CollectionDefinition, CollectionState, CollectionsStateMap } from './types';
10+
import { CollectionComponentDefinition, CollectionDefinition, CollectionState, CollectionsStateMap } from './types';
1111
import { keyCollectionDefinition, keyInnerCollectionState, CollectionComponentType } from './constants';
1212

1313
export default class CollectionComponent extends Component {
14-
constructor(props: CollectionDefinition & ComponentProperties, opt: ComponentOptions) {
14+
constructor(props: CollectionComponentDefinition, opt: ComponentOptions) {
1515
const em = opt.em;
1616
const { collection_name, block, config } = props[keyCollectionDefinition];
1717
if (!block) {
@@ -42,12 +42,13 @@ export default class CollectionComponent extends Component {
4242
};
4343

4444
const collectionsStateMap: CollectionsStateMap = {
45-
...props[keyCollectionsStateMap],
45+
...(props[keyCollectionsStateMap] || {}),
4646
...(collection_name && { [collection_name]: collectionState }),
4747
[keyInnerCollectionState]: collectionState,
4848
};
4949

5050
if (index === start_index) {
51+
// @ts-ignore
5152
const type = em.Components.getType(block?.type || 'default');
5253
const model = type.model;
5354
blockComponent = new model(
@@ -70,13 +71,26 @@ export default class CollectionComponent extends Component {
7071
components: components,
7172
dropbbable: false,
7273
};
74+
7375
// @ts-ignore
7476
super(conditionalCmptDef, opt);
7577
}
7678

7779
static isComponent(el: HTMLElement) {
7880
return toLowerCase(el.tagName) === CollectionComponentType;
7981
}
82+
83+
toJSON(opts?: ObjectAny) {
84+
const json = super.toJSON(opts) as CollectionComponentDefinition;
85+
86+
const firstChild = this.components().at(0)?.toJSON() || {};
87+
const keysToRemove = ['attributes?.id', keySymbol, keySymbols, keySymbolOvrd, keyCollectionsStateMap];
88+
keysToRemove.forEach((key) => delete firstChild[key]);
89+
json[keyCollectionDefinition].block = firstChild;
90+
91+
delete json.components;
92+
return json;
93+
}
8094
}
8195

8296
function getDataSourceItems(dataSource: any, em: EditorModel) {

packages/core/src/data_sources/model/collection_component/types.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import { CollectionComponentType } from './constants';
1+
import { CollectionComponentType, keyCollectionDefinition } from './constants';
22

3-
import { ComponentDefinition } from '../../../dom_components/model/types';
3+
import { ComponentDefinition, ComponentProperties } from '../../../dom_components/model/types';
44
import { CollectionVariableDefinition } from '../../../../test/specs/dom_components/model/ComponentTypes';
55
import { DataVariableDefinition } from '../DataVariable';
6-
import { ConditionDefinition } from '../conditional_variables/DataCondition';
76

87
type CollectionDataSource = any[] | DataVariableDefinition | CollectionVariableDefinition;
98
type CollectionConfig = {
109
start_index?: number;
11-
end_index?: number | ConditionDefinition;
10+
end_index?: number;
1211
dataSource: CollectionDataSource;
1312
};
1413

@@ -26,6 +25,10 @@ export type CollectionsStateMap = {
2625
[key: string]: CollectionState;
2726
};
2827

28+
export type CollectionComponentDefinition = {
29+
[keyCollectionDefinition]: CollectionDefinition;
30+
} & ComponentDefinition;
31+
2932
export type CollectionDefinition = {
3033
type: typeof CollectionComponentType;
3134
collection_name?: string;

0 commit comments

Comments
 (0)