tav-ui
Version:
1 lines • 19.2 kB
Source Map (JSON)
{"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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"}