{"version":3,"file":"utils.mjs","sources":["../../../../../packages/components/multiple-form/src/utils.ts"],"sourcesContent":["import { reactive, shallowReactive, isReactive } from 'vue'\nimport type { MultipleFormRow } from './type'\n\ninterface RootRowConf {\n  root: true\n}\n\ninterface RowConf {\n  parent: MultipleFormRow\n  data: Record<string, any>\n  prevData?: Record<string, any> | null\n  index: number\n  status: MultipleFormRow['status']\n  children?: MultipleFormRow[]\n  uid: number\n}\n\nconst isRoot = (v: any): v is RootRowConf => v.root === true\n\n/**\n * 创建行\n * @param rowConf 行配置\n */\nexport function createRow(rowConf: RowConf | RootRowConf): MultipleFormRow {\n  let row: MultipleFormRow\n  // 根节点\n  if (isRoot(rowConf)) {\n    row = shallowReactive<MultipleFormRow>({\n      uid: 0,\n      root: true,\n      data: null,\n      index: -1,\n      indexes: [],\n      parent: null,\n      status: 'view',\n      // row初始创建时如果status为editing则视该条数据为未保存状态\n      saved: true,\n      // 根row和根的直接子row的深度都视为0\n      depth: 0,\n      children: [],\n      loading: false,\n      leaf: true\n    })\n  } else {\n    const { parent, index, status, children, data, uid } = rowConf\n    if (parent) {\n      parent.leaf = false\n    }\n    row = shallowReactive<MultipleFormRow>({\n      root: false,\n      data: isReactive(data) ? data : reactive(data),\n      status,\n      parent,\n      // row初始创建时如果status为editing则视该条数据为未保存状态\n      saved: status === 'editing' ? false : true,\n      depth: parent.root ? 0 : parent.depth + 1,\n      index,\n      indexes: parent.indexes.concat(index),\n      loading: false,\n      leaf: true,\n      uid\n    })\n    if (children) {\n      row.children = children\n      row.leaf = false\n    }\n  }\n\n  return row\n}\n\nexport function wrapDataRows(\n  data: any[],\n  parent: MultipleFormRow,\n  childrenKey: string,\n  uidFactory: () => number\n) {\n  return data.map((item, index) => {\n    const row = createRow({\n      parent,\n      data: item,\n      index,\n      status: 'view',\n      uid: uidFactory()\n    })\n\n    if (item[childrenKey]) {\n      row.children = wrapDataRows(\n        item[childrenKey],\n        row,\n        childrenKey,\n        uidFactory\n      )\n    }\n    return row\n  })\n}\n\nexport function unwrapRows(rows: MultipleFormRow[], childrenKey: string) {\n  return rows.map(row => {\n    const { data } = row\n    if (row.children) {\n      data[childrenKey] = unwrapRows(row.children, childrenKey)\n    }\n    return data\n  })\n}\n\n/**\n * 扁平tree\n * @param arr tree数组\n * @param acc 初始累加值\n */\nexport function flatTree<T extends Record<string, any>>(\n  arr: T[],\n  acc: T[] = []\n) {\n  arr.forEach(item => {\n    acc.push(item)\n    if (item.children) {\n      flatTree(item.children, acc)\n    }\n  })\n\n  return acc\n}\n"],"names":[],"mappings":"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"}