@siamf/upload 1.0.0 → 1.2.0

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 (50) hide show
  1. package/README.md +691 -0
  2. package/dist/cjs/components/file/FileUpload.d.ts +3 -0
  3. package/dist/cjs/components/file/FileUpload.js +120 -0
  4. package/dist/cjs/components/file/FileUpload.js.map +1 -0
  5. package/dist/cjs/components/file/MultiFileUpload.d.ts +4 -0
  6. package/dist/cjs/components/file/MultiFileUpload.js +160 -0
  7. package/dist/cjs/components/file/MultiFileUpload.js.map +1 -0
  8. package/dist/cjs/components/file/typings.d.ts +103 -0
  9. package/dist/cjs/components/file/typings.js +57 -0
  10. package/dist/cjs/components/file/typings.js.map +1 -0
  11. package/dist/cjs/components/image/ImageUpload.d.ts +3 -0
  12. package/dist/cjs/components/image/ImageUpload.js +126 -0
  13. package/dist/cjs/components/image/ImageUpload.js.map +1 -0
  14. package/dist/cjs/components/image/MultiImageUpload.d.ts +3 -0
  15. package/dist/cjs/components/image/MultiImageUpload.js +162 -0
  16. package/dist/cjs/components/image/MultiImageUpload.js.map +1 -0
  17. package/dist/cjs/components/image/typings.d.ts +73 -0
  18. package/dist/cjs/components/image/typings.js +18 -0
  19. package/dist/cjs/components/image/typings.js.map +1 -0
  20. package/dist/cjs/components/utils/utils.d.ts +9 -0
  21. package/dist/cjs/components/utils/utils.js +78 -0
  22. package/dist/cjs/components/utils/utils.js.map +1 -0
  23. package/dist/cjs/index.d.ts +8 -0
  24. package/dist/cjs/index.js +21 -0
  25. package/dist/cjs/index.js.map +1 -0
  26. package/dist/esm/components/file/FileUpload.d.ts +3 -0
  27. package/dist/esm/components/file/FileUpload.js +118 -0
  28. package/dist/esm/components/file/FileUpload.js.map +1 -0
  29. package/dist/esm/components/file/MultiFileUpload.d.ts +4 -0
  30. package/dist/esm/components/file/MultiFileUpload.js +157 -0
  31. package/dist/esm/components/file/MultiFileUpload.js.map +1 -0
  32. package/dist/esm/components/file/typings.d.ts +103 -0
  33. package/dist/esm/components/file/typings.js +54 -0
  34. package/dist/esm/components/file/typings.js.map +1 -0
  35. package/dist/esm/components/image/ImageUpload.d.ts +3 -0
  36. package/dist/esm/components/image/ImageUpload.js +124 -0
  37. package/dist/esm/components/image/ImageUpload.js.map +1 -0
  38. package/dist/esm/components/image/MultiImageUpload.d.ts +3 -0
  39. package/dist/esm/components/image/MultiImageUpload.js +160 -0
  40. package/dist/esm/components/image/MultiImageUpload.js.map +1 -0
  41. package/dist/esm/components/image/typings.d.ts +73 -0
  42. package/dist/esm/components/image/typings.js +15 -0
  43. package/dist/esm/components/image/typings.js.map +1 -0
  44. package/dist/esm/components/utils/utils.d.ts +9 -0
  45. package/dist/esm/components/utils/utils.js +69 -0
  46. package/dist/esm/components/utils/utils.js.map +1 -0
  47. package/dist/esm/index.d.ts +8 -0
  48. package/dist/esm/index.js +9 -0
  49. package/dist/esm/index.js.map +1 -0
  50. package/package.json +52 -8
