@ziky/ui 0.1.8 → 0.1.9
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/components/FilePicker.d.ts +22 -0
- package/dist/components/FilePicker.d.ts.map +1 -0
- package/dist/components/FilePicker.js +93 -0
- package/dist/components/FilePicker.js.map +1 -0
- package/dist/components/ImageUploadField.d.ts +18 -0
- package/dist/components/ImageUploadField.d.ts.map +1 -0
- package/dist/components/ImageUploadField.js +34 -0
- package/dist/components/ImageUploadField.js.map +1 -0
- package/dist/components/SmartDataTable/SmartDataTable.d.ts +24 -0
- package/dist/components/SmartDataTable/SmartDataTable.d.ts.map +1 -0
- package/dist/components/SmartDataTable/SmartDataTable.js +104 -0
- package/dist/components/SmartDataTable/SmartDataTable.js.map +1 -0
- package/dist/components/SmartDataTable/applyClientQuery.d.ts +9 -0
- package/dist/components/SmartDataTable/applyClientQuery.d.ts.map +1 -0
- package/dist/components/SmartDataTable/applyClientQuery.js +52 -0
- package/dist/components/SmartDataTable/applyClientQuery.js.map +1 -0
- package/dist/components/SmartDataTable/types.d.ts +17 -0
- package/dist/components/SmartDataTable/types.d.ts.map +1 -0
- package/dist/components/SmartDataTable/types.js +3 -0
- package/dist/components/SmartDataTable/types.js.map +1 -0
- package/dist/components/SmartDataTable/urlState.d.ts +20 -0
- package/dist/components/SmartDataTable/urlState.d.ts.map +1 -0
- package/dist/components/SmartDataTable/urlState.js +117 -0
- package/dist/components/SmartDataTable/urlState.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/components/filepicker.css +69 -0
- package/dist/styles/index.d.ts +1 -0
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/index.js +1 -0
- package/dist/styles/index.js.map +1 -1
- package/dist/styles/index.ts +1 -0
- package/dist/styles/layout/_smartdatatable.scss +38 -0
- package/dist/styles/layout/layout.scss +5 -4
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type FilePickerStrings = {
|
|
2
|
+
noFile: string;
|
|
3
|
+
hint: string;
|
|
4
|
+
choose: string;
|
|
5
|
+
change: string;
|
|
6
|
+
clear: string;
|
|
7
|
+
max: (max: string) => string;
|
|
8
|
+
tooLarge: (max: string) => string;
|
|
9
|
+
};
|
|
10
|
+
export type FilePickerProps = {
|
|
11
|
+
file: File | null;
|
|
12
|
+
onFileChange: (file: File | null) => void;
|
|
13
|
+
accept?: string;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
helperText?: string;
|
|
16
|
+
maxSizeBytes?: number;
|
|
17
|
+
chooseLabel?: string;
|
|
18
|
+
strings?: Partial<FilePickerStrings>;
|
|
19
|
+
};
|
|
20
|
+
export declare function FilePicker({ file, onFileChange, accept, disabled, helperText, maxSizeBytes, chooseLabel, strings, }: FilePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=FilePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilePicker.d.ts","sourceRoot":"","sources":["../../src/components/FilePicker.tsx"],"names":[],"mappings":"AAWA,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC,CAAC;AAYF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtC,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,OAAO,GACR,EAAE,eAAe,2CAqJjB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FilePicker = FilePicker;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const button_1 = require("primereact/button");
|
|
10
|
+
function formatBytes(size) {
|
|
11
|
+
if (!size || size <= 0)
|
|
12
|
+
return '0 B';
|
|
13
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
14
|
+
const idx = Math.min(units.length - 1, Math.floor(Math.log(size) / Math.log(1024)));
|
|
15
|
+
const value = size / Math.pow(1024, idx);
|
|
16
|
+
return `${value.toFixed(value >= 10 || idx === 0 ? 0 : 1)} ${units[idx]}`;
|
|
17
|
+
}
|
|
18
|
+
const defaultStrings = {
|
|
19
|
+
noFile: 'No file selected',
|
|
20
|
+
hint: 'Drag & drop a file here or click to choose',
|
|
21
|
+
choose: 'Choose file',
|
|
22
|
+
change: 'Change',
|
|
23
|
+
clear: 'Clear',
|
|
24
|
+
max: (max) => `Max ${max}`,
|
|
25
|
+
tooLarge: (max) => `File exceeds ${max}.`,
|
|
26
|
+
};
|
|
27
|
+
function FilePicker({ file, onFileChange, accept, disabled, helperText, maxSizeBytes, chooseLabel, strings, }) {
|
|
28
|
+
const s = react_1.default.useMemo(() => ({ ...defaultStrings, ...(strings ?? {}) }), [strings]);
|
|
29
|
+
const inputId = react_1.default.useId();
|
|
30
|
+
const inputRef = react_1.default.useRef(null);
|
|
31
|
+
const [dragActive, setDragActive] = react_1.default.useState(false);
|
|
32
|
+
const [error, setError] = react_1.default.useState(null);
|
|
33
|
+
const safeSetFile = react_1.default.useCallback((next) => {
|
|
34
|
+
if (!next) {
|
|
35
|
+
setError(null);
|
|
36
|
+
onFileChange(null);
|
|
37
|
+
if (inputRef.current)
|
|
38
|
+
inputRef.current.value = '';
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (typeof maxSizeBytes === 'number' && maxSizeBytes > 0 && next.size > maxSizeBytes) {
|
|
42
|
+
setError(s.tooLarge(formatBytes(maxSizeBytes)));
|
|
43
|
+
onFileChange(null);
|
|
44
|
+
if (inputRef.current)
|
|
45
|
+
inputRef.current.value = '';
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
setError(null);
|
|
49
|
+
onFileChange(next);
|
|
50
|
+
}, [maxSizeBytes, onFileChange, s]);
|
|
51
|
+
const onChoose = react_1.default.useCallback(() => {
|
|
52
|
+
if (disabled)
|
|
53
|
+
return;
|
|
54
|
+
inputRef.current?.click();
|
|
55
|
+
}, [disabled]);
|
|
56
|
+
const onInputChange = react_1.default.useCallback((e) => {
|
|
57
|
+
safeSetFile(e.target.files?.[0] ?? null);
|
|
58
|
+
}, [safeSetFile]);
|
|
59
|
+
const onDrop = react_1.default.useCallback((e) => {
|
|
60
|
+
e.preventDefault();
|
|
61
|
+
e.stopPropagation();
|
|
62
|
+
setDragActive(false);
|
|
63
|
+
if (disabled)
|
|
64
|
+
return;
|
|
65
|
+
const dropped = e.dataTransfer.files?.[0] ?? null;
|
|
66
|
+
safeSetFile(dropped);
|
|
67
|
+
}, [disabled, safeSetFile]);
|
|
68
|
+
const onDragOver = react_1.default.useCallback((e) => {
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
e.stopPropagation();
|
|
71
|
+
}, []);
|
|
72
|
+
const onDragEnter = react_1.default.useCallback((e) => {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
e.stopPropagation();
|
|
75
|
+
if (!disabled)
|
|
76
|
+
setDragActive(true);
|
|
77
|
+
}, [disabled]);
|
|
78
|
+
const onDragLeave = react_1.default.useCallback((e) => {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
e.stopPropagation();
|
|
81
|
+
setDragActive(false);
|
|
82
|
+
}, []);
|
|
83
|
+
const name = file?.name ?? s.noFile;
|
|
84
|
+
const details = file ? `${formatBytes(file.size)}${file.type ? ` • ${file.type}` : ''}` : '';
|
|
85
|
+
const chooseText = chooseLabel ?? s.choose;
|
|
86
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "sakai-file-picker", children: [(0, jsx_runtime_1.jsx)("input", { id: inputId, ref: inputRef, type: "file", accept: accept, disabled: disabled, onChange: onInputChange, style: { display: 'none' } }), (0, jsx_runtime_1.jsxs)("div", { className: `sakai-file-picker__drop${dragActive ? ' sakai-file-picker__drop--drag' : ''}`, onClick: onChoose, onDrop: onDrop, onDragOver: onDragOver, onDragEnter: onDragEnter, onDragLeave: onDragLeave, role: "button", tabIndex: 0, "aria-disabled": disabled, onKeyDown: (e) => {
|
|
87
|
+
if (disabled)
|
|
88
|
+
return;
|
|
89
|
+
if (e.key === 'Enter' || e.key === ' ')
|
|
90
|
+
onChoose();
|
|
91
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { className: "sakai-file-picker__icon", children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-cloud-upload text-600" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "sakai-file-picker__meta", children: [(0, jsx_runtime_1.jsx)("div", { className: "sakai-file-picker__name", children: name }), (0, jsx_runtime_1.jsx)("div", { className: "sakai-file-picker__sub", children: details || s.hint })] }), (0, jsx_runtime_1.jsxs)("div", { className: "sakai-file-picker__actions", onClick: (e) => e.stopPropagation(), children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: file ? s.change : chooseText, icon: "pi pi-folder-open", onClick: onChoose, outlined: true, disabled: disabled }), file ? ((0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-times", rounded: true, text: true, severity: "secondary", onClick: () => safeSetFile(null), disabled: disabled, tooltip: s.clear, tooltipOptions: { position: 'top' } })) : null] })] }), error ? (0, jsx_runtime_1.jsx)("div", { className: "p-error sakai-file-picker__helper", children: error }) : null, helperText || maxSizeBytes ? ((0, jsx_runtime_1.jsxs)("div", { className: "sakai-file-picker__helper", children: [helperText ? helperText : null, helperText && maxSizeBytes ? ' • ' : null, maxSizeBytes ? s.max(formatBytes(maxSizeBytes)) : null] })) : null] }));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=FilePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilePicker.js","sourceRoot":"","sources":["../../src/components/FilePicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FilePickerProps } from './FilePicker';
|
|
2
|
+
export type ImageUploadFieldProps = {
|
|
3
|
+
label: string;
|
|
4
|
+
value?: string | null;
|
|
5
|
+
onChange?: (value: string) => void;
|
|
6
|
+
file: File | null;
|
|
7
|
+
onFileChange: (file: File | null) => void;
|
|
8
|
+
onUpload: () => void;
|
|
9
|
+
uploading?: boolean;
|
|
10
|
+
error?: string | null;
|
|
11
|
+
helperText?: string;
|
|
12
|
+
chooseLabel?: string;
|
|
13
|
+
uploadLabel?: string;
|
|
14
|
+
urlPlaceholder?: string;
|
|
15
|
+
filePickerProps?: Omit<FilePickerProps, 'file' | 'onFileChange'>;
|
|
16
|
+
};
|
|
17
|
+
export declare function ImageUploadField({ label, value, onChange, file, onFileChange, onUpload, uploading, error, helperText, chooseLabel, uploadLabel, urlPlaceholder, filePickerProps, }: ImageUploadFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ImageUploadField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageUploadField.d.ts","sourceRoot":"","sources":["../../src/components/ImageUploadField.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;CAClE,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,SAAiB,EACjB,KAAK,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,eAAe,GAChB,EAAE,qBAAqB,2CA+EvB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImageUploadField = ImageUploadField;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const button_1 = require("primereact/button");
|
|
6
|
+
const inputtext_1 = require("primereact/inputtext");
|
|
7
|
+
const FilePicker_1 = require("./FilePicker");
|
|
8
|
+
function ImageUploadField({ label, value, onChange, file, onFileChange, onUpload, uploading = false, error, helperText, chooseLabel, uploadLabel, urlPlaceholder, filePickerProps, }) {
|
|
9
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { style: { display: 'block', marginBottom: '0.25rem' }, children: label }), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
10
|
+
border: '1px dashed var(--surface-border)',
|
|
11
|
+
borderRadius: 12,
|
|
12
|
+
padding: '0.75rem',
|
|
13
|
+
display: 'grid',
|
|
14
|
+
gridTemplateColumns: '80px 1fr',
|
|
15
|
+
gap: '0.75rem',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
background: 'var(--surface-0)',
|
|
18
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
19
|
+
width: 80,
|
|
20
|
+
height: 80,
|
|
21
|
+
borderRadius: 10,
|
|
22
|
+
background: 'var(--surface-100)',
|
|
23
|
+
display: 'flex',
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
justifyContent: 'center',
|
|
26
|
+
overflow: 'hidden',
|
|
27
|
+
}, children: value ? ((0, jsx_runtime_1.jsx)("img", { src: value, alt: "preview", style: { width: '100%', height: '100%', objectFit: 'cover' } })) : ((0, jsx_runtime_1.jsx)("i", { className: "pi pi-image", style: { fontSize: 28, color: 'var(--text-color-secondary)' } })) }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'grid', gap: '0.5rem' }, children: [typeof onChange === 'function' ? ((0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: urlPlaceholder })) : null, (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
28
|
+
display: 'grid',
|
|
29
|
+
gridTemplateColumns: '1fr auto',
|
|
30
|
+
gap: '0.75rem',
|
|
31
|
+
alignItems: 'center',
|
|
32
|
+
}, children: [(0, jsx_runtime_1.jsx)(FilePicker_1.FilePicker, { file: file, onFileChange: onFileChange, accept: "image/*", helperText: helperText, chooseLabel: chooseLabel, ...filePickerProps }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: uploadLabel ?? 'Upload', icon: "pi pi-cloud-upload", onClick: onUpload, loading: uploading, disabled: !file || uploading })] }), error ? (0, jsx_runtime_1.jsx)("div", { className: "p-error", children: error }) : null] })] })] }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ImageUploadField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageUploadField.js","sourceRoot":"","sources":["../../src/components/ImageUploadField.tsx"],"names":[],"mappings":";;AAsBA,4CA6FC;;AAlHD,8CAA2C;AAC3C,oDAAiD;AAEjD,6CAA0C;AAkB1C,SAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,eAAe,GACO;IACtB,OAAO,CACL,4CACE,kCAAO,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAG,KAAK,GAAS,EAC5E,iCACE,KAAK,EAAE;oBACL,MAAM,EAAE,kCAAkC;oBAC1C,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,SAAS;oBAClB,OAAO,EAAE,MAAM;oBACf,mBAAmB,EAAE,UAAU;oBAC/B,GAAG,EAAE,SAAS;oBACd,UAAU,EAAE,QAAQ;oBACpB,UAAU,EAAE,kBAAkB;iBAC/B,aAED,gCACE,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE;4BACT,MAAM,EAAE,EAAE;4BACV,YAAY,EAAE,EAAE;4BAChB,UAAU,EAAE,oBAAoB;4BAChC,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,QAAQ;4BACpB,cAAc,EAAE,QAAQ;4BACxB,QAAQ,EAAE,QAAQ;yBACnB,YAEA,KAAK,CAAC,CAAC,CAAC,CACP,gCACE,GAAG,EAAE,KAAK,EACV,GAAG,EAAC,SAAS,EACb,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAC5D,CACH,CAAC,CAAC,CAAC,CACF,8BACE,SAAS,EAAC,aAAa,EACvB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,GAC7D,CACH,GACG,EAEN,iCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,aAC3C,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAChC,uBAAC,qBAAS,IACR,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAE,cAAc,GAC3B,CACH,CAAC,CAAC,CAAC,IAAI,EACR,iCACE,KAAK,EAAE;oCACL,OAAO,EAAE,MAAM;oCACf,mBAAmB,EAAE,UAAU;oCAC/B,GAAG,EAAE,SAAS;oCACd,UAAU,EAAE,QAAQ;iCACrB,aAED,uBAAC,uBAAU,IACT,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAC,SAAS,EAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,KACpB,eAAe,GACnB,EACF,uBAAC,eAAM,IACL,KAAK,EAAE,WAAW,IAAI,QAAQ,EAC9B,IAAI,EAAC,oBAAoB,EACzB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,CAAC,IAAI,IAAI,SAAS,GAC5B,IACE,EACL,KAAK,CAAC,CAAC,CAAC,gCAAK,SAAS,EAAC,SAAS,YAAE,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,IAClD,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SmartDataTableQuery, SmartDataTableResult } from './types';
|
|
3
|
+
type SmartDataTableProps<T extends Record<string, any>> = {
|
|
4
|
+
prefix: string;
|
|
5
|
+
dataKey: string;
|
|
6
|
+
fetchData: (query: SmartDataTableQuery) => Promise<SmartDataTableResult<T>>;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
title?: React.ReactNode;
|
|
9
|
+
emptyMessage?: React.ReactNode;
|
|
10
|
+
defaultRows?: number;
|
|
11
|
+
rowsPerPageOptions?: number[];
|
|
12
|
+
extraKeys?: string[];
|
|
13
|
+
filterFields?: string[];
|
|
14
|
+
searchPlaceholder?: string;
|
|
15
|
+
headerStart?: React.ReactNode;
|
|
16
|
+
headerEnd?: React.ReactNode;
|
|
17
|
+
reloadToken?: unknown;
|
|
18
|
+
debounceMs?: number;
|
|
19
|
+
tableStyle?: React.CSSProperties;
|
|
20
|
+
className?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function SmartDataTable<T extends Record<string, any>>(props: SmartDataTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=SmartDataTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartDataTable.d.ts","sourceRoot":"","sources":["../../../src/components/SmartDataTable/SmartDataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEzE,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,2CAoJ1F"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SmartDataTable = SmartDataTable;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const api_1 = require("primereact/api");
|
|
10
|
+
const button_1 = require("primereact/button");
|
|
11
|
+
const datatable_1 = require("primereact/datatable");
|
|
12
|
+
const inputtext_1 = require("primereact/inputtext");
|
|
13
|
+
const utils_1 = require("primereact/utils");
|
|
14
|
+
const urlState_1 = require("./urlState");
|
|
15
|
+
function toDataTableFilters(filterFields, values) {
|
|
16
|
+
const meta = {};
|
|
17
|
+
for (const field of filterFields ?? []) {
|
|
18
|
+
meta[field] = { value: values[field] ?? null, matchMode: api_1.FilterMatchMode.CONTAINS };
|
|
19
|
+
}
|
|
20
|
+
return meta;
|
|
21
|
+
}
|
|
22
|
+
function SmartDataTable(props) {
|
|
23
|
+
const { fetchData, reloadToken } = props;
|
|
24
|
+
const { query, setQuery } = (0, urlState_1.useSmartDataTableUrlState)({
|
|
25
|
+
prefix: props.prefix,
|
|
26
|
+
defaultRows: props.defaultRows,
|
|
27
|
+
extraKeys: props.extraKeys,
|
|
28
|
+
});
|
|
29
|
+
const [rows, setRows] = react_1.default.useState([]);
|
|
30
|
+
const [total, setTotal] = react_1.default.useState(0);
|
|
31
|
+
const [loading, setLoading] = react_1.default.useState(false);
|
|
32
|
+
const [error, setError] = react_1.default.useState(null);
|
|
33
|
+
const [searchValue, setSearchValue] = react_1.default.useState(query.q ?? '');
|
|
34
|
+
react_1.default.useEffect(() => {
|
|
35
|
+
setSearchValue(query.q ?? '');
|
|
36
|
+
}, [query.q]);
|
|
37
|
+
const debounceMs = props.debounceMs ?? 300;
|
|
38
|
+
react_1.default.useEffect(() => {
|
|
39
|
+
let cancelled = false;
|
|
40
|
+
const handle = window.setTimeout(() => {
|
|
41
|
+
if (cancelled)
|
|
42
|
+
return;
|
|
43
|
+
void (async () => {
|
|
44
|
+
setLoading(true);
|
|
45
|
+
setError(null);
|
|
46
|
+
try {
|
|
47
|
+
const res = await fetchData(query);
|
|
48
|
+
if (cancelled)
|
|
49
|
+
return;
|
|
50
|
+
setRows(res.data ?? []);
|
|
51
|
+
setTotal(res.total ?? 0);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
if (cancelled)
|
|
55
|
+
return;
|
|
56
|
+
setRows([]);
|
|
57
|
+
setTotal(0);
|
|
58
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
if (!cancelled)
|
|
62
|
+
setLoading(false);
|
|
63
|
+
}
|
|
64
|
+
})();
|
|
65
|
+
}, debounceMs);
|
|
66
|
+
return () => {
|
|
67
|
+
cancelled = true;
|
|
68
|
+
window.clearTimeout(handle);
|
|
69
|
+
};
|
|
70
|
+
}, [debounceMs, fetchData, query, reloadToken]);
|
|
71
|
+
const first = (query.page - 1) * query.rows;
|
|
72
|
+
const onPage = (event) => {
|
|
73
|
+
const nextRows = event.rows ?? query.rows;
|
|
74
|
+
const nextPage = Math.floor((event.first ?? 0) / nextRows) + 1;
|
|
75
|
+
setQuery({ page: nextPage, rows: nextRows });
|
|
76
|
+
};
|
|
77
|
+
const onSort = (event) => {
|
|
78
|
+
const sortField = typeof event.sortField === 'string' ? event.sortField : undefined;
|
|
79
|
+
const sortOrder = event.sortOrder === 1 || event.sortOrder === -1 ? event.sortOrder : undefined;
|
|
80
|
+
setQuery({ sortField, sortOrder, page: 1 });
|
|
81
|
+
};
|
|
82
|
+
const filters = react_1.default.useMemo(() => toDataTableFilters(props.filterFields, query.filters), [props.filterFields, query.filters]);
|
|
83
|
+
const onFilter = (event) => {
|
|
84
|
+
const nextFilters = {};
|
|
85
|
+
for (const field of props.filterFields ?? []) {
|
|
86
|
+
const meta = event.filters?.[field];
|
|
87
|
+
const value = meta?.value;
|
|
88
|
+
if (value != null && String(value).trim())
|
|
89
|
+
nextFilters[field] = String(value);
|
|
90
|
+
}
|
|
91
|
+
setQuery({ filters: nextFilters, page: 1 });
|
|
92
|
+
};
|
|
93
|
+
const clearAll = () => {
|
|
94
|
+
setSearchValue('');
|
|
95
|
+
setQuery({ page: 1, q: '', filters: {}, sortField: undefined, sortOrder: undefined }, { resetPage: true });
|
|
96
|
+
};
|
|
97
|
+
const header = ((0, jsx_runtime_1.jsxs)("div", { className: "rd-smart-table__header", children: [(0, jsx_runtime_1.jsxs)("div", { className: "rd-smart-table__header-left", children: [props.title ? (0, jsx_runtime_1.jsx)("div", { className: "rd-smart-table__title", children: props.title }) : null, props.headerStart] }), (0, jsx_runtime_1.jsxs)("div", { className: "rd-smart-table__header-right", children: [(0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left rd-smart-table__search", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-search" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: searchValue, onChange: (e) => {
|
|
98
|
+
const next = e.target.value;
|
|
99
|
+
setSearchValue(next);
|
|
100
|
+
setQuery({ q: next, page: 1 });
|
|
101
|
+
}, placeholder: props.searchPlaceholder ?? 'Search...' })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-filter-slash", text: true, severity: "secondary", onClick: clearAll, tooltip: "Clear filters", tooltipOptions: { position: 'top' } }), props.headerEnd] })] }));
|
|
102
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.classNames)('rd-smart-table', props.className), children: [error ? (0, jsx_runtime_1.jsx)("div", { className: "rd-smart-table__error", children: error }) : null, (0, jsx_runtime_1.jsx)(datatable_1.DataTable, { value: rows, lazy: true, paginator: true, first: first, rows: query.rows, totalRecords: total, onPage: onPage, rowsPerPageOptions: props.rowsPerPageOptions ?? [10, 20, 50], sortField: query.sortField, sortOrder: query.sortOrder, onSort: onSort, filters: filters, onFilter: props.filterFields?.length ? onFilter : undefined, filterDisplay: props.filterFields?.length ? 'row' : undefined, loading: loading, size: "small", dataKey: props.dataKey, stripedRows: true, rowHover: true, emptyMessage: props.emptyMessage, header: header, tableStyle: props.tableStyle, children: props.children })] }));
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=SmartDataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartDataTable.js","sourceRoot":"","sources":["../../../src/components/SmartDataTable/SmartDataTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SmartDataTableQuery, SmartDataTableResult } from './types';
|
|
2
|
+
type ApplyOptions<T> = {
|
|
3
|
+
searchFields?: Array<keyof T>;
|
|
4
|
+
filterFields?: Array<keyof T>;
|
|
5
|
+
getFieldValue?: (row: T, field: string) => unknown;
|
|
6
|
+
};
|
|
7
|
+
export declare function applySmartDataTableQuery<T>(rows: T[], query: SmartDataTableQuery, options?: ApplyOptions<T>): SmartDataTableResult<T>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=applyClientQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyClientQuery.d.ts","sourceRoot":"","sources":["../../../src/components/SmartDataTable/applyClientQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEzE,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAeF,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,YAAY,CAAC,CAAC,CAAM,GAC5B,oBAAoB,CAAC,CAAC,CAAC,CAsCzB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applySmartDataTableQuery = applySmartDataTableQuery;
|
|
4
|
+
function normalize(value) {
|
|
5
|
+
return String(value ?? '').toLowerCase();
|
|
6
|
+
}
|
|
7
|
+
function defaultGetFieldValue(row, field) {
|
|
8
|
+
return row[field];
|
|
9
|
+
}
|
|
10
|
+
function matchesContains(haystack, needle) {
|
|
11
|
+
if (!needle)
|
|
12
|
+
return true;
|
|
13
|
+
return normalize(haystack).includes(needle);
|
|
14
|
+
}
|
|
15
|
+
function applySmartDataTableQuery(rows, query, options = {}) {
|
|
16
|
+
const searchNeedle = normalize(query.q);
|
|
17
|
+
const getFieldValue = options.getFieldValue ?? (defaultGetFieldValue);
|
|
18
|
+
const filtered = rows.filter((row) => {
|
|
19
|
+
if (searchNeedle && options.searchFields?.length) {
|
|
20
|
+
const matchAny = options.searchFields.some((field) => matchesContains(getFieldValue(row, String(field)), searchNeedle));
|
|
21
|
+
if (!matchAny)
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
for (const [field, value] of Object.entries(query.filters ?? {})) {
|
|
25
|
+
if (!value)
|
|
26
|
+
continue;
|
|
27
|
+
if (!matchesContains(getFieldValue(row, field), normalize(value)))
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
});
|
|
32
|
+
const sorted = (() => {
|
|
33
|
+
if (!query.sortField || !query.sortOrder)
|
|
34
|
+
return filtered;
|
|
35
|
+
const field = query.sortField;
|
|
36
|
+
const order = query.sortOrder;
|
|
37
|
+
return [...filtered].sort((a, b) => {
|
|
38
|
+
const av = getFieldValue(a, field);
|
|
39
|
+
const bv = getFieldValue(b, field);
|
|
40
|
+
const an = Number(av);
|
|
41
|
+
const bn = Number(bv);
|
|
42
|
+
if (Number.isFinite(an) && Number.isFinite(bn))
|
|
43
|
+
return order * (an - bn);
|
|
44
|
+
return order * normalize(av).localeCompare(normalize(bv));
|
|
45
|
+
});
|
|
46
|
+
})();
|
|
47
|
+
const total = sorted.length;
|
|
48
|
+
const start = Math.max(0, (query.page - 1) * query.rows);
|
|
49
|
+
const data = sorted.slice(start, start + query.rows);
|
|
50
|
+
return { data, total };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=applyClientQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyClientQuery.js","sourceRoot":"","sources":["../../../src/components/SmartDataTable/applyClientQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DataTableFilterMeta } from 'primereact/datatable';
|
|
2
|
+
export type SmartSortOrder = 1 | -1;
|
|
3
|
+
export type SmartDataTableQuery = {
|
|
4
|
+
page: number;
|
|
5
|
+
rows: number;
|
|
6
|
+
sortField?: string;
|
|
7
|
+
sortOrder?: SmartSortOrder;
|
|
8
|
+
q?: string;
|
|
9
|
+
filters: Record<string, string>;
|
|
10
|
+
extra: Record<string, string>;
|
|
11
|
+
};
|
|
12
|
+
export type SmartDataTableResult<T> = {
|
|
13
|
+
data: T[];
|
|
14
|
+
total: number;
|
|
15
|
+
};
|
|
16
|
+
export type SmartDataTableFilterMeta = DataTableFilterMeta;
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/SmartDataTable/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/SmartDataTable/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SmartDataTableQuery, SmartSortOrder } from './types';
|
|
2
|
+
type UrlStateOptions = {
|
|
3
|
+
prefix: string;
|
|
4
|
+
defaultRows?: number;
|
|
5
|
+
defaultPage?: number;
|
|
6
|
+
defaultSortField?: string;
|
|
7
|
+
defaultSortOrder?: SmartSortOrder;
|
|
8
|
+
extraKeys?: string[];
|
|
9
|
+
};
|
|
10
|
+
type SetQueryOptions = {
|
|
11
|
+
replace?: boolean;
|
|
12
|
+
resetPage?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare function useSmartDataTableUrlState(options: UrlStateOptions): {
|
|
15
|
+
query: SmartDataTableQuery;
|
|
16
|
+
setQuery: (patch: Partial<SmartDataTableQuery>, opts?: SetQueryOptions) => void;
|
|
17
|
+
setExtra: (key: string, value: string, opts?: SetQueryOptions) => void;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=urlState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlState.d.ts","sourceRoot":"","sources":["../../../src/components/SmartDataTable/urlState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnE,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,eAAe,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AA4ClE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe;;sBA6BtD,OAAO,CAAC,mBAAmB,CAAC,SAAS,eAAe;oBAqCtD,MAAM,SAAS,MAAM,SAAS,eAAe;EAQtD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useSmartDataTableUrlState = useSmartDataTableUrlState;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const react_router_dom_1 = require("react-router-dom");
|
|
9
|
+
function parseNumber(value, fallback) {
|
|
10
|
+
const parsed = Number(value);
|
|
11
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
12
|
+
}
|
|
13
|
+
function parseSortOrder(value) {
|
|
14
|
+
if (value === '1')
|
|
15
|
+
return 1;
|
|
16
|
+
if (value === '-1')
|
|
17
|
+
return -1;
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
function cloneParams(searchParams) {
|
|
21
|
+
return new URLSearchParams(Array.from(searchParams.entries()));
|
|
22
|
+
}
|
|
23
|
+
function setOrDelete(params, key, value) {
|
|
24
|
+
const normalized = value == null ? '' : String(value);
|
|
25
|
+
if (!normalized)
|
|
26
|
+
params.delete(key);
|
|
27
|
+
else
|
|
28
|
+
params.set(key, normalized);
|
|
29
|
+
}
|
|
30
|
+
function extractFilters(searchParams, prefix) {
|
|
31
|
+
const filters = {};
|
|
32
|
+
const filterPrefix = `${prefix}f.`;
|
|
33
|
+
for (const [key, value] of Array.from(searchParams.entries())) {
|
|
34
|
+
if (!key.startsWith(filterPrefix))
|
|
35
|
+
continue;
|
|
36
|
+
const field = key.slice(filterPrefix.length);
|
|
37
|
+
if (!field)
|
|
38
|
+
continue;
|
|
39
|
+
if (value)
|
|
40
|
+
filters[field] = value;
|
|
41
|
+
}
|
|
42
|
+
return filters;
|
|
43
|
+
}
|
|
44
|
+
function extractExtra(searchParams, prefix, extraKeys) {
|
|
45
|
+
const extra = {};
|
|
46
|
+
for (const key of extraKeys) {
|
|
47
|
+
const value = searchParams.get(`${prefix}${key}`);
|
|
48
|
+
if (value)
|
|
49
|
+
extra[key] = value;
|
|
50
|
+
}
|
|
51
|
+
return extra;
|
|
52
|
+
}
|
|
53
|
+
function useSmartDataTableUrlState(options) {
|
|
54
|
+
const [searchParams, setSearchParams] = (0, react_router_dom_1.useSearchParams)();
|
|
55
|
+
const prefix = options.prefix;
|
|
56
|
+
const defaultPage = options.defaultPage ?? 1;
|
|
57
|
+
const defaultRows = options.defaultRows ?? 20;
|
|
58
|
+
const extraKeys = react_1.default.useMemo(() => options.extraKeys ?? [], [options.extraKeys]);
|
|
59
|
+
const query = react_1.default.useMemo(() => {
|
|
60
|
+
const page = parseNumber(searchParams.get(`${prefix}page`), defaultPage);
|
|
61
|
+
const rows = parseNumber(searchParams.get(`${prefix}rows`), defaultRows);
|
|
62
|
+
const sortField = searchParams.get(`${prefix}sort`) ?? options.defaultSortField ?? undefined;
|
|
63
|
+
const sortOrder = parseSortOrder(searchParams.get(`${prefix}order`)) ?? options.defaultSortOrder ?? undefined;
|
|
64
|
+
const q = searchParams.get(`${prefix}q`) ?? undefined;
|
|
65
|
+
const filters = extractFilters(searchParams, prefix);
|
|
66
|
+
const extra = extractExtra(searchParams, prefix, extraKeys);
|
|
67
|
+
return { page, rows, sortField, sortOrder, q, filters, extra };
|
|
68
|
+
}, [
|
|
69
|
+
defaultPage,
|
|
70
|
+
defaultRows,
|
|
71
|
+
extraKeys,
|
|
72
|
+
options.defaultSortField,
|
|
73
|
+
options.defaultSortOrder,
|
|
74
|
+
prefix,
|
|
75
|
+
searchParams,
|
|
76
|
+
]);
|
|
77
|
+
const setQuery = react_1.default.useCallback((patch, opts) => {
|
|
78
|
+
const next = cloneParams(searchParams);
|
|
79
|
+
if (patch.page != null || opts?.resetPage) {
|
|
80
|
+
setOrDelete(next, `${prefix}page`, String(patch.page ?? 1));
|
|
81
|
+
}
|
|
82
|
+
if (patch.rows != null)
|
|
83
|
+
setOrDelete(next, `${prefix}rows`, String(patch.rows));
|
|
84
|
+
if (patch.sortField !== undefined)
|
|
85
|
+
setOrDelete(next, `${prefix}sort`, patch.sortField);
|
|
86
|
+
if (patch.sortOrder !== undefined) {
|
|
87
|
+
setOrDelete(next, `${prefix}order`, patch.sortOrder != null ? String(patch.sortOrder) : '');
|
|
88
|
+
}
|
|
89
|
+
if (patch.q !== undefined)
|
|
90
|
+
setOrDelete(next, `${prefix}q`, patch.q);
|
|
91
|
+
if (patch.filters) {
|
|
92
|
+
const filterPrefix = `${prefix}f.`;
|
|
93
|
+
for (const key of Array.from(next.keys())) {
|
|
94
|
+
if (key.startsWith(filterPrefix))
|
|
95
|
+
next.delete(key);
|
|
96
|
+
}
|
|
97
|
+
for (const [field, value] of Object.entries(patch.filters)) {
|
|
98
|
+
setOrDelete(next, `${filterPrefix}${field}`, value);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (patch.extra) {
|
|
102
|
+
for (const key of extraKeys) {
|
|
103
|
+
if (Object.prototype.hasOwnProperty.call(patch.extra, key)) {
|
|
104
|
+
setOrDelete(next, `${prefix}${key}`, patch.extra[key]);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
setSearchParams(next, { replace: opts?.replace ?? true });
|
|
109
|
+
}, [extraKeys, prefix, searchParams, setSearchParams]);
|
|
110
|
+
const setExtra = react_1.default.useCallback((key, value, opts) => {
|
|
111
|
+
if (!extraKeys.includes(key))
|
|
112
|
+
return;
|
|
113
|
+
setQuery({ extra: { ...query.extra, [key]: value } }, opts);
|
|
114
|
+
}, [extraKeys, query.extra, setQuery]);
|
|
115
|
+
return { query, setQuery, setExtra };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=urlState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlState.js","sourceRoot":"","sources":["../../../src/components/SmartDataTable/urlState.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,4 +22,9 @@ export * from './components/DashboardStatCard';
|
|
|
22
22
|
export * from './components/DashboardPanel';
|
|
23
23
|
export * from './components/SectionHeader';
|
|
24
24
|
export * from './components/ActivityList';
|
|
25
|
+
export * from './components/FilePicker';
|
|
26
|
+
export * from './components/ImageUploadField';
|
|
27
|
+
export * from './components/SmartDataTable/SmartDataTable';
|
|
28
|
+
export * from './components/SmartDataTable/types';
|
|
29
|
+
export * from './components/SmartDataTable/applyClientQuery';
|
|
25
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAElB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,kCAAkC,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAElB,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,cAAc,kCAAkC,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -52,4 +52,9 @@ __exportStar(require("./components/DashboardStatCard"), exports);
|
|
|
52
52
|
__exportStar(require("./components/DashboardPanel"), exports);
|
|
53
53
|
__exportStar(require("./components/SectionHeader"), exports);
|
|
54
54
|
__exportStar(require("./components/ActivityList"), exports);
|
|
55
|
+
__exportStar(require("./components/FilePicker"), exports);
|
|
56
|
+
__exportStar(require("./components/ImageUploadField"), exports);
|
|
57
|
+
__exportStar(require("./components/SmartDataTable/SmartDataTable"), exports);
|
|
58
|
+
__exportStar(require("./components/SmartDataTable/types"), exports);
|
|
59
|
+
__exportStar(require("./components/SmartDataTable/applyClientQuery"), exports);
|
|
55
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oBAAkB;AAElB,0CAAoD;AAA3C,iHAAA,OAAO,OAAU;AAE1B,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AAEpB,8DAA6D;AAApD,oHAAA,gBAAgB,OAAA;AAEzB,mEAAiD;AACjD,gEAA+E;AAAtE,8GAAA,aAAa,OAAA;AAAE,+GAAA,cAAc,OAAA;AACtC,4DAAyE;AAAhE,0GAAA,WAAW,OAAA;AAAE,2GAAA,YAAY,OAAA;AAClC,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,kDAA4D;AAAnD,yHAAA,OAAO,OAAc;AAC9B,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,4CAAsD;AAA7C,mHAAA,OAAO,OAAW;AAC3B,oDAA8D;AAArD,2HAAA,OAAO,OAAe;AAC/B,0CAAwB;AACxB,mDAAiC;AACjC,6DAA2C;AAC3C,oEAAkD;AAClD,iEAA+C;AAC/C,8DAA4C;AAC5C,6DAA2C;AAC3C,4DAA0C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oBAAkB;AAElB,0CAAoD;AAA3C,iHAAA,OAAO,OAAU;AAE1B,oDAAmD;AAA1C,0GAAA,WAAW,OAAA;AAEpB,8DAA6D;AAApD,oHAAA,gBAAgB,OAAA;AAEzB,mEAAiD;AACjD,gEAA+E;AAAtE,8GAAA,aAAa,OAAA;AAAE,+GAAA,cAAc,OAAA;AACtC,4DAAyE;AAAhE,0GAAA,WAAW,OAAA;AAAE,2GAAA,YAAY,OAAA;AAClC,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,kDAA4D;AAAnD,yHAAA,OAAO,OAAc;AAC9B,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,gDAA0D;AAAjD,uHAAA,OAAO,OAAa;AAC7B,4CAAsD;AAA7C,mHAAA,OAAO,OAAW;AAC3B,oDAA8D;AAArD,2HAAA,OAAO,OAAe;AAC/B,0CAAwB;AACxB,mDAAiC;AACjC,6DAA2C;AAC3C,oEAAkD;AAClD,iEAA+C;AAC/C,8DAA4C;AAC5C,6DAA2C;AAC3C,4DAA0C;AAC1C,0DAAwC;AACxC,gEAA8C;AAC9C,6EAA2D;AAC3D,oEAAkD;AAClD,+EAA6D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
.sakai-file-picker {
|
|
2
|
+
width: 100%;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sakai-file-picker__drop {
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: 1rem;
|
|
9
|
+
padding: 0.75rem 0.85rem;
|
|
10
|
+
border-radius: 12px;
|
|
11
|
+
border: 1px dashed var(--surface-border);
|
|
12
|
+
background: var(--surface-0);
|
|
13
|
+
transition:
|
|
14
|
+
border-color 120ms ease,
|
|
15
|
+
background-color 120ms ease;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.sakai-file-picker__drop--drag {
|
|
19
|
+
border-color: var(--primary-color);
|
|
20
|
+
background: color-mix(in srgb, var(--primary-color) 6%, var(--surface-0));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sakai-file-picker__icon {
|
|
24
|
+
width: 44px;
|
|
25
|
+
height: 44px;
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
border-radius: 12px;
|
|
30
|
+
border: 1px solid var(--surface-border);
|
|
31
|
+
background: var(--surface-50);
|
|
32
|
+
flex: 0 0 auto;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sakai-file-picker__meta {
|
|
36
|
+
min-width: 0;
|
|
37
|
+
flex: 1 1 auto;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.sakai-file-picker__name {
|
|
41
|
+
font-weight: 600;
|
|
42
|
+
color: var(--text-color);
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
text-overflow: ellipsis;
|
|
45
|
+
white-space: nowrap;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.sakai-file-picker__sub {
|
|
49
|
+
margin-top: 0.15rem;
|
|
50
|
+
font-size: 0.875rem;
|
|
51
|
+
color: var(--text-color-secondary);
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
text-overflow: ellipsis;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.sakai-file-picker__actions {
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: 0.5rem;
|
|
61
|
+
flex: 0 0 auto;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.sakai-file-picker__helper {
|
|
65
|
+
margin-top: 0.35rem;
|
|
66
|
+
font-size: 0.875rem;
|
|
67
|
+
color: var(--text-color-secondary);
|
|
68
|
+
}
|
|
69
|
+
|
package/dist/styles/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,yCAAyC,CAAC;AACjD,OAAO,2BAA2B,CAAC;AACnC,OAAO,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,yCAAyC,CAAC;AACjD,OAAO,2BAA2B,CAAC;AACnC,OAAO,6BAA6B,CAAC;AACrC,OAAO,sBAAsB,CAAC"}
|
package/dist/styles/index.js
CHANGED
|
@@ -3,5 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
require("primeflex/primeflex.css");
|
|
4
4
|
require("primereact/resources/primereact.min.css");
|
|
5
5
|
require("primeicons/primeicons.css");
|
|
6
|
+
require("./components/filepicker.css");
|
|
6
7
|
require("./layout/layout.scss");
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/styles/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":";;AAAA,mCAAiC;AACjC,mDAAiD;AACjD,qCAAmC;AACnC,gCAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/styles/index.ts"],"names":[],"mappings":";;AAAA,mCAAiC;AACjC,mDAAiD;AACjD,qCAAmC;AACnC,uCAAqC;AACrC,gCAA8B"}
|
package/dist/styles/index.ts
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.rd-smart-table__header {
|
|
2
|
+
display: flex;
|
|
3
|
+
justify-content: space-between;
|
|
4
|
+
gap: 1rem;
|
|
5
|
+
flex-wrap: wrap;
|
|
6
|
+
align-items: center;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.rd-smart-table__header-left {
|
|
10
|
+
display: flex;
|
|
11
|
+
gap: 0.75rem;
|
|
12
|
+
flex-wrap: wrap;
|
|
13
|
+
align-items: center;
|
|
14
|
+
min-width: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.rd-smart-table__header-right {
|
|
18
|
+
display: flex;
|
|
19
|
+
gap: 0.5rem;
|
|
20
|
+
flex-wrap: wrap;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: flex-end;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.rd-smart-table__title {
|
|
26
|
+
font-weight: 700;
|
|
27
|
+
color: var(--text-color, #111827);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.rd-smart-table__search .p-inputtext {
|
|
31
|
+
width: min(360px, 72vw);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.rd-smart-table__error {
|
|
35
|
+
margin-bottom: 0.5rem;
|
|
36
|
+
color: var(--red-600, #dc2626);
|
|
37
|
+
}
|
|
38
|
+
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
@use './_content' as *;
|
|
8
8
|
@use './_footer' as *;
|
|
9
9
|
@use './_dialog' as *;
|
|
10
|
-
@use './_responsive' as *;
|
|
11
|
-
@use './_utils' as *;
|
|
12
|
-
@use './_typography' as *;
|
|
13
|
-
@use './_dashboard' as *;
|
|
10
|
+
@use './_responsive' as *;
|
|
11
|
+
@use './_utils' as *;
|
|
12
|
+
@use './_typography' as *;
|
|
13
|
+
@use './_dashboard' as *;
|
|
14
|
+
@use './_smartdatatable' as *;
|