{"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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"}