@fcurd/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +337 -0
- package/dist/index.d.ts +337 -0
- package/dist/index.js +719 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +702 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useCrudActions.ts","../src/hooks/useCrudForm.ts","../src/hooks/useCrudList.ts","../src/hooks/useCrudRouteSync.ts","../src/hooks/useCrudSelection.ts","../src/utils/fields.ts","../src/utils/columns.ts"],"names":["ref","reactive","computed","shallowRef","watch","options","onScopeDispose"],"mappings":"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","file":"index.js","sourcesContent":["import type { CrudAction, CrudAdapter, UseCrudActionsOptions, UseCrudActionsReturn } from '../types'\nimport { ref } from 'vue'\n\n/**\n * Core hook for CRUD action management\n */\nexport function useCrudActions<Row = any>(\n options: UseCrudActionsOptions<Row> = {},\n): UseCrudActionsReturn<Row> {\n const { actions: initialActions = [] } = options\n\n // State\n const actions = ref<CrudAction<Row>[]>([...initialActions])\n\n // Get actions by area\n function getByArea(area: CrudAction['area']): CrudAction<Row>[] {\n return actions.value\n .filter(a => a.area === area)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n }\n\n // Register a new action\n function register(action: CrudAction<Row>): void {\n const existing = actions.value.findIndex(a => a.id === action.id)\n if (existing >= 0) {\n actions.value[existing] = action\n }\n else {\n actions.value.push(action)\n }\n }\n\n // Unregister an action\n function unregister(id: string): void {\n const idx = actions.value.findIndex(a => a.id === id)\n if (idx >= 0) {\n actions.value.splice(idx, 1)\n }\n }\n\n return {\n actions,\n getByArea,\n register,\n unregister,\n }\n}\n\n// =============================================================================\n// Preset Action Factories\n// =============================================================================\n\nexport interface CreateActionOptions {\n label?: string\n onClick: () => void\n}\n\nexport function createAction(options: CreateActionOptions): CrudAction {\n return {\n id: 'create',\n label: options.label ?? '新增',\n type: 'primary',\n area: 'toolbar',\n order: 0,\n onClick: options.onClick,\n }\n}\n\nexport interface EditActionOptions<Row = any> {\n label?: string\n onClick: (row: Row) => void\n}\n\nexport function editAction<Row = any>(options: EditActionOptions<Row>): CrudAction<Row> {\n return {\n id: 'edit',\n label: options.label ?? '编辑',\n type: 'default',\n area: 'row',\n order: 0,\n onClick: (ctx) => {\n if (ctx.row) {\n options.onClick(ctx.row)\n }\n },\n }\n}\n\nexport interface DeleteActionOptions<Row = any> {\n label?: string\n adapter: CrudAdapter<Row>\n getId?: (row: Row) => string | number\n confirm?: boolean | string\n onSuccess?: () => void\n onError?: (error: unknown) => void\n}\n\nexport function deleteAction<Row = any>(options: DeleteActionOptions<Row>): CrudAction<Row> {\n const { adapter, getId = (row: Row) => (row as any)?.id, confirm = true } = options\n\n return {\n id: 'delete',\n label: options.label ?? '删除',\n type: 'error',\n area: 'row',\n order: 10,\n confirm: confirm === true ? '确定要删除此记录吗?' : confirm,\n onClick: async (ctx) => {\n if (!ctx.row || !adapter.remove)\n return\n\n try {\n const id = getId(ctx.row)\n await adapter.remove(id)\n await ctx.refresh()\n options.onSuccess?.()\n }\n catch (err) {\n options.onError?.(err)\n }\n },\n }\n}\n\nexport interface BatchDeleteActionOptions<Row = any> {\n label?: string\n adapter: CrudAdapter<Row>\n getId?: (row: Row) => string | number\n confirm?: boolean | string\n onSuccess?: () => void\n onError?: (error: unknown) => void\n}\n\nexport function batchDeleteAction<Row = any>(options: BatchDeleteActionOptions<Row>): CrudAction<Row> {\n const { adapter, getId = (row: Row) => (row as any)?.id, confirm = true } = options\n\n return {\n id: 'batchDelete',\n label: options.label ?? '批量删除',\n type: 'error',\n area: 'batch',\n order: 0,\n confirm: confirm === true ? '确定要删除选中的记录吗?' : confirm,\n visible: ctx => ctx.selectedIds.length > 0,\n onClick: async (ctx) => {\n if (!adapter.remove || ctx.selectedIds.length === 0)\n return\n\n try {\n await Promise.all(ctx.selectedIds.map(id => adapter.remove!(id)))\n ctx.clearSelection()\n await ctx.refresh()\n options.onSuccess?.()\n }\n catch (err) {\n options.onError?.(err)\n }\n },\n }\n}\n\nexport interface ExportActionOptions<Row = any> {\n label?: string\n adapter: CrudAdapter<Row>\n filename?: string\n onSuccess?: () => void\n onError?: (error: unknown) => void\n /** UI layer provides download handler */\n handleExport?: (result: any, filename?: string) => void\n}\n\nexport function exportAction<Row = any>(options: ExportActionOptions<Row>): CrudAction<Row> {\n const { adapter } = options\n\n return {\n id: 'export',\n label: options.label ?? '导出',\n type: 'default',\n area: 'toolbar',\n order: 100,\n visible: () => typeof adapter.export === 'function',\n onClick: async (ctx) => {\n if (!adapter.export)\n return\n\n try {\n const query = (ctx.query ?? {}) as any\n const sort = (ctx.sort ?? null) as any\n const result = await adapter.export({\n query,\n sort,\n })\n options.handleExport?.(result, options.filename)\n options.onSuccess?.()\n }\n catch (err) {\n options.onError?.(err)\n }\n },\n }\n}\n\n/**\n * Preset action factories\n */\nexport const presetActions = {\n create: createAction,\n edit: editAction,\n delete: deleteAction,\n batchDelete: batchDeleteAction,\n export: exportAction,\n}\n","import type { CrudField, FieldContext, UseCrudFormOptions, UseCrudFormReturn } from '../types'\nimport { computed, reactive, ref } from 'vue'\n\n/**\n * Core hook for CRUD form state management\n */\nexport function useCrudForm<Row = any>(\n options: UseCrudFormOptions<Row>,\n): UseCrudFormReturn<Row> {\n const { fields, initialData } = options\n\n // State\n const model = reactive<Partial<Row>>({}) as Partial<Row>\n const mode = ref<'create' | 'edit'>('create')\n const initialSnapshot = ref<Partial<Row>>({})\n\n // Initialize model\n function initModel(data?: Partial<Row>): void {\n // Clear existing\n Object.keys(model).forEach((key) => {\n delete (model as Record<string, unknown>)[key]\n })\n // Apply new data\n if (data) {\n Object.assign(model, data)\n }\n // Take snapshot\n initialSnapshot.value = { ...model }\n }\n\n // Initialize with initialData if provided\n if (initialData) {\n initModel(initialData)\n }\n\n // Computed: changed keys\n const changedKeys = computed<string[]>(() => {\n const before = initialSnapshot.value ?? {}\n const after = model as Record<string, unknown>\n const keys = new Set<string>([\n ...Object.keys(before),\n ...Object.keys(after),\n ])\n\n const changed: string[] = []\n keys.forEach((key) => {\n const a = (before as Record<string, unknown>)[key]\n const b = after[key]\n if (a !== b)\n changed.push(key)\n })\n return changed\n })\n\n // Computed: changed data (only changed fields)\n const changedData = computed<Partial<Row>>(() => {\n const after = model as Record<string, unknown>\n const data: Record<string, unknown> = {}\n for (const key of changedKeys.value)\n data[key] = after[key]\n return data as Partial<Row>\n })\n\n // Computed: dirty flag\n const dirty = computed<boolean>(() => changedKeys.value.length > 0)\n\n // Computed: visible fields (filtered by visibleIn.form)\n const visibleFields = computed<CrudField<Row>[]>(() => {\n return fields.filter((field) => {\n const formVisible = field.visibleIn?.form\n if (formVisible === undefined || formVisible === true)\n return true\n if (formVisible === false)\n return false\n if (typeof formVisible === 'function') {\n const ctx: FieldContext<Row, any> = {\n surface: 'form',\n formModel: model,\n }\n return formVisible(ctx as any)\n }\n return true\n })\n })\n\n // Actions\n function reset(data?: Partial<Row>): void {\n initModel(data)\n }\n\n function setMode(newMode: 'create' | 'edit'): void {\n mode.value = newMode\n }\n\n function getSubmitData(): Partial<Row> {\n // create: return full model\n // edit: return only changed data\n if (mode.value === 'create') {\n return { ...model } as Partial<Row>\n }\n return changedData.value\n }\n\n return {\n model: model as UseCrudFormReturn<Row>['model'],\n mode,\n dirty,\n changedKeys,\n changedData,\n visibleFields,\n reset,\n setMode,\n getSubmitData,\n }\n}\n","import type { CrudSort, SetQueryOptions, UseCrudListOptions, UseCrudListReturn } from '../types'\nimport { onScopeDispose, ref, shallowRef, watch } from 'vue'\n\n/**\n * Core hook for CRUD list operations - handles pagination, sorting, query, and data fetching\n */\nexport function useCrudList<Row = any, Query extends object = Record<string, unknown>>(\n options: UseCrudListOptions<Row, Query>,\n): UseCrudListReturn<Row, Query> {\n const {\n adapter,\n initialQuery,\n initialPage = 1,\n initialPageSize = 20,\n autoFetch = true,\n debounceMs = 0,\n dedupe = true,\n onError,\n } = options\n\n // State\n const rows = shallowRef<Row[]>([])\n const total = ref(0)\n const loading = ref(false)\n const error = ref<unknown>(null)\n const query = shallowRef<Query>((initialQuery ?? {}) as Query)\n const sort = shallowRef<CrudSort | null>(null)\n const page = ref(initialPage)\n const pageSize = ref(initialPageSize)\n\n // Internal state for deduplication and abort\n let fetchTimer: ReturnType<typeof setTimeout> | null = null\n let requestSeq = 0\n let activeSeq = 0\n let lastKey: string | null = null\n let activeKey: string | null = null\n let abortController: AbortController | null = null\n\n function buildKey(): string | null {\n try {\n return JSON.stringify({\n page: page.value,\n pageSize: pageSize.value,\n query: query.value,\n sort: sort.value,\n })\n }\n catch {\n // Unstringifiable query (e.g. BigInt/circular refs) should not break list fetching.\n // Fallback: disable dedupe for this round.\n return null\n }\n }\n\n function isAbortError(err: unknown): boolean {\n if (!err || typeof err !== 'object')\n return false\n const obj = err as Record<string, unknown>\n return obj.name === 'AbortError' || obj.code === 'ABORT_ERR'\n }\n\n function isPlainObject(value: unknown): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === '[object Object]'\n }\n\n function pruneEmptyDeep<T>(value: T): T | undefined {\n if (value === undefined || value === null)\n return undefined\n if (typeof value === 'string' && value === '')\n return undefined\n\n if (Array.isArray(value)) {\n const next = value\n .map(v => pruneEmptyDeep(v))\n .filter(v => v !== undefined) as unknown as T\n return (next as unknown as unknown[]).length === 0 ? undefined : next\n }\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n const pv = pruneEmptyDeep(v)\n if (pv !== undefined)\n out[k] = pv\n }\n return Object.keys(out).length === 0 ? undefined : (out as T)\n }\n\n return value\n }\n\n async function fetchList(opts?: { force?: boolean }): Promise<void> {\n if (!adapter || typeof adapter.list !== 'function')\n return\n\n const force = Boolean(opts?.force)\n const key = buildKey()\n\n if (!force && dedupe && key) {\n if (key === lastKey || key === activeKey)\n return\n }\n\n // Cancel previous request\n if (abortController) {\n try {\n abortController.abort()\n }\n catch {\n // ignore\n }\n }\n abortController = typeof AbortController !== 'undefined' ? new AbortController() : null\n\n activeKey = key\n const seq = (requestSeq += 1)\n activeSeq = seq\n\n loading.value = true\n error.value = null\n\n try {\n const result = await adapter.list({\n page: page.value,\n pageSize: pageSize.value,\n query: query.value,\n sort: sort.value,\n signal: abortController?.signal,\n })\n\n // Stale response: ignore\n if (seq !== activeSeq)\n return\n\n rows.value = result.items\n total.value = result.total\n if (key)\n lastKey = key\n }\n catch (err) {\n if (isAbortError(err))\n return\n if (seq !== activeSeq)\n return\n\n error.value = err\n if (onError)\n onError(err)\n }\n finally {\n if (seq === activeSeq) {\n loading.value = false\n activeKey = null\n }\n }\n }\n\n function scheduleFetch(): void {\n if (!autoFetch)\n return\n\n if (fetchTimer) {\n clearTimeout(fetchTimer)\n fetchTimer = null\n }\n\n if (debounceMs > 0) {\n fetchTimer = setTimeout(() => {\n fetchTimer = null\n void fetchList({ force: false })\n }, debounceMs)\n return\n }\n\n void fetchList({ force: false })\n }\n\n // Auto-fetch on state changes\n watch([query, sort, page, pageSize], () => {\n scheduleFetch()\n }, { deep: false })\n\n // Actions\n function setQuery(partial: Partial<Query>, options?: SetQueryOptions): void {\n const mode = options?.mode ?? 'merge'\n const clearKeys = options?.clearKeys ?? []\n const shouldPrune = Boolean(options?.pruneEmpty)\n\n const base = mode === 'replace'\n ? {}\n : ({ ...(query.value as any) } as Record<string, unknown>)\n\n for (const k of clearKeys)\n delete base[k]\n\n const merged = mode === 'replace'\n ? ({ ...(partial as any) } as Record<string, unknown>)\n : ({ ...base, ...(partial as any) } as Record<string, unknown>)\n\n const next = shouldPrune ? (pruneEmptyDeep(merged) ?? {}) : merged\n query.value = next as Query\n page.value = 1\n }\n\n function setPage(nextPage: number): void {\n if (nextPage <= 0)\n return\n page.value = nextPage\n }\n\n function setPageSize(size: number): void {\n if (size <= 0)\n return\n pageSize.value = size\n page.value = 1\n }\n\n function setSort(nextSort: CrudSort | null): void {\n sort.value = nextSort\n page.value = 1\n }\n\n function reset(): void {\n query.value = (initialQuery ?? {}) as Query\n sort.value = null\n page.value = initialPage\n pageSize.value = initialPageSize\n void fetchList({ force: true })\n }\n\n async function refresh(): Promise<void> {\n await fetchList({ force: true })\n }\n\n // Initial fetch (if enabled)\n scheduleFetch()\n\n // Cleanup on scope dispose (component unmount / effect stop)\n onScopeDispose(() => {\n if (fetchTimer) {\n clearTimeout(fetchTimer)\n fetchTimer = null\n }\n if (abortController) {\n try {\n abortController.abort()\n }\n catch {\n // ignore\n }\n abortController = null\n }\n activeSeq = 0\n activeKey = null\n })\n\n return {\n // State\n rows: rows as UseCrudListReturn<Row, Query>['rows'],\n total,\n loading,\n error,\n query: query as UseCrudListReturn<Row, Query>['query'],\n sort,\n page,\n pageSize,\n // Actions\n refresh,\n setQuery,\n setPage,\n setPageSize,\n setSort,\n reset,\n }\n}\n","import type { Ref } from 'vue'\nimport type { SetQueryOptions } from '../types'\nimport { onScopeDispose, watch } from 'vue'\n\nexport interface UseCrudRouteSyncOptions<Query = Record<string, unknown>> {\n /** Query ref from useCrudList */\n query: Ref<Query>\n /** Set query function from useCrudList */\n setQuery: (partial: Partial<Query>, options?: SetQueryOptions) => void\n /** Router instance (vue-router) */\n router?: any\n /** Route instance (vue-router) */\n route?: any\n /** Query key in URL (default: 'q') */\n queryKey?: string\n /** Serialize query to string (default: JSON.stringify) */\n serialize?: (query: Query) => string\n /** Deserialize string to query (default: JSON.parse) */\n deserialize?: (str: string) => Partial<Query>\n /** Debounce delay in ms (default: 300) */\n debounceMs?: number\n /**\n * How to apply query when syncing from route (default: 'replace')\n * - replace: URL is the source of truth (prevents stale keys from lingering)\n * - merge: merge into current query\n */\n syncFromRouteMode?: 'replace' | 'merge'\n}\n\n/**\n * Sync CRUD query with URL route query\n */\nexport function useCrudRouteSync<Query = Record<string, unknown>>(\n options: UseCrudRouteSyncOptions<Query>,\n): { syncFromRoute: () => void, syncToRoute: () => void } {\n const {\n query,\n setQuery,\n router,\n route,\n queryKey = 'q',\n serialize = (q: Query) => JSON.stringify(q),\n deserialize = (s: string) => JSON.parse(s) as Partial<Query>,\n debounceMs = 300,\n syncFromRouteMode = 'replace',\n } = options\n\n let syncTimer: ReturnType<typeof setTimeout> | null = null\n let isSyncingFromRoute = false\n let releaseSyncTimer: ReturnType<typeof setTimeout> | null = null\n\n function isPlainObject(value: unknown): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === '[object Object]'\n }\n\n function pruneEmptyDeep<T>(value: T): T | undefined {\n if (value === undefined || value === null)\n return undefined\n if (typeof value === 'string' && value === '')\n return undefined\n\n if (Array.isArray(value)) {\n const next = value\n .map(v => pruneEmptyDeep(v))\n .filter(v => v !== undefined) as unknown as T\n return (next as unknown as unknown[]).length === 0 ? undefined : next\n }\n\n if (isPlainObject(value)) {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n const pv = pruneEmptyDeep(v)\n if (pv !== undefined)\n out[k] = pv\n }\n return Object.keys(out).length === 0 ? undefined : (out as T)\n }\n\n return value\n }\n\n // Sync query from route to list\n function syncFromRoute(): void {\n if (!route)\n return\n\n const raw = route.query?.[queryKey]\n if (!raw || typeof raw !== 'string')\n return\n\n try {\n isSyncingFromRoute = true\n const parsed = deserialize(raw)\n if (parsed && typeof parsed === 'object') {\n setQuery(parsed, {\n mode: syncFromRouteMode,\n pruneEmpty: true,\n })\n }\n }\n catch {\n // Invalid query string, ignore\n }\n finally {\n if (releaseSyncTimer)\n clearTimeout(releaseSyncTimer)\n releaseSyncTimer = setTimeout(() => {\n releaseSyncTimer = null\n isSyncingFromRoute = false\n }, 0)\n }\n }\n\n // Sync query from list to route\n function syncToRoute(): void {\n if (!router || !route || isSyncingFromRoute)\n return\n\n const currentQuery = query.value\n const normalized = pruneEmptyDeep(currentQuery as any) as any\n const isEmpty = normalized === undefined\n || (isPlainObject(normalized) && Object.keys(normalized).length === 0)\n\n const newRouteQuery = { ...route.query }\n\n if (isEmpty) {\n delete newRouteQuery[queryKey]\n }\n else {\n newRouteQuery[queryKey] = serialize(normalized)\n }\n\n // Only update if changed\n const currentStr = route.query?.[queryKey] ?? ''\n const newStr = newRouteQuery[queryKey] ?? ''\n if (currentStr !== newStr) {\n void Promise.resolve(router.replace({ query: newRouteQuery })).catch(() => {})\n }\n }\n\n // Watch query changes and sync to route with debounce\n watch(\n query,\n () => {\n if (isSyncingFromRoute)\n return\n\n if (syncTimer) {\n clearTimeout(syncTimer)\n }\n\n syncTimer = setTimeout(() => {\n syncTimer = null\n syncToRoute()\n }, debounceMs)\n },\n { deep: true },\n )\n\n // Initial sync from route\n if (route) {\n syncFromRoute()\n }\n\n onScopeDispose(() => {\n if (syncTimer) {\n clearTimeout(syncTimer)\n syncTimer = null\n }\n if (releaseSyncTimer) {\n clearTimeout(releaseSyncTimer)\n releaseSyncTimer = null\n }\n })\n\n return {\n syncFromRoute,\n syncToRoute,\n }\n}\n","import type { UseCrudSelectionOptions, UseCrudSelectionReturn } from '../types'\nimport { computed, shallowRef, watch } from 'vue'\n\n/**\n * Core hook for CRUD selection management\n */\nexport function useCrudSelection<Row = any>(\n options: UseCrudSelectionOptions<Row>,\n): UseCrudSelectionReturn<Row> {\n const { rows, getId = (row: Row) => (row as any)?.id } = options\n\n // State\n const selectedIds = shallowRef<Set<string | number>>(new Set())\n const selectedRowMap = shallowRef<Map<string | number, Row>>(new Map())\n\n // Computed: selected rows\n const selectedRows = computed<Row[]>(() => {\n const ids = selectedIds.value\n const map = selectedRowMap.value\n const result: Row[] = []\n ids.forEach((id) => {\n const row = map.get(id)\n if (row !== undefined)\n result.push(row)\n })\n return result\n })\n\n // Computed: selected count\n const selectedCount = computed<number>(() => selectedIds.value.size)\n\n function syncCacheFromRows(nextRows: Row[]): void {\n const ids = selectedIds.value\n if (ids.size === 0)\n return\n const map = new Map(selectedRowMap.value)\n for (const row of nextRows) {\n const id = getId(row)\n if (ids.has(id))\n map.set(id, row)\n }\n selectedRowMap.value = map\n }\n\n // Keep cache updated with latest row objects on each page\n watch(\n rows,\n (newRows) => {\n syncCacheFromRows(newRows)\n },\n { immediate: true },\n )\n\n // Keep cache in sync when selectedIds is replaced externally\n watch(\n selectedIds,\n (next) => {\n const map = new Map(selectedRowMap.value)\n for (const id of map.keys()) {\n if (!next.has(id))\n map.delete(id)\n }\n selectedRowMap.value = map\n syncCacheFromRows(rows.value)\n },\n { deep: false },\n )\n\n // Actions\n function setSelectedIds(ids: (string | number)[]): void {\n selectedIds.value = new Set(ids)\n }\n\n function select(id: string | number): void {\n const newSet = new Set(selectedIds.value)\n newSet.add(id)\n selectedIds.value = newSet\n\n // Cache row snapshot if it exists on current page\n const row = rows.value.find(r => getId(r) === id)\n if (row !== undefined) {\n const map = new Map(selectedRowMap.value)\n map.set(id, row)\n selectedRowMap.value = map\n }\n }\n\n function deselect(id: string | number): void {\n const newSet = new Set(selectedIds.value)\n newSet.delete(id)\n selectedIds.value = newSet\n\n const map = new Map(selectedRowMap.value)\n map.delete(id)\n selectedRowMap.value = map\n }\n\n function toggle(id: string | number): void {\n if (selectedIds.value.has(id)) {\n deselect(id)\n }\n else {\n select(id)\n }\n }\n\n function selectAll(): void {\n const map = new Map(selectedRowMap.value)\n const allIds: Array<string | number> = []\n for (const row of rows.value) {\n const id = getId(row)\n allIds.push(id)\n map.set(id, row)\n }\n selectedIds.value = new Set(allIds)\n selectedRowMap.value = map\n }\n\n function clear(): void {\n selectedIds.value = new Set()\n selectedRowMap.value = new Map()\n }\n\n function isSelected(id: string | number): boolean {\n return selectedIds.value.has(id)\n }\n\n return {\n selectedIds,\n selectedRows,\n selectedCount,\n setSelectedIds,\n select,\n deselect,\n toggle,\n selectAll,\n clear,\n isSelected,\n }\n}\n","import type { CrudField, FieldContext } from '../types'\n\n/**\n * Define fields with type inference\n */\nexport function defineFields<\n Row = any,\n FormModel = Row,\n const Fields extends CrudField<Row, FormModel>[] = CrudField<Row, FormModel>[],\n>(fields: Fields): Fields {\n return fields\n}\n\n/**\n * Filter fields by surface visibility\n */\nexport function filterFieldsBySurface<Row = any, FormModel = Row>(\n fields: CrudField<Row, FormModel>[],\n surface: FieldContext['surface'],\n ctx?: Partial<FieldContext<Row, FormModel>>,\n): CrudField<Row, FormModel>[] {\n return fields.filter((field) => {\n const visibility = field.visibleIn?.[surface]\n\n if (visibility === undefined || visibility === true)\n return true\n if (visibility === false)\n return false\n\n if (typeof visibility === 'function') {\n const fullCtx: FieldContext<Row, FormModel> = {\n surface,\n row: ctx?.row,\n formModel: ctx?.formModel,\n query: ctx?.query,\n }\n return visibility(fullCtx)\n }\n\n return true\n })\n}\n\n/**\n * Get field label (resolve function if needed)\n */\nexport function getFieldLabel(field: CrudField): string {\n if (typeof field.label === 'function') {\n return field.label()\n }\n return field.label\n}\n","import type { CrudColumn, CrudField } from '../types'\nimport { getFieldLabel } from './fields'\n\n/**\n * Define columns with type inference\n */\nexport function defineColumns<\n Row = any,\n const Columns extends CrudColumn<Row>[] = CrudColumn<Row>[],\n>(columns: Columns): Columns {\n return columns\n}\n\n/**\n * Create columns from fields with optional overrides\n */\nexport function createColumnsFromFields<Row = any>(\n fields: CrudField<Row>[],\n options?: {\n overrides?: Partial<Record<string, Partial<CrudColumn<Row>>>>\n defaults?: Partial<CrudColumn<Row>>\n filter?: (field: CrudField<Row>) => boolean\n },\n): CrudColumn<Row>[] {\n const { overrides = {}, defaults = {}, filter } = options ?? {}\n\n const visibleFields = filter\n ? fields.filter(filter)\n : fields.filter((f) => {\n const tableVisible = f.visibleIn?.table\n return tableVisible !== false\n })\n\n return visibleFields.map((field) => {\n const override = overrides[field.key] ?? {}\n return {\n key: field.key,\n label: () => getFieldLabel(field),\n ...defaults,\n ...override,\n }\n })\n}\n"]}
|