{"version":3,"file":"hooks.mjs","sources":["../../../../../../packages/components/pro-table/src/hooks.ts"],"sourcesContent":["/**\r\n * 表格数据分页切片函数\r\n * @param {Object} params - 参数对象\r\n * @param {Array} params.data - 表格数据数组\r\n * @param {number} params.currentPage - 当前分页数（从1开始）\r\n * @param {number} params.pageSize - 分页数量\r\n * @returns {Array} 分页后的数据切片\r\n */\r\nexport const paginateTableData = ({ data, currentPage, pageSize }) => {\r\n  if (!Array.isArray(data)) return []\r\n\r\n  if (typeof currentPage !== 'number' || currentPage < 1) return []\r\n\r\n  if (typeof pageSize !== 'number' || pageSize < 1) return []\r\n\r\n  // 计算起始索引和结束索引\r\n  const startIndex = (currentPage - 1) * pageSize\r\n  const endIndex = startIndex + pageSize\r\n\r\n  // 如果起始索引超出数组范围，返回空数组\r\n  if (startIndex >= data.length) return []\r\n\r\n  // 返回分页切片\r\n  return data.slice(startIndex, endIndex)\r\n}\r\n\r\n/**\r\n * 多条件查询函数，支持多个字段的不同查询值\r\n * @param {Object} params - 参数对象\r\n * @param {Array} params.data - 表格数据数组\r\n * @param {Object} params.queries - 查询条件对象，格式为 {字段名: 查询值, ...}\r\n * @param {boolean} [params.caseSensitive=false] - 是否区分大小写\r\n * @param {boolean} [params.matchAll=true] - 是否需全部匹配（默认AND查询）\r\n * @returns {Array} 过滤后的数据数组\r\n */\r\nexport const searchTableData = ({\r\n  data,\r\n  queries,\r\n  caseSensitive = false,\r\n  matchAll = true,\r\n}) => {\r\n  // 参数验证\r\n  if (!Array.isArray(data)) return []\r\n  if (data.length === 0) return []\r\n  if (!queries || typeof queries !== 'object') return data\r\n  if (Object.keys(queries).length === 0) return data\r\n\r\n  // 过滤掉空值的查询条件\r\n  const validQueries = Object.entries(queries).reduce((acc, [field, value]) => {\r\n    if (value != null && value !== '' && value !== undefined) {\r\n      acc[field] = value\r\n    }\r\n    return acc\r\n  }, {})\r\n\r\n  // 如果没有有效的查询条件，返回原数据\r\n  if (Object.keys(validQueries).length === 0) return data\r\n\r\n  return data.filter((item) => {\r\n    if (item == null) return false\r\n\r\n    // 对每个查询条件进行匹配\r\n    const conditionMatches = Object.entries(validQueries).map(\r\n      ([field, queryValue]) => {\r\n        // 安全属性检查\r\n        if (!Object.prototype.hasOwnProperty.call(item, field)) {\r\n          return false\r\n        }\r\n\r\n        const itemValue = item[field]\r\n        if (itemValue == null) return false\r\n\r\n        // 处理查询值和数据值\r\n        const searchValue = caseSensitive\r\n          ? String(queryValue)\r\n          : String(queryValue).toLowerCase()\r\n\r\n        const itemValueStr = caseSensitive\r\n          ? String(itemValue)\r\n          : String(itemValue).toLowerCase()\r\n\r\n        return itemValueStr.includes(searchValue)\r\n      }\r\n    )\r\n\r\n    // 根据 matchAll 决定匹配逻辑\r\n    return matchAll\r\n      ? conditionMatches.every((match) => match) // AND 查询：所有条件都要匹配\r\n      : conditionMatches.some((match) => match) // OR 查询：任意条件匹配即可\r\n  })\r\n}\r\n\r\n/**\r\n * 智能多字段排序函数（自动类型检测）\r\n * @param {Object} params - 参数对象\r\n * @param {Array} params.data - 要排序的数据数组\r\n * @param {Array} params.sortBy - 排序配置数组\r\n * @returns {Array} 排序后的数组\r\n */\r\nexport const sortTableData = ({ data, sortBy }) => {\r\n  if (!Array.isArray(data)) return []\r\n\r\n  if (!Array.isArray(sortBy) || sortBy.length === 0) return data\r\n\r\n  if (data.length === 0) return []\r\n\r\n  // 创建数据副本\r\n  const sortedData = [...data]\r\n\r\n  // 类型检测器\r\n  const detectType = (value) => {\r\n    if (value == null) return 'null'\r\n\r\n    // 1. 检测数字（包括字符串形式的数字）\r\n    if (!isNaN(Number(value)) && value !== '') {\r\n      // 排除纯空格字符串等特殊情况\r\n      const num = Number(value)\r\n      if (\r\n        typeof value === 'number' ||\r\n        (typeof value === 'string' && String(num) === value.trim())\r\n      ) {\r\n        return 'number'\r\n      }\r\n    }\r\n\r\n    // 2. 检测日期时间（常见格式）\r\n    if (typeof value === 'string') {\r\n      // 标准日期时间格式：2024-01-15 10:30:00, 2024-01-15, 2024/01/15等\r\n      const dateTimePatterns = [\r\n        /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$/, // 2024-01-15 10:30:00\r\n        /^\\d{4}-\\d{2}-\\d{2}$/, // 2024-01-15\r\n        /^\\d{4}\\/\\d{2}\\/\\d{2} \\d{2}:\\d{2}:\\d{2}$/, // 2024/01/15 10:30:00\r\n        /^\\d{4}\\/\\d{2}\\/\\d{2}$/, // 2024/01/15\r\n        /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/, // ISO格式\r\n      ]\r\n\r\n      for (const pattern of dateTimePatterns) {\r\n        if (pattern.test(value.trim())) {\r\n          const date = new Date(value)\r\n          if (!isNaN(date.getTime())) {\r\n            return 'datetime'\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // 3. 默认为字符串\r\n    return 'string'\r\n  }\r\n\r\n  // 智能类型检测（基于样本数据）\r\n  const createSmartComparator = (field) => {\r\n    // 从数据中采样检测类型\r\n    const samples = data\r\n      .filter((item) => item[field] != null)\r\n      .slice(0, 10) // 采样前10个非空值\r\n      .map((item) => item[field])\r\n\r\n    if (samples.length === 0) return 'string' // 默认\r\n\r\n    // 统计类型分布\r\n    const typeCounts = {}\r\n    samples.forEach((sample) => {\r\n      const type = detectType(sample)\r\n      typeCounts[type] = (typeCounts[type] || 0) + 1\r\n    })\r\n\r\n    // 返回出现最多的类型\r\n    return Object.keys(typeCounts).reduce((a, b) =>\r\n      typeCounts[a] > typeCounts[b] ? a : b\r\n    )\r\n  }\r\n\r\n  // 预计算每个字段的类型\r\n  const fieldTypes = {} as any\r\n  sortBy.forEach((config) => {\r\n    fieldTypes[config.field] = createSmartComparator(config.field) // 自动检测\r\n  })\r\n\r\n  // 比较函数\r\n  const compareValues = (a, b, fieldConfig) => {\r\n    const { field, order = 'asc' } = fieldConfig\r\n    const type = fieldTypes[field]\r\n\r\n    const valueA = a[field]\r\n    const valueB = b[field]\r\n\r\n    // 处理空值\r\n    if (valueA == null && valueB == null) return 0\r\n    if (valueA == null) return order === 'asc' ? -1 : 1\r\n    if (valueB == null) return order === 'asc' ? 1 : -1\r\n\r\n    // 根据检测到的类型进行比较\r\n    switch (type) {\r\n      case 'number':\r\n        return compareNumbers(valueA, valueB, order)\r\n\r\n      case 'datetime':\r\n        return compareDatetimes(valueA, valueB, order)\r\n\r\n      case 'string':\r\n      default:\r\n        return compareStrings(valueA, valueB, order)\r\n    }\r\n  }\r\n\r\n  // 数字比较\r\n  const compareNumbers = (a, b, order) => {\r\n    const numA = Number(a)\r\n    const numB = Number(b)\r\n\r\n    if (isNaN(numA) && isNaN(numB)) return 0\r\n    if (isNaN(numA)) return order === 'asc' ? -1 : 1\r\n    if (isNaN(numB)) return order === 'asc' ? 1 : -1\r\n\r\n    const comparison = numA - numB\r\n    return order === 'asc' ? comparison : -comparison\r\n  }\r\n\r\n  // 日期时间比较\r\n  const compareDatetimes = (a, b, order) => {\r\n    const dateA = new Date(a)\r\n    const dateB = new Date(b)\r\n\r\n    if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) {\r\n      return compareStrings(a, b, order)\r\n    }\r\n    if (isNaN(dateA.getTime())) return order === 'asc' ? -1 : 1\r\n    if (isNaN(dateB.getTime())) return order === 'asc' ? 1 : -1\r\n\r\n    const timeA = dateA.getTime()\r\n    const timeB = dateB.getTime()\r\n\r\n    if (timeA < timeB) return order === 'asc' ? -1 : 1\r\n    if (timeA > timeB) return order === 'asc' ? 1 : -1\r\n    return 0\r\n  }\r\n\r\n  // 字符串比较\r\n  const compareStrings = (a, b, order) => {\r\n    const strA = String(a).toLowerCase()\r\n    const strB = String(b).toLowerCase()\r\n\r\n    if (strA < strB) return order === 'asc' ? -1 : 1\r\n    if (strA > strB) return order === 'asc' ? 1 : -1\r\n    return 0\r\n  }\r\n\r\n  // 主排序\r\n  sortedData.sort((a, b) => {\r\n    for (const sortConfig of sortBy) {\r\n      const result = compareValues(a, b, sortConfig)\r\n      if (result !== 0) return result\r\n    }\r\n    return 0\r\n  })\r\n\r\n  return sortedData\r\n}\r\n\r\n// 处理静态列表数据参数\r\nexport interface ProcessStaticDataParams {\r\n  data: any[] // 数据列表\r\n\r\n  // 查询配置\r\n  search?: {\r\n    queries: Record<string, any> // {字段名: 查询值}// 多字段查询的键值对\r\n    caseSensitive?: boolean // 是否区分大小写（默认值false不区分）\r\n    matchAll?: boolean // 多字段时是否需全部匹配（默认值true全部匹配）\r\n    [key: string]: any\r\n  }\r\n\r\n  // 排序配置\r\n  sort?: {\r\n    field: string // 排序字段\r\n    order?: 'asc' | 'desc' // 排序顺序\r\n    [key: string]: any\r\n  }[]\r\n\r\n  // 分页配置\r\n  paginate?: {\r\n    current: number // 当前分页数\r\n    pageSize?: number // 每页条数\r\n    [key: string]: any\r\n  }\r\n  [key: string]: any\r\n}\r\n\r\n/**\r\n * 表格数据处理整合函数（查询 + 排序 + 分页）\r\n * @param {Object} params - 参数对象\r\n * @param {Array} params.data - 原始数据数组\r\n *\r\n * @param {Object} [params.search] - 查询配置（不传则跳过查询）\r\n * @param {string|string[]} [params.search.queries] - 查询键值对\r\n *\r\n * @param {Array} [params.sort] - 排序规则数组（不传则跳过排序）\r\n *\r\n * @param {Object} [params.paginate] - 分页配置（不传则跳过分页）\r\n * @param {number} [params.paginate.current] - 当前页码\r\n * @param {number} [params.paginate.pageSize] - 每页大小\r\n * @returns {Object} 处理结果对象\r\n *\r\n * {data:[原始数据数组], search:{查询配置}, sort:[排序配置], paginate:{分页配置}}\r\n */\r\nexport const processStaticData = ({\r\n  data,\r\n  search,\r\n  sort,\r\n  paginate,\r\n}: ProcessStaticDataParams) => {\r\n  // 参数验证\r\n  if (!Array.isArray(data)) {\r\n    return {\r\n      items: [],\r\n      total: 0,\r\n    }\r\n  }\r\n\r\n  let items = [...data]\r\n  let filteredTotal = data.length\r\n\r\n  // 步骤1：查询过滤（只有在传入了search参数且包含有效查询值时执行）\r\n  const shouldSearch = search && Object.keys(search.queries).length >= 0\r\n\r\n  if (shouldSearch) {\r\n    items = searchTableData({\r\n      data: items,\r\n      queries: search.queries,\r\n      caseSensitive: search.caseSensitive,\r\n      matchAll: search.matchAll,\r\n    })\r\n    filteredTotal = items.length\r\n  }\r\n\r\n  // 步骤2：排序（只有在传入了sort参数且包含有效的sortBy数组时执行）\r\n  const shouldSort = sort && Array.isArray(sort) && sort.length > 0\r\n\r\n  if (shouldSort) {\r\n    // 确保排序配置符合 sortTableData 的期望格式\r\n    const sortBy = sort.map((item) => ({\r\n      order: item.order || 'asc',\r\n      ...item,\r\n    }))\r\n\r\n    items = sortTableData({\r\n      data: items,\r\n      sortBy: sortBy,\r\n    })\r\n  }\r\n\r\n  // 步骤3：分页（只有在传入了paginate参数时执行）\r\n  const shouldPaginate = paginate != null\r\n\r\n  if (shouldPaginate) {\r\n    const current = Math.max(1, paginate.current || 1)\r\n    const pageSize = Math.max(1, paginate.pageSize || 10)\r\n\r\n    items = paginateTableData({\r\n      data: items,\r\n      currentPage: current,\r\n      pageSize: pageSize,\r\n    })\r\n  }\r\n\r\n  return {\r\n    items,\r\n    total: filteredTotal, // 过滤后的总数据量\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}