Untitled

 avatar
user_8078570
plain_text
25 days ago
2.8 kB
2
Indexable
private handleData(
  section: PageSection,
  node: EditorTreeNode,
  data: any,
  nodeIsItemChild: boolean,
  layout: PageLayout
) {
  if (!data) {
    this.handleNoData(section, node);
    return;
  }

  const { relItemData: relatedItem, pageSection } = data;
  this.updateSectionProperties(section, pageSection, node.key);

  if (relatedItem) {
    this.processRelatedItem(section, relatedItem, nodeIsItemChild);
  }
}

private handleNoData(section: PageSection, node: EditorTreeNode) {
  section.messages = [
    ...(section.messages ?? []),
    {
      severity: 'error',
      detail: this.i18nService.translate(
        'editor.EDITORPAGE.MESSAGE.ERRORITEMEXISTS',
        {},
        this.i18nService.getActiveLang()
      ),
    },
  ];
  section.header = node.label;
  section.key = <string>node.key;
  section.expandedOnce = true;
}

private updateSectionProperties(
  section: PageSection,
  pageSection: any,
  nodeKey: string
) {
  section.header = pageSection.header;
  section.key = <string>nodeKey;
  section.content = <EditorContent[]>pageSection.content;
}

private processRelatedItem(
  section: PageSection,
  relatedItem: any,
  nodeIsItemChild: boolean
) {
  // Populate metadata
  if (!nodeIsItemChild) {
    section.metadata = ITEM_METADATA_NODES.map((itemNode) => ({
      ...itemNode,
      value: relatedItem
        ? relatedItem[`${itemNode.nodeName}` as keyof ItemModel]
        : undefined,
      itemId: relatedItem.id,
      type: EditorFieldInputType.InputText,
    }));
  }

  section.itemName = relatedItem.name;
  section.valueName = <string>relatedItem.name;
  section.isItem = true;
  section.expandedOnce = true;

  // Update tree nodes
  const treeNode = this.flattenedTreeNodes?.find(
    (tNode) => tNode.key === section.key
  );

  if (treeNode && !nodeIsItemChild) {
    treeNode.label = `${treeNode.label?.split(':')[0]}: ${relatedItem.name ?? ''}`;
    section.header = treeNode.label;

    if (treeNode.selectable === false) {
      treeNode.selectable = true;
      treeNode.children = treeNode.children?.map((cNode) => ({
        ...cNode,
        selectable: true,
      }));
    }
  }

  // Sync item values
  section.content = section.content.map((content) => ({
    itemId: relatedItem.id,
    ...content,
  }));

  const itemHasChildSections = this.flattenedTreeNodes?.some((treeNode) =>
    treeNode.key?.includes(`${section.key}-`)
  );

  if (itemHasChildSections) {
    section.content = [];
  } else {
    section.content.forEach((content) => {
      const itemValue = relatedItem.nodes?.find(
        (val: TreeNodeModel) => val.nodeName === content.nodeName
      );

      const setupValue = this.setupValues?.find(
        (val) => val.nodeName === content.nodeName
      );

      if (itemValue && setupValue) {
        setupValue.value = itemValue.value;
      }
    });
  }
}
Leave a Comment