@solidxai/core-ui 0.1.13-beta.1 → 0.1.13-beta.3
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/common/SolidFieldTooltip.d.ts.map +1 -1
- package/dist/components/common/SolidFieldTooltip.js +33 -1
- package/dist/components/common/SolidFieldTooltip.js.map +1 -1
- package/dist/components/common/SolidFieldTooltip.tsx +64 -8
- package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatter.js +4 -2
- package/dist/components/core/chatter/SolidChatter.js.map +1 -1
- package/dist/components/core/chatter/SolidChatter.tsx +4 -1
- package/dist/components/core/chatter/SolidChatterMentionMenu.d.ts +9 -0
- package/dist/components/core/chatter/SolidChatterMentionMenu.d.ts.map +1 -0
- package/dist/components/core/chatter/SolidChatterMentionMenu.js +18 -0
- package/dist/components/core/chatter/SolidChatterMentionMenu.js.map +1 -0
- package/dist/components/core/chatter/SolidChatterMentionMenu.tsx +45 -0
- package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +1 -0
- package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.js +29 -5
- package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.tsx +57 -4
- package/dist/components/core/chatter/SolidMessageComposer.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidMessageComposer.js +33 -7
- package/dist/components/core/chatter/SolidMessageComposer.js.map +1 -1
- package/dist/components/core/chatter/SolidMessageComposer.tsx +61 -7
- package/dist/components/core/chatter/chatter.module.css +63 -0
- package/dist/components/core/chatter/chatterMentions.d.ts +17 -0
- package/dist/components/core/chatter/chatterMentions.d.ts.map +1 -0
- package/dist/components/core/chatter/chatterMentions.js +50 -0
- package/dist/components/core/chatter/chatterMentions.js.map +1 -0
- package/dist/components/core/chatter/chatterMentions.ts +59 -0
- package/dist/components/core/chatter/useChatterMentions.d.ts +26 -0
- package/dist/components/core/chatter/useChatterMentions.d.ts.map +1 -0
- package/dist/components/core/chatter/useChatterMentions.js +204 -0
- package/dist/components/core/chatter/useChatterMentions.js.map +1 -0
- package/dist/components/core/chatter/useChatterMentions.ts +160 -0
- package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.js +111 -106
- package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +165 -134
- package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.js +81 -84
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.tsx +97 -86
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +4 -0
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +6 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +4 -3
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +4 -3
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +42 -81
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +90 -120
- package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +34 -42
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +51 -46
- package/dist/components/core/model/CreateModel.d.ts.map +1 -1
- package/dist/components/core/model/CreateModel.js +3 -2
- package/dist/components/core/model/CreateModel.js.map +1 -1
- package/dist/components/core/model/CreateModel.tsx +4 -1
- package/dist/components/core/model/FieldMetaData.d.ts +1 -1
- package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
- package/dist/components/core/model/FieldMetaData.js +17 -17
- package/dist/components/core/model/FieldMetaData.js.map +1 -1
- package/dist/components/core/model/FieldMetaData.tsx +10 -2
- package/dist/components/shad-cn-ui/SolidTextarea.d.ts +1 -1
- package/dist/components/shad-cn-ui/SolidTextarea.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTextarea.js +4 -3
- package/dist/components/shad-cn-ui/SolidTextarea.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTextarea.tsx +4 -2
- package/dist/helpers/downloadMediaFile.d.ts.map +1 -1
- package/dist/helpers/downloadMediaFile.js +10 -3
- package/dist/helpers/downloadMediaFile.js.map +1 -1
- package/dist/helpers/downloadMediaFile.tsx +13 -7
- package/dist/helpers/fileTypeIcon.d.ts +3 -2
- package/dist/helpers/fileTypeIcon.d.ts.map +1 -1
- package/dist/helpers/fileTypeIcon.js +11 -7
- package/dist/helpers/fileTypeIcon.js.map +1 -1
- package/dist/helpers/fileTypeIcon.tsx +12 -7
- package/dist/helpers/mediaType.d.ts +7 -0
- package/dist/helpers/mediaType.d.ts.map +1 -1
- package/dist/helpers/mediaType.js +39 -8
- package/dist/helpers/mediaType.js.map +1 -1
- package/dist/helpers/mediaType.ts +46 -7
- package/dist/helpers/mediaUrl.d.ts +2 -0
- package/dist/helpers/mediaUrl.d.ts.map +1 -0
- package/dist/helpers/mediaUrl.js +10 -0
- package/dist/helpers/mediaUrl.js.map +1 -0
- package/dist/helpers/mediaUrl.ts +11 -0
- package/dist/resources/globals.css +14 -0
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/package.json +1 -1
|
@@ -58,6 +58,8 @@ import { FileReaderExt } from "../../../../components/common/FileReaderExt";
|
|
|
58
58
|
import getAcceptedFileTypes from "../../../../helpers/getAcceptedFileTypes";
|
|
59
59
|
import { downloadMediaFile } from "../../../../helpers/downloadMediaFile";
|
|
60
60
|
import { getExtensionComponent } from "../../../../helpers/registry";
|
|
61
|
+
import { openMediaInNewTab } from "../../../../helpers/mediaUrl";
|
|
62
|
+
import { getMediaPreviewKind, isLightboxMediaKind } from "../../../../helpers/mediaType";
|
|
61
63
|
import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
|
|
62
64
|
import { ERROR_MESSAGES } from "../../../../constants/error-messages";
|
|
63
65
|
import styles from "./solidFields.module.css";
|
|
@@ -328,32 +330,33 @@ export var DefaultMediaSingleFormEditWidget = function (_a) {
|
|
|
328
330
|
}); };
|
|
329
331
|
useEffect(function () {
|
|
330
332
|
var fieldValue = formik === null || formik === void 0 ? void 0 : formik.values[fieldLayoutInfo.attrs.name];
|
|
331
|
-
if (fieldValue
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
fileName = fieldValue.name;
|
|
338
|
-
fileSize = fieldValue.size;
|
|
339
|
-
}
|
|
340
|
-
else if (fieldValue._full_url) {
|
|
341
|
-
fileUrl = fieldValue._full_url;
|
|
342
|
-
fileName = fieldValue.originalFileName;
|
|
343
|
-
fileSize = fieldValue.fileSize;
|
|
344
|
-
}
|
|
333
|
+
if (!fieldValue || typeof fieldValue !== "object") {
|
|
334
|
+
setFileDetails(null);
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (fieldValue instanceof File) {
|
|
338
|
+
var fileUrl_1 = URL.createObjectURL(fieldValue);
|
|
345
339
|
setFileDetails({
|
|
346
|
-
name:
|
|
347
|
-
type: fieldValue.
|
|
348
|
-
fileUrl:
|
|
349
|
-
fileSize:
|
|
340
|
+
name: fieldValue.name,
|
|
341
|
+
type: fieldValue.type,
|
|
342
|
+
fileUrl: fileUrl_1,
|
|
343
|
+
fileSize: fieldValue.size,
|
|
350
344
|
});
|
|
351
|
-
// Ensure formik has the correct value
|
|
352
345
|
formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);
|
|
346
|
+
return function () { return URL.revokeObjectURL(fileUrl_1); };
|
|
353
347
|
}
|
|
354
|
-
|
|
348
|
+
var fileUrl = fieldValue._full_url;
|
|
349
|
+
if (!fileUrl) {
|
|
355
350
|
setFileDetails(null);
|
|
351
|
+
return;
|
|
356
352
|
}
|
|
353
|
+
setFileDetails({
|
|
354
|
+
name: fieldValue.originalFileName,
|
|
355
|
+
type: fieldValue.mimeType ? fieldValue.mimeType : fieldValue.type,
|
|
356
|
+
fileUrl: fileUrl,
|
|
357
|
+
fileSize: fieldValue.fileSize,
|
|
358
|
+
});
|
|
359
|
+
formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);
|
|
357
360
|
}, [formik.values, fieldLayoutInfo.attrs.name]);
|
|
358
361
|
var _v = useDropzone({
|
|
359
362
|
onDrop: handleDropImage,
|
|
@@ -381,35 +384,31 @@ export var DefaultMediaSingleFormEditWidget = function (_a) {
|
|
|
381
384
|
setOpenLightbox: setOpenLightbox
|
|
382
385
|
};
|
|
383
386
|
var handleFileView = function (url) {
|
|
384
|
-
var
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
];
|
|
391
|
-
var fileUrl = (url === null || url === void 0 ? void 0 : url.fileUrl) || "";
|
|
392
|
-
var cleanUrl = fileUrl.split("?")[0];
|
|
393
|
-
var ext = (_a = cleanUrl.split(".").pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
394
|
-
if (ext && downloadOnlyExt.includes(ext)) {
|
|
395
|
-
var link = document.createElement('a');
|
|
396
|
-
link.href = url.fileUrl;
|
|
397
|
-
link.download = ''; // or specify a file name like 'file.pdf'
|
|
398
|
-
link.target = '_blank';
|
|
399
|
-
document.body.appendChild(link);
|
|
400
|
-
link.click();
|
|
401
|
-
document.body.removeChild(link);
|
|
402
|
-
}
|
|
403
|
-
else {
|
|
387
|
+
var previewKind = getMediaPreviewKind({
|
|
388
|
+
url: url === null || url === void 0 ? void 0 : url.fileUrl,
|
|
389
|
+
fileName: url === null || url === void 0 ? void 0 : url.name,
|
|
390
|
+
mimeType: url === null || url === void 0 ? void 0 : url.type,
|
|
391
|
+
});
|
|
392
|
+
if (isLightboxMediaKind(previewKind)) {
|
|
404
393
|
setLightboxUrls === null || setLightboxUrls === void 0 ? void 0 : setLightboxUrls([
|
|
405
|
-
{
|
|
394
|
+
{
|
|
395
|
+
src: url.fileUrl,
|
|
396
|
+
downloadUrl: url.fileUrl,
|
|
397
|
+
type: previewKind === "video" ? "video" : undefined
|
|
398
|
+
},
|
|
406
399
|
]);
|
|
407
400
|
setOpenLightbox === null || setOpenLightbox === void 0 ? void 0 : setOpenLightbox(true);
|
|
401
|
+
return;
|
|
408
402
|
}
|
|
403
|
+
openMediaInNewTab(url === null || url === void 0 ? void 0 : url.fileUrl);
|
|
409
404
|
};
|
|
410
405
|
return (_jsxs("div", { style: (isFieldDisabled === true || isFieldReadonly === true) ? { filter: 'opacity(50%)', pointerEvents: 'none' } : {}, children: [_jsxs("div", { className: "".concat(styles.fieldWrapper, " relative"), children: [showFieldLabel != false &&
|
|
411
406
|
_jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsxs("div", { className: "relative", children: [_jsxs("div", __assign({}, getRootProps(), { className: "solid-dropzone-wrapper", children: [_jsx("input", __assign({}, getInputProps())), _jsx(DropzonePlaceholder, { mediaTypes: fieldMetadata.mediaTypes, mediaMaxSizeKb: fieldMetadata.mediaMaxSizeKb })] })), isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (_jsx("div", { className: "absolute mt-1", children: _jsx(SolidMessage, { severity: "error", text: (_p = formik === null || formik === void 0 ? void 0 : formik.errors[fieldLayoutInfo.attrs.name]) === null || _p === void 0 ? void 0 : _p.toString() }) }))] }), fileSizeError &&
|
|
412
|
-
_jsx(SolidMessage, { severity: "error", text: fileSizeError === null || fileSizeError === void 0 ? void 0 : fileSizeError.toString() }), fileDetails && (_jsx("div", { className: "".concat(styles.mediaAttachmentCard, " mt-4"), children: _jsxs("div", { className: "".concat(styles.mediaAttachmentRow, " flex items-center md:gap-2"), children: [_jsx(FileReaderExt, { fileDetails: fileDetails }), _jsxs("div", { className: "".concat(styles.mediaAttachmentMeta, " w-full"), children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsx("button", { type: "button", className: styles.mediaAttachmentName, onClick: function () { return handleFileView(fileDetails); }, title: fileDetails.name, children: fileDetails.name }), _jsxs("div", { className: "".concat(styles.mediaAttachmentActions, " flex items-center gap-2"), children: [_jsx("button", { type: "button", className: "solid-file-icon-btn", disabled: isFieldDisabled || isFieldReadonly, "aria-label": "Download file", onClick: function () {
|
|
407
|
+
_jsx(SolidMessage, { severity: "error", text: fileSizeError === null || fileSizeError === void 0 ? void 0 : fileSizeError.toString() }), fileDetails && (_jsx("div", { className: "".concat(styles.mediaAttachmentCard, " mt-4"), children: _jsxs("div", { className: "".concat(styles.mediaAttachmentRow, " flex items-center md:gap-2"), children: [_jsx(FileReaderExt, { fileDetails: fileDetails }), _jsxs("div", { className: "".concat(styles.mediaAttachmentMeta, " w-full"), children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsx("button", { type: "button", className: styles.mediaAttachmentName, onClick: function () { return handleFileView(fileDetails); }, title: fileDetails.name, children: fileDetails.name }), _jsxs("div", { className: "".concat(styles.mediaAttachmentActions, " flex items-center gap-2"), children: [_jsx("button", { type: "button", className: "solid-file-icon-btn", disabled: isFieldDisabled || isFieldReadonly, "aria-label": "Download file", onClick: function (event) {
|
|
408
|
+
event.preventDefault();
|
|
409
|
+
event.stopPropagation();
|
|
410
|
+
downloadMediaFile(fileDetails === null || fileDetails === void 0 ? void 0 : fileDetails.fileUrl, fileDetails === null || fileDetails === void 0 ? void 0 : fileDetails.name);
|
|
411
|
+
}, children: _jsx(SolidIcon, { name: "si-download", "aria-hidden": true }) }), _jsx("button", { type: "button", className: "solid-file-icon-btn is-danger", disabled: isFieldDisabled || isFieldReadonly, "aria-label": "Remove file", onClick: function () { return setDeleteImageDialogVisible(true); }, children: _jsx(SolidIcon, { name: "si-times", "aria-hidden": true }) })] })] }), _jsx("div", { className: styles.mediaAttachmentSize, children: fileDetails && formatFileSize(fileDetails.fileSize) })] })] }) }))] }), _jsxs(SolidDialog, { open: isDeleteImageDialogVisible, onOpenChange: setDeleteImageDialogVisible, className: "solid-shadcn-confirm-dialog", children: [_jsxs(SolidDialogHeader, { className: "solid-shadcn-dialog-head", children: [_jsx(SolidDialogTitle, { children: "Confirm Delete" }), _jsx(SolidDialogClose, {})] }), _jsx(SolidDialogSeparator, { className: "solid-shadcn-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-shadcn-dialog-body", children: _jsx("p", { className: "solid-shadcn-dialog-text", children: "Are you sure you want to delete media?" }) }), _jsxs(SolidDialogFooter, { className: "solid-shadcn-dialog-actions", children: [_jsx(SolidButton, { variant: "destructive", size: "sm", autoFocus: true, onClick: handleCancelUpload, children: "Delete" }), _jsx(SolidButton, { variant: "outline", size: "sm", onClick: function () { return setDeleteImageDialogVisible(false); }, children: "Cancel" })] })] }), _jsxs(SolidDialog, { open: isReplaceImageDialogVisible, onOpenChange: setReplaceImageDialogVisible, className: "solid-shadcn-confirm-dialog", children: [_jsxs(SolidDialogHeader, { className: "solid-shadcn-dialog-head", children: [_jsx(SolidDialogTitle, { children: "Replace Media" }), _jsx(SolidDialogClose, {})] }), _jsx(SolidDialogSeparator, { className: "solid-shadcn-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-shadcn-dialog-body", children: _jsx("p", { className: "solid-shadcn-dialog-text", children: "A media file is already uploaded. Do you want to delete it and upload a new one?" }) }), _jsxs(SolidDialogFooter, { className: "solid-shadcn-dialog-actions", children: [_jsx(SolidButton, { variant: "destructive", size: "sm", onClick: handleReplaceFile, children: "Replace" }), _jsx(SolidButton, { variant: "outline", size: "sm", onClick: function () { return setReplaceImageDialogVisible(false); }, children: "Cancel" })] })] })] }));
|
|
413
412
|
};
|
|
414
413
|
export var DefaultMediaSingleFormViewWidget = function (_a) {
|
|
415
414
|
var _b, _c, _d;
|
|
@@ -429,58 +428,56 @@ export var DefaultMediaSingleFormViewWidget = function (_a) {
|
|
|
429
428
|
};
|
|
430
429
|
useEffect(function () {
|
|
431
430
|
var fieldValue = formik === null || formik === void 0 ? void 0 : formik.values[fieldLayoutInfo.attrs.name];
|
|
432
|
-
if (fieldValue
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
fileName = fieldValue.name;
|
|
439
|
-
fileSize = fieldValue.size;
|
|
440
|
-
}
|
|
441
|
-
else if (fieldValue._full_url) {
|
|
442
|
-
fileUrl = fieldValue._full_url;
|
|
443
|
-
fileName = fieldValue.originalFileName;
|
|
444
|
-
fileSize = fieldValue.fileSize;
|
|
445
|
-
}
|
|
431
|
+
if (!fieldValue || typeof fieldValue !== "object") {
|
|
432
|
+
setFileDetails(null);
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
if (fieldValue instanceof File) {
|
|
436
|
+
var fileUrl_2 = URL.createObjectURL(fieldValue);
|
|
446
437
|
setFileDetails({
|
|
447
|
-
name:
|
|
448
|
-
type: fieldValue.
|
|
449
|
-
fileUrl:
|
|
450
|
-
fileSize:
|
|
438
|
+
name: fieldValue.name,
|
|
439
|
+
type: fieldValue.type,
|
|
440
|
+
fileUrl: fileUrl_2,
|
|
441
|
+
fileSize: fieldValue.size,
|
|
451
442
|
});
|
|
452
|
-
|
|
453
|
-
|
|
443
|
+
return function () { return URL.revokeObjectURL(fileUrl_2); };
|
|
444
|
+
}
|
|
445
|
+
var fileUrl = fieldValue._full_url;
|
|
446
|
+
if (!fileUrl) {
|
|
447
|
+
setFileDetails(null);
|
|
448
|
+
return;
|
|
454
449
|
}
|
|
450
|
+
setFileDetails({
|
|
451
|
+
name: fieldValue.originalFileName,
|
|
452
|
+
type: fieldValue.mimeType ? fieldValue.mimeType : fieldValue.type,
|
|
453
|
+
fileUrl: fileUrl,
|
|
454
|
+
fileSize: fieldValue.fileSize,
|
|
455
|
+
});
|
|
455
456
|
}, [formik.values, fieldLayoutInfo.attrs.name]);
|
|
456
457
|
var handleFileView = function (url) {
|
|
457
|
-
var
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
];
|
|
464
|
-
var fileUrl = (url === null || url === void 0 ? void 0 : url.fileUrl) || "";
|
|
465
|
-
var cleanUrl = fileUrl.split("?")[0];
|
|
466
|
-
var ext = (_a = cleanUrl.split(".").pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
467
|
-
if (ext && downloadOnlyExt.includes(ext)) {
|
|
468
|
-
var link = document.createElement('a');
|
|
469
|
-
link.href = url.fileUrl;
|
|
470
|
-
link.download = ''; // or specify a file name like 'file.pdf'
|
|
471
|
-
link.target = '_blank';
|
|
472
|
-
document.body.appendChild(link);
|
|
473
|
-
link.click();
|
|
474
|
-
document.body.removeChild(link);
|
|
475
|
-
}
|
|
476
|
-
else {
|
|
458
|
+
var previewKind = getMediaPreviewKind({
|
|
459
|
+
url: url === null || url === void 0 ? void 0 : url.fileUrl,
|
|
460
|
+
fileName: url === null || url === void 0 ? void 0 : url.name,
|
|
461
|
+
mimeType: url === null || url === void 0 ? void 0 : url.type,
|
|
462
|
+
});
|
|
463
|
+
if (isLightboxMediaKind(previewKind)) {
|
|
477
464
|
setLightboxUrls === null || setLightboxUrls === void 0 ? void 0 : setLightboxUrls([
|
|
478
|
-
{
|
|
465
|
+
{
|
|
466
|
+
src: url.fileUrl,
|
|
467
|
+
downloadUrl: url.fileUrl,
|
|
468
|
+
type: previewKind === "video" ? "video" : undefined
|
|
469
|
+
},
|
|
479
470
|
]);
|
|
480
471
|
setOpenLightbox === null || setOpenLightbox === void 0 ? void 0 : setOpenLightbox(true);
|
|
472
|
+
return;
|
|
481
473
|
}
|
|
474
|
+
openMediaInNewTab(url === null || url === void 0 ? void 0 : url.fileUrl);
|
|
482
475
|
};
|
|
483
476
|
return (_jsxs("div", { className: "".concat(styles.fieldViewWrapper, " relative"), children: [showFieldLabel != false &&
|
|
484
|
-
_jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldViewLabel, " form-field-label"), children: [fieldLabel, _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), fileDetails && (_jsx("div", { className: "".concat(styles.mediaAttachmentCard, " ").concat(styles.mediaAttachmentCardView, " mt-4"), children: _jsxs("div", { className: "".concat(styles.mediaAttachmentRow, " flex items-center md:gap-2"), children: [_jsx(FileReaderExt, { fileDetails: fileDetails }), _jsxs("div", { className: "".concat(styles.mediaAttachmentMeta, " w-full"), children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsx("button", { type: "button", className: styles.mediaAttachmentName, onClick: function () { return handleFileView(fileDetails); }, title: fileDetails.name, children: fileDetails.name }), _jsx("div", { className: "".concat(styles.mediaAttachmentActions, " flex items-center md:gap-2"), children: _jsx("button", { type: "button", className: "solid-file-icon-btn", "aria-label": "Download file", onClick: function () {
|
|
477
|
+
_jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldViewLabel, " form-field-label"), children: [fieldLabel, _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), fileDetails && (_jsx("div", { className: "".concat(styles.mediaAttachmentCard, " ").concat(styles.mediaAttachmentCardView, " mt-4"), children: _jsxs("div", { className: "".concat(styles.mediaAttachmentRow, " flex items-center md:gap-2"), children: [_jsx(FileReaderExt, { fileDetails: fileDetails }), _jsxs("div", { className: "".concat(styles.mediaAttachmentMeta, " w-full"), children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsx("button", { type: "button", className: styles.mediaAttachmentName, onClick: function () { return handleFileView(fileDetails); }, title: fileDetails.name, children: fileDetails.name }), _jsx("div", { className: "".concat(styles.mediaAttachmentActions, " flex items-center md:gap-2"), children: _jsx("button", { type: "button", className: "solid-file-icon-btn", "aria-label": "Download file", onClick: function (event) {
|
|
478
|
+
event.preventDefault();
|
|
479
|
+
event.stopPropagation();
|
|
480
|
+
downloadMediaFile(fileDetails === null || fileDetails === void 0 ? void 0 : fileDetails.fileUrl, fileDetails === null || fileDetails === void 0 ? void 0 : fileDetails.name);
|
|
481
|
+
}, children: _jsx(SolidIcon, { name: "si-download", "aria-hidden": true }) }) })] }), _jsx("div", { className: styles.mediaAttachmentSize, children: fileDetails && formatFileSize(fileDetails.fileSize) })] })] }) }))] }));
|
|
485
482
|
};
|
|
486
483
|
//# sourceMappingURL=SolidMediaSingleField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidMediaSingleField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidMediaSingleField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { DropzonePlaceholder } from \"../../../../components/common/DropzonePlaceholder\";\nimport { useDeleteMediaMutation } from \"../../../../redux/api/mediaApi\";\nimport { SolidButton } from \"../../../shad-cn-ui/SolidButton\";\nimport {\n SolidDialog,\n SolidDialogBody,\n SolidDialogClose,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n} from \"../../../shad-cn-ui/SolidDialog\";\nimport { SolidMessage } from \"../../../shad-cn-ui/SolidMessage\";\nimport { SolidProgressBar } from \"../../../shad-cn-ui/SolidProgressBar\";\nimport { useEffect, useState } from \"react\";\nimport { useDropzone } from \"react-dropzone\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { FileReaderExt } from \"../../../../components/common/FileReaderExt\";\nimport getAcceptedFileTypes from \"../../../../helpers/getAcceptedFileTypes\";\nimport { downloadMediaFile } from \"../../../../helpers/downloadMediaFile\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidMediaFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\nimport { SolidIcon } from \"../../../shad-cn-ui\";\nimport { getPersistedMediaId } from \"./mediaFieldUtils\";\n\nexport class SolidMediaSingleField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n private setLightboxUrls?: (urls: { src: string; downloadUrl: string }[]) => void;\n private setOpenLightbox?: (open: boolean) => void;\n constructor(fieldContext: SolidFieldProps, setLightboxUrls?: (urls: { src: string; downloadUrl: string }[]) => void,\n setOpenLightbox?: (open: boolean) => void) {\n this.fieldContext = fieldContext;\n this.setLightboxUrls = setLightboxUrls;\n this.setOpenLightbox = setOpenLightbox;\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n if (value instanceof File) {\n formData.append(fieldLayoutInfo.attrs.name, value);\n }\n }\n\n initialValue(): any {\n const mediaUrls = this.fieldContext.data && this.fieldContext.data._media && this.fieldContext.data._media[this.fieldContext.field.attrs.name][0];\n return mediaUrls;\n }\n\n validationSchema(): Yup.Schema {\n // let schema: Yup.StringSchema = Yup.object();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n // Dynamically determine the base type based on the 'required' flag\n\n // Define base schema\n let schema: Yup.MixedSchema<File | object>;\n\n if (fieldMetadata.required) {\n // For required fields: disallow null and undefined\n schema = Yup.mixed<File | object>()\n .required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))\n .test(\n ERROR_MESSAGES.FILE_OBJECT,\n ERROR_MESSAGES.MUST_BE_FILE_OBJECT(fieldLabel),\n (value) =>\n value instanceof File || typeof value === \"object\" // Validate File or object\n );\n } else {\n // For optional fields: allow null or undefined\n schema = Yup.mixed<any>()\n .nullable() // Allow null explicitly\n .test(\n ERROR_MESSAGES.FILE_OBJECT,\n ERROR_MESSAGES.MUST_BE_FILE_OBJECT(fieldLabel),\n (value) =>\n value === null || // Allow null\n value === undefined || // Allow undefined\n value instanceof File || // Allow File\n value === 'false' ||\n typeof value === \"object\" // Allow object\n );\n }\n return schema;\n\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultMediaSingleFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultMediaSingleFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidMediaFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n setLightboxUrls: this.setLightboxUrls,\n setOpenLightbox: this.setOpenLightbox\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\n\n\nexport const DefaultMediaSingleFormEditWidget = ({ formik, fieldContext, setLightboxUrls, setOpenLightbox }: SolidMediaFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n const viewMode: string = fieldContext.viewMode;\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n\n const isFieldDisabled = formDisabled || fieldDisabled;\n const isFieldReadonly = formReadonly || fieldReadonly || readOnlyPermission;\n\n const [isDeleteImageDialogVisible, setDeleteImageDialogVisible] = useState(false);\n const [fileDetails, setFileDetails] = useState<{ name: string; type: string, fileUrl: string, fileSize: number } | null>(null);\n const [isReplaceImageDialogVisible, setReplaceImageDialogVisible] = useState(false);\n const [newFileToUpload, setNewFileToUpload] = useState<any>(null);\n const [fileSizeError, setFileSizeError] = useState<string | null>(null);\n\n const formatFileSize = (size: number) => {\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n const [deleteMedia] = useDeleteMediaMutation();\n\n const clearSelectedFile = () => {\n setFileDetails(null);\n fieldContext.onChange(\n {\n target: {\n name: fieldLayoutInfo.attrs.name,\n value: null,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n };\n\n const deletePersistedMediaIfNeeded = async (value: unknown) => {\n console.log(\"DeletePersistedMedia Called\");\n \n const mediaId = getPersistedMediaId(value);\n if (mediaId !== null) {\n await deleteMedia(mediaId).unwrap();\n }\n };\n\n const handleCancelUpload = async (e: React.MouseEvent) => {\n console.log(\"handleCancelUpload called\");\n e.stopPropagation();\n try {\n await deletePersistedMediaIfNeeded(formik?.values[fieldLayoutInfo.attrs.name]);\n clearSelectedFile();\n } catch (error) {\n console.error(ERROR_MESSAGES.ERROR_DELETING_FILE, error);\n }\n setDeleteImageDialogVisible(false);\n };\n\n const handleDropImage = (acceptedFiles: any[]) => {\n const file = acceptedFiles[0];\n if (!file) return;\n setFileSizeError(null);\n if (fileDetails) {\n // If a file is already uploaded, show the confirmation dialog\n setNewFileToUpload(file);\n setReplaceImageDialogVisible(true);\n } else {\n // If no file is present, proceed with upload\n uploadFile(file);\n }\n };\n\n const uploadFile = (file: File) => {\n setFileDetails({\n name: file.name,\n type: file.type,\n fileUrl: URL.createObjectURL(file),\n fileSize: file.size\n });\n\n const reader = new FileReader();\n reader.readAsDataURL(file);\n fieldContext.onChange(\n {\n target: {\n name: fieldLayoutInfo.attrs.name,\n value: file,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n };\n\n const handleReplaceFile = async () => {\n try {\n await deletePersistedMediaIfNeeded(formik?.values[fieldLayoutInfo.attrs.name]);\n clearSelectedFile();\n\n // Proceed with uploading new file\n if (newFileToUpload) {\n uploadFile(newFileToUpload);\n setNewFileToUpload(null);\n }\n } catch (error) {\n console.error(ERROR_MESSAGES.ERROR_DELETING_FILE, error);\n }\n setReplaceImageDialogVisible(false);\n };\n\n useEffect(() => {\n const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];\n\n if (fieldValue && typeof fieldValue === \"object\") {\n let fileUrl = \"\";\n let fileName = \"Unknown File\";\n let fileSize = 0;\n\n if (fieldValue instanceof File) {\n fileUrl = URL.createObjectURL(fieldValue);\n fileName = fieldValue.name;\n fileSize = fieldValue.size;\n } else if (fieldValue._full_url) {\n fileUrl = fieldValue._full_url;\n fileName = fieldValue.originalFileName;\n fileSize = fieldValue.fileSize;\n }\n\n setFileDetails({\n name: fileName,\n type: fieldValue.mimeType ? fieldValue.mimeType : fieldValue.type,\n fileUrl,\n fileSize\n });\n\n // Ensure formik has the correct value\n formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);\n } else {\n setFileDetails(null);\n }\n }, [formik.values, fieldLayoutInfo.attrs.name]);\n\n const {\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n isDragActive: isDragActive,\n } = useDropzone({\n onDrop: handleDropImage,\n onDropRejected: (fileRejections) => {\n const rejection = fileRejections[0];\n const sizeError = rejection.errors.find(err => err.code === 'file-too-large');\n if (sizeError) {\n setFileSizeError(ERROR_MESSAGES.FILE_TOO_LAREG(fieldMetadata.mediaMaxSizeKb));\n } else {\n setFileSizeError(rejection.errors[0]?.message || ERROR_MESSAGES.FILE_NOT_ACCEPT);\n }\n },\n accept: getAcceptedFileTypes(fieldMetadata.mediaTypes),\n maxSize: fieldMetadata.mediaMaxSizeKb * 1024,\n disabled: isFieldDisabled || isFieldReadonly\n });\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n let DynamicWidget = getExtensionComponent(\"SolidFormFieldViewMediaSingleWidget\");\n const widgetProps = {\n formik: formik,\n fieldContext: fieldContext,\n setLightboxUrls: setLightboxUrls,\n setOpenLightbox: setOpenLightbox\n }\n\n const handleFileView = (url: any) => {\n const downloadOnlyExt = [\n \"txt\", \"zip\", \"rar\",\n \"doc\", \"docx\",\n \"xls\", \"xlsx\",\n \"ppt\", \"pptx\"\n ];\n\n const fileUrl = url?.fileUrl || \"\";\n const cleanUrl = fileUrl.split(\"?\")[0];\n const ext = cleanUrl.split(\".\").pop()?.toLowerCase();\n\n if (ext && downloadOnlyExt.includes(ext)) {\n const link = document.createElement('a');\n link.href = url.fileUrl;\n link.download = ''; // or specify a file name like 'file.pdf'\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n } else {\n setLightboxUrls?.([\n { src: url.fileUrl, downloadUrl: url.fileUrl },\n ]);\n setOpenLightbox?.(true);\n }\n }\n\n\n return (\n <div style={(isFieldDisabled === true || isFieldReadonly === true) ? { filter: 'opacity(50%)', pointerEvents: 'none' } : {}}>\n <div className={`${styles.fieldWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>{fieldLabel}\n {fieldMetadata.required && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n {/* {fieldDescription && <span className=\"form_field_help\">({fieldDescription}) </span>} */}\n </label>\n }\n <div className=\"relative\">\n <div\n {...getRootProps()}\n className=\"solid-dropzone-wrapper\"\n >\n <input {...getInputProps()} />\n <DropzonePlaceholder\n mediaTypes={fieldMetadata.mediaTypes}\n mediaMaxSizeKb={fieldMetadata.mediaMaxSizeKb}\n />\n </div>\n {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (\n <div className=\"absolute mt-1\">\n <SolidMessage severity=\"error\" text={formik?.errors[fieldLayoutInfo.attrs.name]?.toString()} />\n </div>\n )}\n </div>\n {\n fileSizeError &&\n <SolidMessage severity=\"error\" text={fileSizeError?.toString()} />\n }\n {fileDetails && (\n <div className={`${styles.mediaAttachmentCard} mt-4`}>\n <div className={`${styles.mediaAttachmentRow} flex items-center md:gap-2`}>\n <FileReaderExt fileDetails={fileDetails} />\n <div className={`${styles.mediaAttachmentMeta} w-full`}>\n <div className=\"flex items-start justify-between gap-4\">\n <button\n type=\"button\"\n className={styles.mediaAttachmentName}\n onClick={() => handleFileView(fileDetails)}\n title={fileDetails.name}\n >\n {fileDetails.name}\n </button>\n <div className={`${styles.mediaAttachmentActions} flex items-center gap-2`}>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn\"\n disabled={isFieldDisabled || isFieldReadonly}\n aria-label=\"Download file\"\n onClick={() => downloadMediaFile(fileDetails?.fileUrl, fileDetails?.name)}\n >\n <SolidIcon name=\"si-download\" aria-hidden />\n </button>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn is-danger\"\n disabled={isFieldDisabled || isFieldReadonly}\n aria-label=\"Remove file\"\n onClick={() => setDeleteImageDialogVisible(true)}\n >\n <SolidIcon name=\"si-times\" aria-hidden />\n </button>\n </div>\n </div>\n <div className={styles.mediaAttachmentSize}>\n {fileDetails && formatFileSize(fileDetails.fileSize)}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n <SolidDialog\n open={isDeleteImageDialogVisible}\n onOpenChange={setDeleteImageDialogVisible}\n className=\"solid-shadcn-confirm-dialog\"\n >\n <SolidDialogHeader className=\"solid-shadcn-dialog-head\">\n <SolidDialogTitle>Confirm Delete</SolidDialogTitle>\n <SolidDialogClose />\n </SolidDialogHeader>\n <SolidDialogSeparator className=\"solid-shadcn-dialog-sep\" />\n <SolidDialogBody className=\"solid-shadcn-dialog-body\">\n <p className=\"solid-shadcn-dialog-text\">Are you sure you want to delete media?</p>\n </SolidDialogBody>\n <SolidDialogFooter className=\"solid-shadcn-dialog-actions\">\n <SolidButton variant=\"destructive\" size=\"sm\" autoFocus onClick={handleCancelUpload}>\n Delete\n </SolidButton>\n <SolidButton variant=\"outline\" size=\"sm\" onClick={() => setDeleteImageDialogVisible(false)}>\n Cancel\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n <SolidDialog\n open={isReplaceImageDialogVisible}\n onOpenChange={setReplaceImageDialogVisible}\n className=\"solid-shadcn-confirm-dialog\"\n >\n <SolidDialogHeader className=\"solid-shadcn-dialog-head\">\n <SolidDialogTitle>Replace Media</SolidDialogTitle>\n <SolidDialogClose />\n </SolidDialogHeader>\n <SolidDialogSeparator className=\"solid-shadcn-dialog-sep\" />\n <SolidDialogBody className=\"solid-shadcn-dialog-body\">\n <p className=\"solid-shadcn-dialog-text\">A media file is already uploaded. Do you want to delete it and upload a new one?</p>\n </SolidDialogBody>\n <SolidDialogFooter className=\"solid-shadcn-dialog-actions\">\n <SolidButton variant=\"destructive\" size=\"sm\" onClick={handleReplaceFile}>\n Replace\n </SolidButton>\n <SolidButton variant=\"outline\" size=\"sm\" onClick={() => setReplaceImageDialogVisible(false)}>\n Cancel\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n </div>\n );\n}\n\nexport const DefaultMediaSingleFormViewWidget = ({ formik, fieldContext, setLightboxUrls, setOpenLightbox }: SolidMediaFormFieldWidgetProps) => {\n const [fileDetails, setFileDetails] = useState<{ name: string; type: string, fileUrl: string, fileSize: number } | null>(null);\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n\n // useEffect(() => { formik.setFieldValue(fieldLayoutInfo.attrs.name, \"false\") }, [])\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const formatFileSize = (size: number) => {\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n useEffect(() => {\n const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];\n\n if (fieldValue && typeof fieldValue === \"object\") {\n let fileUrl = \"\";\n let fileName = \"Unknown File\";\n let fileSize = 0;\n\n if (fieldValue instanceof File) {\n fileUrl = URL.createObjectURL(fieldValue);\n fileName = fieldValue.name;\n fileSize = fieldValue.size;\n } else if (fieldValue._full_url) {\n fileUrl = fieldValue._full_url;\n fileName = fieldValue.originalFileName;\n fileSize = fieldValue.fileSize;\n }\n\n setFileDetails({\n name: fileName,\n type: fieldValue.mimeType ? fieldValue.mimeType : fieldValue.type,\n fileUrl,\n fileSize\n });\n // Ensure formik has the correct value\n formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);\n }\n }, [formik.values, fieldLayoutInfo.attrs.name]);\n\n const handleFileView = (url: any) => {\n const downloadOnlyExt = [\n \"txt\", \"zip\", \"rar\",\n \"doc\", \"docx\",\n \"xls\", \"xlsx\",\n \"ppt\", \"pptx\"\n ];\n\n const fileUrl = url?.fileUrl || \"\";\n const cleanUrl = fileUrl.split(\"?\")[0];\n const ext = cleanUrl.split(\".\").pop()?.toLowerCase();\n\n if (ext && downloadOnlyExt.includes(ext)) {\n const link = document.createElement('a');\n link.href = url.fileUrl;\n link.download = ''; // or specify a file name like 'file.pdf'\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n } else {\n setLightboxUrls?.([\n { src: url.fileUrl, downloadUrl: url.fileUrl },\n ]);\n setOpenLightbox?.(true);\n }\n }\n\n return (\n <div className={`${styles.fieldViewWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n\n {fileDetails && (\n <div className={`${styles.mediaAttachmentCard} ${styles.mediaAttachmentCardView} mt-4`}>\n <div className={`${styles.mediaAttachmentRow} flex items-center md:gap-2`}>\n <FileReaderExt fileDetails={fileDetails} />\n <div className={`${styles.mediaAttachmentMeta} w-full`}>\n <div className=\"flex items-start justify-between gap-4\">\n <button\n type=\"button\"\n className={styles.mediaAttachmentName}\n onClick={() => handleFileView(fileDetails)}\n title={fileDetails.name}\n >\n {fileDetails.name}\n </button>\n <div className={`${styles.mediaAttachmentActions} flex items-center md:gap-2`}>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn\"\n aria-label=\"Download file\"\n onClick={() => downloadMediaFile(fileDetails?.fileUrl, fileDetails?.name)}\n >\n <SolidIcon name=\"si-download\" aria-hidden />\n </button>\n </div>\n </div>\n <div className={styles.mediaAttachmentSize}>\n {fileDetails && formatFileSize(fileDetails.fileSize)}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidMediaSingleField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidMediaSingleField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { DropzonePlaceholder } from \"../../../../components/common/DropzonePlaceholder\";\nimport { useDeleteMediaMutation } from \"../../../../redux/api/mediaApi\";\nimport { SolidButton } from \"../../../shad-cn-ui/SolidButton\";\nimport {\n SolidDialog,\n SolidDialogBody,\n SolidDialogClose,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n} from \"../../../shad-cn-ui/SolidDialog\";\nimport { SolidMessage } from \"../../../shad-cn-ui/SolidMessage\";\nimport { SolidProgressBar } from \"../../../shad-cn-ui/SolidProgressBar\";\nimport { useEffect, useState } from \"react\";\nimport { useDropzone } from \"react-dropzone\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { FileReaderExt } from \"../../../../components/common/FileReaderExt\";\nimport getAcceptedFileTypes from \"../../../../helpers/getAcceptedFileTypes\";\nimport { downloadMediaFile } from \"../../../../helpers/downloadMediaFile\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { openMediaInNewTab } from \"../../../../helpers/mediaUrl\";\nimport { getMediaPreviewKind, isLightboxMediaKind } from \"../../../../helpers/mediaType\";\nimport { SolidMediaFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\nimport { SolidIcon } from \"../../../shad-cn-ui\";\nimport { getPersistedMediaId } from \"./mediaFieldUtils\";\n\ntype SingleMediaFileDetail = {\n name: string;\n type: string;\n fileUrl: string;\n fileSize: number;\n};\n\nexport class SolidMediaSingleField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n private setLightboxUrls?: (urls: { src: string; downloadUrl: string }[]) => void;\n private setOpenLightbox?: (open: boolean) => void;\n constructor(fieldContext: SolidFieldProps, setLightboxUrls?: (urls: { src: string; downloadUrl: string }[]) => void,\n setOpenLightbox?: (open: boolean) => void) {\n this.fieldContext = fieldContext;\n this.setLightboxUrls = setLightboxUrls;\n this.setOpenLightbox = setOpenLightbox;\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n if (value instanceof File) {\n formData.append(fieldLayoutInfo.attrs.name, value);\n }\n }\n\n initialValue(): any {\n const mediaUrls = this.fieldContext.data && this.fieldContext.data._media && this.fieldContext.data._media[this.fieldContext.field.attrs.name][0];\n return mediaUrls;\n }\n\n validationSchema(): Yup.Schema {\n // let schema: Yup.StringSchema = Yup.object();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n // Dynamically determine the base type based on the 'required' flag\n\n // Define base schema\n let schema: Yup.MixedSchema<File | object>;\n\n if (fieldMetadata.required) {\n // For required fields: disallow null and undefined\n schema = Yup.mixed<File | object>()\n .required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))\n .test(\n ERROR_MESSAGES.FILE_OBJECT,\n ERROR_MESSAGES.MUST_BE_FILE_OBJECT(fieldLabel),\n (value) =>\n value instanceof File || typeof value === \"object\" // Validate File or object\n );\n } else {\n // For optional fields: allow null or undefined\n schema = Yup.mixed<any>()\n .nullable() // Allow null explicitly\n .test(\n ERROR_MESSAGES.FILE_OBJECT,\n ERROR_MESSAGES.MUST_BE_FILE_OBJECT(fieldLabel),\n (value) =>\n value === null || // Allow null\n value === undefined || // Allow undefined\n value instanceof File || // Allow File\n value === 'false' ||\n typeof value === \"object\" // Allow object\n );\n }\n return schema;\n\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultMediaSingleFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultMediaSingleFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidMediaFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n setLightboxUrls: this.setLightboxUrls,\n setOpenLightbox: this.setOpenLightbox\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\n\n\nexport const DefaultMediaSingleFormEditWidget = ({ formik, fieldContext, setLightboxUrls, setOpenLightbox }: SolidMediaFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n const viewMode: string = fieldContext.viewMode;\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n\n const isFieldDisabled = formDisabled || fieldDisabled;\n const isFieldReadonly = formReadonly || fieldReadonly || readOnlyPermission;\n\n const [isDeleteImageDialogVisible, setDeleteImageDialogVisible] = useState(false);\n const [fileDetails, setFileDetails] = useState<SingleMediaFileDetail | null>(null);\n const [isReplaceImageDialogVisible, setReplaceImageDialogVisible] = useState(false);\n const [newFileToUpload, setNewFileToUpload] = useState<any>(null);\n const [fileSizeError, setFileSizeError] = useState<string | null>(null);\n\n const formatFileSize = (size: number) => {\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n const [deleteMedia] = useDeleteMediaMutation();\n\n const clearSelectedFile = () => {\n setFileDetails(null);\n fieldContext.onChange(\n {\n target: {\n name: fieldLayoutInfo.attrs.name,\n value: null,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n };\n\n const deletePersistedMediaIfNeeded = async (value: unknown) => {\n console.log(\"DeletePersistedMedia Called\");\n \n const mediaId = getPersistedMediaId(value);\n if (mediaId !== null) {\n await deleteMedia(mediaId).unwrap();\n }\n };\n\n const handleCancelUpload = async (e: React.MouseEvent) => {\n console.log(\"handleCancelUpload called\");\n e.stopPropagation();\n try {\n await deletePersistedMediaIfNeeded(formik?.values[fieldLayoutInfo.attrs.name]);\n clearSelectedFile();\n } catch (error) {\n console.error(ERROR_MESSAGES.ERROR_DELETING_FILE, error);\n }\n setDeleteImageDialogVisible(false);\n };\n\n const handleDropImage = (acceptedFiles: any[]) => {\n const file = acceptedFiles[0];\n if (!file) return;\n setFileSizeError(null);\n if (fileDetails) {\n // If a file is already uploaded, show the confirmation dialog\n setNewFileToUpload(file);\n setReplaceImageDialogVisible(true);\n } else {\n // If no file is present, proceed with upload\n uploadFile(file);\n }\n };\n\n const uploadFile = (file: File) => {\n setFileDetails({\n name: file.name,\n type: file.type,\n fileUrl: URL.createObjectURL(file),\n fileSize: file.size\n });\n\n const reader = new FileReader();\n reader.readAsDataURL(file);\n fieldContext.onChange(\n {\n target: {\n name: fieldLayoutInfo.attrs.name,\n value: file,\n type: \"text\",\n },\n } as any,\n \"onFieldChange\"\n );\n };\n\n const handleReplaceFile = async () => {\n try {\n await deletePersistedMediaIfNeeded(formik?.values[fieldLayoutInfo.attrs.name]);\n clearSelectedFile();\n\n // Proceed with uploading new file\n if (newFileToUpload) {\n uploadFile(newFileToUpload);\n setNewFileToUpload(null);\n }\n } catch (error) {\n console.error(ERROR_MESSAGES.ERROR_DELETING_FILE, error);\n }\n setReplaceImageDialogVisible(false);\n };\n\n useEffect(() => {\n const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];\n if (!fieldValue || typeof fieldValue !== \"object\") {\n setFileDetails(null);\n return;\n }\n\n if (fieldValue instanceof File) {\n const fileUrl = URL.createObjectURL(fieldValue);\n setFileDetails({\n name: fieldValue.name,\n type: fieldValue.type,\n fileUrl,\n fileSize: fieldValue.size,\n });\n\n formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);\n return () => URL.revokeObjectURL(fileUrl);\n }\n\n const fileUrl = fieldValue._full_url;\n if (!fileUrl) {\n setFileDetails(null);\n return;\n }\n\n setFileDetails({\n name: fieldValue.originalFileName,\n type: fieldValue.mimeType ? fieldValue.mimeType : fieldValue.type,\n fileUrl,\n fileSize: fieldValue.fileSize,\n });\n\n formik.setFieldValue(fieldLayoutInfo.attrs.name, fieldValue);\n }, [formik.values, fieldLayoutInfo.attrs.name]);\n\n const {\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n isDragActive: isDragActive,\n } = useDropzone({\n onDrop: handleDropImage,\n onDropRejected: (fileRejections) => {\n const rejection = fileRejections[0];\n const sizeError = rejection.errors.find(err => err.code === 'file-too-large');\n if (sizeError) {\n setFileSizeError(ERROR_MESSAGES.FILE_TOO_LAREG(fieldMetadata.mediaMaxSizeKb));\n } else {\n setFileSizeError(rejection.errors[0]?.message || ERROR_MESSAGES.FILE_NOT_ACCEPT);\n }\n },\n accept: getAcceptedFileTypes(fieldMetadata.mediaTypes),\n maxSize: fieldMetadata.mediaMaxSizeKb * 1024,\n disabled: isFieldDisabled || isFieldReadonly\n });\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n let DynamicWidget = getExtensionComponent(\"SolidFormFieldViewMediaSingleWidget\");\n const widgetProps = {\n formik: formik,\n fieldContext: fieldContext,\n setLightboxUrls: setLightboxUrls,\n setOpenLightbox: setOpenLightbox\n }\n\n const handleFileView = (url: any) => {\n const previewKind = getMediaPreviewKind({\n url: url?.fileUrl,\n fileName: url?.name,\n mimeType: url?.type,\n });\n\n if (isLightboxMediaKind(previewKind)) {\n setLightboxUrls?.([\n {\n src: url.fileUrl,\n downloadUrl: url.fileUrl,\n type: previewKind === \"video\" ? \"video\" : undefined\n },\n ]);\n setOpenLightbox?.(true);\n return;\n }\n\n openMediaInNewTab(url?.fileUrl);\n }\n\n\n return (\n <div style={(isFieldDisabled === true || isFieldReadonly === true) ? { filter: 'opacity(50%)', pointerEvents: 'none' } : {}}>\n <div className={`${styles.fieldWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>{fieldLabel}\n {fieldMetadata.required && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n {/* {fieldDescription && <span className=\"form_field_help\">({fieldDescription}) </span>} */}\n </label>\n }\n <div className=\"relative\">\n <div\n {...getRootProps()}\n className=\"solid-dropzone-wrapper\"\n >\n <input {...getInputProps()} />\n <DropzonePlaceholder\n mediaTypes={fieldMetadata.mediaTypes}\n mediaMaxSizeKb={fieldMetadata.mediaMaxSizeKb}\n />\n </div>\n {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (\n <div className=\"absolute mt-1\">\n <SolidMessage severity=\"error\" text={formik?.errors[fieldLayoutInfo.attrs.name]?.toString()} />\n </div>\n )}\n </div>\n {\n fileSizeError &&\n <SolidMessage severity=\"error\" text={fileSizeError?.toString()} />\n }\n {fileDetails && (\n <div className={`${styles.mediaAttachmentCard} mt-4`}>\n <div className={`${styles.mediaAttachmentRow} flex items-center md:gap-2`}>\n <FileReaderExt fileDetails={fileDetails} />\n <div className={`${styles.mediaAttachmentMeta} w-full`}>\n <div className=\"flex items-start justify-between gap-4\">\n <button\n type=\"button\"\n className={styles.mediaAttachmentName}\n onClick={() => handleFileView(fileDetails)}\n title={fileDetails.name}\n >\n {fileDetails.name}\n </button>\n <div className={`${styles.mediaAttachmentActions} flex items-center gap-2`}>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn\"\n disabled={isFieldDisabled || isFieldReadonly}\n aria-label=\"Download file\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n downloadMediaFile(fileDetails?.fileUrl, fileDetails?.name);\n }}\n >\n <SolidIcon name=\"si-download\" aria-hidden />\n </button>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn is-danger\"\n disabled={isFieldDisabled || isFieldReadonly}\n aria-label=\"Remove file\"\n onClick={() => setDeleteImageDialogVisible(true)}\n >\n <SolidIcon name=\"si-times\" aria-hidden />\n </button>\n </div>\n </div>\n <div className={styles.mediaAttachmentSize}>\n {fileDetails && formatFileSize(fileDetails.fileSize)}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n <SolidDialog\n open={isDeleteImageDialogVisible}\n onOpenChange={setDeleteImageDialogVisible}\n className=\"solid-shadcn-confirm-dialog\"\n >\n <SolidDialogHeader className=\"solid-shadcn-dialog-head\">\n <SolidDialogTitle>Confirm Delete</SolidDialogTitle>\n <SolidDialogClose />\n </SolidDialogHeader>\n <SolidDialogSeparator className=\"solid-shadcn-dialog-sep\" />\n <SolidDialogBody className=\"solid-shadcn-dialog-body\">\n <p className=\"solid-shadcn-dialog-text\">Are you sure you want to delete media?</p>\n </SolidDialogBody>\n <SolidDialogFooter className=\"solid-shadcn-dialog-actions\">\n <SolidButton variant=\"destructive\" size=\"sm\" autoFocus onClick={handleCancelUpload}>\n Delete\n </SolidButton>\n <SolidButton variant=\"outline\" size=\"sm\" onClick={() => setDeleteImageDialogVisible(false)}>\n Cancel\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n <SolidDialog\n open={isReplaceImageDialogVisible}\n onOpenChange={setReplaceImageDialogVisible}\n className=\"solid-shadcn-confirm-dialog\"\n >\n <SolidDialogHeader className=\"solid-shadcn-dialog-head\">\n <SolidDialogTitle>Replace Media</SolidDialogTitle>\n <SolidDialogClose />\n </SolidDialogHeader>\n <SolidDialogSeparator className=\"solid-shadcn-dialog-sep\" />\n <SolidDialogBody className=\"solid-shadcn-dialog-body\">\n <p className=\"solid-shadcn-dialog-text\">A media file is already uploaded. Do you want to delete it and upload a new one?</p>\n </SolidDialogBody>\n <SolidDialogFooter className=\"solid-shadcn-dialog-actions\">\n <SolidButton variant=\"destructive\" size=\"sm\" onClick={handleReplaceFile}>\n Replace\n </SolidButton>\n <SolidButton variant=\"outline\" size=\"sm\" onClick={() => setReplaceImageDialogVisible(false)}>\n Cancel\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n </div>\n );\n}\n\nexport const DefaultMediaSingleFormViewWidget = ({ formik, fieldContext, setLightboxUrls, setOpenLightbox }: SolidMediaFormFieldWidgetProps) => {\n const [fileDetails, setFileDetails] = useState<SingleMediaFileDetail | null>(null);\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field w-full px-2 pt-2';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n\n // useEffect(() => { formik.setFieldValue(fieldLayoutInfo.attrs.name, \"false\") }, [])\n\n const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const formatFileSize = (size: number) => {\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n useEffect(() => {\n const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];\n if (!fieldValue || typeof fieldValue !== \"object\") {\n setFileDetails(null);\n return;\n }\n\n if (fieldValue instanceof File) {\n const fileUrl = URL.createObjectURL(fieldValue);\n setFileDetails({\n name: fieldValue.name,\n type: fieldValue.type,\n fileUrl,\n fileSize: fieldValue.size,\n });\n\n return () => URL.revokeObjectURL(fileUrl);\n }\n\n const fileUrl = fieldValue._full_url;\n if (!fileUrl) {\n setFileDetails(null);\n return;\n }\n\n setFileDetails({\n name: fieldValue.originalFileName,\n type: fieldValue.mimeType ? fieldValue.mimeType : fieldValue.type,\n fileUrl,\n fileSize: fieldValue.fileSize,\n });\n }, [formik.values, fieldLayoutInfo.attrs.name]);\n\n const handleFileView = (url: any) => {\n const previewKind = getMediaPreviewKind({\n url: url?.fileUrl,\n fileName: url?.name,\n mimeType: url?.type,\n });\n\n if (isLightboxMediaKind(previewKind)) {\n setLightboxUrls?.([\n {\n src: url.fileUrl,\n downloadUrl: url.fileUrl,\n type: previewKind === \"video\" ? \"video\" : undefined\n },\n ]);\n setOpenLightbox?.(true);\n return;\n }\n\n openMediaInNewTab(url?.fileUrl);\n }\n\n return (\n <div className={`${styles.fieldViewWrapper} relative`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n\n {fileDetails && (\n <div className={`${styles.mediaAttachmentCard} ${styles.mediaAttachmentCardView} mt-4`}>\n <div className={`${styles.mediaAttachmentRow} flex items-center md:gap-2`}>\n <FileReaderExt fileDetails={fileDetails} />\n <div className={`${styles.mediaAttachmentMeta} w-full`}>\n <div className=\"flex items-start justify-between gap-4\">\n <button\n type=\"button\"\n className={styles.mediaAttachmentName}\n onClick={() => handleFileView(fileDetails)}\n title={fileDetails.name}\n >\n {fileDetails.name}\n </button>\n <div className={`${styles.mediaAttachmentActions} flex items-center md:gap-2`}>\n <button\n type=\"button\"\n className=\"solid-file-icon-btn\"\n aria-label=\"Download file\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n downloadMediaFile(fileDetails?.fileUrl, fileDetails?.name);\n }}\n >\n <SolidIcon name=\"si-download\" aria-hidden />\n </button>\n </div>\n </div>\n <div className={styles.mediaAttachmentSize}>\n {fileDetails && formatFileSize(fileDetails.fileSize)}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
|