UNPKG

tav-ui

Version:
1 lines 8.91 kB
{"version":3,"file":"useCheckboxCache2.mjs","sources":["../../../../../../../../packages/components/table-pro/src/hooks/useCheckboxCache.ts"],"sourcesContent":["import { computed, nextTick, ref, toRaw, unref, watch } from 'vue'\nimport { ROW_KEY } from '../const'\nimport type { TableProInstance, TableProProps } from '../types'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { Emitter } from '@tav-ui/utils/mitt'\n\nexport function useCheckboxCache(\n tableRef: Ref<TableProInstance | null>,\n tablePropsRef: ComputedRef<TableProProps>,\n currentPage: Ref<number>,\n tableEmitter: Emitter\n) {\n const {\n rowConfig: { keyField = ROW_KEY },\n api,\n } = unref(tablePropsRef)\n\n /** key:页码,value:rows */\n const checkboxCaches = ref<Record<string, Record<string, any>[]>>({})\n const isCheckboxCacheEnabled = computed(\n () =>\n tablePropsRef.value.checkboxConfig &&\n tablePropsRef.value.checkboxConfig.enabled &&\n tablePropsRef.value.checkboxConfig.cache\n )\n const checkboxCacheList = computed(() => {\n if (!isCheckboxCacheEnabled.value) return []\n\n let caches: Record<string, any>[] = []\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const [_, k] of Object.entries(unref(checkboxCaches))) {\n caches = [...caches, ...k]\n }\n return caches\n })\n\n if (api) {\n tableEmitter.on('table-pro:api-success', async () => {\n await nextTick()\n await applyCheckboxCacheByCurrentPage()\n })\n } else {\n /** 页码变化 */\n watch(\n () => currentPage.value,\n async () => {\n await nextTick()\n await applyCheckboxCacheByCurrentPage()\n }\n )\n }\n\n /**\n * checkbox 点击时调用,将行数据维护在 checkboxCaches 中\n * 当前交互发生在固定的页码下\n * @param row\n * @returns\n */\n async function createCheckboxCache(row: Record<string, any>) {\n if (!isCheckboxCacheEnabled.value) return\n const cache = !!checkboxCacheList.value.find(\n (cache) => `${cache[keyField]}` === `${row[keyField]}`\n )\n if (!cache) {\n unref(checkboxCaches)[currentPage.value] = [\n ...(unref(checkboxCaches)[currentPage.value] ?? []),\n { ...toRaw(row), __page: currentPage.value }, // __page 方便后续弹窗内点击删除按钮迅速获取当前页码\n ]\n\n await unref(tableRef)?.toggleCheckboxRow(row) // 只切换当前页的选中\n }\n }\n\n /**\n * checkboxall 点击时调用,将行数据维护在 checkboxCaches 中\n * 当前交互发生在固定的页码下\n * @param rows\n * @returns\n */\n async function createAllCheckboxCache(rows: Record<string, any>[]) {\n if (!isCheckboxCacheEnabled.value) return\n\n unref(checkboxCaches)[currentPage.value] = [\n ...toRaw(rows).map((row) => {\n return { ...toRaw(row), __page: currentPage.value }\n }), // __page 方便后续弹窗内点击删除按钮迅速获取当前页码\n ]\n\n await unref(tableRef)?.toggleAllCheckboxRow() // 只切换当前页的选中\n }\n\n /**\n * checkbox 反选点击时或弹窗指定行删除按钮点击时调用\n * @param row\n * @returns\n */\n async function deleteCheckboxCache(row: Record<string, any>) {\n if (!isCheckboxCacheEnabled.value) return\n\n const page = row.__page ?? currentPage.value\n const cache = !!checkboxCacheList.value.find(\n (cache) => `${cache[keyField]}` === `${row[keyField]}`\n )\n if (cache) {\n unref(checkboxCaches)[page] = unref(checkboxCaches)[page].filter(\n (cache) => `${cache[keyField]}` !== `${row[keyField]}`\n )\n\n await unref(tableRef)?.toggleCheckboxRow(row) // 只切换当前页的选中\n }\n }\n\n /**\n * checkboxall 反选点击时或弹窗清除按钮点击时调用\n * @returns\n */\n async function deleteAllCheckboxCache(options: { deleteByPage: boolean }) {\n if (!isCheckboxCacheEnabled.value) return\n\n const { deleteByPage } = options\n\n if (deleteByPage) {\n checkboxCaches.value[currentPage.value] = []\n } else {\n checkboxCaches.value = {}\n }\n\n await unref(tableRef)?.clearCheckboxRow() // 只清除当前页的选中\n }\n\n /**\n * 页码变化代表翻页完成,手动将翻页后选中数据状态回复\n * @returns\n */\n async function applyCheckboxCacheByCurrentPage() {\n if (!isCheckboxCacheEnabled.value) return\n\n if (unref(checkboxCaches)[currentPage.value]) {\n await unref(tableRef)?.clearCheckboxRow()\n const promises = unref(checkboxCaches)[currentPage.value].map(\n // eslint-disable-next-line no-return-await\n async (row) => await unref(tableRef)?.setCheckboxRow(row, true)\n )\n await Promise.all(promises)\n }\n }\n\n return {\n checkboxCaches,\n isCheckboxCacheEnabled,\n checkboxCacheList,\n createCheckboxCache,\n createAllCheckboxCache,\n deleteCheckboxCache,\n deleteAllCheckboxCache,\n applyCheckboxCacheByCurrentPage,\n }\n}\n\nexport type UseCheckboxCacheReturn = ReturnType<typeof useCheckboxCache>\n"],"names":[],"mappings":"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"}