@asteby/metacore-runtime-react 34.0.1 → 34.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/CHANGELOG.md +12 -0
- package/dist/dialogs/dynamic-record.d.ts.map +1 -1
- package/dist/dialogs/dynamic-record.js +19 -2
- package/dist/dialogs/import.d.ts.map +1 -1
- package/dist/dialogs/import.js +6 -10
- package/dist/display-value.d.ts +23 -0
- package/dist/display-value.d.ts.map +1 -1
- package/dist/display-value.js +34 -1
- package/dist/dynamic-columns.d.ts +3 -0
- package/dist/dynamic-columns.d.ts.map +1 -1
- package/dist/dynamic-columns.js +36 -6
- package/dist/dynamic-select-field.d.ts.map +1 -1
- package/dist/dynamic-select-field.js +2 -6
- package/dist/dynamic-table.d.ts.map +1 -1
- package/dist/dynamic-table.js +10 -7
- package/dist/file-pick-button.d.ts +21 -0
- package/dist/file-pick-button.d.ts.map +1 -0
- package/dist/file-pick-button.js +39 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/metadata-cache.d.ts.map +1 -1
- package/dist/metadata-cache.js +8 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/upload-field.d.ts.map +1 -1
- package/dist/upload-field.js +27 -32
- package/dist/use-debounced-value.d.ts +8 -0
- package/dist/use-debounced-value.d.ts.map +1 -0
- package/dist/use-debounced-value.js +15 -0
- package/dist/use-dynamic-filters.d.ts.map +1 -1
- package/dist/use-dynamic-filters.js +6 -4
- package/package.json +1 -1
- package/src/__tests__/image-stack.test.tsx +52 -0
- package/src/__tests__/use-debounced-value.test.ts +56 -0
- package/src/dialogs/dynamic-record.tsx +43 -1
- package/src/dialogs/import.tsx +9 -15
- package/src/display-value.tsx +82 -4
- package/src/dynamic-columns.tsx +79 -6
- package/src/dynamic-select-field.tsx +2 -6
- package/src/dynamic-table.tsx +9 -6
- package/src/file-pick-button.tsx +125 -0
- package/src/index.ts +11 -0
- package/src/metadata-cache.ts +8 -1
- package/src/types.ts +2 -0
- package/src/upload-field.tsx +41 -71
- package/src/use-debounced-value.ts +17 -0
- package/src/use-dynamic-filters.ts +6 -4
package/dist/index.js
CHANGED
|
@@ -17,7 +17,9 @@ export { useStageLayout, } from './stage-layout';
|
|
|
17
17
|
export { useStageOverrides, } from './stage-overrides';
|
|
18
18
|
export { DynamicView, resolveViewRenderer, readViewFromSearch, resolveActiveView, } from './dynamic-view';
|
|
19
19
|
export { useDynamicFilters, } from './use-dynamic-filters';
|
|
20
|
+
export { useDebouncedValue, SEARCH_DEBOUNCE_MS } from './use-debounced-value';
|
|
20
21
|
export * from './dynamic-form';
|
|
22
|
+
export { FilePickButton, } from './file-pick-button';
|
|
21
23
|
export * from './barcode-scanner';
|
|
22
24
|
export * from './form-layout';
|
|
23
25
|
export * from './form-layout-ui';
|
|
@@ -49,6 +51,7 @@ export * from './dynamic-icon';
|
|
|
49
51
|
export { defaultGetDynamicColumns, makeDefaultGetDynamicColumns, relationKeyFor, resolveAvatarSrc, resolveMissingActorLabel, resolveActorDisplayName, resolveRelationLabel, } from './dynamic-columns';
|
|
50
52
|
export { humanizeToken } from './dynamic-columns-helpers';
|
|
51
53
|
export { UrlChip, FileChip, ImageThumbnail, MediaValue, RichText, linkifyText, classifyUrl, isImageUrl, isFileUrl, ensureHref, smartUrlLabel, fileNameFromUrl, splitTrailingPunct, } from './rich-url';
|
|
54
|
+
export { ImageStack, OptionBadge, statusColorFor, useIsDarkTheme, } from './display-value';
|
|
52
55
|
export { CollectionCell, formatScalar, prettifyKey, countLabel, } from './collection-cell';
|
|
53
56
|
export { NIL_UUID, isNilUuid, normalizeNilUuid } from './nil-uuid';
|
|
54
57
|
export { DynamicRecordDialog, ViewValue } from './dialogs/dynamic-record';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-cache.d.ts","sourceRoot":"","sources":["../src/metadata-cache.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;CAC7D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;AAE7E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQlF;AAED,UAAU,kBAAkB;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACzC,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAA;IACvD,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAA;IAC5D,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3D,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;IAChE,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD;;;;;;;;;;;;;OAaG;IACH,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,MAAM,CAAA;IACxE;;;OAGG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"metadata-cache.d.ts","sourceRoot":"","sources":["../src/metadata-cache.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAC9B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;CAC7D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;AAE7E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQlF;AAED,UAAU,kBAAkB;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACzC,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAA;IACvD,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAA;IAC5D,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3D,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;IAChE,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD;;;;;;;;;;;;;OAaG;IACH,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,MAAM,CAAA;IACxE;;;OAGG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;EAwH5B,CAAA"}
|
package/dist/metadata-cache.js
CHANGED
|
@@ -117,7 +117,14 @@ export const useMetadataCache = create()(persist((set, get) => ({
|
|
|
117
117
|
},
|
|
118
118
|
}), {
|
|
119
119
|
name: 'metacore-metadata-cache',
|
|
120
|
-
|
|
120
|
+
// Bump when display hints (e.g. image_stack) must wipe stale cache.
|
|
121
|
+
version: 4,
|
|
122
|
+
migrate: () => ({
|
|
123
|
+
cache: {},
|
|
124
|
+
modalCache: {},
|
|
125
|
+
metadataVersion: '',
|
|
126
|
+
prefetched: false,
|
|
127
|
+
}),
|
|
121
128
|
partialize: (state) => ({
|
|
122
129
|
cache: state.cache,
|
|
123
130
|
modalCache: state.modalCache,
|
package/dist/types.d.ts
CHANGED
|
@@ -240,7 +240,7 @@ export type ColumnVisibility = 'all' | 'table' | 'modal' | 'list' | (string & {}
|
|
|
240
240
|
export interface ColumnDefinition {
|
|
241
241
|
key: string;
|
|
242
242
|
label: string;
|
|
243
|
-
type: 'text' | 'number' | 'date' | 'datetime' | 'timestamp' | 'timestamptz' | 'select' | 'search' | 'relation-badge-list' | 'avatar' | 'boolean' | 'phone' | 'media-gallery' | 'image' | 'url' | 'link' | 'email' | 'currency' | 'percent' | 'progress' | 'badge' | 'status' | 'tags' | 'color' | 'code' | 'truncate-text' | 'creator' | 'user' | 'relation';
|
|
243
|
+
type: 'text' | 'number' | 'date' | 'datetime' | 'timestamp' | 'timestamptz' | 'select' | 'search' | 'relation-badge-list' | 'avatar' | 'boolean' | 'phone' | 'media-gallery' | 'image' | 'image_stack' | 'url' | 'link' | 'email' | 'currency' | 'percent' | 'progress' | 'badge' | 'status' | 'tags' | 'color' | 'code' | 'truncate-text' | 'creator' | 'user' | 'relation';
|
|
244
244
|
sortable: boolean;
|
|
245
245
|
filterable: boolean;
|
|
246
246
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-field.d.ts","sourceRoot":"","sources":["../src/upload-field.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,GAAG,CAAA;IACV,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAC7B;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAWzD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK1D;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+
|
|
1
|
+
{"version":3,"file":"upload-field.d.ts","sourceRoot":"","sources":["../src/upload-field.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,GAAG,CAAA;IACV,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAC7B;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAWzD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK1D;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BA2FvE"}
|
package/dist/upload-field.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// UploadField — the `upload` widget renderer shared by DynamicForm's
|
|
3
3
|
// FieldRenderer and the action-modal-dispatcher's renderField so the two stay
|
|
4
|
-
// in lockstep. Renders a
|
|
5
|
-
// POSTs the picked file to the host upload endpoint as
|
|
6
|
-
// stores the returned file url/path as the field value.
|
|
4
|
+
// in lockstep. Renders a locale-aware FilePickButton that proxies a hidden
|
|
5
|
+
// <input type=file>, POSTs the picked file to the host upload endpoint as
|
|
6
|
+
// multipart/form-data, and stores the returned file url/path as the field value.
|
|
7
7
|
//
|
|
8
8
|
// Endpoint assumption: `POST /uploads` (multipart) returning
|
|
9
9
|
// { success: true, data: { file_url?, url?, path?, file_path? } }
|
|
@@ -11,11 +11,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
11
11
|
// `field.searchEndpoint` (reused as the upload endpoint escape hatch) — kept
|
|
12
12
|
// generic so this carries no host-specific route. Honors field.accept /
|
|
13
13
|
// field.maxSize and forwards field.storagePath as `storage_path`.
|
|
14
|
-
import { useCallback,
|
|
15
|
-
import {
|
|
16
|
-
import { Loader2, Paperclip, X } from 'lucide-react';
|
|
17
|
-
import { useApi } from './api-context';
|
|
14
|
+
import { useCallback, useState } from 'react';
|
|
15
|
+
import { useTranslation } from 'react-i18next';
|
|
18
16
|
import { getUploadConfig } from './dynamic-form-schema';
|
|
17
|
+
import { FilePickButton } from './file-pick-button';
|
|
18
|
+
import { useApi } from './api-context';
|
|
19
19
|
/** Default host upload endpoint. Overridable per-field via `searchEndpoint`. */
|
|
20
20
|
const DEFAULT_UPLOAD_ENDPOINT = '/upload';
|
|
21
21
|
/**
|
|
@@ -46,28 +46,26 @@ export function uploadedDisplayName(value) {
|
|
|
46
46
|
return parts[parts.length - 1] || cleaned;
|
|
47
47
|
}
|
|
48
48
|
export function UploadField({ field, value, onChange }) {
|
|
49
|
+
const { t } = useTranslation();
|
|
49
50
|
const api = useApi();
|
|
50
|
-
const inputRef = useRef(null);
|
|
51
51
|
const [uploading, setUploading] = useState(false);
|
|
52
52
|
const [error, setError] = useState(null);
|
|
53
53
|
const { accept, maxSize, storagePath } = getUploadConfig(field);
|
|
54
54
|
const endpoint = field.searchEndpoint || DEFAULT_UPLOAD_ENDPOINT;
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const handleFile = useCallback(async (e) => {
|
|
61
|
-
const file = e.target.files?.[0];
|
|
62
|
-
// Reset the input so picking the same file again re-fires change.
|
|
63
|
-
if (inputRef.current)
|
|
64
|
-
inputRef.current.value = '';
|
|
65
|
-
if (!file)
|
|
55
|
+
const hasValue = typeof value === 'string' && value !== '';
|
|
56
|
+
const handleFile = useCallback(async (file) => {
|
|
57
|
+
if (!file) {
|
|
58
|
+
setError(null);
|
|
59
|
+
onChange('');
|
|
66
60
|
return;
|
|
61
|
+
}
|
|
67
62
|
setError(null);
|
|
68
63
|
if (maxSize && file.size > maxSize) {
|
|
69
64
|
const mb = (maxSize / (1024 * 1024)).toFixed(1);
|
|
70
|
-
setError(
|
|
65
|
+
setError(t('common.upload.too_large', {
|
|
66
|
+
mb,
|
|
67
|
+
defaultValue: `File too large (max {{mb}} MB).`,
|
|
68
|
+
}));
|
|
71
69
|
return;
|
|
72
70
|
}
|
|
73
71
|
const form = new FormData();
|
|
@@ -87,29 +85,26 @@ export function UploadField({ field, value, onChange }) {
|
|
|
87
85
|
});
|
|
88
86
|
const body = res?.data;
|
|
89
87
|
if (body && body.success === false) {
|
|
90
|
-
setError(body.message ||
|
|
88
|
+
setError(body.message ||
|
|
89
|
+
t('common.upload.failed', { defaultValue: 'Could not upload the file.' }));
|
|
91
90
|
return;
|
|
92
91
|
}
|
|
93
92
|
const stored = extractUploadedValue(body);
|
|
94
93
|
if (!stored) {
|
|
95
|
-
setError('
|
|
94
|
+
setError(t('common.upload.invalid', {
|
|
95
|
+
defaultValue: 'Invalid upload response.',
|
|
96
|
+
}));
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
onChange(stored);
|
|
99
100
|
}
|
|
100
101
|
catch (err) {
|
|
101
|
-
setError(err?.response?.data?.message ||
|
|
102
|
+
setError(err?.response?.data?.message ||
|
|
103
|
+
t('common.upload.failed', { defaultValue: 'Could not upload the file.' }));
|
|
102
104
|
}
|
|
103
105
|
finally {
|
|
104
106
|
setUploading(false);
|
|
105
107
|
}
|
|
106
|
-
}, [api, endpoint, maxSize, storagePath, onChange]);
|
|
107
|
-
|
|
108
|
-
if (uploading)
|
|
109
|
-
return;
|
|
110
|
-
setError(null);
|
|
111
|
-
onChange('');
|
|
112
|
-
}, [uploading, onChange]);
|
|
113
|
-
const hasValue = typeof value === 'string' && value !== '';
|
|
114
|
-
return (_jsxs("div", { className: "grid gap-1.5", "data-widget": "upload", children: [_jsx("input", { ref: inputRef, id: field.key, type: "file", accept: accept, className: "sr-only", onChange: handleFile, tabIndex: -1, "aria-hidden": "true" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: handlePick, disabled: uploading, children: [uploading ? (_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(Paperclip, { className: "mr-2 h-4 w-4" })), hasValue ? 'Reemplazar' : field.placeholder || 'Subir archivo'] }), hasValue && !uploading && (_jsxs("div", { className: "flex min-w-0 items-center gap-1 text-sm text-muted-foreground", children: [_jsx("span", { className: "truncate", title: String(value), children: uploadedDisplayName(value) }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-6 w-6 p-0", onClick: handleClear, "aria-label": "Quitar archivo", children: _jsx(X, { className: "h-3.5 w-3.5" }) })] }))] }), error && (_jsx("span", { className: "text-sm text-destructive", role: "alert", children: error }))] }));
|
|
108
|
+
}, [api, endpoint, maxSize, storagePath, onChange, t]);
|
|
109
|
+
return (_jsxs("div", { className: "grid gap-1.5", "data-widget": "upload", children: [_jsx(FilePickButton, { id: field.key, accept: accept, loading: uploading, hasFile: hasValue, fileName: hasValue ? uploadedDisplayName(value) : undefined, onFile: (f) => void handleFile(f), pickLabel: field.placeholder || undefined }), error && (_jsx("span", { className: "text-sm text-destructive", role: "alert", children: error }))] }));
|
|
115
110
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Default delay for free-text search → server/URL (table, kanban, relation). */
|
|
2
|
+
export declare const SEARCH_DEBOUNCE_MS = 350;
|
|
3
|
+
/**
|
|
4
|
+
* Returns `value` delayed by `ms`. The input stays live; only the returned
|
|
5
|
+
* value lags — use it for fetches and URL sync so typing does not thrash.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useDebouncedValue<T>(value: T, ms?: number): T;
|
|
8
|
+
//# sourceMappingURL=use-debounced-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-debounced-value.d.ts","sourceRoot":"","sources":["../src/use-debounced-value.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,MAAM,CAAA;AAErC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAE,MAA2B,GAAG,CAAC,CAOjF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
/** Default delay for free-text search → server/URL (table, kanban, relation). */
|
|
3
|
+
export const SEARCH_DEBOUNCE_MS = 350;
|
|
4
|
+
/**
|
|
5
|
+
* Returns `value` delayed by `ms`. The input stays live; only the returned
|
|
6
|
+
* value lags — use it for fetches and URL sync so typing does not thrash.
|
|
7
|
+
*/
|
|
8
|
+
export function useDebouncedValue(value, ms = SEARCH_DEBOUNCE_MS) {
|
|
9
|
+
const [debounced, setDebounced] = useState(value);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const t = setTimeout(() => setDebounced(value), ms);
|
|
12
|
+
return () => clearTimeout(t);
|
|
13
|
+
}, [value, ms]);
|
|
14
|
+
return debounced;
|
|
15
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-dynamic-filters.d.ts","sourceRoot":"","sources":["../src/use-dynamic-filters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-dynamic-filters.d.ts","sourceRoot":"","sources":["../src/use-dynamic-filters.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,wBAAwB,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACxC,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,iFAAiF;IACjF,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACpD;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,uDAAuD;IACvD,yBAAyB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACxE,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAA;IACzB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,IAAI,GAAE,wBAA6B,GAClC,uBAAuB,CA0TzB"}
|
|
@@ -14,6 +14,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
14
14
|
import { useApi } from './api-context';
|
|
15
15
|
import { DATE_CELL_TYPES } from './dynamic-columns';
|
|
16
16
|
import { getSearchableColumnKeys } from './column-visibility';
|
|
17
|
+
import { useDebouncedValue } from './use-debounced-value';
|
|
17
18
|
import { useFacetLoaders, isLongTextColumn } from './use-facet-loaders';
|
|
18
19
|
/**
|
|
19
20
|
* Reads the model's filter metadata and returns the live filter state + the
|
|
@@ -26,6 +27,7 @@ export function useDynamicFilters(metadata, opts = {}) {
|
|
|
26
27
|
const api = useApi();
|
|
27
28
|
const [dynamicFilters, setDynamicFilters] = useState({});
|
|
28
29
|
const [globalFilter, setGlobalFilter] = useState('');
|
|
30
|
+
const debouncedGlobalFilter = useDebouncedValue(globalFilter);
|
|
29
31
|
const [filterOptionsMap, setFilterOptionsMap] = useState(new Map());
|
|
30
32
|
// Where a `facet` filter loads its distinct values from. Explicit override
|
|
31
33
|
// wins; otherwise `<endpoint>/facets` (same derivation as the aggregate
|
|
@@ -268,12 +270,12 @@ export function useDynamicFilters(metadata, opts = {}) {
|
|
|
268
270
|
// DynamicTable.buildFilterParams (IN:/RANGE:/GTE:/LTE:/ILIKE:/plain).
|
|
269
271
|
const filterParams = useMemo(() => {
|
|
270
272
|
const params = {};
|
|
271
|
-
if (
|
|
273
|
+
if (debouncedGlobalFilter) {
|
|
272
274
|
if (searchableKeys === null) {
|
|
273
|
-
params.search =
|
|
275
|
+
params.search = debouncedGlobalFilter;
|
|
274
276
|
}
|
|
275
277
|
else if (searchableKeys.length > 0) {
|
|
276
|
-
params.search =
|
|
278
|
+
params.search = debouncedGlobalFilter;
|
|
277
279
|
params.search_columns = searchableKeys.join(',');
|
|
278
280
|
}
|
|
279
281
|
// searchableKeys === [] → no searchable column, skip the search param.
|
|
@@ -300,7 +302,7 @@ export function useDynamicFilters(metadata, opts = {}) {
|
|
|
300
302
|
params[`f_${key}`] = `IN:${values.join(',')}`;
|
|
301
303
|
});
|
|
302
304
|
return params;
|
|
303
|
-
}, [
|
|
305
|
+
}, [debouncedGlobalFilter, searchableKeys, defaultFilters, dynamicFilters]);
|
|
304
306
|
const activeFilterCount = useMemo(() => {
|
|
305
307
|
let n = Object.values(dynamicFilters).filter((v) => v.length > 0).length;
|
|
306
308
|
if (globalFilter)
|
package/package.json
CHANGED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
|
|
3
|
+
import { afterEach, describe, expect, it } from 'vitest'
|
|
4
|
+
import { cleanup, render } from '@testing-library/react'
|
|
5
|
+
import { ImageStack } from '../display-value'
|
|
6
|
+
import { ImageCell } from '../dynamic-columns'
|
|
7
|
+
|
|
8
|
+
afterEach(cleanup)
|
|
9
|
+
|
|
10
|
+
describe('ImageStack', () => {
|
|
11
|
+
it('renders landscape mark with label underneath and no padded plate', () => {
|
|
12
|
+
const { container, getByText } = render(
|
|
13
|
+
<ImageStack src="/brands/bridgestone.png" label="BRIDGESTONE" size="sm" />,
|
|
14
|
+
)
|
|
15
|
+
const img = container.querySelector('img')
|
|
16
|
+
expect(img).toBeTruthy()
|
|
17
|
+
expect(img?.getAttribute('src')).toBe('/brands/bridgestone.png')
|
|
18
|
+
expect(img?.className).toContain('object-contain')
|
|
19
|
+
expect(getByText('BRIDGESTONE')).toBeTruthy()
|
|
20
|
+
// Label comes after the image in DOM order (stack, not side-by-side).
|
|
21
|
+
const root = container.firstElementChild as HTMLElement
|
|
22
|
+
expect(root.className).toContain('flex-col')
|
|
23
|
+
// No muted card / ring wrapping the logo (row height tax).
|
|
24
|
+
expect(root.querySelector('.bg-muted\\/60')).toBeNull()
|
|
25
|
+
expect(root.innerHTML).not.toContain('bg-muted')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('falls back to initials when src is missing', () => {
|
|
29
|
+
const { getByText } = render(<ImageStack label="PIRELLI" size="md" />)
|
|
30
|
+
// Single-token name → first letter only (getInitials).
|
|
31
|
+
expect(getByText('P')).toBeTruthy()
|
|
32
|
+
expect(getByText('PIRELLI')).toBeTruthy()
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
describe('ImageCell stack mode', () => {
|
|
37
|
+
const getImageUrl = (p: string) => p
|
|
38
|
+
|
|
39
|
+
it('stacks image above caption when stack=true', () => {
|
|
40
|
+
const { container, getByText } = render(
|
|
41
|
+
<ImageCell
|
|
42
|
+
value="/brands/michelin.png"
|
|
43
|
+
getImageUrl={getImageUrl}
|
|
44
|
+
label="MICHELIN"
|
|
45
|
+
stack
|
|
46
|
+
/>,
|
|
47
|
+
)
|
|
48
|
+
expect(container.querySelector('img')?.className).toContain('object-contain')
|
|
49
|
+
expect(getByText('MICHELIN')).toBeTruthy()
|
|
50
|
+
expect((container.firstElementChild as HTMLElement).className).toContain('flex-col')
|
|
51
|
+
})
|
|
52
|
+
})
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
|
|
3
|
+
import { renderHook, act } from '@testing-library/react'
|
|
4
|
+
import { SEARCH_DEBOUNCE_MS, useDebouncedValue } from '../use-debounced-value'
|
|
5
|
+
|
|
6
|
+
describe('useDebouncedValue', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
vi.useFakeTimers()
|
|
9
|
+
})
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
vi.useRealTimers()
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('lags behind the live value by the default search debounce', () => {
|
|
15
|
+
const { result, rerender } = renderHook(
|
|
16
|
+
({ value }: { value: string }) => useDebouncedValue(value),
|
|
17
|
+
{ initialProps: { value: '' } },
|
|
18
|
+
)
|
|
19
|
+
expect(result.current).toBe('')
|
|
20
|
+
|
|
21
|
+
rerender({ value: 'pi' })
|
|
22
|
+
expect(result.current).toBe('')
|
|
23
|
+
|
|
24
|
+
act(() => {
|
|
25
|
+
vi.advanceTimersByTime(SEARCH_DEBOUNCE_MS - 1)
|
|
26
|
+
})
|
|
27
|
+
expect(result.current).toBe('')
|
|
28
|
+
|
|
29
|
+
act(() => {
|
|
30
|
+
vi.advanceTimersByTime(1)
|
|
31
|
+
})
|
|
32
|
+
expect(result.current).toBe('pi')
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('resets the timer when the value changes mid-debounce', () => {
|
|
36
|
+
const { result, rerender } = renderHook(
|
|
37
|
+
({ value }: { value: string }) => useDebouncedValue(value, 300),
|
|
38
|
+
{ initialProps: { value: 'a' } },
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
rerender({ value: 'ab' })
|
|
42
|
+
act(() => {
|
|
43
|
+
vi.advanceTimersByTime(200)
|
|
44
|
+
})
|
|
45
|
+
rerender({ value: 'abc' })
|
|
46
|
+
act(() => {
|
|
47
|
+
vi.advanceTimersByTime(200)
|
|
48
|
+
})
|
|
49
|
+
expect(result.current).toBe('a')
|
|
50
|
+
|
|
51
|
+
act(() => {
|
|
52
|
+
vi.advanceTimersByTime(100)
|
|
53
|
+
})
|
|
54
|
+
expect(result.current).toBe('abc')
|
|
55
|
+
})
|
|
56
|
+
})
|
|
@@ -71,6 +71,7 @@ import { IconPickerField } from '../icon-picker-field'
|
|
|
71
71
|
import { humanizeToken } from '../dynamic-columns-helpers'
|
|
72
72
|
import { formatDateCell } from '../dynamic-columns'
|
|
73
73
|
import {
|
|
74
|
+
ImageStack,
|
|
74
75
|
OptionBadge,
|
|
75
76
|
statusColorFor,
|
|
76
77
|
useIsDarkTheme,
|
|
@@ -1243,7 +1244,7 @@ function ReadonlyRelationField({
|
|
|
1243
1244
|
// RelationViewValue — read-only FK lead. Resolves the relation's label + image
|
|
1244
1245
|
// from (1) the sibling object the table served, then (2) the canonical options
|
|
1245
1246
|
// endpoint, and renders an OptionLead (thumbnail / icon / color dot) + label.
|
|
1246
|
-
function RelationViewValue({ field, value, record }: { field: FieldDef; value: any; record: any }) {
|
|
1247
|
+
function RelationViewValue({ field, value, record, stack = false }: { field: FieldDef; value: any; record: any; stack?: boolean }) {
|
|
1247
1248
|
const getImageUrl = useContext(ImageUrlContext)
|
|
1248
1249
|
const sib = relationSiblingValue(field, record)
|
|
1249
1250
|
const sibLabel = typeof sib === 'string' ? sib : objectLabel(sib)
|
|
@@ -1278,6 +1279,19 @@ function RelationViewValue({ field, value, record }: { field: FieldDef; value: a
|
|
|
1278
1279
|
return <p className="text-sm py-1 text-muted-foreground">—</p>
|
|
1279
1280
|
}
|
|
1280
1281
|
|
|
1282
|
+
if (stack) {
|
|
1283
|
+
return (
|
|
1284
|
+
<div className="py-1">
|
|
1285
|
+
<ImageStack
|
|
1286
|
+
src={image || undefined}
|
|
1287
|
+
label={label}
|
|
1288
|
+
getImageUrl={getImageUrl}
|
|
1289
|
+
size="lg"
|
|
1290
|
+
/>
|
|
1291
|
+
</div>
|
|
1292
|
+
)
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1281
1295
|
const lead: Pick<ResolvedOption, 'image' | 'color' | 'icon' | 'label'> = {
|
|
1282
1296
|
image: image ? getImageUrl(image) : null,
|
|
1283
1297
|
color: resolved?.color ?? null,
|
|
@@ -1368,6 +1382,14 @@ export function ViewValue({
|
|
|
1368
1382
|
|
|
1369
1383
|
const value = normalizeNilUuid(rawValue)
|
|
1370
1384
|
|
|
1385
|
+
// Landscape stack on a relation FK (brand marks, product cards).
|
|
1386
|
+
if (
|
|
1387
|
+
renderAs === 'image_stack' &&
|
|
1388
|
+
(isRelationField(field) || (typeof field.key === 'string' && field.key.endsWith('_id')))
|
|
1389
|
+
) {
|
|
1390
|
+
return <RelationViewValue field={field} value={value} record={record} stack />
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1371
1393
|
// Relation (search / dynamic_select / ref / any *_id) → resolved thumbnail +
|
|
1372
1394
|
// label. The *_id catch-all covers plain-typed FK columns not tagged as a
|
|
1373
1395
|
// relation field.
|
|
@@ -1404,6 +1426,26 @@ export function ViewValue({
|
|
|
1404
1426
|
)
|
|
1405
1427
|
}
|
|
1406
1428
|
|
|
1429
|
+
// Landscape stack for image/logo URL columns.
|
|
1430
|
+
if (renderAs === 'image_stack') {
|
|
1431
|
+
const caption =
|
|
1432
|
+
(typeof field.styleConfig?.label_field === 'string' &&
|
|
1433
|
+
record?.[field.styleConfig.label_field]) ||
|
|
1434
|
+
(typeof field.styleConfig?.labelField === 'string' &&
|
|
1435
|
+
record?.[field.styleConfig.labelField]) ||
|
|
1436
|
+
undefined
|
|
1437
|
+
return (
|
|
1438
|
+
<div className="py-1">
|
|
1439
|
+
<ImageStack
|
|
1440
|
+
src={value ? String(value) : undefined}
|
|
1441
|
+
label={caption ? String(caption) : field.label}
|
|
1442
|
+
getImageUrl={getImageUrl}
|
|
1443
|
+
size="lg"
|
|
1444
|
+
/>
|
|
1445
|
+
</div>
|
|
1446
|
+
)
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1407
1449
|
if (field.type === 'image') {
|
|
1408
1450
|
if (isLucideIconName(value)) {
|
|
1409
1451
|
return <IconNameViewValue name={value} />
|
package/src/dialogs/import.tsx
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// the validation rules all come from the model's ImportSpec served by the
|
|
4
4
|
// kernel, so this dialog carries no per-model knowledge. Axios-like client is
|
|
5
5
|
// provided by <ApiProvider>.
|
|
6
|
-
import { useState, useEffect
|
|
6
|
+
import { useState, useEffect } from 'react'
|
|
7
|
+
import { useTranslation } from 'react-i18next'
|
|
7
8
|
import {
|
|
8
9
|
Dialog,
|
|
9
10
|
DialogContent,
|
|
@@ -12,7 +13,6 @@ import {
|
|
|
12
13
|
DialogDescription,
|
|
13
14
|
DialogFooter,
|
|
14
15
|
Button,
|
|
15
|
-
Input,
|
|
16
16
|
Label,
|
|
17
17
|
Table,
|
|
18
18
|
TableBody,
|
|
@@ -26,6 +26,7 @@ import { toast } from 'sonner'
|
|
|
26
26
|
import { FileDown, Loader2, Check, AlertCircle } from 'lucide-react'
|
|
27
27
|
import type { TableMetadata } from '../types'
|
|
28
28
|
import { useApi } from '../api-context'
|
|
29
|
+
import { FilePickButton } from '../file-pick-button'
|
|
29
30
|
|
|
30
31
|
interface ImportDialogProps {
|
|
31
32
|
open: boolean
|
|
@@ -78,6 +79,7 @@ export function ImportDialog({
|
|
|
78
79
|
onImported,
|
|
79
80
|
}: ImportDialogProps) {
|
|
80
81
|
const api = useApi()
|
|
82
|
+
const { t } = useTranslation()
|
|
81
83
|
const [step, setStep] = useState<Step>('upload')
|
|
82
84
|
const [file, setFile] = useState<File | null>(null)
|
|
83
85
|
const [validating, setValidating] = useState(false)
|
|
@@ -85,7 +87,6 @@ export function ImportDialog({
|
|
|
85
87
|
const [validationResult, setValidationResult] = useState<ValidationResult | null>(null)
|
|
86
88
|
const [importResult, setImportResult] = useState<ImportResult | null>(null)
|
|
87
89
|
const [progress, setProgress] = useState(0)
|
|
88
|
-
const fileInputRef = useRef<HTMLInputElement>(null)
|
|
89
90
|
|
|
90
91
|
useEffect(() => {
|
|
91
92
|
if (open) {
|
|
@@ -96,15 +97,9 @@ export function ImportDialog({
|
|
|
96
97
|
setValidationResult(null)
|
|
97
98
|
setImportResult(null)
|
|
98
99
|
setProgress(0)
|
|
99
|
-
if (fileInputRef.current) fileInputRef.current.value = ''
|
|
100
100
|
}
|
|
101
101
|
}, [open])
|
|
102
102
|
|
|
103
|
-
const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
104
|
-
const selectedFile = e.target.files?.[0] ?? null
|
|
105
|
-
setFile(selectedFile)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
103
|
const handleDownloadTemplate = async () => {
|
|
109
104
|
try {
|
|
110
105
|
const response = await api.get(`/dynamic/${model}/export/template`, {
|
|
@@ -268,15 +263,14 @@ export function ImportDialog({
|
|
|
268
263
|
|
|
269
264
|
<div className="space-y-2">
|
|
270
265
|
<Label htmlFor="import-file" className="text-sm font-medium">
|
|
271
|
-
|
|
266
|
+
{t('common.upload.choose', { defaultValue: 'Choose file' })}
|
|
272
267
|
</Label>
|
|
273
|
-
<
|
|
274
|
-
ref={fileInputRef}
|
|
268
|
+
<FilePickButton
|
|
275
269
|
id="import-file"
|
|
276
|
-
type="file"
|
|
277
270
|
accept=".xlsx,.xls,.csv,.json"
|
|
278
|
-
|
|
279
|
-
|
|
271
|
+
hasFile={Boolean(file)}
|
|
272
|
+
fileName={file?.name}
|
|
273
|
+
onFile={setFile}
|
|
280
274
|
/>
|
|
281
275
|
<p className="text-xs text-muted-foreground">
|
|
282
276
|
Formatos aceptados: Excel, CSV, JSON
|