umwd-components 0.1.783 → 0.1.784

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 (33) hide show
  1. package/dist/cjs/src/components/common/AmountUpdater.js +1 -1
  2. package/dist/cjs/src/components/common/NumberInput.js +1 -1
  3. package/dist/cjs/src/components/common/TextualAmountUpdater.js +1 -1
  4. package/dist/cjs/src/components/common/media/minio/UploadMinioMediaForm.js +1 -1
  5. package/dist/cjs/src/components/e-commerce/iro/IroItemUpdater.js +1 -1
  6. package/dist/cjs/src/components/e-commerce/iro/RmaForm.js +1 -1
  7. package/dist/cjs/src/components/e-commerce/iro/TextualIROItemUpdater.js +1 -1
  8. package/dist/cjs/src/components/e-commerce/opo/OpoItemUpdater.js +1 -1
  9. package/dist/cjs/src/components/e-commerce/opo/TextualOpoItemUpdater.js +1 -1
  10. package/dist/cjs/src/components/logistics/ipo/IPOItemUpdater.js +1 -1
  11. package/dist/cjs/src/components/logistics/ipo/TextualIPOItemUpdater.js +1 -1
  12. package/dist/cjs/src/data/actions/media/minio/uploadMinioMediaAction.js +1 -1
  13. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -1
  14. package/dist/esm/src/components/common/AmountUpdater.js +10 -10
  15. package/dist/esm/src/components/common/NumberInput.js +13 -13
  16. package/dist/esm/src/components/common/TextualAmountUpdater.js +11 -11
  17. package/dist/esm/src/components/common/media/minio/UploadMinioMediaForm.js +97 -55
  18. package/dist/esm/src/components/e-commerce/iro/IroItemUpdater.js +3 -3
  19. package/dist/esm/src/components/e-commerce/iro/RmaForm.js +14 -5
  20. package/dist/esm/src/components/e-commerce/iro/TextualIROItemUpdater.js +3 -3
  21. package/dist/esm/src/components/e-commerce/opo/OpoItemUpdater.js +3 -3
  22. package/dist/esm/src/components/e-commerce/opo/TextualOpoItemUpdater.js +3 -3
  23. package/dist/esm/src/components/logistics/ipo/IPOItemUpdater.js +3 -3
  24. package/dist/esm/src/components/logistics/ipo/TextualIPOItemUpdater.js +3 -3
  25. package/dist/esm/src/components/logistics/report/SimpleReportFields.js +1 -1
  26. package/dist/esm/src/data/actions/media/minio/uploadMinioMediaAction.js +82 -56
  27. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  28. package/dist/esm/types/components/common/AmountUpdater.d.ts +1 -1
  29. package/dist/esm/types/components/common/NumberInput.d.ts +2 -2
  30. package/dist/esm/types/components/common/TextualAmountUpdater.d.ts +1 -1
  31. package/dist/esm/types/components/common/media/minio/UploadMinioMediaForm.d.ts +7 -1
  32. package/dist/esm/types/types/common/AmountUpdater.d.ts +4 -4
  33. package/package.json +1 -1
@@ -7,97 +7,122 @@
7
7
  import { minioUploadService } from '../../../services/common/media/minio/minioUploadService.js';
8
8
  import { flattenAttributes } from '../../../../lib/utils.js';
9
9
 
10
- /* const MAX_FILE_SIZE = 5000000;
11
-
12
- const ACCEPTED_IMAGE_TYPES = [
13
- "image/jpeg",
14
- "image/jpg",
15
- "image/png",
16
- "image/webp",
17
- ]; */
18
- // VALIDATE IMAGE WITH ZOD
19
- /* const imageSchema = z.object({
20
- image: z
10
+ // VALIDATE FILES WITH ZOD
11
+ /* const filesSchema = z.object({
12
+ files: z
21
13
  .any()
22
- .refine((file) => {
23
- if (file.size === 0 || file.name === undefined) return false;
24
- else return true;
25
- }, "Please update or add new image.")
26
-
14
+ .refine((files) => {
15
+ if (files instanceof FileList) {
16
+ return Array.from(files).every(file => file.size > 0 && file.name !== undefined);
17
+ }
18
+ if (files instanceof File) {
19
+ return files.size > 0 && files.name !== undefined;
20
+ }
21
+ return false;
22
+ }, "Please select valid files.")
27
23
  .refine(
28
- (file) => ACCEPTED_IMAGE_TYPES.includes(file?.type),
29
- ".jpg, .jpeg, .png and .webp files are accepted."
24
+ (files) => {
25
+ const fileArray = files instanceof FileList ? Array.from(files) : [files];
26
+ return fileArray.every(file => ACCEPTED_FILE_TYPES.includes(file?.type));
27
+ },
28
+ "Invalid file types selected."
30
29
  )
31
- .refine((file) => file.size <= MAX_FILE_SIZE, `Max file size is 5MB.`),
30
+ .refine(
31
+ (files) => {
32
+ const fileArray = files instanceof FileList ? Array.from(files) : [files];
33
+ return fileArray.every(file => file.size <= MAX_FILE_SIZE);
34
+ },
35
+ `Max file size is 5MB.`
36
+ ),
32
37
  }); */