@@ -0,0 +1,157 @@
1
+ "use client";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { useRef, useState, useCallback, useEffect } from "react";
13
+ import { FileAcceptType } from "./typings";
14
+ //Utils
15
+ import { openFileDialog, getFileAccepts } from "../utils/utils";
16
+ export const DEFAULT_INDEX = -1;
17
+ const MultiFileUpload = ({ children, onChange, value, onError, inputProps, acceptType, maxFileSize, maxNumber = 10 }) => {
18
+ //Validations
19
+ //@ts-ignore
20
+ if (Array.isArray(acceptType) && acceptType.includes(FileAcceptType.ALL)) {
21
+ throw new Error("Invalid accept type: FileAccept.All cannot be included in an array.");
22
+ }
23
+ //Ref
24
+ const inputRef = useRef(null);
25
+ //State
26
+ const [isDragging, setIsDragging] = useState(false);
27
+ const [indexKey, setIndexKey] = useState(DEFAULT_INDEX);
28
+ const [errors, setErrors] = useState({ acceptType: false, maxFileSize: false, maxNumber: false });
29
+ //Handle File
30
+ const handleFile = (file) => ({
31
+ file,
32
+ fileInfo: {
33
+ name: file.name.split(".")[0] || file.name,
34
+ size: Number((file.size / 1024 * 1024).toFixed(2)),
35
+ type: file.type,
36
+ }
37
+ });
38
+ //Handle The File Change
39
+ const handleChange = (files) => __awaiter(void 0, void 0, void 0, function* () {
40
+ if (!files)
41
+ return;
42
+ var changeFiles = [];
43
+ let newErrors = {
44
+ acceptType: false,
45
+ maxFileSize: false,
46
+ maxNumber: false,
47
+ };
48
+ if (files.length > maxNumber)
49
+ newErrors.maxNumber = true;
50
+ for (let i = 0; i < files.length; i++) {
51
+ const file = files[i];
52
+ const uploadSize = Number((file.size / 1024 * 1024).toFixed(2));
53
+ //Accept Type Error
54
+ if (!getFileAccepts(acceptType).includes(file.type))
55
+ newErrors.acceptType = true;
56
+ //Max File Size Error
57
+ if (maxFileSize && (uploadSize > maxFileSize))
58
+ newErrors.maxFileSize = true;
59
+ //Get Files Ready
60
+ changeFiles.push(handleFile(file));
61
+ }
62
+ setErrors(newErrors);
63
+ if (newErrors.acceptType || newErrors.maxFileSize || newErrors.maxNumber) {
64
+ onError === null || onError === void 0 ? void 0 : onError(newErrors);
65
+ return;
66
+ }
67
+ if (indexKey > DEFAULT_INDEX) {
68
+ onChange(value.map((a, i) => {
69
+ if (i === indexKey) {
70
+ return changeFiles[0];
71
+ }
72
+ return a;
73
+ }));
74
+ }
75
+ else {
76
+ onChange(changeFiles);
77
+ }
78
+ });
79
+ //On File Remove ALl
80
+ const onFileRemoveAll = () => {
81
+ onChange([]);
82
+ };
83
+ //On File Remove Index
84
+ const onFileRemove = (index) => {
85
+ onChange(value.filter((_, i) => i !== index));
86
+ };
87
+ //Handle File Upload
88
+ const onFileUpdate = (index) => {
89
+ setIndexKey(index);
90
+ };
91
+ //In Component Method
92
+ const onInputChange = (e) => __awaiter(void 0, void 0, void 0, function* () {
93
+ yield handleChange(e.target.files);
94
+ indexKey > DEFAULT_INDEX && setIndexKey(DEFAULT_INDEX);
95
+ if (inputRef.current)
96
+ inputRef.current.value = '';
97
+ });
98
+ const handleClickInput = useCallback(() => openFileDialog(inputRef), [
99
+ inputRef,
100
+ ]);
101
+ const onFileUpload = useCallback(() => {
102
+ setIndexKey(DEFAULT_INDEX);
103
+ handleClickInput();
104
+ }, [handleClickInput]);
105
+ const handleDrag = (e) => {
106
+ e.preventDefault();
107
+ e.stopPropagation();
108
+ };
109
+ const handleDragIn = (e) => {
110
+ e.preventDefault();
111
+ e.stopPropagation();
112
+ if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
113
+ setIsDragging(true);
114
+ }
115
+ };
116
+ const handleDragOut = (e) => {
117
+ e.preventDefault();
118
+ e.stopPropagation();
119
+ setIsDragging(false);
120
+ };
121
+ const handleDrop = (e) => {
122
+ e.preventDefault();
123
+ e.stopPropagation();
124
+ setIsDragging(false);
125
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
126
+ handleChange(e.dataTransfer.files);
127
+ }
128
+ };
129
+ const handleDragStart = (e) => {
130
+ e.preventDefault();
131
+ e.stopPropagation();
132
+ e.dataTransfer.clearData();
133
+ };
134
+ useEffect(() => {
135
+ if (indexKey > DEFAULT_INDEX) {
136
+ handleClickInput();
137
+ }
138
+ }, [indexKey]);
139
+ return (_jsxs(_Fragment, { children: [_jsx("input", Object.assign({ type: "file", style: { display: "none" }, accept: getFileAccepts(acceptType).join(","), multiple: indexKey === DEFAULT_INDEX, onChange: onInputChange, ref: inputRef }, inputProps)), children === null || children === void 0 ? void 0 : children({
140
+ onFileUpload,
141
+ onFileRemove,
142
+ onFileUpdate,
143
+ onFileRemoveAll: onFileRemoveAll,
144
+ dragProps: {
145
+ onDrop: handleDrop,
146
+ onDragEnter: handleDragIn,
147
+ onDragLeave: handleDragOut,
148
+ onDragOver: handleDrag,
149
+ onDragStart: handleDragStart
150
+ },
151
+ isDragging,
152
+ errors,
153
+ fileInfo: value
154
+ })] }));
155
+ };
156
+ export default MultiFileUpload;
157
+ //# sourceMappingURL=MultiFileUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiFileUpload.js","sourceRoot":"","sources":["../../../../src/components/file/MultiFileUpload.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { DragEvent } from "react";
2
+ export type FileType = {
3
+ file: File;
4
+ fileInfo: {
5
+ name: string;
6
+ size: number;
7
+ type: string;
8
+ };
9
+ } | null;
10
+ type TExportTypes = {
11
+ dragProps: {
12
+ onDrop: (e: DragEvent<HTMLDivElement>) => void;
13
+ onDragEnter: (e: DragEvent<HTMLDivElement>) => void;
14
+ onDragLeave: (e: DragEvent<HTMLDivElement>) => void;
15
+ onDragOver: (e: DragEvent<HTMLDivElement>) => void;
16
+ onDragStart: (e: DragEvent<HTMLDivElement>) => void;
17
+ };
18
+ isDragging: boolean;
19
+ onFileUpload: () => void;
20
+ };
21
+ type TPropsTypes = {
22
+ inputProps?: React.HTMLProps<HTMLInputElement>;
23
+ acceptType?: FileAcceptType | Exclude<FileAcceptType, FileAcceptType.ALL>[];
24
+ maxFileSize?: number;
25
+ };
26
+ export declare enum FileAcceptType {
27
+ ALL = "all",
28
+ PDF = "application/pdf",
29
+ DOC = "application/msword",
30
+ DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
31
+ PPT = "application/vnd.ms-powerpoint",
32
+ PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation",
33
+ XLS = "application/vnd.ms-excel",
34
+ XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
35
+ ODT = "application/vnd.oasis.opendocument.text",
36
+ ODS = "application/vnd.oasis.opendocument.spreadsheet",
37
+ ODP = "application/vnd.oasis.opendocument.presentation",
38
+ RTF = "application/rtf",
39
+ EPUB = "application/epub+zip",
40
+ CSV = "text/csv",
41
+ TEXT = "text/plain",
42
+ MARKDOWN = "text/markdown",
43
+ HTML = "text/html",
44
+ XML = "application/xml",
45
+ JSON = "application/json",
46
+ YAML = "application/yaml",
47
+ TSV = "text/tab-separated-values",
48
+ ZIP = "application/zip",
49
+ RAR = "application/vnd.rar",
50
+ TAR = "application/x-tar",
51
+ GZIP = "application/gzip",
52
+ SEVENZ = "application/x-7z-compressed",
53
+ MP3 = "audio/mpeg",
54
+ WAV = "audio/wav",
55
+ OGG = "audio/ogg",
56
+ AAC = "audio/aac",
57
+ FLAC = "audio/flac",
58
+ MP4 = "video/mp4",
59
+ AVI = "video/x-msvideo",
60
+ MOV = "video/quicktime",
61
+ WEBM = "video/webm",
62
+ MKV = "video/x-matroska",
63
+ WOFF = "font/woff",
64
+ WOFF2 = "font/woff2",
65
+ TTF = "font/ttf",
66
+ OTF = "font/otf",
67
+ EXE = "application/vnd.microsoft.portable-executable",
68
+ DMG = "application/x-apple-diskimage"
69
+ }
70
+ export type FileErrorTypes = {
71
+ maxFileSize: boolean;
72
+ acceptType: boolean;
73
+ };
74
+ export interface FileExportTypes extends TExportTypes {
75
+ fileInfo: FileType;
76
+ errors: FileErrorTypes;
77
+ onFileRemove: () => void;
78
+ }
79
+ export interface FilePropsTypes extends TPropsTypes {
80
+ children: (props: FileExportTypes) => React.ReactNode;
81
+ onChange: (value: FileType) => void;
82
+ value: FileType;
83
+ onError?: (errors: FileErrorTypes) => void;
84
+ }
85
+ export type MultiFileType = FileType[];
86
+ export interface MultiFileErrorTypes extends FileErrorTypes {
87
+ maxNumber: boolean;
88
+ }
89
+ export interface MultiFileExportTypes extends TExportTypes {
90
+ fileInfo: MultiFileType;
91
+ errors: MultiFileErrorTypes;
92
+ onFileRemove: (index: number) => void;
93
+ onFileUpdate: (index: number) => void;
94
+ onFileRemoveAll: () => void;
95
+ }
96
+ export interface MultiFilePropsTypes extends TPropsTypes {
97
+ children: (props: MultiFileExportTypes) => React.ReactNode;
98
+ onChange: (value: MultiFileType) => void;
99
+ value: MultiFileType;
100
+ onError?: (errors: MultiFileErrorTypes) => void;
101
+ maxNumber?: number;
102
+ }
103
+ export {};
@@ -0,0 +1,54 @@
1
+ export var FileAcceptType;
2
+ (function (FileAcceptType) {
3
+ // Special type
4
+ FileAcceptType["ALL"] = "all";
5
+ // Documents
6
+ FileAcceptType["PDF"] = "application/pdf";
7
+ FileAcceptType["DOC"] = "application/msword";
8
+ FileAcceptType["DOCX"] = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
9
+ FileAcceptType["PPT"] = "application/vnd.ms-powerpoint";
10
+ FileAcceptType["PPTX"] = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
11
+ FileAcceptType["XLS"] = "application/vnd.ms-excel";
12
+ FileAcceptType["XLSX"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
13
+ FileAcceptType["ODT"] = "application/vnd.oasis.opendocument.text";
14
+ FileAcceptType["ODS"] = "application/vnd.oasis.opendocument.spreadsheet";
15
+ FileAcceptType["ODP"] = "application/vnd.oasis.opendocument.presentation";
16
+ FileAcceptType["RTF"] = "application/rtf";
17
+ FileAcceptType["EPUB"] = "application/epub+zip";
18
+ // Text-based formats
19
+ FileAcceptType["CSV"] = "text/csv";
20
+ FileAcceptType["TEXT"] = "text/plain";
21
+ FileAcceptType["MARKDOWN"] = "text/markdown";
22
+ FileAcceptType["HTML"] = "text/html";
23
+ FileAcceptType["XML"] = "application/xml";
24
+ FileAcceptType["JSON"] = "application/json";
25
+ FileAcceptType["YAML"] = "application/yaml";
26
+ FileAcceptType["TSV"] = "text/tab-separated-values";
27
+ // Archives
28
+ FileAcceptType["ZIP"] = "application/zip";
29
+ FileAcceptType["RAR"] = "application/vnd.rar";
30
+ FileAcceptType["TAR"] = "application/x-tar";
31
+ FileAcceptType["GZIP"] = "application/gzip";
32
+ FileAcceptType["SEVENZ"] = "application/x-7z-compressed";
33
+ // Audio
34
+ FileAcceptType["MP3"] = "audio/mpeg";
35
+ FileAcceptType["WAV"] = "audio/wav";
36
+ FileAcceptType["OGG"] = "audio/ogg";
37
+ FileAcceptType["AAC"] = "audio/aac";
38
+ FileAcceptType["FLAC"] = "audio/flac";
39
+ // Video
40
+ FileAcceptType["MP4"] = "video/mp4";
41
+ FileAcceptType["AVI"] = "video/x-msvideo";
42
+ FileAcceptType["MOV"] = "video/quicktime";
43
+ FileAcceptType["WEBM"] = "video/webm";
44
+ FileAcceptType["MKV"] = "video/x-matroska";
45
+ // Fonts
46
+ FileAcceptType["WOFF"] = "font/woff";
47
+ FileAcceptType["WOFF2"] = "font/woff2";
48
+ FileAcceptType["TTF"] = "font/ttf";
49
+ FileAcceptType["OTF"] = "font/otf";
50
+ // Executables
51
+ FileAcceptType["EXE"] = "application/vnd.microsoft.portable-executable";
52
+ FileAcceptType["DMG"] = "application/x-apple-diskimage";
53
+ })(FileAcceptType || (FileAcceptType = {}));
54
+ //# sourceMappingURL=typings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typings.js","sourceRoot":"","sources":["../../../../src/components/file/typings.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAN,IAAY,cA0DX;AA1DD,WAAY,cAAc;IACtB,eAAe;IACf,6BAAW,CAAA;IAEX,YAAY;IACZ,yCAAuB,CAAA;IACvB,4CAA0B,CAAA;IAC1B,kGAAgF,CAAA;IAChF,uDAAqC,CAAA;IACrC,oGAAkF,CAAA;IAClF,kDAAgC,CAAA;IAChC,4FAA0E,CAAA;IAC1E,iEAA+C,CAAA;IAC/C,wEAAsD,CAAA;IACtD,yEAAuD,CAAA;IACvD,yCAAuB,CAAA;IACvB,+CAA6B,CAAA;IAE7B,qBAAqB;IACrB,kCAAgB,CAAA;IAChB,qCAAmB,CAAA;IACnB,4CAA0B,CAAA;IAC1B,oCAAkB,CAAA;IAClB,yCAAuB,CAAA;IACvB,2CAAyB,CAAA;IACzB,2CAAyB,CAAA;IACzB,mDAAiC,CAAA;IAEjC,WAAW;IACX,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,2CAAyB,CAAA;IACzB,2CAAyB,CAAA;IACzB,wDAAsC,CAAA;IAEtC,QAAQ;IACR,oCAAkB,CAAA;IAClB,mCAAiB,CAAA;IACjB,mCAAiB,CAAA;IACjB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IAEnB,QAAQ;IACR,mCAAiB,CAAA;IACjB,yCAAuB,CAAA;IACvB,yCAAuB,CAAA;IACvB,qCAAmB,CAAA;IACnB,0CAAwB,CAAA;IAExB,QAAQ;IACR,oCAAkB,CAAA;IAClB,sCAAoB,CAAA;IACpB,kCAAgB,CAAA;IAChB,kCAAgB,CAAA;IAEhB,cAAc;IACd,uEAAqD,CAAA;IACrD,uDAAqC,CAAA;AACzC,CAAC,EA1DW,cAAc,KAAd,cAAc,QA0DzB"}
@@ -0,0 +1,3 @@
1
+ import { ImagePropsTypes } from "./typings";
2
+ declare const ImageUpload: ({ inputProps, acceptType, maxFileSize, resolutionWidth, resolutionHeight, resolutionType, children, onChange, value, onError }: ImagePropsTypes) => import("react/jsx-runtime").JSX.Element;
3
+ export default ImageUpload;
@@ -0,0 +1,124 @@
1
+ "use client";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { useRef, useState, useCallback } from "react";
13
+ import { ImageAcceptType } from "./typings";
14
+ //Utils
15
+ import { openFileDialog, getImageAccepts, getBase64, getImage, isResolutionValid } from "../utils/utils";
16
+ const ImageUpload = ({ inputProps, acceptType, maxFileSize, resolutionWidth, resolutionHeight, resolutionType = "absolute", children, onChange, value, onError }) => {
17
+ //Validations
18
+ //@ts-ignore
19
+ if (Array.isArray(acceptType) && acceptType.includes(ImageAcceptType.ALL)) {
20
+ throw new Error("Invalid accept type: ImageAcceptType.All cannot be included in an array.");
21
+ }
22
+ //Ref
23
+ const inputRef = useRef(null);
24
+ //State
25
+ const [isDragging, setIsDragging] = useState(false);
26
+ const [errors, setErrors] = useState({ acceptType: false, maxFileSize: false, resolution: false });
27
+ //Handle Change
28
+ const handleChange = (files) => __awaiter(void 0, void 0, void 0, function* () {
29
+ if (!files)
30
+ return null;
31
+ const file = files[0];
32
+ if (!file)
33
+ return null;
34
+ //Default
35
+ const newErrors = {
36
+ acceptType: false,
37
+ maxFileSize: false,
38
+ resolution: false,
39
+ };
40
+ const uploadSize = Number((file.size / 1024 * 1024).toFixed(2));
41
+ //Max File Size Check
42
+ if (maxFileSize && uploadSize > maxFileSize)
43
+ newErrors.maxFileSize = true;
44
+ //Accept Type Check
45
+ if (!getImageAccepts(acceptType).includes(file.type))
46
+ newErrors.acceptType = true;
47
+ //Resolution Check
48
+ const image = yield getImage(file);
49
+ const checkRes = isResolutionValid(image, resolutionType, resolutionWidth, resolutionHeight);
50
+ if (!checkRes)
51
+ newErrors.resolution = true;
52
+ setErrors(newErrors);
53
+ if (newErrors.acceptType || newErrors.maxFileSize || newErrors.resolution) {
54
+ onError === null || onError === void 0 ? void 0 : onError(newErrors);
55
+ return;
56
+ }
57
+ const dataUrl = yield getBase64(file);
58
+ onChange({
59
+ file: file,
60
+ dataURL: dataUrl,
61
+ });
62
+ });
63
+ //On Image Remove
64
+ const onImageRemove = () => {
65
+ onChange(null);
66
+ };
67
+ //In Component Handler
68
+ const onInputChange = (e) => __awaiter(void 0, void 0, void 0, function* () {
69
+ yield handleChange(e.target.files);
70
+ if (inputRef.current)
71
+ inputRef.current.value = '';
72
+ });
73
+ const handleClickInput = useCallback(() => openFileDialog(inputRef), [
74
+ inputRef,
75
+ ]);
76
+ const onImageUpload = useCallback(() => {
77
+ handleClickInput();
78
+ }, [handleClickInput]);
79
+ const handleDrag = (e) => {
80
+ e.preventDefault();
81
+ e.stopPropagation();
82
+ };
83
+ const handleDragIn = (e) => {
84
+ e.preventDefault();
85
+ e.stopPropagation();
86
+ if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
87
+ setIsDragging(true);
88
+ }
89
+ };
90
+ const handleDragOut = (e) => {
91
+ e.preventDefault();
92
+ e.stopPropagation();
93
+ setIsDragging(false);
94
+ };
95
+ const handleDrop = (e) => {
96
+ e.preventDefault();
97
+ e.stopPropagation();
98
+ setIsDragging(false);
99
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
100
+ handleChange(e.dataTransfer.files);
101
+ }
102
+ };
103
+ const handleDragStart = (e) => {
104
+ e.preventDefault();
105
+ e.stopPropagation();
106
+ e.dataTransfer.clearData();
107
+ };
108
+ return (_jsxs(_Fragment, { children: [_jsx("input", Object.assign({ type: "file", style: { display: "none" }, accept: getImageAccepts(acceptType).join(","), multiple: false, onChange: onInputChange, ref: inputRef }, inputProps)), children === null || children === void 0 ? void 0 : children({
109
+ onImageUpload,
110
+ onImageRemove: onImageRemove,
111
+ dragProps: {
112
+ onDrop: handleDrop,
113
+ onDragEnter: handleDragIn,
114
+ onDragLeave: handleDragOut,
115
+ onDragOver: handleDrag,
116
+ onDragStart: handleDragStart
117
+ },
118
+ isDragging,
119
+ errors,
120
+ imageInfo: value,
121
+ })] }));
122
+ };
123
+ export default ImageUpload;
124
+ //# sourceMappingURL=ImageUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageUpload.js","sourceRoot":"","sources":["../../../../src/components/image/ImageUpload.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { MultiImagePropsTypes } from "./typings";
2
+ declare const MultiImageUpload: ({ inputProps, acceptType, maxFileSize, resolutionWidth, resolutionHeight, resolutionType, children, onChange, value, onError, maxNumber }: MultiImagePropsTypes) => import("react/jsx-runtime").JSX.Element;
3
+ export default MultiImageUpload;
@@ -0,0 +1,160 @@
1
+ "use client";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { useRef, useState, useCallback, useEffect } from "react";
13
+ import { ImageAcceptType } from "./typings";
14
+ //Utils
15
+ import { openFileDialog, getImageAccepts, getBase64, getImage, isResolutionValid } from "../utils/utils";
16
+ const DEFAULT_INDEX = -1;
17
+ const MultiImageUpload = ({ inputProps, acceptType, maxFileSize, resolutionWidth, resolutionHeight, resolutionType = "absolute", children, onChange, value, onError, maxNumber = 10 }) => {
18
+ //Validations
19
+ //@ts-ignore
20
+ if (Array.isArray(acceptType) && acceptType.includes(ImageAcceptType.ALL)) {
21
+ throw new Error("Invalid accept type: FileAccept.All cannot be included in an array.");
22
+ }
23
+ //Ref
24
+ const inputRef = useRef(null);
25
+ //State
26
+ const [isDragging, setIsDragging] = useState(false);
27
+ const [indexKey, setIndexKey] = useState(DEFAULT_INDEX);
28
+ const [errors, setErrors] = useState({ acceptType: false, maxFileSize: false, resolution: false, maxNumber: false });
29
+ //Handle The File Change
30
+ const handleChange = (files) => __awaiter(void 0, void 0, void 0, function* () {
31
+ if (!files)
32
+ return;
33
+ if (files.length === 0)
34
+ return;
35
+ var changeFiles = [];
36
+ let newErrors = {
37
+ acceptType: false,
38
+ maxFileSize: false,
39
+ resolution: false,
40
+ maxNumber: false,
41
+ };
42
+ if (files.length > maxNumber)
43
+ newErrors.maxNumber = true;
44
+ for (let i = 0; i < files.length; i++) {
45
+ const file = files[i];
46
+ const uploadSize = Number((file.size / 1024 * 1024).toFixed(2));
47
+ //Accept Type Error
48
+ if (!getImageAccepts(acceptType).includes(file.type))
49
+ newErrors.acceptType = true;
50
+ //Max File Size Error
51
+ if (maxFileSize && (uploadSize > maxFileSize))
52
+ newErrors.maxFileSize = true;
53
+ //Resolution Check
54
+ const image = yield getImage(file);
55
+ const checkRes = isResolutionValid(image, resolutionType, resolutionWidth, resolutionHeight);
56
+ if (!checkRes)
57
+ newErrors.resolution = true;
58
+ const dataUrl = yield getBase64(file);
59
+ //Get Files Ready
60
+ changeFiles.push({
61
+ file: file,
62
+ dataURL: dataUrl,
63
+ });
64
+ }
65
+ setErrors(newErrors);
66
+ if (newErrors.acceptType || newErrors.maxFileSize || newErrors.maxNumber || newErrors.resolution) {
67
+ onError === null || onError === void 0 ? void 0 : onError(newErrors);
68
+ return;
69
+ }
70
+ if (indexKey > DEFAULT_INDEX) {
71
+ onChange(value.map((a, i) => {
72
+ if (i === indexKey) {
73
+ return changeFiles[0];
74
+ }
75
+ return a;
76
+ }));
77
+ }
78
+ else {
79
+ onChange(changeFiles);
80
+ }
81
+ });
82
+ //On File Remove ALl
83
+ const onImageRemoveAll = () => {
84
+ onChange([]);
85
+ };
86
+ //On File Remove Index
87
+ const onImageRemove = (index) => {
88
+ onChange(value.filter((_, i) => i !== index));
89
+ };
90
+ //Handle File Upload
91
+ const onImageUpdate = (index) => {
92
+ setIndexKey(index);
93
+ };
94
+ //In Component Method
95
+ const onInputChange = (e) => __awaiter(void 0, void 0, void 0, function* () {
96
+ yield handleChange(e.target.files);
97
+ indexKey > DEFAULT_INDEX && setIndexKey(DEFAULT_INDEX);
98
+ if (inputRef.current)
99
+ inputRef.current.value = '';
100
+ });
101
+ const handleClickInput = useCallback(() => openFileDialog(inputRef), [
102
+ inputRef,
103
+ ]);
104
+ const onImageUpload = useCallback(() => {
105
+ setIndexKey(DEFAULT_INDEX);
106
+ handleClickInput();
107
+ }, [handleClickInput]);
108
+ const handleDrag = (e) => {
109
+ e.preventDefault();
110
+ e.stopPropagation();
111
+ };
112
+ const handleDragIn = (e) => {
113
+ e.preventDefault();
114
+ e.stopPropagation();
115
+ if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
116
+ setIsDragging(true);
117
+ }
118
+ };
119
+ const handleDragOut = (e) => {
120
+ e.preventDefault();
121
+ e.stopPropagation();
122
+ setIsDragging(false);
123
+ };
124
+ const handleDrop = (e) => {
125
+ e.preventDefault();
126
+ e.stopPropagation();
127
+ setIsDragging(false);
128
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
129
+ handleChange(e.dataTransfer.files);
130
+ }
131
+ };
132
+ const handleDragStart = (e) => {
133
+ e.preventDefault();
134
+ e.stopPropagation();
135
+ e.dataTransfer.clearData();
136
+ };
137
+ useEffect(() => {
138
+ if (indexKey > DEFAULT_INDEX) {
139
+ handleClickInput();
140
+ }
141
+ }, [indexKey]);
142
+ return (_jsxs(_Fragment, { children: [_jsx("input", Object.assign({ type: "file", style: { display: "none" }, accept: getImageAccepts(acceptType).join(","), multiple: indexKey === DEFAULT_INDEX, onChange: onInputChange, ref: inputRef }, inputProps)), children === null || children === void 0 ? void 0 : children({
143
+ onImageUpload,
144
+ onImageRemove,
145
+ onImageUpdate,
146
+ onImageRemoveAll,
147
+ dragProps: {
148
+ onDrop: handleDrop,
149
+ onDragEnter: handleDragIn,
150
+ onDragLeave: handleDragOut,
151
+ onDragOver: handleDrag,
152
+ onDragStart: handleDragStart
153
+ },
154
+ isDragging,
155
+ errors,
156
+ imageInfo: value
157
+ })] }));
158
+ };
159
+ export default MultiImageUpload;
160
+ //# sourceMappingURL=MultiImageUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiImageUpload.js","sourceRoot":"","sources":["../../../../src/components/image/MultiImageUpload.tsx"],"names":[],"mappings":"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"}