mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
feat(Item Lists Node): Improvements (#6190)
This commit is contained in:
parent
ae56ac9a9a
commit
1dbca44025
|
@ -14,13 +14,14 @@ export class ItemLists extends VersionedNodeType {
|
||||||
group: ['input'],
|
group: ['input'],
|
||||||
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
||||||
description: 'Helper for working with lists of items and transforming arrays',
|
description: 'Helper for working with lists of items and transforming arrays',
|
||||||
defaultVersion: 2.1,
|
defaultVersion: 2.2,
|
||||||
};
|
};
|
||||||
|
|
||||||
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
|
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
|
||||||
1: new ItemListsV1(baseDescription),
|
1: new ItemListsV1(baseDescription),
|
||||||
2: new ItemListsV2(baseDescription),
|
2: new ItemListsV2(baseDescription),
|
||||||
2.1: new ItemListsV2(baseDescription),
|
2.1: new ItemListsV2(baseDescription),
|
||||||
|
2.2: new ItemListsV2(baseDescription),
|
||||||
};
|
};
|
||||||
|
|
||||||
super(nodeVersions, baseDescription);
|
super(nodeVersions, baseDescription);
|
||||||
|
|
|
@ -10,7 +10,7 @@ import type {
|
||||||
INodeTypeBaseDescription,
|
INodeTypeBaseDescription,
|
||||||
INodeTypeDescription,
|
INodeTypeDescription,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
import { NodeOperationError } from 'n8n-workflow';
|
import { NodeOperationError, deepCopy } from 'n8n-workflow';
|
||||||
|
|
||||||
import get from 'lodash.get';
|
import get from 'lodash.get';
|
||||||
import isEmpty from 'lodash.isempty';
|
import isEmpty from 'lodash.isempty';
|
||||||
|
@ -68,7 +68,7 @@ export class ItemListsV2 implements INodeType {
|
||||||
constructor(baseDescription: INodeTypeBaseDescription) {
|
constructor(baseDescription: INodeTypeBaseDescription) {
|
||||||
this.description = {
|
this.description = {
|
||||||
...baseDescription,
|
...baseDescription,
|
||||||
version: [2, 2.1],
|
version: [2, 2.1, 2.2],
|
||||||
defaults: {
|
defaults: {
|
||||||
name: 'Item Lists',
|
name: 'Item Lists',
|
||||||
},
|
},
|
||||||
|
@ -136,7 +136,7 @@ export class ItemListsV2 implements INodeType {
|
||||||
},
|
},
|
||||||
// Split out items - Fields
|
// Split out items - Fields
|
||||||
{
|
{
|
||||||
displayName: 'Field To Split Out',
|
displayName: 'Fields To Split Out',
|
||||||
name: 'fieldToSplitOut',
|
name: 'fieldToSplitOut',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
default: '',
|
default: '',
|
||||||
|
@ -147,8 +147,8 @@ export class ItemListsV2 implements INodeType {
|
||||||
operation: ['splitOutItems'],
|
operation: ['splitOutItems'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
description: 'The name of the input field to break out into separate items',
|
description: 'The name of the input fields to break out into separate items',
|
||||||
requiresDataPath: 'single',
|
requiresDataPath: 'multiple',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
displayName: 'Include',
|
displayName: 'Include',
|
||||||
|
@ -755,6 +755,7 @@ return 0;`,
|
||||||
displayName: 'Destination Field Name',
|
displayName: 'Destination Field Name',
|
||||||
name: 'destinationFieldName',
|
name: 'destinationFieldName',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
|
requiresDataPath: 'multiple',
|
||||||
displayOptions: {
|
displayOptions: {
|
||||||
show: {
|
show: {
|
||||||
'/operation': ['splitOutItems'],
|
'/operation': ['splitOutItems'],
|
||||||
|
@ -808,24 +809,46 @@ return 0;`,
|
||||||
if (resource === 'itemList') {
|
if (resource === 'itemList') {
|
||||||
if (operation === 'splitOutItems') {
|
if (operation === 'splitOutItems') {
|
||||||
for (let i = 0; i < length; i++) {
|
for (let i = 0; i < length; i++) {
|
||||||
const fieldToSplitOut = this.getNodeParameter('fieldToSplitOut', i) as string;
|
const fieldsToSplitOut = (this.getNodeParameter('fieldToSplitOut', i) as string)
|
||||||
|
.split(',')
|
||||||
|
.map((field) => field.trim());
|
||||||
const disableDotNotation = this.getNodeParameter(
|
const disableDotNotation = this.getNodeParameter(
|
||||||
'options.disableDotNotation',
|
'options.disableDotNotation',
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
) as boolean;
|
) as boolean;
|
||||||
const destinationFieldName = this.getNodeParameter(
|
|
||||||
'options.destinationFieldName',
|
const destinationFields = (
|
||||||
i,
|
this.getNodeParameter('options.destinationFieldName', i, '') as string
|
||||||
'',
|
)
|
||||||
) as string;
|
.split(',')
|
||||||
const include = this.getNodeParameter('include', i) as string;
|
.filter((field) => field.trim() !== '')
|
||||||
|
.map((field) => field.trim());
|
||||||
|
|
||||||
|
if (destinationFields.length && destinationFields.length !== fieldsToSplitOut.length) {
|
||||||
|
throw new NodeOperationError(
|
||||||
|
this.getNode(),
|
||||||
|
'If multiple fields to split out are given, the same number of destination fields must be given',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const include = this.getNodeParameter('include', i) as
|
||||||
|
| 'selectedOtherFields'
|
||||||
|
| 'allOtherFields'
|
||||||
|
| 'noOtherFields';
|
||||||
|
|
||||||
|
const multiSplit = fieldsToSplitOut.length > 1;
|
||||||
|
|
||||||
|
const item = { ...items[i].json };
|
||||||
|
const splited: IDataObject[] = [];
|
||||||
|
for (const [entryIndex, fieldToSplitOut] of fieldsToSplitOut.entries()) {
|
||||||
|
const destinationFieldName = destinationFields[entryIndex] || '';
|
||||||
|
|
||||||
let arrayToSplit;
|
let arrayToSplit;
|
||||||
if (!disableDotNotation) {
|
if (!disableDotNotation) {
|
||||||
arrayToSplit = get(items[i].json, fieldToSplitOut);
|
arrayToSplit = get(item, fieldToSplitOut);
|
||||||
} else {
|
} else {
|
||||||
arrayToSplit = items[i].json[fieldToSplitOut];
|
arrayToSplit = item[fieldToSplitOut];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arrayToSplit === undefined) {
|
if (arrayToSplit === undefined) {
|
||||||
|
@ -852,19 +875,58 @@ return 0;`,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof arrayToSplit !== 'object' || arrayToSplit === null) {
|
if (typeof arrayToSplit !== 'object' || arrayToSplit === null) {
|
||||||
|
if (nodeVersion < 2.2) {
|
||||||
throw new NodeOperationError(
|
throw new NodeOperationError(
|
||||||
this.getNode(),
|
this.getNode(),
|
||||||
`The provided field '${fieldToSplitOut}' is not an array or object`,
|
`The provided field '${fieldToSplitOut}' is not an array or object`,
|
||||||
{ itemIndex: i },
|
{ itemIndex: i },
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
arrayToSplit = [arrayToSplit];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Array.isArray(arrayToSplit)) {
|
if (!Array.isArray(arrayToSplit)) {
|
||||||
arrayToSplit = Object.values(arrayToSplit);
|
arrayToSplit = Object.values(arrayToSplit);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const element of arrayToSplit) {
|
for (const [elementIndex, element] of arrayToSplit.entries()) {
|
||||||
let newItem = {};
|
if (splited[elementIndex] === undefined) {
|
||||||
|
splited[elementIndex] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const fieldName = destinationFieldName || fieldToSplitOut;
|
||||||
|
|
||||||
|
if (typeof element === 'object' && element !== null && include === 'noOtherFields') {
|
||||||
|
if (destinationFieldName === '' && !multiSplit) {
|
||||||
|
splited[elementIndex] = { ...splited[elementIndex], ...element };
|
||||||
|
} else {
|
||||||
|
splited[elementIndex][fieldName] = element;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
splited[elementIndex][fieldName] = element;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const splitEntry of splited) {
|
||||||
|
let newItem: IDataObject = {};
|
||||||
|
|
||||||
|
if (include === 'noOtherFields') {
|
||||||
|
newItem = splitEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (include === 'allOtherFields') {
|
||||||
|
const itemCopy = deepCopy(item);
|
||||||
|
for (const fieldToSplitOut of fieldsToSplitOut) {
|
||||||
|
if (!disableDotNotation) {
|
||||||
|
unset(itemCopy, fieldToSplitOut);
|
||||||
|
} else {
|
||||||
|
delete itemCopy[fieldToSplitOut];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newItem = { ...itemCopy, ...splitEntry };
|
||||||
|
}
|
||||||
|
|
||||||
if (include === 'selectedOtherFields') {
|
if (include === 'selectedOtherFields') {
|
||||||
const fieldsToInclude = (
|
const fieldsToInclude = (
|
||||||
|
@ -877,51 +939,15 @@ return 0;`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
newItem = {
|
for (const field of fieldsToInclude) {
|
||||||
...fieldsToInclude.reduce((prev, field) => {
|
|
||||||
if (field === fieldToSplitOut) {
|
|
||||||
return prev;
|
|
||||||
}
|
|
||||||
let value;
|
|
||||||
if (!disableDotNotation) {
|
if (!disableDotNotation) {
|
||||||
value = get(items[i].json, field);
|
splitEntry[field] = get(item, field);
|
||||||
} else {
|
} else {
|
||||||
value = items[i].json[field];
|
splitEntry[field] = item[field];
|
||||||
}
|
}
|
||||||
prev = { ...prev, [field]: value };
|
|
||||||
return prev;
|
|
||||||
}, {}),
|
|
||||||
};
|
|
||||||
} else if (include === 'allOtherFields') {
|
|
||||||
const keys = Object.keys(items[i].json);
|
|
||||||
|
|
||||||
newItem = {
|
|
||||||
...keys.reduce((prev, field) => {
|
|
||||||
let value;
|
|
||||||
if (!disableDotNotation) {
|
|
||||||
value = get(items[i].json, field);
|
|
||||||
} else {
|
|
||||||
value = items[i].json[field];
|
|
||||||
}
|
|
||||||
prev = { ...prev, [field]: value };
|
|
||||||
return prev;
|
|
||||||
}, {}),
|
|
||||||
};
|
|
||||||
|
|
||||||
unset(newItem, fieldToSplitOut);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
newItem = splitEntry;
|
||||||
typeof element === 'object' &&
|
|
||||||
include === 'noOtherFields' &&
|
|
||||||
destinationFieldName === ''
|
|
||||||
) {
|
|
||||||
newItem = { ...newItem, ...element };
|
|
||||||
} else {
|
|
||||||
newItem = {
|
|
||||||
...newItem,
|
|
||||||
[destinationFieldName || fieldToSplitOut]: element,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
returnData.push({
|
returnData.push({
|
||||||
|
|
|
@ -0,0 +1,361 @@
|
||||||
|
{
|
||||||
|
"name": "item_list 2.2",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"parameters": {},
|
||||||
|
"id": "f2d01806-a457-4a3a-8bd9-aeb005aecb99",
|
||||||
|
"name": "When clicking \"Execute Workflow\"",
|
||||||
|
"type": "n8n-nodes-base.manualTrigger",
|
||||||
|
"typeVersion": 1,
|
||||||
|
"position": [-80, 820]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"fieldToSplitOut": "data, data2",
|
||||||
|
"include": "selectedOtherFields",
|
||||||
|
"fieldsToInclude": {
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldName": "tag"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"id": "b0dbb504-d111-49ee-a904-1ece920a2e7a",
|
||||||
|
"name": "Item Lists1",
|
||||||
|
"type": "n8n-nodes-base.itemLists",
|
||||||
|
"typeVersion": 2.2,
|
||||||
|
"position": [520, 360]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"jsCode": "const data = {\n entry1: {\n id: 1,\n info: 'some info 1',\n },\n entry2: {\n id: 2,\n info: 'some info 2',\n },\n entry3: {\n id: 3,\n info: 'some info 3',\n },\n};\n\n\nconst data2 = [\n 'a', 'b', 'c'\n];\n\nconst data3 = {\n a: 1,\n b: 2,\n c: 3,\n};\n\nreturn {data, data2, data3, data4: null, tag: 'bar'};"
|
||||||
|
},
|
||||||
|
"id": "64fa7b5c-c85c-4dd8-8863-11d6e0ee8426",
|
||||||
|
"name": "Code1",
|
||||||
|
"type": "n8n-nodes-base.code",
|
||||||
|
"typeVersion": 1,
|
||||||
|
"position": [160, 820]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"fieldToSplitOut": "data2, tag",
|
||||||
|
"include": "selectedOtherFields",
|
||||||
|
"fieldsToInclude": {
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldName": "data4"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"destinationFieldName": "fromArray, singleField"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": "80b46f60-19c2-4aec-a232-901b54bdb7c0",
|
||||||
|
"name": "Item Lists",
|
||||||
|
"type": "n8n-nodes-base.itemLists",
|
||||||
|
"typeVersion": 2.2,
|
||||||
|
"position": [520, 780]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"fieldToSplitOut": "data3, data2, data",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"id": "c2bbf08c-4571-4d28-a95d-82b0dd22edd9",
|
||||||
|
"name": "Item Lists2",
|
||||||
|
"type": "n8n-nodes-base.itemLists",
|
||||||
|
"typeVersion": 2.2,
|
||||||
|
"position": [520, 560]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"fieldToSplitOut": "data2, data3",
|
||||||
|
"include": "allOtherFields",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"id": "ef10bb23-43e1-4e48-b8b7-c634e4c41b56",
|
||||||
|
"name": "Item Lists3",
|
||||||
|
"type": "n8n-nodes-base.itemLists",
|
||||||
|
"typeVersion": 2.2,
|
||||||
|
"position": [520, 1180]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"fieldToSplitOut": " tag, data4",
|
||||||
|
"options": {
|
||||||
|
"destinationFieldName": "entry1, entry2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": "cd083969-5c27-47f6-9eb2-aa52fc2f5cb2",
|
||||||
|
"name": "Item Lists4",
|
||||||
|
"type": "n8n-nodes-base.itemLists",
|
||||||
|
"typeVersion": 2.2,
|
||||||
|
"position": [520, 1400],
|
||||||
|
"continueOnFail": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"fieldToSplitOut": "data2",
|
||||||
|
"include": "selectedOtherFields",
|
||||||
|
"fieldsToInclude": {
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldName": "data4"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"destinationFieldName": "fromArray"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": "866154c7-2967-44d7-a278-1600752749d3",
|
||||||
|
"name": "Item Lists5",
|
||||||
|
"type": "n8n-nodes-base.itemLists",
|
||||||
|
"typeVersion": 2.2,
|
||||||
|
"position": [520, 960]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pinData": {
|
||||||
|
"Item Lists1": [
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data": {
|
||||||
|
"id": 1,
|
||||||
|
"info": "some info 1"
|
||||||
|
},
|
||||||
|
"data2": "a",
|
||||||
|
"tag": "bar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data": {
|
||||||
|
"id": 2,
|
||||||
|
"info": "some info 2"
|
||||||
|
},
|
||||||
|
"data2": "b",
|
||||||
|
"tag": "bar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data": {
|
||||||
|
"id": 3,
|
||||||
|
"info": "some info 3"
|
||||||
|
},
|
||||||
|
"data2": "c",
|
||||||
|
"tag": "bar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Item Lists2": [
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data3": 1,
|
||||||
|
"data2": "a",
|
||||||
|
"data": {
|
||||||
|
"id": 1,
|
||||||
|
"info": "some info 1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data3": 2,
|
||||||
|
"data2": "b",
|
||||||
|
"data": {
|
||||||
|
"id": 2,
|
||||||
|
"info": "some info 2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data3": 3,
|
||||||
|
"data2": "c",
|
||||||
|
"data": {
|
||||||
|
"id": 3,
|
||||||
|
"info": "some info 3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Item Lists": [
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"fromArray": "a",
|
||||||
|
"singleField": "bar",
|
||||||
|
"data4": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"fromArray": "b",
|
||||||
|
"data4": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"fromArray": "c",
|
||||||
|
"data4": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Item Lists5": [
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"fromArray": "a",
|
||||||
|
"data4": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"fromArray": "b",
|
||||||
|
"data4": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"fromArray": "c",
|
||||||
|
"data4": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Item Lists3": [
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data": {
|
||||||
|
"entry1": {
|
||||||
|
"id": 1,
|
||||||
|
"info": "some info 1"
|
||||||
|
},
|
||||||
|
"entry2": {
|
||||||
|
"id": 2,
|
||||||
|
"info": "some info 2"
|
||||||
|
},
|
||||||
|
"entry3": {
|
||||||
|
"id": 3,
|
||||||
|
"info": "some info 3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data4": null,
|
||||||
|
"tag": "bar",
|
||||||
|
"data2": "a",
|
||||||
|
"data3": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data": {
|
||||||
|
"entry1": {
|
||||||
|
"id": 1,
|
||||||
|
"info": "some info 1"
|
||||||
|
},
|
||||||
|
"entry2": {
|
||||||
|
"id": 2,
|
||||||
|
"info": "some info 2"
|
||||||
|
},
|
||||||
|
"entry3": {
|
||||||
|
"id": 3,
|
||||||
|
"info": "some info 3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data4": null,
|
||||||
|
"tag": "bar",
|
||||||
|
"data2": "b",
|
||||||
|
"data3": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"data": {
|
||||||
|
"entry1": {
|
||||||
|
"id": 1,
|
||||||
|
"info": "some info 1"
|
||||||
|
},
|
||||||
|
"entry2": {
|
||||||
|
"id": 2,
|
||||||
|
"info": "some info 2"
|
||||||
|
},
|
||||||
|
"entry3": {
|
||||||
|
"id": 3,
|
||||||
|
"info": "some info 3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data4": null,
|
||||||
|
"tag": "bar",
|
||||||
|
"data2": "c",
|
||||||
|
"data3": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Item Lists4": [
|
||||||
|
{
|
||||||
|
"json": {
|
||||||
|
"entry1": "bar",
|
||||||
|
"entry2": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"connections": {
|
||||||
|
"When clicking \"Execute Workflow\"": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "Code1",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Code1": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "Item Lists1",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "Item Lists2",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "Item Lists",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "Item Lists3",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "Item Lists4",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"node": "Item Lists5",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"active": false,
|
||||||
|
"settings": {},
|
||||||
|
"versionId": "1f311937-f825-4bda-a39e-e27c6ffe5906",
|
||||||
|
"id": "170",
|
||||||
|
"meta": {
|
||||||
|
"instanceId": "36203ea1ce3cef713fa25999bd9874ae26b9e4c2c3a90a365f2882a154d031d0"
|
||||||
|
},
|
||||||
|
"tags": []
|
||||||
|
}
|
Loading…
Reference in a new issue