33
38
  async function uploadMinioMediaAction(prevState, formData) {
34
39
  try {
35
- // CONVERT FORM DATA TO OBJEC
40
+ // CONVERT FORM DATA TO OBJECT
36
41
  const rawFormData = Object.fromEntries(formData);
37
42
  const bucketName = rawFormData.bucketName;
38
- const fileName = rawFormData.fileName;
39
- const files = rawFormData.files;
43
+ const files = formData.getAll("files");
40
44
  const reference = rawFormData.reference;
41
45
  const refID = rawFormData.refID;
42
46
  const field = rawFormData.field;
43
- console.log("files:", files);
44
- console.log("files type:", typeof files);
45
- console.log("files instanceof File:", files instanceof File);
46
- console.log("fileName:", fileName);
47
- console.log("bucketName:", bucketName);
48
- console.log("reference:", reference);
49
- console.log("refID:", refID);
50
- console.log("field:", field);
51
- // Check if files is a File object
52
- if (!(files instanceof File)) {
47
+ // Filter out empty files and ensure we have File objects
48
+ const validFiles = files.filter((file) => file instanceof File && file.size > 0 && file.name !== undefined);
49
+ if (validFiles.length === 0) {
53
50
  return {
54
51
  ...prevState,
55
52
  strapiErrors: null,
56
53
  zodErrors: null,
57
- message: "No valid file provided",
54
+ message: "No valid files provided",
55
+ severity: "error",
58
56
  };
59
57
  }
60
- // Convert file to ArrayBuffer first, then to Buffer, then to base64 string
61
- const arrayBuffer = await files.arrayBuffer();
62
- console.log("arrayBuffer:", arrayBuffer);
63
- const fileContent = Buffer.from(arrayBuffer).toString("base64");
64
- console.log("fileContent length:", fileContent.length);
65
- // VALIDATE THE IMAGE
58
+ // VALIDATE THE FILES
66
59
  const validatedFields = {
67
60
  success: true,
68
61
  };
69
- /* imageSchema.safeParse({
70
- image: rawFormData.files,
71
- }); */
62
+ /* filesSchema.safeParse({
63
+ files: validFiles.length === 1 ? validFiles[0] : validFiles,
64
+ }); */
72
65
  if (!validatedFields.success) ;
73
- console.log("Uploading file:", fileName, "Size:", Math.round(fileContent.length / 1024 / 1024), "MB");
74
- // UPLOAD NEW IMAGE TO MINIO
75
- const fileUploadResponse = reference && refID && field
76
- ? await minioUploadService(bucketName, fileName, fileContent, reference, refID, field)
77
- : await minioUploadService(bucketName, fileName, fileContent);
78
- if (!fileUploadResponse) {
66
+ console.log(`Uploading ${validFiles.length} file(s):`);
67
+ // Upload each file
68
+ const uploadResults = [];
69
+ const errors = [];
70
+ for (const file of validFiles) {
71
+ try {
72
+ // Convert file to ArrayBuffer first, then to Buffer, then to base64 string
73
+ const arrayBuffer = await file.arrayBuffer();
74
+ const fileContent = Buffer.from(arrayBuffer).toString("base64");
75
+ console.log("Uploading file:", file.name, "Size:", Math.round(fileContent.length / 1024 / 1024), "MB");
76
+ // UPLOAD FILE TO MINIO
77
+ const fileUploadResponse = reference && refID && field
78
+ ? await minioUploadService(bucketName, file.name, fileContent, reference, refID, field)
79
+ : await minioUploadService(bucketName, file.name, fileContent);
80
+ if (!fileUploadResponse) {
81
+ errors.push(`Failed to upload ${file.name}`);
82
+ continue;
83
+ }
84
+ if (fileUploadResponse.error) {
85
+ errors.push(`Failed to upload ${file.name}: ${fileUploadResponse.error.message || 'Unknown error'}`);
86
+ continue;
87
+ }
88
+ const flattenedData = flattenAttributes(fileUploadResponse);
89
+ uploadResults.push({
90
+ fileName: file.name,
91
+ data: flattenedData
92
+ });
93
+ }
94
+ catch (fileError) {
95
+ console.error(`Error uploading ${file.name}:`, fileError);
96
+ errors.push(`Failed to process ${file.name}`);
97
+ }
98
+ }
99
+ // Check results
100
+ if (uploadResults.length === 0) {
79
101
  return {
80
102
  ...prevState,
81
- strapiErrors: null,
103
+ strapiErrors: errors.length > 0 ? { message: errors.join(', ') } : null,
82
104
  zodErrors: null,
83
- message: "Ops! Something went wrong. Please try again.",
105
+ message: "Failed to upload any files",
106
+ severity: "error",
84
107
  };
85
108
  }
86
- if (fileUploadResponse.error) {
109
+ if (errors.length > 0 && uploadResults.length > 0) {
87
110
  return {
88
111
  ...prevState,
89
- strapiErrors: fileUploadResponse.error,
112
+ data: uploadResults,
90
113
  zodErrors: null,
91
- message: "Failed to Upload File.",
114
+ strapiErrors: null,
115
+ message: `Uploaded ${uploadResults.length} file(s) successfully. ${errors.length} file(s) failed: ${errors.join(', ')}`,
116
+ severity: "warning",
92
117
  };
93
118
  }
94
- const flattenedData = flattenAttributes(fileUploadResponse);
95
119
  return {
96
120
  ...prevState,
97
- data: flattenedData,
121
+ data: uploadResults,
98
122
  zodErrors: null,
99
123
  strapiErrors: null,
100
- message: "Image Uploaded",
124
+ message: `Successfully uploaded ${uploadResults.length} file(s)`,
125
+ severity: "success",
101
126
  };
102
127
  }
103
128
  catch (error) {
@@ -107,6 +132,7 @@ async function uploadMinioMediaAction(prevState, formData) {
107
132
  strapiErrors: null,
108
133
  zodErrors: null,
109
134
  message: "Failed to process file upload",
135
+ severity: "error",
110
136
  };
111
137
  }
112
138
  }