@bigbinary/neeto-molecules 3.2.18 → 3.3.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.
- package/README.md +1 -0
- package/dist/FileUpload.js +522 -0
- package/dist/FileUpload.js.map +1 -0
- package/dist/NavigationHeader.js +10 -0
- package/dist/NavigationHeader.js.map +1 -1
- package/dist/PublishBlock.js +303 -21
- package/dist/PublishBlock.js.map +1 -1
- package/dist/cjs/FileUpload.js +544 -0
- package/dist/cjs/FileUpload.js.map +1 -0
- package/dist/cjs/NavigationHeader.js +10 -0
- package/dist/cjs/NavigationHeader.js.map +1 -1
- package/dist/cjs/PublishBlock.js +307 -16
- package/dist/cjs/PublishBlock.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/en.json +21 -1
- package/types/FileUpload.d.ts +84 -0
- package/types/PublishBlock.d.ts +62 -3
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var neetoCist = require('@bigbinary/neeto-cist');
|
|
7
|
+
var ramda = require('ramda');
|
|
8
|
+
var _extends = require('@babel/runtime/helpers/extends');
|
|
9
|
+
var classnames = require('classnames');
|
|
10
|
+
var FileUpload$1 = require('@bigbinary/neeto-icons/FileUpload');
|
|
11
|
+
var reactI18next = require('react-i18next');
|
|
12
|
+
var injectCss = require('./inject-css-80a5faa3.js');
|
|
13
|
+
var FileGeneric = require('@bigbinary/neeto-icons/FileGeneric');
|
|
14
|
+
var Check = require('@bigbinary/neeto-icons/Check');
|
|
15
|
+
var Close = require('@bigbinary/neeto-icons/Close');
|
|
16
|
+
var framerMotion = require('framer-motion');
|
|
17
|
+
var path = require('path');
|
|
18
|
+
var i18next = require('i18next');
|
|
19
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
20
|
+
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
21
|
+
var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
22
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
23
|
+
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
24
|
+
var activestorage = require('@rails/activestorage');
|
|
25
|
+
var reactDropzone = require('react-dropzone');
|
|
26
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
27
|
+
var formik = require('formik');
|
|
28
|
+
|
|
29
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
30
|
+
|
|
31
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
32
|
+
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
33
|
+
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
34
|
+
var FileUpload__default = /*#__PURE__*/_interopDefaultLegacy(FileUpload$1);
|
|
35
|
+
var FileGeneric__default = /*#__PURE__*/_interopDefaultLegacy(FileGeneric);
|
|
36
|
+
var Check__default = /*#__PURE__*/_interopDefaultLegacy(Check);
|
|
37
|
+
var Close__default = /*#__PURE__*/_interopDefaultLegacy(Close);
|
|
38
|
+
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
39
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
40
|
+
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
41
|
+
var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
|
|
42
|
+
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
|
|
43
|
+
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
|
|
44
|
+
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
|
|
45
|
+
|
|
46
|
+
var DropZone = function DropZone(_ref) {
|
|
47
|
+
var isDragActive = _ref.isDragActive,
|
|
48
|
+
getRootProps = _ref.getRootProps,
|
|
49
|
+
getInputProps = _ref.getInputProps,
|
|
50
|
+
multipleFilesAllowed = _ref.multipleFilesAllowed,
|
|
51
|
+
maxFileSize = _ref.maxFileSize,
|
|
52
|
+
allowedFileTypes = _ref.allowedFileTypes;
|
|
53
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
54
|
+
t = _useTranslation.t;
|
|
55
|
+
var shouldAllowSingleFileUpload = !multipleFilesAllowed;
|
|
56
|
+
var shouldShowFileSizeLimit = maxFileSize;
|
|
57
|
+
return /*#__PURE__*/React__default["default"].createElement("div", getRootProps({
|
|
58
|
+
className: classnames__default["default"](["neeto-molecules-file-upload__dropzone"], {
|
|
59
|
+
"neeto-molecules-file-upload__dropzone--drag-active": isDragActive
|
|
60
|
+
})
|
|
61
|
+
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
62
|
+
className: "neeto-molecules-file-upload__dropzone-inner",
|
|
63
|
+
"data-cy": "file-upload-body",
|
|
64
|
+
"data-testid": "file-upload-body"
|
|
65
|
+
}, /*#__PURE__*/React__default["default"].createElement(FileUpload__default["default"], {
|
|
66
|
+
className: "neeto-molecules-file-upload__upload-icon",
|
|
67
|
+
size: "36"
|
|
68
|
+
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
69
|
+
className: "neeto-molecules-file-upload__dropzone-content"
|
|
70
|
+
}, /*#__PURE__*/React__default["default"].createElement("label", {
|
|
71
|
+
className: "neeto-molecules-file-upload__upload-label",
|
|
72
|
+
htmlFor: "file-upload"
|
|
73
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
74
|
+
className: "neeto-molecules-file-upload__choose-file"
|
|
75
|
+
}, t("neetoMolecules.fileUpload.filesDropzone.chooseFileOrDragHere")), /*#__PURE__*/React__default["default"].createElement("input", _extends__default["default"]({}, getInputProps(), {
|
|
76
|
+
"data-cy": "image-browse-button"
|
|
77
|
+
}))), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
78
|
+
className: "neeto-molecules-file-upload__dropzone-helper-block"
|
|
79
|
+
}, shouldAllowSingleFileUpload && /*#__PURE__*/React__default["default"].createElement("p", {
|
|
80
|
+
className: "neeto-molecules-file-upload__dropzone-helper-text",
|
|
81
|
+
"data-cy": "upload-only-one-file-text"
|
|
82
|
+
}, t("neetoMolecules.fileUpload.filesDropzone.oneFileAllowed")), shouldShowFileSizeLimit && /*#__PURE__*/React__default["default"].createElement("p", {
|
|
83
|
+
className: "neeto-molecules-file-upload__dropzone-helper-text",
|
|
84
|
+
"data-cy": "maximum-allowed-size-text"
|
|
85
|
+
}, t("neetoMolecules.fileUpload.filesDropzone.maxFileSize", {
|
|
86
|
+
size: maxFileSize,
|
|
87
|
+
unit: "MB"
|
|
88
|
+
})), allowedFileTypes && /*#__PURE__*/React__default["default"].createElement("p", {
|
|
89
|
+
className: "neeto-molecules-file-upload__dropzone-helper-text",
|
|
90
|
+
"data-cy": "allowed-files-types-text"
|
|
91
|
+
}, t("neetoMolecules.fileUpload.filesDropzone.allowedFileTypes", {
|
|
92
|
+
types: allowedFileTypes
|
|
93
|
+
}))))));
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
var css = ".neeto-molecules-file-upload__dropzone{background-color:rgba(var(--neeto-ui-primary-800),.1);border:2px dashed rgba(var(--neeto-ui-primary-800),.5);border-radius:var(--neeto-ui-rounded-md);color:rgba(var(--neeto-ui-gray-700),1);padding:1.5em;transition:var(--neeto-ui-transition)}.neeto-molecules-file-upload__dropzone:hover{background-color:rgba(var(--neeto-ui-primary-800),.2)}.neeto-molecules-file-upload__dropzone-inner{text-align:center}.neeto-molecules-file-upload__upload-icon{color:rgba(var(--neeto-ui-primary-800),1);display:block;margin-bottom:1.25em;margin-left:auto;margin-right:auto}.neeto-molecules-file-upload__upload-label{display:flex;font-size:1rem;gap:.3125em;justify-content:center}.neeto-molecules-file-upload__choose-file{font-weight:500}.neeto-molecules-file-upload__dropzone-helper-block{margin-top:.5em}.neeto-molecules-file-upload__dropzone-helper-text{color:rgba(var(--neeto-ui-gray-700),.65);display:block;font-size:.75rem;line-height:1.2;margin-bottom:.5rem}.neeto-molecules-file-upload__uploaded-list{list-style:none;margin:1.25em 0;padding:0}.neeto-molecules-file-upload__uploaded-list-item{align-items:center;background-color:rgba(var(--neeto-ui-primary-800),.1);border:1px solid rgba(var(--neeto-ui-primary-800),.5);display:flex;gap:.75em;list-style:none;margin-bottom:-1px;padding:.5em .75em}.neeto-molecules-file-upload__uploaded-list-item:first-of-type{border-top-left-radius:var(--neeto-ui-gray-700);border-top-right-radius:var(--neeto-ui-gray-700)}.neeto-molecules-file-upload__uploaded-list-item:last-of-type{border-bottom-left-radius:var(--neeto-ui-gray-700);border-bottom-right-radius:var(--neeto-ui-gray-700)}.neeto-molecules-file-upload__file-preview{color:#4b2876;position:relative}.neeto-molecules-file-upload__file-preview .neeto-molecules-ring{height:100%;left:0;position:absolute;top:0;width:100%}.neeto-molecules-file-upload__file-preview .neeto-molecules-progress{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.neeto-molecules-file-upload__file-preview .neeto-molecules-progress__circle-wrapper{position:relative}.neeto-molecules-file-upload__file-info{word-wrap:break-word;display:flex;flex-direction:column;flex-grow:1;min-width:0;overflow-wrap:break-word}.neeto-molecules-file-upload__file-info-name{font-size:.875em;margin-bottom:.3125em}.neeto-molecules-file-upload__file-info-size{color:rgba(var(--neeto-ui-gray-700),.65);font-size:.75em}.neeto-molecules-file-upload__actions{flex-shrink:0;margin-left:auto;position:relative}.neeto-molecules-file-upload__success-indicator{align-items:center;border-radius:100%;display:inline-flex;height:1.75em;justify-content:center;width:1.75em}.neeto-molecules-file-upload__success-indicator.neeto-molecules-file-upload__success-indicator--active{background-color:rgb(var(--neeto-ui-primary-800));color:rgb(var(--neeto-ui-white))}.neeto-molecules-file-upload__button--red{align-items:center;background-color:rgb(var(--neeto-ui-error-500));border-radius:100%;color:#fff;display:inline-flex;height:1.75em;justify-content:center;width:1.75em}.neeto-molecules-file-upload__remove-button{left:0;opacity:0;position:absolute;top:0;transition:var(--neeto-ui-transition);visibility:hidden}.neeto-molecules-file-upload__actions:hover .neeto-molecules-file-upload__remove-button{opacity:1;visibility:visible}.neeto-molecules-ring{align-items:center;display:inline-flex;height:3.125em;justify-content:center;position:relative;width:3.125em}.neeto-molecules-ring div{animation:neeto-molecules-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:4px solid rgb(var(--neeto-ui-primary-800));border-color:rgb(var(--neeto-ui-primary-800)) transparent transparent transparent;border-radius:50%;box-sizing:border-box;display:block;height:1.75em;position:absolute;width:1.75em}.neeto-molecules-ring div:first-child{animation-delay:-.45s}.neeto-molecules-ring div:nth-child(2){animation-delay:-.3s}.neeto-molecules-ring div:nth-child(3){animation-delay:-.15s}@keyframes neeto-molecules-ring{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.neeto-molecules-invisible{visibility:hidden}.neeto-molecules-input__error-text{font-size:.875rem;line-height:1.2;margin-top:.5em}.neeto-molecules-input__error-text-style-handle{background-color:rgb(var(--neeto-ui-error-100));border-radius:3px;color:rgb(var(--neeto-ui-error-500));display:inline-block;font-size:.875rem;line-height:1.2;padding:3px 6px}";
|
|
97
|
+
injectCss.n(css,{});
|
|
98
|
+
|
|
99
|
+
var Progress = function Progress(_ref) {
|
|
100
|
+
var percents = _ref.percents,
|
|
101
|
+
_ref$stroke = _ref.stroke,
|
|
102
|
+
stroke = _ref$stroke === void 0 ? "blue" : _ref$stroke,
|
|
103
|
+
_ref$emptyStroke = _ref.emptyStroke,
|
|
104
|
+
emptyStroke = _ref$emptyStroke === void 0 ? stroke : _ref$emptyStroke,
|
|
105
|
+
_ref$emptyStrokeOpaci = _ref.emptyStrokeOpacity,
|
|
106
|
+
emptyStrokeOpacity = _ref$emptyStrokeOpaci === void 0 ? 0.25 : _ref$emptyStrokeOpaci,
|
|
107
|
+
_ref$duration = _ref.duration,
|
|
108
|
+
duration = _ref$duration === void 0 ? 0.5 : _ref$duration,
|
|
109
|
+
_ref$delay = _ref.delay,
|
|
110
|
+
delay = _ref$delay === void 0 ? 0 : _ref$delay,
|
|
111
|
+
_ref$size = _ref.size,
|
|
112
|
+
size = _ref$size === void 0 ? 100 : _ref$size,
|
|
113
|
+
_ref$strokeWidth = _ref.strokeWidth,
|
|
114
|
+
strokeWidth = _ref$strokeWidth === void 0 ? 12 : _ref$strokeWidth;
|
|
115
|
+
var radius = 45;
|
|
116
|
+
var circumference = Math.ceil(2 * Math.PI * radius);
|
|
117
|
+
var fillPercents = Math.abs(Math.ceil(circumference / 100 * (percents - 100)));
|
|
118
|
+
var transition = {
|
|
119
|
+
duration: duration,
|
|
120
|
+
delay: delay
|
|
121
|
+
};
|
|
122
|
+
var variants = {
|
|
123
|
+
hidden: {
|
|
124
|
+
strokeDashoffset: circumference,
|
|
125
|
+
transition: transition
|
|
126
|
+
},
|
|
127
|
+
show: {
|
|
128
|
+
strokeDashoffset: fillPercents,
|
|
129
|
+
transition: transition
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
133
|
+
className: "neeto-molecules-progress__circle"
|
|
134
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
135
|
+
className: "neeto-molecules-progress__circle-wrapper",
|
|
136
|
+
style: {
|
|
137
|
+
height: size
|
|
138
|
+
}
|
|
139
|
+
}, /*#__PURE__*/React__default["default"].createElement("svg", {
|
|
140
|
+
height: size,
|
|
141
|
+
version: "1.1",
|
|
142
|
+
viewBox: "0 0 100 100",
|
|
143
|
+
width: size,
|
|
144
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
145
|
+
}, /*#__PURE__*/React__default["default"].createElement("circle", {
|
|
146
|
+
strokeWidth: strokeWidth,
|
|
147
|
+
className: "circle",
|
|
148
|
+
cx: "50",
|
|
149
|
+
cy: "50",
|
|
150
|
+
fill: "transparent",
|
|
151
|
+
r: radius,
|
|
152
|
+
stroke: emptyStroke,
|
|
153
|
+
strokeOpacity: emptyStrokeOpacity
|
|
154
|
+
})), /*#__PURE__*/React__default["default"].createElement("svg", {
|
|
155
|
+
height: size,
|
|
156
|
+
viewBox: "0 0 100 100",
|
|
157
|
+
width: size,
|
|
158
|
+
style: {
|
|
159
|
+
position: "absolute",
|
|
160
|
+
transform: "rotate(-90deg)",
|
|
161
|
+
overflow: "visible",
|
|
162
|
+
top: 0
|
|
163
|
+
}
|
|
164
|
+
}, /*#__PURE__*/React__default["default"].createElement(framerMotion.motion.circle, {
|
|
165
|
+
stroke: stroke,
|
|
166
|
+
strokeWidth: strokeWidth,
|
|
167
|
+
variants: variants,
|
|
168
|
+
animate: "show",
|
|
169
|
+
cx: "50",
|
|
170
|
+
cy: "50",
|
|
171
|
+
fill: "transparent",
|
|
172
|
+
initial: "hidden",
|
|
173
|
+
r: radius,
|
|
174
|
+
strokeDasharray: circumference,
|
|
175
|
+
strokeDashoffset: fillPercents
|
|
176
|
+
}))));
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
var FILE_MIME_TYPES = {
|
|
180
|
+
pdf: ["application/pdf"],
|
|
181
|
+
doc: ["application/msword", "application/wps-writer"],
|
|
182
|
+
docx: ["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
|
|
183
|
+
xls: ["application/vnd.ms-excel"],
|
|
184
|
+
xlsx: ["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
|
|
185
|
+
csv: ["text/csv"],
|
|
186
|
+
txt: ["text/plain"],
|
|
187
|
+
rtf: ["application/rtf", "text/rtf"],
|
|
188
|
+
html: ["text/html"],
|
|
189
|
+
htm: ["text/html"],
|
|
190
|
+
md: ["text/markdown", "text/x-markdown"],
|
|
191
|
+
zip: ["application/zip"],
|
|
192
|
+
mp3: ["audio/mpeg"],
|
|
193
|
+
wma: ["audio/x-ms-wma", "video/x-ms-asf"],
|
|
194
|
+
mp4: ["video/mp4"],
|
|
195
|
+
mpg: ["video/mpeg"],
|
|
196
|
+
mpeg: ["video/mpeg"],
|
|
197
|
+
flv: ["video/x-flv"],
|
|
198
|
+
avi: ["video/x-msvideo"],
|
|
199
|
+
jpg: ["image/jpeg"],
|
|
200
|
+
jpeg: ["image/jpeg"],
|
|
201
|
+
png: ["image/png"],
|
|
202
|
+
gif: ["image/gif"]
|
|
203
|
+
};
|
|
204
|
+
var ERROR_CODES = {
|
|
205
|
+
FILE_TOO_LARGE: "file-too-large",
|
|
206
|
+
FILE_INVALID_TYPE: "file-invalid-type",
|
|
207
|
+
TOO_MANY_FILES: "too-many-files"
|
|
208
|
+
};
|
|
209
|
+
var DIRECT_UPLOAD_URL = "/api/direct_uploads";
|
|
210
|
+
|
|
211
|
+
var getAcceptedFileTypes = function getAcceptedFileTypes(allowedFileTypes) {
|
|
212
|
+
var accepted = {};
|
|
213
|
+
allowedFileTypes.split(", ").forEach(function (type) {
|
|
214
|
+
var mimeTypes = FILE_MIME_TYPES[type];
|
|
215
|
+
var extension = ".".concat(type);
|
|
216
|
+
if (neetoCist.isNotPresent(type) || neetoCist.isNotPresent(mimeTypes)) return;
|
|
217
|
+
mimeTypes.forEach(function (mimeType) {
|
|
218
|
+
if (accepted[mimeType]) accepted[mimeType].push(extension);else accepted[mimeType] = [extension];
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
return accepted;
|
|
222
|
+
};
|
|
223
|
+
var convertBytesToMb = function convertBytesToMb(bytes) {
|
|
224
|
+
return ((bytes - 10) / (1028 * 1024)).toFixed(2);
|
|
225
|
+
};
|
|
226
|
+
var renderErrorMessage = function renderErrorMessage(errorObject, maxFileSize, isMultiple) {
|
|
227
|
+
var error = errorObject.errors[0];
|
|
228
|
+
var file = errorObject.file;
|
|
229
|
+
if (error) {
|
|
230
|
+
var code = error.code;
|
|
231
|
+
if (code === ERROR_CODES.FILE_TOO_LARGE) {
|
|
232
|
+
return i18next.t("neetoMolecules.fileUpload.filesDropzone.errors.fileTooLarge", {
|
|
233
|
+
fileName: file.name,
|
|
234
|
+
maxSize: "".concat(Math.round(maxFileSize / 1048576), "MB")
|
|
235
|
+
});
|
|
236
|
+
} else if (code === ERROR_CODES.FILE_INVALID_TYPE) {
|
|
237
|
+
return i18next.t("neetoMolecules.fileUpload.filesDropzone.errors.fileInvalidType", {
|
|
238
|
+
fileType: path__default["default"].extname(file.name)
|
|
239
|
+
});
|
|
240
|
+
} else if (code === ERROR_CODES.TOO_MANY_FILES && !isMultiple) {
|
|
241
|
+
return i18next.t("neetoMolecules.fileUpload.filesDropzone.errors.tooManyFiles", {
|
|
242
|
+
maxFiles: 1
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return i18next.t("neetoMolecules.fileUpload.filesDropzone.errors.defaultError", {
|
|
247
|
+
fileName: file.name
|
|
248
|
+
});
|
|
249
|
+
};
|
|
250
|
+
var convertMbToBytes = function convertMbToBytes(mb) {
|
|
251
|
+
return mb * 1028 * 1024 + 10;
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
var FilePreview = function FilePreview(_ref) {
|
|
255
|
+
var file = _ref.file,
|
|
256
|
+
isUploading = _ref.isUploading,
|
|
257
|
+
cancel = _ref.cancel,
|
|
258
|
+
progress = _ref.progress;
|
|
259
|
+
return /*#__PURE__*/React__default["default"].createElement("li", {
|
|
260
|
+
className: "neeto-molecules-file-upload__uploaded-list-item",
|
|
261
|
+
key: file.url
|
|
262
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
263
|
+
className: "neeto-molecules-file-upload__file-preview"
|
|
264
|
+
}, /*#__PURE__*/React__default["default"].createElement("a", {
|
|
265
|
+
className: classnames__default["default"]({
|
|
266
|
+
"neeto-molecules-invisible": isUploading
|
|
267
|
+
}),
|
|
268
|
+
href: file.url,
|
|
269
|
+
rel: "noreferrer",
|
|
270
|
+
target: "_blank"
|
|
271
|
+
}, /*#__PURE__*/React__default["default"].createElement(FileGeneric__default["default"], null)), isUploading && /*#__PURE__*/React__default["default"].createElement("div", {
|
|
272
|
+
className: "neeto-molecules-progress"
|
|
273
|
+
}, /*#__PURE__*/React__default["default"].createElement(Progress, {
|
|
274
|
+
percents: progress || 0,
|
|
275
|
+
size: 20
|
|
276
|
+
}))), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
277
|
+
className: "neeto-molecules-file-upload__file-info"
|
|
278
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
279
|
+
className: "neeto-molecules-file-upload__file-info-name",
|
|
280
|
+
"data-cy": "file-name"
|
|
281
|
+
}, file.name), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
282
|
+
className: "neeto-molecules-file-upload__file-info-size"
|
|
283
|
+
}, file.size ? "".concat(convertBytesToMb(file.size), " MB") : "")), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
284
|
+
className: "neeto-molecules-file-upload__actions"
|
|
285
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
286
|
+
className: classnames__default["default"]("neeto-molecules-file-upload__success-indicator", {
|
|
287
|
+
"neeto-molecules-file-upload__success-indicator--active": file.url
|
|
288
|
+
})
|
|
289
|
+
}, file.url && /*#__PURE__*/React__default["default"].createElement(Check__default["default"], {
|
|
290
|
+
"data-cy": "file-upload-success"
|
|
291
|
+
})), /*#__PURE__*/React__default["default"].createElement("button", {
|
|
292
|
+
className: "neeto-molecules-file-upload__button--red neeto-molecules-file-upload__remove-button",
|
|
293
|
+
type: "button",
|
|
294
|
+
onClick: cancel
|
|
295
|
+
}, /*#__PURE__*/React__default["default"].createElement(Close__default["default"], null))));
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
299
|
+
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
300
|
+
var useFileUpload = function useFileUpload(_ref) {
|
|
301
|
+
var disabled = _ref.disabled,
|
|
302
|
+
accept = _ref.accept,
|
|
303
|
+
multiple = _ref.multiple,
|
|
304
|
+
maxFileSize = _ref.maxFileSize,
|
|
305
|
+
minFileSize = _ref.minFileSize,
|
|
306
|
+
files = _ref.files,
|
|
307
|
+
onChange = _ref.onChange,
|
|
308
|
+
setError = _ref.setError,
|
|
309
|
+
setTouched = _ref.setTouched;
|
|
310
|
+
var _useState = React.useState({}),
|
|
311
|
+
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
312
|
+
uploadProgress = _useState2[0],
|
|
313
|
+
setUploadProgress = _useState2[1];
|
|
314
|
+
var _useState3 = React.useState(""),
|
|
315
|
+
_useState4 = _slicedToArray__default["default"](_useState3, 2),
|
|
316
|
+
uploadError = _useState4[0],
|
|
317
|
+
setUploadError = _useState4[1];
|
|
318
|
+
var filesRef = React.useRef(files);
|
|
319
|
+
filesRef.current = files;
|
|
320
|
+
var cancel = React.useCallback(function (index) {
|
|
321
|
+
return function () {
|
|
322
|
+
setUploadProgress(ramda.assoc(files[index].name, null));
|
|
323
|
+
var newFiles = files === null || files === void 0 ? void 0 : files.filter(function (_, idx) {
|
|
324
|
+
return idx !== index;
|
|
325
|
+
});
|
|
326
|
+
onChange(newFiles);
|
|
327
|
+
};
|
|
328
|
+
}, [files]);
|
|
329
|
+
React.useEffect(function () {
|
|
330
|
+
uploadError && setError(uploadError);
|
|
331
|
+
}, [uploadError]);
|
|
332
|
+
var onDropAccepted = /*#__PURE__*/function () {
|
|
333
|
+
var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(acceptedFiles) {
|
|
334
|
+
var initialFiles, updatedFiles, newFiles, _updatedFiles;
|
|
335
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
|
|
336
|
+
while (1) switch (_context.prev = _context.next) {
|
|
337
|
+
case 0:
|
|
338
|
+
setTouched(false);
|
|
339
|
+
setUploadError("");
|
|
340
|
+
initialFiles = acceptedFiles.map(function (file) {
|
|
341
|
+
return {
|
|
342
|
+
name: file.name,
|
|
343
|
+
size: file.size
|
|
344
|
+
};
|
|
345
|
+
});
|
|
346
|
+
updatedFiles = multiple ? [].concat(_toConsumableArray__default["default"](files || []), _toConsumableArray__default["default"](initialFiles)) : initialFiles;
|
|
347
|
+
onChange(updatedFiles);
|
|
348
|
+
_context.next = 7;
|
|
349
|
+
return new Promise(function (resolve) {
|
|
350
|
+
var files = [];
|
|
351
|
+
acceptedFiles.forEach(function (file) {
|
|
352
|
+
setUploadProgress(ramda.assoc(file.name, 0));
|
|
353
|
+
var upload = new activestorage.DirectUpload(file, DIRECT_UPLOAD_URL, {
|
|
354
|
+
directUploadWillStoreFileWithXHR: function directUploadWillStoreFileWithXHR(xhr) {
|
|
355
|
+
xhr.upload.addEventListener("progress", function (event) {
|
|
356
|
+
var percentComplete = Math.round(event.loaded / event.total * 100);
|
|
357
|
+
setUploadProgress(ramda.assoc(file.name, percentComplete));
|
|
358
|
+
});
|
|
359
|
+
xhr.upload.addEventListener("load", function () {
|
|
360
|
+
setUploadProgress(ramda.assoc(file.name, undefined));
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
upload.create(function (error, blob) {
|
|
365
|
+
if (error) {
|
|
366
|
+
return setUploadError(error);
|
|
367
|
+
}
|
|
368
|
+
files.push({
|
|
369
|
+
url: blob.blob_url,
|
|
370
|
+
name: blob.filename,
|
|
371
|
+
signedId: blob.signed_id
|
|
372
|
+
});
|
|
373
|
+
var isUploadCompleted = multiple ? acceptedFiles.length === files.length : files.length === 1;
|
|
374
|
+
if (isUploadCompleted) {
|
|
375
|
+
return resolve(files);
|
|
376
|
+
}
|
|
377
|
+
return "";
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
return files;
|
|
381
|
+
});
|
|
382
|
+
case 7:
|
|
383
|
+
newFiles = _context.sent;
|
|
384
|
+
if (multiple) {
|
|
385
|
+
_updatedFiles = filesRef.current.map(function (file) {
|
|
386
|
+
var uploadedFile = neetoCist.findBy({
|
|
387
|
+
name: file.name
|
|
388
|
+
}, newFiles);
|
|
389
|
+
return _objectSpread$1(_objectSpread$1({}, file), uploadedFile);
|
|
390
|
+
});
|
|
391
|
+
onChange(_updatedFiles);
|
|
392
|
+
} else {
|
|
393
|
+
onChange(newFiles);
|
|
394
|
+
}
|
|
395
|
+
case 9:
|
|
396
|
+
case "end":
|
|
397
|
+
return _context.stop();
|
|
398
|
+
}
|
|
399
|
+
}, _callee);
|
|
400
|
+
}));
|
|
401
|
+
return function onDropAccepted(_x) {
|
|
402
|
+
return _ref2.apply(this, arguments);
|
|
403
|
+
};
|
|
404
|
+
}();
|
|
405
|
+
var onDropRejected = function onDropRejected(fileRejections) {
|
|
406
|
+
fileRejections.forEach(function (fileObject) {
|
|
407
|
+
setTouched(true);
|
|
408
|
+
if (fileObject.errors[0].code === "too-many-files") {
|
|
409
|
+
setUploadError(renderErrorMessage(fileObject, maxFileSize, multiple));
|
|
410
|
+
} else {
|
|
411
|
+
setUploadError(renderErrorMessage(fileObject, maxFileSize, multiple));
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
};
|
|
415
|
+
var _useDropzone = reactDropzone.useDropzone(_objectSpread$1({
|
|
416
|
+
disabled: disabled,
|
|
417
|
+
accept: accept,
|
|
418
|
+
multiple: multiple,
|
|
419
|
+
minSize: convertMbToBytes(minFileSize),
|
|
420
|
+
onDropAccepted: onDropAccepted,
|
|
421
|
+
onDropRejected: onDropRejected
|
|
422
|
+
}, maxFileSize && {
|
|
423
|
+
maxSize: convertMbToBytes(maxFileSize)
|
|
424
|
+
})),
|
|
425
|
+
getRootProps = _useDropzone.getRootProps,
|
|
426
|
+
getInputProps = _useDropzone.getInputProps,
|
|
427
|
+
isDragActive = _useDropzone.isDragActive,
|
|
428
|
+
fileRejections = _useDropzone.fileRejections;
|
|
429
|
+
return {
|
|
430
|
+
progress: uploadProgress,
|
|
431
|
+
cancel: cancel,
|
|
432
|
+
getRootProps: getRootProps,
|
|
433
|
+
getInputProps: getInputProps,
|
|
434
|
+
isDragActive: isDragActive,
|
|
435
|
+
fileRejections: fileRejections
|
|
436
|
+
};
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
var FileUpload = function FileUpload(_ref) {
|
|
440
|
+
var _ref$allowedFileTypes = _ref.allowedFileTypes,
|
|
441
|
+
allowedFileTypes = _ref$allowedFileTypes === void 0 ? "" : _ref$allowedFileTypes,
|
|
442
|
+
_ref$multipleFilesAll = _ref.multipleFilesAllowed,
|
|
443
|
+
multipleFilesAllowed = _ref$multipleFilesAll === void 0 ? true : _ref$multipleFilesAll,
|
|
444
|
+
_ref$maxFileSize = _ref.maxFileSize,
|
|
445
|
+
maxFileSize = _ref$maxFileSize === void 0 ? 1 : _ref$maxFileSize,
|
|
446
|
+
_ref$isPreview = _ref.isPreview,
|
|
447
|
+
isPreview = _ref$isPreview === void 0 ? false : _ref$isPreview,
|
|
448
|
+
_ref$minFileSize = _ref.minFileSize,
|
|
449
|
+
minFileSize = _ref$minFileSize === void 0 ? 0 : _ref$minFileSize,
|
|
450
|
+
_ref$files = _ref.files,
|
|
451
|
+
files = _ref$files === void 0 ? [] : _ref$files,
|
|
452
|
+
_ref$onChange = _ref.onChange,
|
|
453
|
+
onChange = _ref$onChange === void 0 ? neetoCist.noop : _ref$onChange,
|
|
454
|
+
error = _ref.error,
|
|
455
|
+
_ref$setError = _ref.setError,
|
|
456
|
+
setError = _ref$setError === void 0 ? neetoCist.noop : _ref$setError,
|
|
457
|
+
_ref$setTouched = _ref.setTouched,
|
|
458
|
+
setTouched = _ref$setTouched === void 0 ? neetoCist.noop : _ref$setTouched;
|
|
459
|
+
var _useFileUpload = useFileUpload({
|
|
460
|
+
disabled: isPreview,
|
|
461
|
+
accept: getAcceptedFileTypes(allowedFileTypes),
|
|
462
|
+
multiple: multipleFilesAllowed,
|
|
463
|
+
maxFileSize: maxFileSize,
|
|
464
|
+
minFileSize: minFileSize,
|
|
465
|
+
files: files,
|
|
466
|
+
onChange: onChange,
|
|
467
|
+
setError: setError,
|
|
468
|
+
setTouched: setTouched
|
|
469
|
+
}),
|
|
470
|
+
progress = _useFileUpload.progress,
|
|
471
|
+
cancel = _useFileUpload.cancel,
|
|
472
|
+
getRootProps = _useFileUpload.getRootProps,
|
|
473
|
+
getInputProps = _useFileUpload.getInputProps,
|
|
474
|
+
isDragActive = _useFileUpload.isDragActive,
|
|
475
|
+
fileRejections = _useFileUpload.fileRejections;
|
|
476
|
+
var maxFileSizeInBytes = maxFileSize * 1000000;
|
|
477
|
+
var isUploadingFile = function isUploadingFile(file) {
|
|
478
|
+
return ramda.isNotNil(progress[file.name]) && (progress[file.name] !== 100 || !file.url);
|
|
479
|
+
};
|
|
480
|
+
var shouldShowError = error && ramda.isEmpty(fileRejections);
|
|
481
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(DropZone, {
|
|
482
|
+
allowedFileTypes: allowedFileTypes,
|
|
483
|
+
getInputProps: getInputProps,
|
|
484
|
+
getRootProps: getRootProps,
|
|
485
|
+
isDragActive: isDragActive,
|
|
486
|
+
maxFileSize: maxFileSize,
|
|
487
|
+
multipleFilesAllowed: multipleFilesAllowed
|
|
488
|
+
}), !ramda.isEmpty(files) && /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
489
|
+
className: "neeto-molecules-file-upload__uploaded-list"
|
|
490
|
+
}, files === null || files === void 0 ? void 0 : files.map(function (file, idx) {
|
|
491
|
+
return /*#__PURE__*/React__default["default"].createElement(FilePreview, {
|
|
492
|
+
file: file,
|
|
493
|
+
cancel: cancel(idx),
|
|
494
|
+
isUploading: isUploadingFile(file),
|
|
495
|
+
key: idx,
|
|
496
|
+
progress: progress[file.name]
|
|
497
|
+
});
|
|
498
|
+
})), neetoCist.isNotEmpty(fileRejections) && fileRejections.map(function (file, index) {
|
|
499
|
+
return /*#__PURE__*/React__default["default"].createElement("p", {
|
|
500
|
+
className: "neeto-molecules-input__error-text",
|
|
501
|
+
"data-cy": "form-file-upload-input-error",
|
|
502
|
+
key: index
|
|
503
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
504
|
+
className: "neeto-molecules-input__error-text-style-handle"
|
|
505
|
+
}, renderErrorMessage(file, maxFileSizeInBytes, false)));
|
|
506
|
+
}), shouldShowError && /*#__PURE__*/React__default["default"].createElement("p", {
|
|
507
|
+
className: "neeto-molecules-input__error-text",
|
|
508
|
+
"data-cy": "form-file-upload-input-error"
|
|
509
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
510
|
+
className: "neeto-molecules-input__error-text-style-handle"
|
|
511
|
+
}, error)));
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
var _excluded = ["name"];
|
|
515
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
516
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
517
|
+
var FormikFileUpload = function FormikFileUpload(_ref) {
|
|
518
|
+
var name = _ref.name,
|
|
519
|
+
props = _objectWithoutProperties__default["default"](_ref, _excluded);
|
|
520
|
+
var _useField = formik.useField(name),
|
|
521
|
+
_useField2 = _slicedToArray__default["default"](_useField, 3);
|
|
522
|
+
_useField2[0];
|
|
523
|
+
var _useField2$ = _useField2[1],
|
|
524
|
+
value = _useField2$.value,
|
|
525
|
+
touched = _useField2$.touched,
|
|
526
|
+
error = _useField2$.error,
|
|
527
|
+
_useField2$2 = _useField2[2],
|
|
528
|
+
setValue = _useField2$2.setValue,
|
|
529
|
+
setTouched = _useField2$2.setTouched,
|
|
530
|
+
setError = _useField2$2.setError;
|
|
531
|
+
var errorToDisplay = touched && error ? error : "";
|
|
532
|
+
return /*#__PURE__*/React__default["default"].createElement(FileUpload, _extends__default["default"]({}, _objectSpread(_objectSpread({}, props), {}, {
|
|
533
|
+
setError: setError,
|
|
534
|
+
setTouched: setTouched
|
|
535
|
+
}), {
|
|
536
|
+
error: errorToDisplay,
|
|
537
|
+
files: value,
|
|
538
|
+
onChange: setValue
|
|
539
|
+
}));
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
exports.FileUpload = FileUpload;
|
|
543
|
+
exports.FormikFileUpload = FormikFileUpload;
|
|
544
|
+
//# sourceMappingURL=FileUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUpload.js","sources":["../../src/components/FileUpload/DropZone.jsx","../../src/components/FileUpload/Progress.jsx","../../src/components/FileUpload/constants.js","../../src/components/FileUpload/utils.js","../../src/components/FileUpload/FilePreview.jsx","../../src/components/FileUpload/hooks/useFileUpload.js","../../src/components/FileUpload/FileUpload.jsx","../../src/components/FileUpload/FormikFileUpload.jsx"],"sourcesContent":["import React from \"react\";\n\nimport classnames from \"classnames\";\nimport { FileUpload } from \"neetoicons\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DropZone = ({\n isDragActive,\n getRootProps,\n getInputProps,\n multipleFilesAllowed,\n maxFileSize,\n allowedFileTypes,\n}) => {\n const { t } = useTranslation();\n\n const shouldAllowSingleFileUpload = !multipleFilesAllowed;\n const shouldShowFileSizeLimit = maxFileSize;\n\n return (\n <div\n {...getRootProps({\n className: classnames([\"neeto-molecules-file-upload__dropzone\"], {\n \"neeto-molecules-file-upload__dropzone--drag-active\": isDragActive,\n }),\n })}\n >\n <div\n className=\"neeto-molecules-file-upload__dropzone-inner\"\n data-cy=\"file-upload-body\"\n data-testid=\"file-upload-body\"\n >\n <FileUpload\n className=\"neeto-molecules-file-upload__upload-icon\"\n size=\"36\"\n />\n <div className=\"neeto-molecules-file-upload__dropzone-content\">\n <label\n className=\"neeto-molecules-file-upload__upload-label\"\n htmlFor=\"file-upload\"\n >\n <span className=\"neeto-molecules-file-upload__choose-file\">\n {t(\n \"neetoMolecules.fileUpload.filesDropzone.chooseFileOrDragHere\"\n )}\n </span>\n <input {...getInputProps()} data-cy=\"image-browse-button\" />\n </label>\n <div className=\"neeto-molecules-file-upload__dropzone-helper-block\">\n {shouldAllowSingleFileUpload && (\n <p\n className=\"neeto-molecules-file-upload__dropzone-helper-text\"\n data-cy=\"upload-only-one-file-text\"\n >\n {t(\"neetoMolecules.fileUpload.filesDropzone.oneFileAllowed\")}\n </p>\n )}\n {shouldShowFileSizeLimit && (\n <p\n className=\"neeto-molecules-file-upload__dropzone-helper-text\"\n data-cy=\"maximum-allowed-size-text\"\n >\n {t(\"neetoMolecules.fileUpload.filesDropzone.maxFileSize\", {\n size: maxFileSize,\n unit: \"MB\",\n })}\n </p>\n )}\n {allowedFileTypes && (\n <p\n className=\"neeto-molecules-file-upload__dropzone-helper-text\"\n data-cy=\"allowed-files-types-text\"\n >\n {t(\"neetoMolecules.fileUpload.filesDropzone.allowedFileTypes\", {\n types: allowedFileTypes,\n })}\n </p>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default DropZone;\n","import React from \"react\";\n\nimport { motion } from \"framer-motion\";\n\nconst Progress = ({\n percents,\n stroke = \"blue\",\n emptyStroke = stroke,\n emptyStrokeOpacity = 0.25,\n duration = 0.5,\n delay = 0,\n size = 100,\n strokeWidth = 12,\n}) => {\n const radius = 45;\n const circumference = Math.ceil(2 * Math.PI * radius);\n const fillPercents = Math.abs(\n Math.ceil((circumference / 100) * (percents - 100))\n );\n\n const transition = { duration, delay };\n\n const variants = {\n hidden: { strokeDashoffset: circumference, transition },\n show: { strokeDashoffset: fillPercents, transition },\n };\n\n return (\n <div className=\"neeto-molecules-progress__circle\">\n <div\n className=\"neeto-molecules-progress__circle-wrapper\"\n style={{ height: size }}\n >\n <svg\n height={size}\n version=\"1.1\"\n viewBox=\"0 0 100 100\"\n width={size}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n {...{ strokeWidth }}\n className=\"circle\"\n cx=\"50\"\n cy=\"50\"\n fill=\"transparent\"\n r={radius}\n stroke={emptyStroke}\n strokeOpacity={emptyStrokeOpacity}\n />\n </svg>\n <svg\n height={size}\n viewBox=\"0 0 100 100\"\n width={size}\n style={{\n position: \"absolute\",\n transform: \"rotate(-90deg)\",\n overflow: \"visible\",\n top: 0,\n }}\n >\n <motion.circle\n {...{ stroke, strokeWidth, variants }}\n animate=\"show\"\n cx=\"50\"\n cy=\"50\"\n fill=\"transparent\"\n initial=\"hidden\"\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={fillPercents}\n />\n </svg>\n </div>\n </div>\n );\n};\n\nexport default Progress;\n","export const FILE_MIME_TYPES = {\n pdf: [\"application/pdf\"],\n doc: [\"application/msword\", \"application/wps-writer\"],\n docx: [\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n ],\n xls: [\"application/vnd.ms-excel\"],\n xlsx: [\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],\n csv: [\"text/csv\"],\n txt: [\"text/plain\"],\n rtf: [\"application/rtf\", \"text/rtf\"],\n html: [\"text/html\"],\n htm: [\"text/html\"],\n md: [\"text/markdown\", \"text/x-markdown\"],\n zip: [\"application/zip\"],\n mp3: [\"audio/mpeg\"],\n wma: [\"audio/x-ms-wma\", \"video/x-ms-asf\"],\n mp4: [\"video/mp4\"],\n mpg: [\"video/mpeg\"],\n mpeg: [\"video/mpeg\"],\n flv: [\"video/x-flv\"],\n avi: [\"video/x-msvideo\"],\n jpg: [\"image/jpeg\"],\n jpeg: [\"image/jpeg\"],\n png: [\"image/png\"],\n gif: [\"image/gif\"],\n};\n\nexport const ERROR_CODES = {\n FILE_TOO_LARGE: \"file-too-large\",\n FILE_INVALID_TYPE: \"file-invalid-type\",\n TOO_MANY_FILES: \"too-many-files\",\n};\n\nexport const DIRECT_UPLOAD_URL = \"/api/direct_uploads\";\n","import path from \"path\";\n\nimport { t } from \"i18next\";\nimport { isNotPresent } from \"neetocist\";\n\nimport { FILE_MIME_TYPES, ERROR_CODES } from \"./constants\";\n\nexport const getAcceptedFileTypes = allowedFileTypes => {\n const accepted = {};\n\n allowedFileTypes.split(\", \").forEach(type => {\n const mimeTypes = FILE_MIME_TYPES[type];\n const extension = `.${type}`;\n\n if (isNotPresent(type) || isNotPresent(mimeTypes)) return;\n\n mimeTypes.forEach(mimeType => {\n if (accepted[mimeType]) accepted[mimeType].push(extension);\n else accepted[mimeType] = [extension];\n });\n });\n\n return accepted;\n};\n\nexport const convertBytesToMb = bytes =>\n ((bytes - 10) / (1028 * 1024)).toFixed(2);\n\nexport const renderErrorMessage = (errorObject, maxFileSize, isMultiple) => {\n const error = errorObject.errors[0];\n const file = errorObject.file;\n if (error) {\n const { code } = error;\n if (code === ERROR_CODES.FILE_TOO_LARGE) {\n return t(\"neetoMolecules.fileUpload.filesDropzone.errors.fileTooLarge\", {\n fileName: file.name,\n maxSize: `${Math.round(maxFileSize / 1048576)}MB`,\n });\n } else if (code === ERROR_CODES.FILE_INVALID_TYPE) {\n return t(\n \"neetoMolecules.fileUpload.filesDropzone.errors.fileInvalidType\",\n { fileType: path.extname(file.name) }\n );\n } else if (code === ERROR_CODES.TOO_MANY_FILES && !isMultiple) {\n return t(\"neetoMolecules.fileUpload.filesDropzone.errors.tooManyFiles\", {\n maxFiles: 1,\n });\n }\n }\n\n return t(\"neetoMolecules.fileUpload.filesDropzone.errors.defaultError\", {\n fileName: file.name,\n });\n};\n\nexport const convertMbToBytes = mb => mb * 1028 * 1024 + 10;\n","import React from \"react\";\n\nimport classnames from \"classnames\";\nimport { FileGeneric, Check, Close } from \"neetoicons\";\n\nimport Progress from \"./Progress\";\nimport { convertBytesToMb } from \"./utils\";\n\nconst FilePreview = ({ file, isUploading, cancel, progress }) => (\n <li\n className=\"neeto-molecules-file-upload__uploaded-list-item\"\n key={file.url}\n >\n <div className=\"neeto-molecules-file-upload__file-preview\">\n <a\n className={classnames({ \"neeto-molecules-invisible\": isUploading })}\n href={file.url}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <FileGeneric />\n </a>\n {isUploading && (\n <div className=\"neeto-molecules-progress\">\n <Progress percents={progress || 0} size={20} />\n </div>\n )}\n </div>\n <div className=\"neeto-molecules-file-upload__file-info\">\n <span\n className=\"neeto-molecules-file-upload__file-info-name\"\n data-cy=\"file-name\"\n >\n {file.name}\n </span>\n <span className=\"neeto-molecules-file-upload__file-info-size\">\n {file.size ? `${convertBytesToMb(file.size)} MB` : \"\"}\n </span>\n </div>\n <div className=\"neeto-molecules-file-upload__actions\">\n <span\n className={classnames(\n \"neeto-molecules-file-upload__success-indicator\",\n { \"neeto-molecules-file-upload__success-indicator--active\": file.url }\n )}\n >\n {file.url && <Check data-cy=\"file-upload-success\" />}\n </span>\n <button\n className=\"neeto-molecules-file-upload__button--red neeto-molecules-file-upload__remove-button\"\n type=\"button\"\n onClick={cancel}\n >\n <Close />\n </button>\n </div>\n </li>\n);\n\nexport default FilePreview;\n","import { useState, useCallback, useEffect, useRef } from \"react\";\n\nimport { DirectUpload } from \"@rails/activestorage\";\nimport { findBy } from \"neetocist\";\nimport { assoc } from \"ramda\";\nimport { useDropzone } from \"react-dropzone\";\n\nimport { DIRECT_UPLOAD_URL } from \"../constants\";\nimport { convertMbToBytes, renderErrorMessage } from \"../utils\";\n\nconst useFileUpload = ({\n disabled,\n accept,\n multiple,\n maxFileSize,\n minFileSize,\n files,\n onChange,\n setError,\n setTouched,\n}) => {\n const [uploadProgress, setUploadProgress] = useState({});\n const [uploadError, setUploadError] = useState(\"\");\n\n const filesRef = useRef(files);\n filesRef.current = files;\n\n const cancel = useCallback(\n index => () => {\n setUploadProgress(assoc(files[index].name, null));\n const newFiles = files?.filter((_, idx) => idx !== index);\n onChange(newFiles);\n },\n [files]\n );\n\n useEffect(() => {\n uploadError && setError(uploadError);\n }, [uploadError]);\n\n const onDropAccepted = async acceptedFiles => {\n setTouched(false);\n setUploadError(\"\");\n const initialFiles = acceptedFiles.map(file => ({\n name: file.name,\n size: file.size,\n }));\n\n const updatedFiles = multiple\n ? [...(files || []), ...initialFiles]\n : initialFiles;\n onChange(updatedFiles);\n const newFiles = await new Promise(resolve => {\n const files = [];\n\n acceptedFiles.forEach(file => {\n setUploadProgress(assoc(file.name, 0));\n\n const upload = new DirectUpload(file, DIRECT_UPLOAD_URL, {\n directUploadWillStoreFileWithXHR: xhr => {\n xhr.upload.addEventListener(\"progress\", event => {\n const percentComplete = Math.round(\n (event.loaded / event.total) * 100\n );\n setUploadProgress(assoc(file.name, percentComplete));\n });\n\n xhr.upload.addEventListener(\"load\", () => {\n setUploadProgress(assoc(file.name, undefined));\n });\n },\n });\n\n upload.create((error, blob) => {\n if (error) {\n return setUploadError(error);\n }\n\n files.push({\n url: blob.blob_url,\n name: blob.filename,\n signedId: blob.signed_id,\n });\n\n const isUploadCompleted = multiple\n ? acceptedFiles.length === files.length\n : files.length === 1;\n\n if (isUploadCompleted) {\n return resolve(files);\n }\n\n return \"\";\n });\n });\n\n return files;\n });\n\n if (multiple) {\n const updatedFiles = filesRef.current.map(file => {\n const uploadedFile = findBy({ name: file.name }, newFiles);\n\n return { ...file, ...uploadedFile };\n });\n onChange(updatedFiles);\n } else {\n onChange(newFiles);\n }\n };\n\n const onDropRejected = fileRejections => {\n fileRejections.forEach(fileObject => {\n setTouched(true);\n if (fileObject.errors[0].code === \"too-many-files\") {\n setUploadError(renderErrorMessage(fileObject, maxFileSize, multiple));\n } else {\n setUploadError(renderErrorMessage(fileObject, maxFileSize, multiple));\n }\n });\n };\n\n const { getRootProps, getInputProps, isDragActive, fileRejections } =\n useDropzone({\n disabled,\n accept,\n multiple,\n minSize: convertMbToBytes(minFileSize),\n onDropAccepted,\n onDropRejected,\n ...(maxFileSize && { maxSize: convertMbToBytes(maxFileSize) }),\n });\n\n return {\n progress: uploadProgress,\n cancel,\n getRootProps,\n getInputProps,\n isDragActive,\n fileRejections,\n };\n};\n\nexport default useFileUpload;\n","import React from \"react\";\n\nimport { isNotEmpty, noop } from \"neetocist\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty, isNotNil } from \"ramda\";\n\nimport DropZone from \"./DropZone\";\nimport \"./file-upload.scss\";\nimport FilePreview from \"./FilePreview\";\nimport useFileUpload from \"./hooks/useFileUpload\";\nimport { getAcceptedFileTypes, renderErrorMessage } from \"./utils\";\n\nconst FileUpload = ({\n allowedFileTypes = \"\",\n multipleFilesAllowed = true,\n maxFileSize = 1,\n isPreview = false,\n minFileSize = 0,\n files = [],\n onChange = noop,\n error,\n setError = noop,\n setTouched = noop,\n}) => {\n const {\n progress,\n cancel,\n getRootProps,\n getInputProps,\n isDragActive,\n fileRejections,\n } = useFileUpload({\n disabled: isPreview,\n accept: getAcceptedFileTypes(allowedFileTypes),\n multiple: multipleFilesAllowed,\n maxFileSize,\n minFileSize,\n files,\n onChange,\n setError,\n setTouched,\n });\n\n const maxFileSizeInBytes = maxFileSize * 1000000;\n\n const isUploadingFile = file =>\n isNotNil(progress[file.name]) && (progress[file.name] !== 100 || !file.url);\n\n const shouldShowError = error && isEmpty(fileRejections);\n\n return (\n <>\n <DropZone\n {...{\n allowedFileTypes,\n getInputProps,\n getRootProps,\n isDragActive,\n maxFileSize,\n multipleFilesAllowed,\n }}\n />\n {!isEmpty(files) && (\n <ul className=\"neeto-molecules-file-upload__uploaded-list\">\n {files?.map((file, idx) => (\n <FilePreview\n {...{ file }}\n cancel={cancel(idx)}\n isUploading={isUploadingFile(file)}\n key={idx}\n progress={progress[file.name]}\n />\n ))}\n </ul>\n )}\n {isNotEmpty(fileRejections) &&\n fileRejections.map((file, index) => (\n <p\n className=\"neeto-molecules-input__error-text\"\n data-cy=\"form-file-upload-input-error\"\n key={index}\n >\n <span className=\"neeto-molecules-input__error-text-style-handle\">\n {renderErrorMessage(file, maxFileSizeInBytes, false)}\n </span>\n </p>\n ))}\n {shouldShowError && (\n <p\n className=\"neeto-molecules-input__error-text\"\n data-cy=\"form-file-upload-input-error\"\n >\n <span className=\"neeto-molecules-input__error-text-style-handle\">\n {error}\n </span>\n </p>\n )}\n </>\n );\n};\n\nFileUpload.propTypes = {\n /**\n * Allowed file types for the file upload component.\n */\n allowedFileTypes: PropTypes.string,\n /**\n * Boolean to allow multiple files to be uploaded.\n */\n multipleFilesAllowed: PropTypes.bool,\n /**\n * Maximum file size allowed for the file upload component(MB).\n */\n maxFileSize: PropTypes.number,\n /**\n * Boolean to use component as a preview component.\n */\n isPreview: PropTypes.bool,\n /**\n * Minimum file size allowed for the file upload component(MB).\n */\n minFileSize: PropTypes.number,\n /**\n * Uploaded files.\n */\n files: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n size: PropTypes.number,\n url: PropTypes.string,\n })\n ),\n /**\n * Function to be called on file upload, with the updated files array.\n */\n onChange: PropTypes.func,\n /**\n * Error message to be displayed.\n */\n error: PropTypes.string,\n /**\n * Function to set error message.\n */\n setError: PropTypes.func,\n};\n\nexport default FileUpload;\n","import React from \"react\";\n\nimport { useField } from \"formik\";\n\nimport FileUpload from \"./FileUpload\";\n\nconst FormikFileUpload = ({ name, ...props }) => {\n const [_, { value, touched, error }, { setValue, setTouched, setError }] =\n useField(name);\n\n const errorToDisplay = touched && error ? error : \"\";\n\n return (\n <FileUpload\n {...{ ...props, setError, setTouched }}\n error={errorToDisplay}\n files={value}\n onChange={setValue}\n />\n );\n};\n\nexport default FormikFileUpload;\n"],"names":["DropZone","_ref","isDragActive","getRootProps","getInputProps","multipleFilesAllowed","maxFileSize","allowedFileTypes","_useTranslation","useTranslation","t","shouldAllowSingleFileUpload","shouldShowFileSizeLimit","React","createElement","className","classnames","FileUpload","size","htmlFor","_extends","unit","types","Progress","percents","_ref$stroke","stroke","_ref$emptyStroke","emptyStroke","_ref$emptyStrokeOpaci","emptyStrokeOpacity","_ref$duration","duration","_ref$delay","delay","_ref$size","_ref$strokeWidth","strokeWidth","radius","circumference","Math","ceil","PI","fillPercents","abs","transition","variants","hidden","strokeDashoffset","show","style","height","version","viewBox","width","xmlns","cx","cy","fill","r","strokeOpacity","position","transform","overflow","top","motion","circle","animate","initial","strokeDasharray","FILE_MIME_TYPES","pdf","doc","docx","xls","xlsx","csv","txt","rtf","html","htm","md","zip","mp3","wma","mp4","mpg","mpeg","flv","avi","jpg","jpeg","png","gif","ERROR_CODES","FILE_TOO_LARGE","FILE_INVALID_TYPE","TOO_MANY_FILES","DIRECT_UPLOAD_URL","getAcceptedFileTypes","accepted","split","forEach","type","mimeTypes","extension","concat","isNotPresent","mimeType","push","convertBytesToMb","bytes","toFixed","renderErrorMessage","errorObject","isMultiple","error","errors","file","code","fileName","name","maxSize","round","fileType","path","extname","maxFiles","convertMbToBytes","mb","FilePreview","isUploading","cancel","progress","key","url","href","rel","target","FileGeneric","Check","onClick","Close","useFileUpload","disabled","accept","multiple","minFileSize","files","onChange","setError","setTouched","_useState","useState","_useState2","_slicedToArray","uploadProgress","setUploadProgress","_useState3","_useState4","uploadError","setUploadError","filesRef","useRef","current","useCallback","index","assoc","newFiles","filter","_","idx","useEffect","onDropAccepted","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","acceptedFiles","initialFiles","updatedFiles","_updatedFiles","wrap","_callee$","_context","prev","next","map","_toConsumableArray","Promise","resolve","upload","DirectUpload","directUploadWillStoreFileWithXHR","xhr","addEventListener","event","percentComplete","loaded","total","undefined","create","blob","blob_url","filename","signedId","signed_id","isUploadCompleted","length","sent","uploadedFile","findBy","_objectSpread","stop","_x","apply","arguments","onDropRejected","fileRejections","fileObject","_useDropzone","useDropzone","minSize","_ref$allowedFileTypes","_ref$multipleFilesAll","_ref$maxFileSize","_ref$isPreview","isPreview","_ref$minFileSize","_ref$files","_ref$onChange","noop","_ref$setError","_ref$setTouched","_useFileUpload","maxFileSizeInBytes","isUploadingFile","isNotNil","shouldShowError","isEmpty","Fragment","isNotEmpty","FormikFileUpload","props","_objectWithoutProperties","_excluded","_useField","useField","_useField2","_useField2$","value","touched","_useField2$2","setValue","errorToDisplay"],"mappings":"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"}
|