key: guid()

in libs/designer-ui/src/lib/arrayeditor/util/util.ts [222:308]


          key: guid(),
        });
      }
      setItems(returnItems);
    }
    setIsValid?.(true);
  } catch {
    setIsValid?.(false);
    setCollapsed?.(true);
  }
};

export const initializeComplexArrayItems = (
  initialValue: ValueSegment[],
  itemSchema: ArrayItemSchema,
  setItems: (items: ComplexArrayItems[]) => void,
  setIsValid: (b: boolean) => void,
  setCollapsed: (b: boolean) => void
): void => {
  const nodeMap = new Map<string, ValueSegment>();
  const stringifiedCollapsedValue = convertSegmentsToString(initialValue, nodeMap);
  validationAndSerializeComplexArray(stringifiedCollapsedValue, nodeMap, itemSchema, setItems, setIsValid, setCollapsed);
};

export const validationAndSerializeComplexArray = (
  editorString: string,
  nodeMap: Map<string, ValueSegment>,
  itemSchema: ArrayItemSchema,
  setItems: (items: ComplexArrayItems[]) => void,
  setIsValid: (b: boolean) => void,
  setCollapsed?: (b: boolean) => void
): void => {
  try {
    const strippedEditorString = editorString.replace(/\s+/g, '');
    if (
      !strippedEditorString.length ||
      strippedEditorString === '[]' ||
      strippedEditorString === 'null' ||
      strippedEditorString === '[null]'
    ) {
      setItems([]);
    } else {
      const jsonEditor = JSON.parse(editorString);
      const returnItems: ComplexArrayItems[] = [];
      jsonEditor.forEach((jsonEditorItem: any) => {
        const complexItem = convertObjectToComplexArrayItemArray(jsonEditorItem, itemSchema, nodeMap);
        returnItems.push({ key: itemSchema.key, items: complexItem });
      });
      setItems(returnItems);
    }
    setIsValid?.(true);
  } catch {
    setIsValid?.(false);
    setCollapsed?.(true);
  }
};

const convertObjectToComplexArrayItemArray = (
  obj: any,
  itemSchema: ArrayItemSchema,
  nodeMap: Map<string, ValueSegment>
): ComplexArrayItem[] => {
  const items: ComplexArrayItem[] = [];

  if (typeof obj === 'string') {
    return [
      {
        key: itemSchema.key,
        title: handleTitle(itemSchema.key, itemSchema.title),
        description: itemSchema.description ?? '',
        value: convertStringToSegments(obj, nodeMap, { tokensEnabled: true }),
      },
    ];
  }

  Object.keys(obj).forEach((key: string) => {
    const value = obj[key];
    if (!itemSchema.properties) {
      return;
    }
    const itemSchemaProperty = itemSchema.properties[key];

    if (Array.isArray(value)) {
      const arrayItems: ComplexArrayItems[] = [];

      value.forEach((arrayItem: any) => {
        if (itemSchemaProperty.items) {