{"version":3,"file":"hooks2.mjs","sources":["../../../../../../../packages/components/upload/src/hooks.ts"],"sourcesContent":["import { computed } from 'vue'\n// import { clone } from 'xe-utils'\nimport type { Handler } from './main'\nimport type { FileItemType, LabelValueOptions, Recordable } from './types'\n\n/**\n * ***begin***\n * ```javascript\n * <TaUpload @register=\"register\" />\n *\n * const { register, getHandler } = useHandlerInOuter();\n *\n * getHandler().backfill()\n *\n * return {\n *   register\n * }\n * ```\n * ***end***\n * @returns hooks\n */\nexport const useHandlerInOuter = () => {\n  let outerHandler: Handler\n\n  const register = (handler: Handler) => {\n    outerHandler = handler\n  }\n\n  const getHandler = () => {\n    if (!outerHandler) {\n      console.error(\"no register, handler it's undefined\\ntry onMounted & nextTick\")\n    }\n    return outerHandler\n  }\n\n  const backfill = () => getHandler()?.backfill()\n\n  const clearResponse = () => getHandler()?.clearResponse()\n\n  return { register, backfill, getHandler, clearResponse }\n}\n\nexport const useFileTypeCode = (fileTypeCode: Recordable<LabelValueOptions<string, any>>) => {\n  /**\n   * **用typeCode数组,匹配文件类型的选项**\n   * @param {string[]} typeCodeArray\n   * @returns {LabelValueOptions} LabelValueOptions\n   */\n  const getOptionsByTypeCodes = (typeCodeArray: string[]) =>\n    computed(() => {\n      const options: LabelValueOptions<string> = []\n      const typeCodeArraySet = [...new Set(typeCodeArray)]\n      for (const key in fileTypeCode) {\n        options.push(...fileTypeCode[key].filter((el) => typeCodeArraySet.includes(el.value)))\n      }\n      return options\n    })\n\n  /**\n   * **用前缀匹配module下的typeCodeArray**\n   * @param prefix string\n   * @returns {LabelValueOptions} LabelValueOptions\n   */\n  const getOptionsByModuleCodePrefix = (prefix: string | string[]) => {\n    if (!Array.isArray(prefix)) {\n      prefix = [prefix]\n    }\n    const onlyPrefix = [...new Set(prefix)]\n    const moduleCodes: string[] = []\n    onlyPrefix.forEach((prefix) => {\n      moduleCodes.push(...Object.keys(fileTypeCode).filter((el) => el.startsWith(prefix)))\n    })\n    return getOptionsByModuleCode(moduleCodes as string[])\n  }\n\n  /**\n   * @param moduleCode\n   * @returns {LabelValueOptions} LabelValueOptions\n   */\n  const getOptionsByModuleCode = (moduleCode: string | string[]) =>\n    Array.isArray(moduleCode)\n      ? [...new Set(moduleCode)].map((el) => fileTypeCode[el]).reduce((x, y) => x.concat(y), [])\n      : fileTypeCode[moduleCode]\n\n  /**\n   * @param moduleCode\n   * @param typeCodeArray\n   * @param moduleCodePrefix\n   * @returns {LabelValueOptions} LabelValueOptions\n   */\n  const mergeOptions = (\n    moduleCode?: string | string[],\n    typeCodeArray?: string[],\n    moduleCodePrefix?: string | string[]\n  ) => {\n    const options = ((moduleCode && getOptionsByModuleCode(moduleCode)) || ([] as any[]))\n      .concat(undefined !== typeCodeArray ? getOptionsByTypeCodes(typeCodeArray).value : [])\n      .concat(undefined !== moduleCodePrefix ? getOptionsByModuleCodePrefix(moduleCodePrefix) : [])\n    if (!(options && options.length)) {\n      return []\n    }\n    const result: LabelValueOptions<string> = []\n    options.forEach((el) => {\n      if (\n        el &&\n        !result.some((resItem) => resItem.value === el.value && resItem.label === el.label)\n      ) {\n        result.push(el)\n      }\n    })\n\n    return result\n  }\n\n  return {\n    mergeOptions,\n    getOptionsByTypeCodes,\n    getOptionsByModuleCode,\n    getOptionsByModuleCodePrefix,\n  }\n}\n\n/**\n * 操作列按钮所需要的最大列宽度\n * @param arr ${string[]}\n * @param param1 config { margin=40, fontSize=12, appendWidth=10 }\n * @returns maxWidth ${number}\n */\nexport function getActionColumnMaxWidth(\n  arr: string[],\n  {\n    margin = 17,\n    fontSize = 12,\n    appendWidth = 10,\n  }: {\n    margin?: number\n    fontSize?: number\n    appendWidth?: number\n  } = {}\n) {\n  // TableAction 组件最多展示3个按钮, 间距为 20+20\n  let l = 0\n  arr.sort((x, y) => y.length - x.length)\n  const _arr = arr.splice(0, 3)\n  for (const str of _arr) {\n    const [text, dots] = str.split('..')\n    l += text.length * fontSize\n    if (dots) {\n      l += 2 * 4\n    }\n    l += margin\n  }\n  l += appendWidth * 2\n  return l\n}\n\nexport type UseFileFormatterParamsType = {\n  /**\n   * 更新时保存多少文件历史版本\n   *\n   * `\"newest\"` 仅保留最后一次更新\n   *\n   * `\"all\"` 保留当前版本往后所有更新\n   * @default \"newest\"\n   */\n  fileVersionCount?: 'newest' | 'all'\n}\n\nexport function useFileFormatter({ fileVersionCount = 'newest' }: UseFileFormatterParamsType = {}) {\n  const versionRecord: Partial<Recordable<FileItemType[]>> = {}\n\n  function upadteVersion(file: FileItemType) {\n    const existFile = versionRecord[file.actualId!]?.find((el) => el.id === file.id)\n\n    if (existFile) {\n      /**\n       * 文件名更新 || 超链接更新\n       */\n      if (existFile.name !== file.name || existFile.address !== file.address) {\n        /**\n         * ```ts\n         * [v1File, v2File] as const\n         * ```\n         */\n        const fileArr = versionRecord[existFile.actualId!]\n\n        if (fileArr) {\n          const lastIndex = fileArr.length - 1\n\n          fileArr[lastIndex] = file\n        }\n      }\n      return\n    }\n\n    if (fileVersionCount === 'newest') {\n      if (versionRecord[file.actualId!]) {\n        if (\n          file.version === 0 &&\n          getBasicFileByActualId(file.actualId!)!.version === 1 &&\n          !(\n            getBasicFileByActualId(file.actualId!)!.businessId ||\n            getBasicFileByActualId(file.actualId!)!.businessKey\n          )\n        ) {\n          file.version = 1\n        } else {\n          file.version = versionRecord[file.actualId!]![0].version + 1\n        }\n        versionRecord[file.actualId!]![1] = file\n      } else {\n        versionRecord[file.actualId!] = [file]\n      }\n\n      return\n    }\n\n    if (versionRecord[file.actualId!]) {\n      // 维护文件唯一性\n      if (versionRecord[file.actualId!]?.some((el) => file.id === el.id)) return\n\n      versionRecord[file.actualId!]!.push(file)\n    } else {\n      versionRecord[file.actualId!] = [file]\n    }\n  }\n\n  function formatToApi(files: FileItemType[]) {\n    const currentFileActualIdsSet = new Set<string>()\n\n    for (const file of files) {\n      upadteVersion(file)\n\n      currentFileActualIdsSet.add(file.actualId!)\n    }\n\n    for (const actualId in versionRecord) {\n      // 有删除操作时\n      currentFileActualIdsSet.has(actualId) || Reflect.deleteProperty(versionRecord, actualId)\n    }\n\n    // const cloneVersionRecord = clone(versionRecord, true)\n    // versionRecord = {}\n\n    return Object.keys(versionRecord).map((k) => ({\n      actualId: k,\n      moduleCode: versionRecord[k]![0].moduleCode,\n      versionList: [versionRecord[k]![1] || versionRecord[k]![0]],\n    }))\n  }\n\n  /**\n   * @param actualId\n   * @returns\n   */\n  function getFilesByActualId(actualId: string) {\n    return versionRecord[actualId]\n  }\n\n  /**\n   * 初始化时的文件\n   * @param actualId\n   * @returns\n   */\n  function getBasicFileByActualId(actualId: string) {\n    return getFilesByActualId(actualId)?.[0]\n  }\n\n  /**\n   * 最后一次点击更新后的文件\n   * @param actualId\n   * @returns\n   */\n  function getNewestFileByActualId(actualId: string) {\n    return getFilesByActualId(actualId)?.[1]\n  }\n\n  return {\n    formatToApi,\n    upadteVersion,\n    getFilesByActualId,\n    getBasicFileByActualId,\n    getNewestFileByActualId,\n  }\n}\n"],"names":[],"mappings":"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"}