{"version":3,"file":"use-mode2.mjs","sources":["../../../../../../../../../packages/components/file/src/FileCard/hooks/use-mode.ts"],"sourcesContent":["import { type ComputedRef, type SetupContext, nextTick } from 'vue'\nimport { tavI18n } from '@tav-ui/locales'\nimport {\n  type ApiDeleteFileParams,\n  type ApiQueryFileListParams,\n  type ApiUpdateFileNameAndLinkParams,\n  type CardValidateCallback,\n  type FileCardEmits,\n  type FileCardProps,\n} from '../types'\nimport { type FileActionUploadApiResponseRecord, type GlobalConfigFileProps } from '../../typings'\nimport { type UseRequestHandleApiDefaultOptions, type VersionCaches } from '../../hooks'\nimport { type ArgumentsOf, type ReturnOf, validateVersionCachesHasApiFile } from '../../utils'\nimport { type UseCardActionsReturn } from './use-card-actions'\n\nexport function useMode(options: {\n  mergedProps: ComputedRef<GlobalConfigFileProps & FileCardProps>\n  emits: SetupContext<FileCardEmits>['emit']\n  VersionCachesController: VersionCaches\n  handleApiDataSource: (params?: any) => Promise<void>\n  hasEmptyDataSource: ComputedRef<boolean>\n}) {\n  const { mergedProps, VersionCachesController, handleApiDataSource, hasEmptyDataSource } = options\n\n  //:========================================: api actions :========================================://\n  function rowEditorApiOptions(\n    apiParams: FileCardProps['apiParams'],\n    changeEventPayload: Omit<ApiUpdateFileNameAndLinkParams, 'appId'>\n  ) {\n    if (!mergedProps.value.apiUpdateFileNameAndLink) {\n      console.warn('[tavui TaFileCard] apiUpdateFileNameAndLink is undefined')\n      return\n    }\n\n    const options: UseRequestHandleApiDefaultOptions<\n      ApiUpdateFileNameAndLinkParams,\n      FileActionUploadApiResponseRecord[]\n    > = {\n      api: mergedProps.value.apiUpdateFileNameAndLink,\n      beforeApi: mergedProps.value.beforeApiUpdateFileNameAndLink,\n      afterApi: mergedProps.value.afterApiUpdateFileNameAndLink,\n      apiParams: {\n        appId: apiParams.appId,\n        ...changeEventPayload,\n      },\n      failureMessage: () => {\n        return tavI18n('Tav.common.httpError')\n      },\n      useSuccessPassRes: true,\n    }\n\n    // if (mergedProps.value.mode === 'read') {\n    // } else if (mergedProps.value.mode === 'create') {\n    // } else if (mergedProps.value.mode === 'update') {\n    // } else {\n    // }\n\n    return options\n  }\n\n  function historyApiOptions(\n    apiParams: FileCardProps['apiParams'],\n    file: FileActionUploadApiResponseRecord\n  ) {\n    if (!mergedProps.value.apiQueryFileHistory) {\n      console.warn('[tavui TaFileCard] apiQueryFileHistory is undefined')\n      return\n    }\n\n    const options: UseRequestHandleApiDefaultOptions<\n      ArgumentsOf<FileCardProps['apiQueryFileHistory']>[0],\n      FileActionUploadApiResponseRecord[]\n    > = {\n      api: mergedProps.value.apiQueryFileHistory,\n      // beforeApi: mergedProps.value.beforeApiQueryFileHistory,\n      // afterApi: mergedProps.value.afterApiQueryFileHistory,\n      apiParams: {\n        // appId: apiParams.appId,\n        actualIds: [file.actualId!],\n        // permissionControl: apiParams.permissionControl,\n      },\n      failureMessage: () => {\n        return tavI18n('Tav.common.httpError')\n      },\n    }\n\n    // if (mergedProps.value.mode === 'read') {\n    // } else if (mergedProps.value.mode === 'create') {\n    // } else if (mergedProps.value.mode === 'update') {\n    // } else {\n    // }\n\n    return options\n  }\n\n  function deleteApiOptions(\n    apiParams: FileCardProps['apiParams'],\n    row: FileActionUploadApiResponseRecord\n  ) {\n    if (!mergedProps.value.apiDeleteFile) {\n      console.warn('[tavui TaFileCard] apiDeleteFile is undefined')\n      return\n    }\n\n    const options: UseRequestHandleApiDefaultOptions<\n      Omit<ApiDeleteFileParams, 'actualIds'> & {\n        actualIds?: ApiDeleteFileParams['actualIds']\n      },\n      FileActionUploadApiResponseRecord[]\n    > = {\n      api: mergedProps.value.apiDeleteFile as any,\n      beforeApi: mergedProps.value.beforeApiDeleteFile as any,\n      afterApi: mergedProps.value.afterApiDeleteFile,\n      apiParams: {\n        appId: apiParams.appId,\n      },\n      failureMessage: () => {\n        return tavI18n('Tav.common.httpError')\n      },\n      useSuccessPassRes: true,\n    }\n\n    if (mergedProps.value.mode === 'read') {\n      //\n    } else if (mergedProps.value.mode === 'create') {\n      //\n    } else if (mergedProps.value.mode === 'update') {\n      //\n    } else {\n      options['apiParams'] = {\n        ...options['apiParams'],\n        actualIds: [row.actualId!],\n      }\n    }\n\n    return options\n  }\n  //:========================================: api actions :========================================://\n\n  //:========================================: data actions :========================================://\n  async function reloadRows(params?: Partial<ApiQueryFileListParams>) {\n    if (!mergedProps.value.visible) return\n    await nextTick()\n\n    const handleReload = async () => {\n      await handleApiDataSource(params)\n    }\n\n    if (mergedProps.value.mode === 'read') {\n      if (!hasEmptyDataSource.value) {\n        console.warn(\n          '[tavui TaFileCard] \"reload\" not working in mode \"read\" combine with \"dataSource\"'\n        )\n      } else {\n        await handleReload()\n      }\n    } else if (mergedProps.value.mode === 'create') {\n      if (!hasEmptyDataSource.value) {\n        console.warn(\n          '[tavui TaFileCard] \"reload\" not working in mode \"create\" combine with \"dataSource\"'\n        )\n      } else {\n        console.warn('[tavui TaFileCard] \"reload\" not working in mode \"create\"')\n      }\n    } else if (mergedProps.value.mode === 'update') {\n      if (!hasEmptyDataSource.value) {\n        console.warn(\n          '[tavui TaFileCard] \"reload\" not working in mode \"update\" combine with \"dataSource\"'\n        )\n      } else {\n        await handleReload()\n      }\n    } else {\n      if (!hasEmptyDataSource.value) {\n        console.warn(\n          '[tavui TaFileCard] \"reload\" not working in mode \"updateInstantly\" combine with \"dataSource\"'\n        )\n      } else {\n        await handleReload()\n      }\n    }\n  }\n\n  async function editRow(\n    changeEventPayload: Omit<ApiUpdateFileNameAndLinkParams, 'appId'>,\n    _row: FileActionUploadApiResponseRecord,\n    cardUpdateRows: UseCardActionsReturn['cardUpdateRows'],\n    editRowApiAction: (...args: any[]) => Promise<any>,\n    hasEmptyDataSource: ComputedRef<boolean>,\n    refreshCardDataApiAction: (params?: Partial<ApiQueryFileListParams>) => Promise<void>\n  ) {\n    const mode = mergedProps.value.mode\n    const row = JSON.parse(JSON.stringify(_row))\n\n    function createNewRow() {\n      const newrow = { ...row }\n      if (changeEventPayload.name) newrow.name = changeEventPayload.name\n      if (newrow.hyperlink) {\n        if (changeEventPayload.address) newrow.address = changeEventPayload.address\n      } else {\n        if (changeEventPayload.name) newrow.fullName = `${changeEventPayload.name}.${newrow.suffix}`\n      }\n      return newrow\n    }\n\n    async function action(newrow: any) {\n      await cardUpdateRows({\n        rows: [newrow],\n        deleteRows: [row],\n      })\n    }\n\n    if (mode === 'read') {\n      //\n    } else if (mode === 'create') {\n      const newrow = createNewRow()\n      VersionCachesController.updateFileCaches(newrow)\n      await editRowApiAction(changeEventPayload)\n      await action(newrow)\n    } else if (mode === 'update') {\n      const newrow = createNewRow()\n      VersionCachesController.updateFileCaches(newrow)\n      !validateVersionCachesHasApiFile(VersionCachesController['caches'][row.actualId!]) &&\n        (await editRowApiAction(changeEventPayload))\n      await action(newrow)\n    } else {\n      const newrow = createNewRow()\n      VersionCachesController.updateFileCaches(newrow)\n      await editRowApiAction(changeEventPayload)\n      if (hasEmptyDataSource.value) {\n        // 无外部传入的 datasource 才操作\n        await refreshCardDataApiAction({ typeCodes: [mergedProps.value.value!] }) // 刷新会调用接口进入 watch datasource 逻辑\n      } else {\n        await action(newrow)\n      }\n    }\n  }\n\n  async function updateRow(\n    _row: FileActionUploadApiResponseRecord,\n    _clickedRow: FileActionUploadApiResponseRecord,\n    cardUpdateRows: UseCardActionsReturn['cardUpdateRows'],\n    hasEmptyDataSource: ComputedRef<boolean>,\n    refreshCardDataApiAction: (params?: Partial<ApiQueryFileListParams>) => Promise<void>\n  ) {\n    const mode = mergedProps.value.mode\n    const row = JSON.parse(JSON.stringify(_row))\n    const clickedRow = JSON.parse(JSON.stringify(_clickedRow))\n\n    async function action(updatedVersionRow?: FileActionUploadApiResponseRecord) {\n      await cardUpdateRows({\n        rows: [{ ...clickedRow, ...(updatedVersionRow ?? row) }], // merge 原数据，兼容插入的业务字段\n        deleteRows: [clickedRow],\n      })\n    }\n\n    if (mode === 'read') {\n      //\n    } else if (mode === 'create') {\n      await action()\n    } else if (mode === 'update') {\n      VersionCachesController.createFileCache(row, mode)\n      const latestVersionFileCache = VersionCachesController.readFileCacheLatestVersion(\n        row.actualId!\n      )\n      await action(latestVersionFileCache)\n    } else {\n      VersionCachesController.createFileCache(row, mode)\n      if (hasEmptyDataSource.value) {\n        // 无外部传入的 datasource 才操作\n        await refreshCardDataApiAction({ typeCodes: [mergedProps.value.value!] }) // 刷新会调用接口进入 watch datasource 逻辑\n      } else {\n        await action()\n      }\n    }\n  }\n\n  async function deleteRow(\n    _clickedRow: FileActionUploadApiResponseRecord,\n    cardDeleteRows: UseCardActionsReturn['cardDeleteRows'],\n    deleteRowApiAction: () => Promise<void>,\n    hasEmptyDataSource: ComputedRef<boolean>,\n    refreshCardDataApiAction: (params?: Partial<ApiQueryFileListParams>) => Promise<void>,\n    validate: (trigger: string, callback?: CardValidateCallback) => Promise<boolean>\n  ) {\n    const mode = mergedProps.value.mode\n    const clickedRow = JSON.parse(JSON.stringify(_clickedRow))\n\n    async function action() {\n      await cardDeleteRows({\n        rows: [clickedRow],\n      })\n    }\n\n    if (mode === 'read') {\n      //\n    } else if (mode === 'create') {\n      await action()\n      mergedProps.value.autoValidate && (await validate('change'))\n    } else if (mode === 'update') {\n      VersionCachesController.deleteFileCaches(clickedRow.actualId!)\n      await action()\n      mergedProps.value.autoValidate && (await validate('change'))\n    } else {\n      VersionCachesController.deleteFileCaches(clickedRow.actualId!)\n      if (hasEmptyDataSource.value) {\n        // 无外部传入的 datasource 才操作\n        await deleteRowApiAction()\n        await refreshCardDataApiAction({ typeCodes: [mergedProps.value.value!] }) // 刷新会调用接口进入 watch datasource 逻辑\n      } else {\n        await action()\n      }\n      mergedProps.value.autoValidate && (await validate('change'))\n    }\n  }\n  //:========================================: data actions :========================================://\n\n  return {\n    apiActions: {\n      rowEditorApiOptions,\n      historyApiOptions,\n      deleteApiOptions,\n    },\n    dataActions: {\n      reloadRows,\n      editRow,\n      updateRow,\n      deleteRow,\n    },\n  }\n}\n\nexport type UseModeReturn = ReturnOf<typeof useMode>\n"],"names":[],"mappings":"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"}