@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.
Files changed (204) hide show
  1. package/dist/components/Svg/FileSvg.d.ts +4 -0
  2. package/dist/components/Svg/FileSvg.d.ts.map +1 -0
  3. package/dist/components/Svg/FileSvg.js +15 -0
  4. package/dist/components/Svg/FileSvg.js.map +1 -0
  5. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  6. package/dist/components/auth/AuthLayout.js +6 -6
  7. package/dist/components/auth/AuthLayout.js.map +1 -1
  8. package/dist/components/auth/SolidForgotPassword.js +1 -1
  9. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  10. package/dist/components/auth/SolidInitialLoginOtp.js +1 -1
  11. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  12. package/dist/components/auth/SolidInitiateRegisterOtp.js +1 -1
  13. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  14. package/dist/components/auth/SolidResetPassword.js +1 -1
  15. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  16. package/dist/components/common/DropzonePlaceholder.d.ts +6 -1
  17. package/dist/components/common/DropzonePlaceholder.d.ts.map +1 -1
  18. package/dist/components/common/DropzonePlaceholder.js +8 -2
  19. package/dist/components/common/DropzonePlaceholder.js.map +1 -1
  20. package/dist/components/common/FileReaderExt.d.ts.map +1 -1
  21. package/dist/components/common/FileReaderExt.js +2 -1
  22. package/dist/components/common/FileReaderExt.js.map +1 -1
  23. package/dist/components/core/common/SolidConfigureLayoutElement.d.ts.map +1 -1
  24. package/dist/components/core/common/SolidConfigureLayoutElement.js +28 -6
  25. package/dist/components/core/common/SolidConfigureLayoutElement.js.map +1 -1
  26. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  27. package/dist/components/core/common/SolidGlobalSearchElement.js +3 -3
  28. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  29. package/dist/components/core/form/SolidFormView.js +3 -5
  30. package/dist/components/core/form/SolidFormView.js.map +1 -1
  31. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  32. package/dist/components/core/form/fields/SolidMediaMultipleField.js +66 -64
  33. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  34. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  35. package/dist/components/core/form/fields/SolidMediaSingleField.js +72 -91
  36. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  37. package/dist/components/core/model/CreateModel.js +3 -4
  38. package/dist/components/core/model/CreateModel.js.map +1 -1
  39. package/dist/components/core/module/CreateModule.js +3 -4
  40. package/dist/components/core/module/CreateModule.js.map +1 -1
  41. package/dist/components/core/users/CreateUser.js +1 -2
  42. package/dist/components/core/users/CreateUser.js.map +1 -1
  43. package/dist/components/layout/AppConfig.js +1 -1
  44. package/dist/components/layout/navbar-two-menu.js +1 -1
  45. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  46. package/dist/components/layout/user-profile-menu.js +1 -1
  47. package/dist/components/layout/user-profile-menu.js.map +1 -1
  48. package/dist/helpers/downloadMediaFile.d.ts +2 -0
  49. package/dist/helpers/downloadMediaFile.d.ts.map +1 -0
  50. package/dist/helpers/downloadMediaFile.js +66 -0
  51. package/dist/helpers/downloadMediaFile.js.map +1 -0
  52. package/dist/helpers/getAcceptedFileTypes.d.ts +4 -0
  53. package/dist/helpers/getAcceptedFileTypes.d.ts.map +1 -0
  54. package/dist/helpers/getAcceptedFileTypes.js +20 -0
  55. package/dist/helpers/getAcceptedFileTypes.js.map +1 -0
  56. package/dist/index.js +2 -2
  57. package/dist/nextAuth/authProviders.d.ts.map +1 -1
  58. package/dist/nextAuth/authProviders.js +15 -10
  59. package/dist/nextAuth/authProviders.js.map +1 -1
  60. package/dist/stylesheets/globals.css +2476 -0
  61. package/dist/stylesheets/styles/SF-Pro-Display-Regular.otf +0 -0
  62. package/dist/stylesheets/styles/layout/_config.scss +54 -0
  63. package/dist/stylesheets/styles/layout/_content.scss +77 -0
  64. package/dist/stylesheets/styles/layout/_footer.scss +8 -0
  65. package/dist/stylesheets/styles/layout/_main.scss +47 -0
  66. package/dist/stylesheets/styles/layout/_menu.scss +185 -0
  67. package/dist/stylesheets/styles/layout/_mixins.scss +13 -0
  68. package/dist/stylesheets/styles/layout/_responsive.scss +99 -0
  69. package/dist/stylesheets/styles/layout/_topbar.scss +149 -0
  70. package/dist/stylesheets/styles/layout/_typography.scss +63 -0
  71. package/dist/stylesheets/styles/layout/_utils.scss +27 -0
  72. package/dist/stylesheets/styles/layout/_variables.scss +3 -0
  73. package/dist/stylesheets/styles/layout/layout.scss +11 -0
  74. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Black.otf +0 -0
  75. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Bold.otf +0 -0
  76. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Heavy.otf +0 -0
  77. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Light.otf +0 -0
  78. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Medium.otf +0 -0
  79. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Regular.otf +0 -0
  80. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Semibold.otf +0 -0
  81. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Thin.otf +0 -0
  82. package/dist/stylesheets/themes/solid-dark-purple/fonts/SF-Pro-Display-Ultralight.otf +0 -0
  83. package/dist/stylesheets/themes/solid-dark-purple/theme.css +9051 -0
  84. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Black.otf +0 -0
  85. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Bold.otf +0 -0
  86. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Heavy.otf +0 -0
  87. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Light.otf +0 -0
  88. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Medium.otf +0 -0
  89. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Regular.otf +0 -0
  90. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Semibold.otf +0 -0
  91. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Thin.otf +0 -0
  92. package/dist/stylesheets/themes/solid-light-purple/fonts/SF-Pro-Display-Ultralight.otf +0 -0
  93. package/dist/stylesheets/themes/solid-light-purple/theme.css +9077 -0
  94. package/package.json +1 -1
  95. package/src/components/Svg/FileSvg.tsx +18 -0
  96. package/src/components/auth/AuthLayout.tsx +7 -5
  97. package/src/components/auth/SolidForgotPassword.tsx +1 -1
  98. package/src/components/auth/SolidInitialLoginOtp.tsx +1 -1
  99. package/src/components/auth/SolidInitiateRegisterOtp.tsx +1 -1
  100. package/src/components/auth/SolidResetPassword.tsx +1 -1
  101. package/src/components/common/DropzonePlaceholder.tsx +22 -9
  102. package/src/components/common/FileReaderExt.tsx +5 -3
  103. package/src/components/core/common/SolidConfigureLayoutElement.tsx +72 -31
  104. package/src/components/core/common/SolidGlobalSearchElement.tsx +4 -3
  105. package/src/components/core/form/SolidFormView.tsx +4 -4
  106. package/src/components/core/form/fields/SolidMediaMultipleField.tsx +116 -95
  107. package/src/components/core/form/fields/SolidMediaSingleField.tsx +109 -123
  108. package/src/components/core/model/CreateModel.tsx +4 -4
  109. package/src/components/core/module/CreateModule.tsx +4 -4
  110. package/src/components/core/users/CreateUser.tsx +2 -2
  111. package/src/components/layout/AppConfig.tsx +1 -1
  112. package/src/components/layout/navbar-two-menu.tsx +1 -1
  113. package/src/components/layout/user-profile-menu.tsx +7 -8
  114. package/src/helpers/downloadMediaFile.tsx +19 -0
  115. package/src/helpers/getAcceptedFileTypes.tsx +22 -0
  116. package/src/nextAuth/authProviders.tsx +3 -2
  117. package/dist/components/common/FilterComponent.d.ts +0 -3
  118. package/dist/components/common/FilterComponent.d.ts.map +0 -1
  119. package/dist/components/common/FilterComponent.js +0 -214
  120. package/dist/components/common/FilterComponent.js.map +0 -1
  121. package/dist/components/core/filter/columns/SolidBigintField.d.ts +0 -4
  122. package/dist/components/core/filter/columns/SolidBigintField.d.ts.map +0 -1
  123. package/dist/components/core/filter/columns/SolidBigintField.js +0 -8
  124. package/dist/components/core/filter/columns/SolidBigintField.js.map +0 -1
  125. package/dist/components/core/filter/columns/SolidBooleanField.d.ts +0 -4
  126. package/dist/components/core/filter/columns/SolidBooleanField.d.ts.map +0 -1
  127. package/dist/components/core/filter/columns/SolidBooleanField.js +0 -27
  128. package/dist/components/core/filter/columns/SolidBooleanField.js.map +0 -1
  129. package/dist/components/core/filter/columns/SolidComputedField.d.ts +0 -4
  130. package/dist/components/core/filter/columns/SolidComputedField.d.ts.map +0 -1
  131. package/dist/components/core/filter/columns/SolidComputedField.js +0 -22
  132. package/dist/components/core/filter/columns/SolidComputedField.js.map +0 -1
  133. package/dist/components/core/filter/columns/SolidDateField.d.ts +0 -9
  134. package/dist/components/core/filter/columns/SolidDateField.d.ts.map +0 -1
  135. package/dist/components/core/filter/columns/SolidDateField.js +0 -35
  136. package/dist/components/core/filter/columns/SolidDateField.js.map +0 -1
  137. package/dist/components/core/filter/columns/SolidDatetimeField.d.ts +0 -4
  138. package/dist/components/core/filter/columns/SolidDatetimeField.d.ts.map +0 -1
  139. package/dist/components/core/filter/columns/SolidDatetimeField.js +0 -24
  140. package/dist/components/core/filter/columns/SolidDatetimeField.js.map +0 -1
  141. package/dist/components/core/filter/columns/SolidDecimalField.d.ts +0 -4
  142. package/dist/components/core/filter/columns/SolidDecimalField.d.ts.map +0 -1
  143. package/dist/components/core/filter/columns/SolidDecimalField.js +0 -8
  144. package/dist/components/core/filter/columns/SolidDecimalField.js.map +0 -1
  145. package/dist/components/core/filter/columns/SolidExternalIdField.d.ts +0 -4
  146. package/dist/components/core/filter/columns/SolidExternalIdField.d.ts.map +0 -1
  147. package/dist/components/core/filter/columns/SolidExternalIdField.js +0 -25
  148. package/dist/components/core/filter/columns/SolidExternalIdField.js.map +0 -1
  149. package/dist/components/core/filter/columns/SolidFloatField.d.ts +0 -4
  150. package/dist/components/core/filter/columns/SolidFloatField.d.ts.map +0 -1
  151. package/dist/components/core/filter/columns/SolidFloatField.js +0 -8
  152. package/dist/components/core/filter/columns/SolidFloatField.js.map +0 -1
  153. package/dist/components/core/filter/columns/SolidIdField.d.ts +0 -4
  154. package/dist/components/core/filter/columns/SolidIdField.d.ts.map +0 -1
  155. package/dist/components/core/filter/columns/SolidIdField.js +0 -25
  156. package/dist/components/core/filter/columns/SolidIdField.js.map +0 -1
  157. package/dist/components/core/filter/columns/SolidIntField.d.ts +0 -4
  158. package/dist/components/core/filter/columns/SolidIntField.d.ts.map +0 -1
  159. package/dist/components/core/filter/columns/SolidIntField.js +0 -34
  160. package/dist/components/core/filter/columns/SolidIntField.js.map +0 -1
  161. package/dist/components/core/filter/columns/SolidLongTextField.d.ts +0 -4
  162. package/dist/components/core/filter/columns/SolidLongTextField.d.ts.map +0 -1
  163. package/dist/components/core/filter/columns/SolidLongTextField.js +0 -8
  164. package/dist/components/core/filter/columns/SolidLongTextField.js.map +0 -1
  165. package/dist/components/core/filter/columns/SolidMediaMultipleField.d.ts +0 -4
  166. package/dist/components/core/filter/columns/SolidMediaMultipleField.d.ts.map +0 -1
  167. package/dist/components/core/filter/columns/SolidMediaMultipleField.js +0 -35
  168. package/dist/components/core/filter/columns/SolidMediaMultipleField.js.map +0 -1
  169. package/dist/components/core/filter/columns/SolidMediaSingleField.d.ts +0 -4
  170. package/dist/components/core/filter/columns/SolidMediaSingleField.d.ts.map +0 -1
  171. package/dist/components/core/filter/columns/SolidMediaSingleField.js +0 -35
  172. package/dist/components/core/filter/columns/SolidMediaSingleField.js.map +0 -1
  173. package/dist/components/core/filter/columns/SolidRelationField.d.ts +0 -4
  174. package/dist/components/core/filter/columns/SolidRelationField.d.ts.map +0 -1
  175. package/dist/components/core/filter/columns/SolidRelationField.js +0 -12
  176. package/dist/components/core/filter/columns/SolidRelationField.js.map +0 -1
  177. package/dist/components/core/filter/columns/SolidRichTextField.d.ts +0 -4
  178. package/dist/components/core/filter/columns/SolidRichTextField.d.ts.map +0 -1
  179. package/dist/components/core/filter/columns/SolidRichTextField.js +0 -8
  180. package/dist/components/core/filter/columns/SolidRichTextField.js.map +0 -1
  181. package/dist/components/core/filter/columns/SolidSelectionDynamicField.d.ts +0 -4
  182. package/dist/components/core/filter/columns/SolidSelectionDynamicField.d.ts.map +0 -1
  183. package/dist/components/core/filter/columns/SolidSelectionDynamicField.js +0 -25
  184. package/dist/components/core/filter/columns/SolidSelectionDynamicField.js.map +0 -1
  185. package/dist/components/core/filter/columns/SolidSelectionStaticField.d.ts +0 -4
  186. package/dist/components/core/filter/columns/SolidSelectionStaticField.d.ts.map +0 -1
  187. package/dist/components/core/filter/columns/SolidSelectionStaticField.js +0 -26
  188. package/dist/components/core/filter/columns/SolidSelectionStaticField.js.map +0 -1
  189. package/dist/components/core/filter/columns/SolidShortTextField.d.ts +0 -4
  190. package/dist/components/core/filter/columns/SolidShortTextField.d.ts.map +0 -1
  191. package/dist/components/core/filter/columns/SolidShortTextField.js +0 -33
  192. package/dist/components/core/filter/columns/SolidShortTextField.js.map +0 -1
  193. package/dist/components/core/filter/columns/SolidTimeField.d.ts +0 -4
  194. package/dist/components/core/filter/columns/SolidTimeField.d.ts.map +0 -1
  195. package/dist/components/core/filter/columns/SolidTimeField.js +0 -24
  196. package/dist/components/core/filter/columns/SolidTimeField.js.map +0 -1
  197. package/dist/components/core/filter/columns/SolidUuidField.d.ts +0 -4
  198. package/dist/components/core/filter/columns/SolidUuidField.d.ts.map +0 -1
  199. package/dist/components/core/filter/columns/SolidUuidField.js +0 -25
  200. package/dist/components/core/filter/columns/SolidUuidField.js.map +0 -1
  201. package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.d.ts +0 -4
  202. package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.d.ts.map +0 -1
  203. package/dist/components/core/filter/columns/relations/SolidRelationManyToOneField.js +0 -54
  204. 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
