@solidstarters/solid-core-ui 1.1.18 → 1.1.19
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/Svg/FileSvg.d.ts +4 -0
- package/dist/components/Svg/FileSvg.d.ts.map +1 -0
- package/dist/components/Svg/FileSvg.js +15 -0
- package/dist/components/Svg/FileSvg.js.map +1 -0
- package/dist/components/auth/AuthLayout.d.ts.map +1 -1
- package/dist/components/auth/AuthLayout.js +6 -6
- package/dist/components/auth/AuthLayout.js.map +1 -1
- package/dist/components/auth/SolidForgotPassword.js +1 -1
- package/dist/components/auth/SolidForgotPassword.js.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.js +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.js +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
- package/dist/components/auth/SolidResetPassword.js +1 -1
- package/dist/components/auth/SolidResetPassword.js.map +1 -1
- package/dist/components/common/DropzonePlaceholder.d.ts +6 -1
- package/dist/components/common/DropzonePlaceholder.d.ts.map +1 -1
- package/dist/components/common/DropzonePlaceholder.js +8 -2
- package/dist/components/common/DropzonePlaceholder.js.map +1 -1
- package/dist/components/common/FileReaderExt.d.ts.map +1 -1
- package/dist/components/common/FileReaderExt.js +2 -1
- package/dist/components/common/FileReaderExt.js.map +1 -1
- package/dist/components/core/common/SolidConfigureLayoutElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidConfigureLayoutElement.js +28 -6
- package/dist/components/core/common/SolidConfigureLayoutElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +3 -3
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/form/SolidFormView.js +3 -5
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.js +66 -64
- package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.js +72 -91
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/model/CreateModel.js +3 -4
- package/dist/components/core/model/CreateModel.js.map +1 -1
- package/dist/components/core/module/CreateModule.js +3 -4
- package/dist/components/core/module/CreateModule.js.map +1 -1
- package/dist/components/core/users/CreateUser.js +1 -2
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/components/layout/AppConfig.js +1 -1
- package/dist/components/layout/navbar-two-menu.js +1 -1
- package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
- package/dist/components/layout/user-profile-menu.js +1 -1
- package/dist/components/layout/user-profile-menu.js.map +1 -1
- package/dist/helpers/downloadMediaFile.d.ts +2 -0
- package/dist/helpers/downloadMediaFile.d.ts.map +1 -0
- package/dist/helpers/downloadMediaFile.js +66 -0
- package/dist/helpers/downloadMediaFile.js.map +1 -0
- package/dist/helpers/getAcceptedFileTypes.d.ts +4 -0
- package/dist/helpers/getAcceptedFileTypes.d.ts.map +1 -0
- package/dist/helpers/getAcceptedFileTypes.js +20 -0
- package/dist/helpers/getAcceptedFileTypes.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/nextAuth/authProviders.d.ts.map +1 -1
- package/dist/nextAuth/authProviders.js +15 -10
- package/dist/nextAuth/authProviders.js.map +1 -1
- package/dist/stylesheets/globals.css +2476 -0
- package/dist/stylesheets/styles/SF-Pro-Display-Regular.otf +0 -0
- package/dist/stylesheets/styles/layout/_config.scss +54 -0
- package/dist/stylesheets/styles/layout/_content.scss +77 -0
- package/dist/stylesheets/styles/layout/_footer.scss +8 -0
- package/dist/stylesheets/styles/layout/_main.scss +47 -0
- package/dist/stylesheets/styles/layout/_menu.scss +185 -0
- package/dist/stylesheets/styles/layout/_mixins.scss +13 -0
- package/dist/stylesheets/styles/layout/_responsive.scss +99 -0
- package/dist/stylesheets/styles/layout/_topbar.scss +149 -0
- package/dist/stylesheets/styles/layout/_typography.scss +63 -0
- package/dist/stylesheets/styles/layout/_utils.scss +27 -0
- package/dist/stylesheets/styles/layout/_variables.scss +3 -0
- package/dist/stylesheets/styles/layout/layout.scss +11 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Black.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Heavy.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Light.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Thin.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Ultralight.otf +0 -0
- package/dist/stylesheets/themes/solid-dark-purple/theme.css +9051 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Black.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Heavy.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Light.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Thin.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Ultralight.otf +0 -0
- package/dist/stylesheets/themes/solid-light-purple/theme.css +9077 -0
- package/package.json +1 -1
- package/src/components/Svg/FileSvg.tsx +18 -0
- package/src/components/auth/AuthLayout.tsx +7 -5
- package/src/components/auth/SolidForgotPassword.tsx +1 -1
- package/src/components/auth/SolidInitialLoginOtp.tsx +1 -1
- package/src/components/auth/SolidInitiateRegisterOtp.tsx +1 -1
- package/src/components/auth/SolidResetPassword.tsx +1 -1
- package/src/components/common/DropzonePlaceholder.tsx +22 -9
- package/src/components/common/FileReaderExt.tsx +5 -3
- package/src/components/core/common/SolidConfigureLayoutElement.tsx +72 -31
- package/src/components/core/common/SolidGlobalSearchElement.tsx +4 -3
- package/src/components/core/form/SolidFormView.tsx +4 -4
- package/src/components/core/form/fields/SolidMediaMultipleField.tsx +116 -95
- package/src/components/core/form/fields/SolidMediaSingleField.tsx +109 -123
- package/src/components/core/model/CreateModel.tsx +4 -4
- package/src/components/core/module/CreateModule.tsx +4 -4
- package/src/components/core/users/CreateUser.tsx +2 -2
- package/src/components/layout/AppConfig.tsx +1 -1
- package/src/components/layout/navbar-two-menu.tsx +1 -1
- package/src/components/layout/user-profile-menu.tsx +7 -8
- package/src/helpers/downloadMediaFile.tsx +19 -0
- package/src/helpers/getAcceptedFileTypes.tsx +22 -0
- package/src/nextAuth/authProviders.tsx +3 -2
- package/dist/components/common/FilterComponent.d.ts +0 -3
- package/dist/components/common/FilterComponent.d.ts.map +0 -1
- package/dist/components/common/FilterComponent.js +0 -214
- package/dist/components/common/FilterComponent.js.map +0 -1
- package/dist/components/core/filter/columns/SolidBigintField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidBigintField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidBigintField.js +0 -8
- package/dist/components/core/filter/columns/SolidBigintField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidBooleanField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidBooleanField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidBooleanField.js +0 -27
- package/dist/components/core/filter/columns/SolidBooleanField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidComputedField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidComputedField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidComputedField.js +0 -22
- package/dist/components/core/filter/columns/SolidComputedField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidDateField.d.ts +0 -9
- package/dist/components/core/filter/columns/SolidDateField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidDateField.js +0 -35
- package/dist/components/core/filter/columns/SolidDateField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidDatetimeField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidDatetimeField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidDatetimeField.js +0 -24
- package/dist/components/core/filter/columns/SolidDatetimeField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidDecimalField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidDecimalField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidDecimalField.js +0 -8
- package/dist/components/core/filter/columns/SolidDecimalField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidExternalIdField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidExternalIdField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidExternalIdField.js +0 -25
- package/dist/components/core/filter/columns/SolidExternalIdField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidFloatField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidFloatField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidFloatField.js +0 -8
- package/dist/components/core/filter/columns/SolidFloatField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidIdField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidIdField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidIdField.js +0 -25
- package/dist/components/core/filter/columns/SolidIdField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidIntField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidIntField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidIntField.js +0 -34
- package/dist/components/core/filter/columns/SolidIntField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidLongTextField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidLongTextField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidLongTextField.js +0 -8
- package/dist/components/core/filter/columns/SolidLongTextField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidMediaMultipleField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidMediaMultipleField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidMediaMultipleField.js +0 -35
- package/dist/components/core/filter/columns/SolidMediaMultipleField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidMediaSingleField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidMediaSingleField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidMediaSingleField.js +0 -35
- package/dist/components/core/filter/columns/SolidMediaSingleField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidRelationField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidRelationField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidRelationField.js +0 -12
- package/dist/components/core/filter/columns/SolidRelationField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidRichTextField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidRichTextField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidRichTextField.js +0 -8
- package/dist/components/core/filter/columns/SolidRichTextField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidSelectionDynamicField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidSelectionDynamicField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidSelectionDynamicField.js +0 -25
- package/dist/components/core/filter/columns/SolidSelectionDynamicField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidSelectionStaticField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidSelectionStaticField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidSelectionStaticField.js +0 -26
- package/dist/components/core/filter/columns/SolidSelectionStaticField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidShortTextField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidShortTextField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidShortTextField.js +0 -33
- package/dist/components/core/filter/columns/SolidShortTextField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidTimeField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidTimeField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidTimeField.js +0 -24
- package/dist/components/core/filter/columns/SolidTimeField.js.map +0 -1
- package/dist/components/core/filter/columns/SolidUuidField.d.ts +0 -4
- package/dist/components/core/filter/columns/SolidUuidField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/SolidUuidField.js +0 -25
- package/dist/components/core/filter/columns/SolidUuidField.js.map +0 -1
- package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.d.ts +0 -4
- package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.d.ts.map +0 -1
- package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.js +0 -54
- package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.js.map +0 -1
|
@@ -12,6 +12,9 @@ import { Schema } from "yup";
|
|
|
12
12
|
import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
|
|
13
13
|
import { FileReaderExt } from "@/components/common/FileReaderExt";
|
|
14
14
|
import { ProgressBar } from "primereact/progressbar";
|
|
15
|
+
import getAcceptedFileTypes from "@/helpers/getAcceptedFileTypes";
|
|
16
|
+
import Link from "next/link";
|
|
17
|
+
import { downloadMediaFile } from "@/helpers/downloadMediaFile";
|
|
15
18
|
export class SolidMediaMultipleField implements ISolidField {
|
|
16
19
|
|
|
17
20
|
private fieldContext: SolidFieldProps;
|
|
@@ -95,16 +98,15 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
95
98
|
const solidFormViewMetaData = this.fieldContext.solidFormViewMetaData;
|
|
96
99
|
const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
|
|
97
100
|
|
|
98
|
-
const [imagesPreview, setImagesPreview] = useState<Array<string | ArrayBuffer>>([]);
|
|
99
101
|
const [isDeleteImageDialogVisible, setDeleteImageDialogVisible] = useState(false);
|
|
100
102
|
const [imageToBeDeletedData, setImageToBeDeletedData] = useState<any>();
|
|
101
|
-
const [uploadProgress, setUploadProgress] = useState<Record<string, number>>({});
|
|
102
103
|
const [uploadCompleted, setUploadCompleted] = useState<Record<string, boolean>>({});
|
|
103
|
-
const [fileDetails, setFileDetails] = useState<{ name: string; type: string; size: number, id: number }[]>([]);
|
|
104
|
+
const [fileDetails, setFileDetails] = useState<{ name: string; type: string; size: number, id: number, fileUrl: string }[]>([]);
|
|
104
105
|
const [uploadedSize, setUploadedSize] = useState<Record<string, string>>({});
|
|
105
106
|
const [totalSize, setTotalSize] = useState<Record<string, string>>({});
|
|
106
107
|
const [selectedFileId, setSelectedFileId] = useState<string | null>(null);
|
|
107
108
|
|
|
109
|
+
|
|
108
110
|
const formatFileSize = (size: number) => {
|
|
109
111
|
return size >= 1024 * 1024
|
|
110
112
|
? `${(size / (1024 * 1024)).toFixed(1)} MB`
|
|
@@ -119,32 +121,29 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
119
121
|
const fieldValue = formik?.values[fieldLayoutInfo.attrs.name];
|
|
120
122
|
if (Array.isArray(fieldValue) && fieldValue.length > 0) {
|
|
121
123
|
const urls: string[] = [];
|
|
122
|
-
const details: { name: string; type: string; size: number, id: any }[] = [];
|
|
123
|
-
const progress: Record<string, number> = {};
|
|
124
|
+
const details: { name: string; type: string; size: number, id: any, fileUrl: string }[] = [];
|
|
124
125
|
const completed: Record<string, boolean> = {};
|
|
125
126
|
|
|
126
127
|
fieldValue.forEach((file: File | any) => {
|
|
127
128
|
if (file instanceof File) {
|
|
128
129
|
// New file (from local upload)
|
|
129
130
|
urls.push(URL.createObjectURL(file));
|
|
130
|
-
details.push({ name: file.name, type: file.type, size: file.size, id: `${file.name}-${file.size}`, });
|
|
131
|
+
details.push({ name: file.name, type: file.type, size: file.size, id: `${file.name}-${file.size}`, fileUrl: "" });
|
|
131
132
|
} else if (typeof file === "object" && file._full_url) {
|
|
132
133
|
urls.push(file._full_url);
|
|
133
134
|
details.push({
|
|
134
135
|
name: file.relativeUri || "Unknown", // Use relativeUri or fallback
|
|
135
136
|
type: file.mediaStorageProviderMetadata?.type || "Unknown", // Extract type if available
|
|
136
137
|
size: 0, // API doesn't provide size, set 0 or fetch from metadata if available
|
|
137
|
-
id: file.id
|
|
138
|
+
id: file.id,
|
|
139
|
+
fileUrl: file._full_url
|
|
138
140
|
});
|
|
139
141
|
}
|
|
140
142
|
});
|
|
141
143
|
details.forEach(file => {
|
|
142
|
-
progress[`${file.name}-${file.size}`] = 100;
|
|
143
144
|
completed[`${file.name}-${file.size}`] = true;
|
|
144
145
|
});
|
|
145
|
-
setUploadProgress(progress);
|
|
146
146
|
setUploadCompleted(completed);
|
|
147
|
-
setImagesPreview(urls);
|
|
148
147
|
setFileDetails(details);
|
|
149
148
|
}
|
|
150
149
|
}, [formik.values, fieldLayoutInfo.attrs.name]);
|
|
@@ -153,7 +152,6 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
153
152
|
if (!acceptedFiles.length) return;
|
|
154
153
|
|
|
155
154
|
const newFileDetails = [...fileDetails];
|
|
156
|
-
const newUploadProgress = { ...uploadProgress };
|
|
157
155
|
const newUploadedSize = { ...uploadedSize };
|
|
158
156
|
const newTotalSize = { ...totalSize };
|
|
159
157
|
const newUploadCompleted = { ...uploadCompleted };
|
|
@@ -161,8 +159,7 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
161
159
|
acceptedFiles.forEach((file) => {
|
|
162
160
|
const fileId = `${file.name}-${file.size}`; // Unique identifier for tracking each file
|
|
163
161
|
|
|
164
|
-
newFileDetails.push({ name: file.name, type: file.type, size: file.size, id: file.id });
|
|
165
|
-
newUploadProgress[fileId] = 0;
|
|
162
|
+
newFileDetails.push({ name: file.name, type: file.type, size: file.size, id: file.id, fileUrl: file._full_url });
|
|
166
163
|
newUploadedSize[fileId] = "0 KB";
|
|
167
164
|
newTotalSize[fileId] = formatFileSize(file.size);
|
|
168
165
|
newUploadCompleted[fileId] = false;
|
|
@@ -170,20 +167,16 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
170
167
|
const reader = new FileReader();
|
|
171
168
|
|
|
172
169
|
reader.onloadstart = () => {
|
|
173
|
-
setUploadProgress((prev) => ({ ...prev, [fileId]: 0 }));
|
|
174
170
|
setUploadedSize((prev) => ({ ...prev, [fileId]: "0 KB" }));
|
|
175
171
|
};
|
|
176
172
|
|
|
177
173
|
reader.onprogress = (event) => {
|
|
178
174
|
if (event.loaded && event.total) {
|
|
179
|
-
const percent = Math.round((event.loaded / event.total) * 100);
|
|
180
|
-
setUploadProgress((prev) => ({ ...prev, [fileId]: percent }));
|
|
181
175
|
setUploadedSize((prev) => ({ ...prev, [fileId]: formatFileSize(event.loaded) }));
|
|
182
176
|
}
|
|
183
177
|
};
|
|
184
178
|
|
|
185
179
|
reader.onloadend = () => {
|
|
186
|
-
setUploadProgress((prev) => ({ ...prev, [fileId]: 100 }));
|
|
187
180
|
setUploadCompleted((prev) => ({ ...prev, [fileId]: true }));
|
|
188
181
|
setUploadedSize((prev) => ({ ...prev, [fileId]: newTotalSize[fileId] }));
|
|
189
182
|
};
|
|
@@ -192,7 +185,6 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
192
185
|
});
|
|
193
186
|
|
|
194
187
|
setFileDetails(newFileDetails);
|
|
195
|
-
setUploadProgress(newUploadProgress);
|
|
196
188
|
setUploadedSize(newUploadedSize);
|
|
197
189
|
setTotalSize(newTotalSize);
|
|
198
190
|
setUploadCompleted(newUploadCompleted);
|
|
@@ -203,11 +195,6 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
203
195
|
|
|
204
196
|
const handleCancelUpload = (fileId: string) => {
|
|
205
197
|
setFileDetails((prev) => prev.filter((file) => fileId !== `${file.name}-${file.size}`));
|
|
206
|
-
setUploadProgress((prev) => {
|
|
207
|
-
const newProgress = { ...prev };
|
|
208
|
-
delete newProgress[fileId];
|
|
209
|
-
return newProgress;
|
|
210
|
-
});
|
|
211
198
|
setUploadCompleted((prev) => {
|
|
212
199
|
const newCompleted = { ...prev };
|
|
213
200
|
delete newCompleted[fileId];
|
|
@@ -234,43 +221,60 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
234
221
|
|
|
235
222
|
const deleteFile = () => {
|
|
236
223
|
if (selectedFileId && imageToBeDeletedData) {
|
|
237
|
-
|
|
238
|
-
|
|
224
|
+
// Remove file from UI before making API call
|
|
225
|
+
setFileDetails((prev) => prev.filter((file) => `${file.name}-${file.size}` !== selectedFileId));
|
|
226
|
+
|
|
227
|
+
deleteMedia(imageToBeDeletedData)
|
|
228
|
+
.unwrap()
|
|
229
|
+
.then(() => {
|
|
230
|
+
// Ensure UI state updates only after successful deletion
|
|
231
|
+
setUploadCompleted((prev) => {
|
|
232
|
+
const newCompleted = { ...prev };
|
|
233
|
+
delete newCompleted[selectedFileId];
|
|
234
|
+
return newCompleted;
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
setUploadedSize((prev) => {
|
|
238
|
+
const newSize = { ...prev };
|
|
239
|
+
delete newSize[selectedFileId];
|
|
240
|
+
return newSize;
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
setTotalSize((prev) => {
|
|
244
|
+
const newSize = { ...prev };
|
|
245
|
+
delete newSize[selectedFileId];
|
|
246
|
+
return newSize;
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// Update form state
|
|
250
|
+
formik.setFieldValue(
|
|
251
|
+
fieldLayoutInfo.attrs.name,
|
|
252
|
+
fileDetails.filter((file) => `${file.name}-${file.size}` !== selectedFileId)
|
|
253
|
+
);
|
|
254
|
+
})
|
|
255
|
+
.catch((error) => {
|
|
256
|
+
console.error("Error deleting file:", error);
|
|
257
|
+
});
|
|
258
|
+
|
|
239
259
|
setDeleteImageDialogVisible(false);
|
|
240
|
-
setShowAllFiles(false)
|
|
260
|
+
setShowAllFiles(false);
|
|
241
261
|
setSelectedFileId(null);
|
|
242
262
|
}
|
|
243
263
|
};
|
|
244
264
|
|
|
265
|
+
|
|
245
266
|
const {
|
|
246
267
|
getRootProps,
|
|
247
268
|
getInputProps,
|
|
248
269
|
isDragActive,
|
|
249
270
|
} = useDropzone({
|
|
250
271
|
onDrop: handleDropImages,
|
|
251
|
-
accept:
|
|
252
|
-
|
|
253
|
-
"image/png": [],
|
|
254
|
-
},
|
|
255
|
-
maxSize: 2 * 1024 * 1024, // 2MB
|
|
272
|
+
accept: getAcceptedFileTypes(fieldMetadata.mediaTypes),
|
|
273
|
+
maxSize: fieldMetadata.mediaMaxSizeKb * 1024,
|
|
256
274
|
});
|
|
257
275
|
|
|
258
276
|
const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];
|
|
259
277
|
|
|
260
|
-
|
|
261
|
-
const imageFormatHandler = (preview: any) => {
|
|
262
|
-
if (typeof preview === 'string') {
|
|
263
|
-
return preview; // Existing URLs
|
|
264
|
-
}
|
|
265
|
-
if (preview instanceof File) {
|
|
266
|
-
return URL.createObjectURL(preview); // Generate preview URL for File
|
|
267
|
-
}
|
|
268
|
-
if (typeof preview === "object") {
|
|
269
|
-
return preview._full_url
|
|
270
|
-
}
|
|
271
|
-
return ""; // Fallback for invalid cases
|
|
272
|
-
}
|
|
273
|
-
|
|
274
278
|
const [isShowAllFiles, setShowAllFiles] = useState(false);
|
|
275
279
|
return (
|
|
276
280
|
<div className={className}>
|
|
@@ -286,7 +290,10 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
286
290
|
className="solid-dropzone-wrapper"
|
|
287
291
|
>
|
|
288
292
|
<input {...getInputProps()} />
|
|
289
|
-
<DropzonePlaceholder
|
|
293
|
+
<DropzonePlaceholder
|
|
294
|
+
mediaTypes={fieldMetadata.mediaTypes}
|
|
295
|
+
mediaMaxSizeKb={fieldMetadata.mediaMaxSizeKb}
|
|
296
|
+
/>
|
|
290
297
|
</div>
|
|
291
298
|
</div>
|
|
292
299
|
{fileDetails.length > 0 &&
|
|
@@ -295,17 +302,39 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
295
302
|
<FileReaderExt fileDetails={fileDetails[0]} />
|
|
296
303
|
<div className="w-full flex flex-column gap-1">
|
|
297
304
|
<div className="flex align-items-center justify-content-between">
|
|
298
|
-
<
|
|
299
|
-
<div
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
305
|
+
<Link className="font-bold w-11" href={process.env.NEXT_PUBLIC_BACKEND_API_URL + `/${fileDetails[0]?.fileUrl}`} target="_blank">{fileDetails[0].name}</Link>
|
|
306
|
+
<div className="flex align-items-center gap-2">
|
|
307
|
+
<div>
|
|
308
|
+
<Button
|
|
309
|
+
type="button"
|
|
310
|
+
text
|
|
311
|
+
icon={"pi pi-download"}
|
|
312
|
+
size="small"
|
|
313
|
+
style={{
|
|
314
|
+
height: 16,
|
|
315
|
+
width: 16
|
|
316
|
+
}}
|
|
317
|
+
onClick={() => downloadMediaFile(fileDetails[0]?.fileUrl, fileDetails[0]?.name)}
|
|
318
|
+
/>
|
|
319
|
+
</div>
|
|
320
|
+
<div>
|
|
321
|
+
<Button
|
|
322
|
+
type="button"
|
|
323
|
+
text
|
|
324
|
+
icon={"pi pi-times"}
|
|
325
|
+
size="small"
|
|
326
|
+
severity="secondary"
|
|
327
|
+
// className="p-2"
|
|
328
|
+
style={{
|
|
329
|
+
height: 16,
|
|
330
|
+
width: 16
|
|
331
|
+
}}
|
|
332
|
+
onClick={() => confirmDeleteFile(`${fileDetails[0].name}-${fileDetails[0].size}`, fileDetails[0].id)}
|
|
333
|
+
/>
|
|
334
|
+
</div>
|
|
306
335
|
</div>
|
|
307
336
|
</div>
|
|
308
|
-
{uploadCompleted[`${fileDetails[0].name}-${fileDetails[0].size}`]
|
|
337
|
+
{uploadCompleted[`${fileDetails[0].name}-${fileDetails[0].size}`] && (
|
|
309
338
|
<div className="flex align-items-center gap-2 text-sm">
|
|
310
339
|
{totalSize[`${fileDetails[0].name}-${fileDetails[0].size}`]} of {totalSize[`${fileDetails[0].name}-${fileDetails[0].size}`]}
|
|
311
340
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
@@ -313,26 +342,13 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
313
342
|
</svg>
|
|
314
343
|
Completed
|
|
315
344
|
</div>
|
|
316
|
-
) : (
|
|
317
|
-
<div className="flex align-items-center gap-2 text-sm">
|
|
318
|
-
{uploadedSize[`${fileDetails[0].name}-${fileDetails[0].size}`]} of {totalSize[`${fileDetails[0].name}-${fileDetails[0].size}`]}
|
|
319
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
320
|
-
<path d="M7.375 10.5V5.40625L5.75 7.03125L4.875 6.125L8 3L11.125 6.125L10.25 7.03125L8.625 5.40625V10.5H7.375ZM4.25 13C3.90625 13 3.61198 12.8776 3.36719 12.6328C3.1224 12.388 3 12.0938 3 11.75V9.875H4.25V11.75H11.75V9.875H13V11.75C13 12.0938 12.8776 12.388 12.6328 12.6328C12.388 12.8776 12.0938 13 11.75 13H4.25Z" fill="black" />
|
|
321
|
-
</svg>
|
|
322
|
-
Uploading {uploadProgress[`${fileDetails[0].name}-${fileDetails[0].size}`]}% Completed
|
|
323
|
-
</div>
|
|
324
345
|
)}
|
|
325
346
|
</div>
|
|
326
347
|
</div>
|
|
327
|
-
<ProgressBar
|
|
328
|
-
value={uploadProgress[`${fileDetails[0].name}-${fileDetails[0].size}`]}
|
|
329
|
-
showValue={false}
|
|
330
|
-
style={{ height: 4 }}
|
|
331
|
-
className="mt-2"
|
|
332
|
-
/>
|
|
333
348
|
</div>
|
|
334
349
|
}
|
|
335
350
|
|
|
351
|
+
|
|
336
352
|
{fileDetails.length > 1 &&
|
|
337
353
|
<div className="flex align-items-center">
|
|
338
354
|
<p className="m-0">
|
|
@@ -360,17 +376,39 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
360
376
|
<FileReaderExt fileDetails={file} />
|
|
361
377
|
<div className="w-full flex flex-column gap-1">
|
|
362
378
|
<div className="flex align-items-center justify-content-between">
|
|
363
|
-
<
|
|
364
|
-
<div
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
379
|
+
<Link className="font-bold w-11" href={process.env.NEXT_PUBLIC_BACKEND_API_URL + `/${file?.fileUrl}`} target="_blank">{file.name}</Link>
|
|
380
|
+
<div className="flex align-items-center gap-2">
|
|
381
|
+
<div>
|
|
382
|
+
<Button
|
|
383
|
+
type="button"
|
|
384
|
+
text
|
|
385
|
+
icon={"pi pi-download"}
|
|
386
|
+
size="small"
|
|
387
|
+
style={{
|
|
388
|
+
height: 16,
|
|
389
|
+
width: 16
|
|
390
|
+
}}
|
|
391
|
+
onClick={() => downloadMediaFile(file?.fileUrl, file?.name)}
|
|
392
|
+
/>
|
|
393
|
+
</div>
|
|
394
|
+
<div>
|
|
395
|
+
<Button
|
|
396
|
+
type="button"
|
|
397
|
+
text
|
|
398
|
+
icon={"pi pi-times"}
|
|
399
|
+
size="small"
|
|
400
|
+
severity="secondary"
|
|
401
|
+
// className="p-2"
|
|
402
|
+
style={{
|
|
403
|
+
height: 16,
|
|
404
|
+
width: 16
|
|
405
|
+
}}
|
|
406
|
+
onClick={() => confirmDeleteFile(fileId, file?.id)}
|
|
407
|
+
/>
|
|
408
|
+
</div>
|
|
371
409
|
</div>
|
|
372
410
|
</div>
|
|
373
|
-
{uploadCompleted[fileId]
|
|
411
|
+
{uploadCompleted[fileId] && (
|
|
374
412
|
<div className="flex align-items-center gap-2 text-sm">
|
|
375
413
|
{totalSize[fileId]} of {totalSize[fileId]}
|
|
376
414
|
<svg xmlns="http://www.w3.org/2000/svg" width="4" height="4" viewBox="0 0 4 4" fill="none">
|
|
@@ -381,26 +419,9 @@ export class SolidMediaMultipleField implements ISolidField {
|
|
|
381
419
|
</svg>
|
|
382
420
|
Completed
|
|
383
421
|
</div>
|
|
384
|
-
) : (
|
|
385
|
-
<div className="flex align-items-center gap-2 text-sm">
|
|
386
|
-
{uploadedSize[fileId]} of {totalSize[fileId]}
|
|
387
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="4" height="4" viewBox="0 0 4 4" fill="none">
|
|
388
|
-
<circle cx="2" cy="2" r="2" fill="#C1C1C1" />
|
|
389
|
-
</svg>
|
|
390
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
391
|
-
<path d="M7.375 10.5V5.40625L5.75 7.03125L4.875 6.125L8 3L11.125 6.125L10.25 7.03125L8.625 5.40625V10.5H7.375ZM4.25 13C3.90625 13 3.61198 12.8776 3.36719 12.6328C3.1224 12.388 3 12.0938 3 11.75V9.875H4.25V11.75H11.75V9.875H13V11.75C13 12.0938 12.8776 12.388 12.6328 12.6328C12.388 12.8776 12.0938 13 11.75 13H4.25Z" fill="black" />
|
|
392
|
-
</svg>
|
|
393
|
-
Uploading {uploadProgress[fileId]}% Completed
|
|
394
|
-
</div>
|
|
395
422
|
)}
|
|
396
423
|
</div>
|
|
397
424
|
</div>
|
|
398
|
-
<ProgressBar
|
|
399
|
-
value={uploadProgress[fileId]}
|
|
400
|
-
showValue={false}
|
|
401
|
-
style={{ height: 4 }}
|
|
402
|
-
className="mt-2"
|
|
403
|
-
/>
|
|
404
425
|
</div>
|
|
405
426
|
);
|
|
406
427
|
})
|