import { ColumnFilterAutoRemoveTestFn, FilterFn, Row, RowData, SortDirection, TransformFilterValueFn, } from '@tanstack/react-table'; import { LucideSortAsc, LucideSortDesc } from 'lucide-react'; import { DefaultValues } from 'react-hook-form'; type AsyncDefaultValues = (payload?: unknown) => Promise; export function formMergeDefaultValues( ...parts: (DefaultValues | AsyncDefaultValues | undefined)[] ): (payload?: unknown) => Promise> { return async (payload?: unknown) => { if (parts.length === 0) { return {} as DefaultValues; } if (parts.length === 1) { return typeof parts[0] === 'function' ? await parts[0](payload) : parts[0]; } return Object.assign( // @ts-ignore ...(await Promise.all( parts.map((p) => (typeof p === 'function' ? p(payload) : p)), )), ); }; } export function parseBooleanish(value: any): boolean { return typeof value === 'string' ? /^(1|[Tt]rue|[Oo]n|[Yy](es)?)$/.test(value) : !!value; } export function createFuzzySearchFn( columns: (keyof TData)[] = [], ) { return (row: Row, columnId: string, filterValue: string) => { const searchText = filterValue.trim().toLowerCase(); return columns .map((n) => row .getValue(n as string) .trim() .toLowerCase(), ) .some((v) => v.includes(searchText)); }; } export function createColumnFilterFn( filterFn: FilterFn, options: { resolveFilterValue?: TransformFilterValueFn; autoRemove?: ColumnFilterAutoRemoveTestFn; }, ) { return Object.assign(filterFn, options) as FilterFn; } export function getSortIcon(sorting: false | SortDirection) { return { asc: , desc: , }[sorting as string]; } export const PERMISSION_TYPES = ['enable', 'read', 'write', 'share'] as const; export const EMPTY_DATA = Object.freeze([]) as any[]; export const IS_ENTERPRISE = process.env.UMI_APP_RAGFLOW_ENTERPRISE === 'RAGFLOW_ENTERPRISE';