- handleCancelUpload(selectedFileId);
238
- deleteMedia(imageToBeDeletedData);
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
- "image/jpeg": [],
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
- <div className="font-bold">{fileDetails[0].name}</div>
299
- <div
300
- className="cancel-upload-button"
301
- onClick={() => confirmDeleteFile(`${fileDetails[0].name}-${fileDetails[0].size}`, fileDetails[0].id)}
302
- >
303
- <svg xmlns="http://www.w3.org/2000/svg" width="6" height="6" viewBox="0 0 6 6" fill="none">
304
- <path d="M0.6 6L0 5.4L2.4 3L0 0.6L0.6 0L3 2.4L5.4 0L6 0.6L3.6 3L6 5.4L5.4 6L3 3.6L0.6 6Z" fill="#4B4D52" />
305
- </svg>
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
- <div className="font-bold">{file.name}</div>
364
- <div
365
- className="cancel-upload-button"
366
- onClick={() => confirmDeleteFile(fileId, file?.id)}
367
- >
368
- <svg xmlns="http://www.w3.org/2000/svg" width="6" height="6" viewBox="0 0 6 6" fill="none">
369
- <path d="M0.6 6L0 5.4L2.4 3L0 0.6L0.6 0L3 2.4L5.4 0L6 0.6L3.6 3L6 5.4L5.4 6L3 3.6L0.6 6Z" fill="#4B4D52" />
370
- </svg>
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
  })