@sb1/ffe-file-upload-react 11.0.5 → 11.0.7

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/es/FileItem.js CHANGED
@@ -1,76 +1,32 @@
1
1
  import React from 'react';
2
2
  import { Icon } from '@sb1/ffe-icons-react';
3
- export function FileItem(_ref) {
4
- var file = _ref.file,
5
- onFileDeleted = _ref.onFileDeleted,
6
- cancelText = _ref.cancelText,
7
- deleteText = _ref.deleteText;
8
- var closeIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtNDM3Ljg0NyAyNzcuMDc2LTIzNC45MjRxLTguMzA3IDguMzA4LTIwLjg4NCA4LjUtMTIuNTc2LjE5My0yMS4yNjgtOC41LTguNjkzLTguNjkyLTguNjkzLTIxLjA3NnQ4LjY5My0yMS4wNzZMNDM3Ljg0Ny00ODAgMjM0LjkyNC02ODIuOTI0cS04LjMwOC04LjMwNy04LjUtMjAuODg0LS4xOTMtMTIuNTc2IDguNS0yMS4yNjggOC42OTItOC42OTMgMjEuMDc2LTguNjkzdDIxLjA3NiA4LjY5M0w0ODAtNTIyLjE1M2wyMDIuOTI0LTIwMi45MjNxOC4zMDctOC4zMDggMjAuODg0LTguNSAxMi41NzYtLjE5MyAyMS4yNjggOC41IDguNjkzIDguNjkyIDguNjkzIDIxLjA3NnQtOC42OTMgMjEuMDc2TDUyMi4xNTMtNDgwbDIwMi45MjMgMjAyLjkyNHE4LjMwOCA4LjMwNyA4LjUgMjAuODg0LjE5MyAxMi41NzYtOC41IDIxLjI2OC04LjY5MiA4LjY5My0yMS4wNzYgOC42OTN0LTIxLjA3Ni04LjY5M0w0ODAtNDM3Ljg0N1oiLz48L3N2Zz4=';
9
- var exclamationIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00ODAuMjExLTM4MC40MTNxLTE3LjM2MyAwLTI5LjUzNy0xMi4wMjRUNDM4LjUtNDIxLjkxM3YtMjY0cTAtMTcuNDUyIDExLjk2My0yOS40NzYgMTEuOTY0LTEyLjAyNCAyOS4zMjYtMTIuMDI0IDE3LjM2MyAwIDI5LjUzNyAxMi4wMjR0MTIuMTc0IDI5LjQ3NnYyNjRxMCAxNy40NTItMTEuOTYzIDI5LjQ3Ni0xMS45NjQgMTIuMDI0LTI5LjMyNiAxMi4wMjRabTAgMTQ3LjgyNnEtMTcuMzYzIDAtMjkuNTM3LTExLjk2My0xMi4xNzQtMTEuOTY0LTEyLjE3NC0yOS4zMjYgMC0xNy4zNjMgMTEuOTYzLTI5LjUzNyAxMS45NjQtMTIuMTc0IDI5LjMyNi0xMi4xNzQgMTcuMzYzIDAgMjkuNTM3IDExLjk2M1E1MjEuNS0yOTEuNjYgNTIxLjUtMjc0LjI5N3EwIDE3LjM2Mi0xMS45NjMgMjkuNTM2LTExLjk2NCAxMi4xNzQtMjkuMzI2IDEyLjE3NFoiLz48L3N2Zz4=';
10
- return /*#__PURE__*/React.createElement("li", null,
11
- // File is loading
12
- !file.document && !file.error && /*#__PURE__*/React.createElement("div", {
13
- className: "ffe-file-upload__file-item-stencil"
14
- }, /*#__PURE__*/React.createElement("button", {
15
- type: "button",
16
- id: file.name,
17
- className: "ffe-file-upload__file-item-delete-button",
18
- onClick: onFileDeleted
19
- }, /*#__PURE__*/React.createElement("span", {
20
- className: "ffe-file-upload__file-item-delete-button-text"
21
- }, cancelText), /*#__PURE__*/React.createElement(Icon, {
22
- fileUrl: closeIcon,
23
- size: "md",
24
- className: "ffe-file-upload__file-item-delete-icon"
25
- })), /*#__PURE__*/React.createElement("div", {
26
- className: "ffe-file-upload__file-item-stencil-info"
27
- }, /*#__PURE__*/React.createElement("div", {
28
- className: "ffe-file-upload__file-item-stencil-info-background"
29
- }), /*#__PURE__*/React.createElement("div", {
30
- className: "ffe-file-upload__file-item-stencil-info-filename"
31
- }, file.name))),
32
- // File finished loading without error
33
- file.document && !file.error && /*#__PURE__*/React.createElement("div", {
34
- className: "ffe-file-upload__file-item-loaded"
35
- }, /*#__PURE__*/React.createElement("button", {
36
- type: "button",
37
- id: file.name,
38
- className: "ffe-file-upload__file-item-delete-button",
39
- onClick: onFileDeleted
40
- }, /*#__PURE__*/React.createElement("span", {
41
- className: "ffe-file-upload__file-item-delete-button-text"
42
- }, deleteText), /*#__PURE__*/React.createElement(Icon, {
43
- fileUrl: closeIcon,
44
- size: "md",
45
- className: "ffe-file-upload__file-item-delete-icon"
46
- })), /*#__PURE__*/React.createElement("div", {
47
- className: "ffe-file-upload__file-item-filename"
48
- }, file.name)),
49
- // File has error
50
- file.error && /*#__PURE__*/React.createElement("div", {
51
- className: "ffe-file-upload__file-item-error",
52
- role: "alert"
53
- }, /*#__PURE__*/React.createElement("div", {
54
- className: "ffe-file-upload__file-item-error-icon"
55
- }, /*#__PURE__*/React.createElement(Icon, {
56
- fileUrl: exclamationIcon,
57
- size: "sm"
58
- })), /*#__PURE__*/React.createElement("button", {
59
- type: "button",
60
- id: file.name,
61
- className: "ffe-file-upload__file-item-delete-button",
62
- onClick: onFileDeleted
63
- }, /*#__PURE__*/React.createElement("span", {
64
- className: "ffe-file-upload__file-item-delete-button-text"
65
- }, deleteText), /*#__PURE__*/React.createElement(Icon, {
66
- fileUrl: closeIcon,
67
- size: "md",
68
- className: "ffe-file-upload__file-item-delete-icon"
69
- })), /*#__PURE__*/React.createElement("div", {
70
- className: "ffe-file-upload__file-item-error-info"
71
- }, /*#__PURE__*/React.createElement("div", {
72
- className: "ffe-file-upload__file-item-error-filename"
73
- }, file.name), /*#__PURE__*/React.createElement("div", {
74
- className: "ffe-file-upload__file-item-error-message"
75
- }, file.error))));
76
- }
3
+ export function FileItem(_a) {
4
+ var file = _a.file, onFileDeleted = _a.onFileDeleted, cancelText = _a.cancelText, deleteText = _a.deleteText;
5
+ var closeIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtNDM3Ljg0NyAyNzcuMDc2LTIzNC45MjRxLTguMzA3IDguMzA4LTIwLjg4NCA4LjUtMTIuNTc2LjE5My0yMS4yNjgtOC41LTguNjkzLTguNjkyLTguNjkzLTIxLjA3NnQ4LjY5My0yMS4wNzZMNDM3Ljg0Ny00ODAgMjM0LjkyNC02ODIuOTI0cS04LjMwOC04LjMwNy04LjUtMjAuODg0LS4xOTMtMTIuNTc2IDguNS0yMS4yNjggOC42OTItOC42OTMgMjEuMDc2LTguNjkzdDIxLjA3NiA4LjY5M0w0ODAtNTIyLjE1M2wyMDIuOTI0LTIwMi45MjNxOC4zMDctOC4zMDggMjAuODg0LTguNSAxMi41NzYtLjE5MyAyMS4yNjggOC41IDguNjkzIDguNjkyIDguNjkzIDIxLjA3NnQtOC42OTMgMjEuMDc2TDUyMi4xNTMtNDgwbDIwMi45MjMgMjAyLjkyNHE4LjMwOCA4LjMwNyA4LjUgMjAuODg0LjE5MyAxMi41NzYtOC41IDIxLjI2OC04LjY5MiA4LjY5My0yMS4wNzYgOC42OTN0LTIxLjA3Ni04LjY5M0w0ODAtNDM3Ljg0N1oiLz48L3N2Zz4=';
6
+ var exclamationIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00ODAuMjExLTM4MC40MTNxLTE3LjM2MyAwLTI5LjUzNy0xMi4wMjRUNDM4LjUtNDIxLjkxM3YtMjY0cTAtMTcuNDUyIDExLjk2My0yOS40NzYgMTEuOTY0LTEyLjAyNCAyOS4zMjYtMTIuMDI0IDE3LjM2MyAwIDI5LjUzNyAxMi4wMjR0MTIuMTc0IDI5LjQ3NnYyNjRxMCAxNy40NTItMTEuOTYzIDI5LjQ3Ni0xMS45NjQgMTIuMDI0LTI5LjMyNiAxMi4wMjRabTAgMTQ3LjgyNnEtMTcuMzYzIDAtMjkuNTM3LTExLjk2My0xMi4xNzQtMTEuOTY0LTEyLjE3NC0yOS4zMjYgMC0xNy4zNjMgMTEuOTYzLTI5LjUzNyAxMS45NjQtMTIuMTc0IDI5LjMyNi0xMi4xNzQgMTcuMzYzIDAgMjkuNTM3IDExLjk2M1E1MjEuNS0yOTEuNjYgNTIxLjUtMjc0LjI5N3EwIDE3LjM2Mi0xMS45NjMgMjkuNTM2LTExLjk2NCAxMi4xNzQtMjkuMzI2IDEyLjE3NFoiLz48L3N2Zz4=';
7
+ return (React.createElement("li", null,
8
+ // File is loading
9
+ !file.document && !file.error && (React.createElement("div", { className: "ffe-file-upload__file-item-stencil" },
10
+ React.createElement("button", { type: "button", id: file.name, className: "ffe-file-upload__file-item-delete-button", onClick: onFileDeleted },
11
+ React.createElement("span", { className: "ffe-file-upload__file-item-delete-button-text" }, cancelText),
12
+ React.createElement(Icon, { fileUrl: closeIcon, size: "md", className: "ffe-file-upload__file-item-delete-icon" })),
13
+ React.createElement("div", { className: "ffe-file-upload__file-item-stencil-info" },
14
+ React.createElement("div", { className: "ffe-file-upload__file-item-stencil-info-background" }),
15
+ React.createElement("div", { className: "ffe-file-upload__file-item-stencil-info-filename" }, file.name)))),
16
+ // File finished loading without error
17
+ file.document && !file.error && (React.createElement("div", { className: "ffe-file-upload__file-item-loaded" },
18
+ React.createElement("button", { type: "button", id: file.name, className: "ffe-file-upload__file-item-delete-button", onClick: onFileDeleted },
19
+ React.createElement("span", { className: "ffe-file-upload__file-item-delete-button-text" }, deleteText),
20
+ React.createElement(Icon, { fileUrl: closeIcon, size: "md", className: "ffe-file-upload__file-item-delete-icon" })),
21
+ React.createElement("div", { className: "ffe-file-upload__file-item-filename" }, file.name))),
22
+ // File has error
23
+ file.error && (React.createElement("div", { className: "ffe-file-upload__file-item-error", role: "alert" },
24
+ React.createElement("div", { className: "ffe-file-upload__file-item-error-icon" },
25
+ React.createElement(Icon, { fileUrl: exclamationIcon, size: "sm" })),
26
+ React.createElement("button", { type: "button", id: file.name, className: "ffe-file-upload__file-item-delete-button", onClick: onFileDeleted },
27
+ React.createElement("span", { className: "ffe-file-upload__file-item-delete-button-text" }, deleteText),
28
+ React.createElement(Icon, { fileUrl: closeIcon, size: "md", className: "ffe-file-upload__file-item-delete-icon" })),
29
+ React.createElement("div", { className: "ffe-file-upload__file-item-error-info" },
30
+ React.createElement("div", { className: "ffe-file-upload__file-item-error-filename" }, file.name),
31
+ React.createElement("div", { className: "ffe-file-upload__file-item-error-message" }, file.error))))));
32
+ }
package/es/FileUpload.js CHANGED
@@ -1,112 +1,47 @@
1
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
1
  import React, { useRef, useState } from 'react';
8
2
  import { FileItem } from './FileItem';
9
3
  import classNames from 'classnames';
10
4
  import { SecondaryButton } from '@sb1/ffe-buttons-react';
11
5
  import { Icon } from '@sb1/ffe-icons-react';
12
- export function FileUpload(_ref) {
13
- var id = _ref.id,
14
- label = _ref.label,
15
- files = _ref.files,
16
- cancelText = _ref.cancelText,
17
- deleteText = _ref.deleteText,
18
- multiple = _ref.multiple,
19
- title = _ref.title,
20
- infoText = _ref.infoText,
21
- infoSubText = _ref.infoSubText,
22
- uploadTitle = _ref.uploadTitle,
23
- uploadMicroText = _ref.uploadMicroText,
24
- uploadSubText = _ref.uploadSubText,
25
- accept = _ref.accept,
26
- onFilesDropped = _ref.onFilesDropped,
27
- onFileDeleted = _ref.onFileDeleted,
28
- onFilesSelected = _ref.onFilesSelected;
29
- var _useState = useState(false),
30
- _useState2 = _slicedToArray(_useState, 2),
31
- isHover = _useState2[0],
32
- setIsHover = _useState2[1];
33
- var fileInputElement = useRef(null);
34
- var downloadIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00NzkuOC0zNTcuNTM5cS02LjQzMSAwLTExLjk2MS0yLjMwOC01LjUzMS0yLjMwNy0xMC4xNDYtNi45MjNMMzM1LjMwOS00ODkuMTUzcS03LjkyMy03LjgzMi03LjgwNy0xOC4zMzguMTE1LTEwLjUwNyA4LjMyOS0xOC44MTUgOC43ODYtOC4zMDcgMTguODYyLTguMTE1IDEwLjA3Ny4xOTIgMTguMzg1IDguNWw4MC45MjMgODEuOTIzdi0zMjYuMDAxcTAtMTEuMDY5IDcuNDA0LTE4LjUzNCA3LjQwNS03LjQ2NiAxOC4zODQtNy40NjYgMTAuOTggMCAxOC41OTUgNy40NjYgNy42MTUgNy40NjUgNy42MTUgMTguNTM0djMyNi4wMDFsODEuOTIzLTgxLjkyM3E3LjU5LTcuOTIzIDE4LjAyNi03LjgwOCAxMC40MzUuMTE2IDE5LjIyMSA4LjQyMyA4LjIxNCA4LjMwOCA4LjAyMSAxOC41NzctLjE5MiAxMC4yNjktOC40OTkgMTguNTc2TDUwMi4zMDctMzY2Ljc3cS01LjAxNSA0LjYxNi0xMC41NDYgNi45MjMtNS41MyAyLjMwOC0xMS45NjEgMi4zMDhaTTI3Ni4wMjUtMjEyLjAwMXEtMjcuMDI0IDAtNDUuNTI0LTE4LjY1dC0xOC41LTQ1LjY1OHYtMzQuNDYxcTAtMTEuMDY5IDcuNDA1LTE4LjUzNCA3LjQwNS03LjQ2NSAxOC4zODQtNy40NjUgMTAuOTggMCAxOC41OTUgNy40NjVRMjY0LTMyMS44MzkgMjY0LTMxMC43N3YzNC40NjFxMCA0LjYxNiAzLjg0NiA4LjQ2MyAzLjg0NyAzLjg0NiA4LjQ2MyAzLjg0Nmg0MDcuMzgycTQuNjE2IDAgOC40NjMtMy44NDYgMy44NDYtMy44NDcgMy44NDYtOC40NjN2LTM0LjQ2MXEwLTExLjA2OSA3LjQwNS0xOC41MzQgNy40MDQtNy40NjUgMTguMzg0LTcuNDY1IDEwLjk3OSAwIDE4LjU5NCA3LjQ2NSA3LjYxNiA3LjQ2NSA3LjYxNiAxOC41MzR2MzQuNDYxcTAgMjcuMDA4LTE4LjY2MiA0NS42NTgtMTguNjYyIDE4LjY1LTQ1LjY4NiAxOC42NUgyNzYuMDI1WiIvPjwvc3ZnPg==';
35
- var handleFilesDropped = function handleFilesDropped(event) {
36
- event.preventDefault();
37
- setIsHover(false);
38
- onFilesDropped(event.dataTransfer.files);
39
- };
40
- var handleFileDeleted = function handleFileDeleted(event) {
41
- onFileDeleted(files[event.currentTarget.id]);
42
- };
43
- var triggerUploadFileNativeHandler = function triggerUploadFileNativeHandler() {
44
- // clear file input to trigger onChange when uploading same filename
45
- if (fileInputElement.current) {
46
- fileInputElement.current.value = '';
47
- fileInputElement.current.click();
48
- }
49
- };
50
- var handleFileSelected = function handleFileSelected(event) {
51
- onFilesSelected(event.target.files);
52
- };
53
- return /*#__PURE__*/React.createElement("div", {
54
- className: "ffe-file-upload"
55
- }, /*#__PURE__*/React.createElement("div", {
56
- className: "ffe-file-upload__title"
57
- }, title), Object.keys(files).length > 0 ? /*#__PURE__*/React.createElement("div", {
58
- className: "ffe-file-upload__file-items-section"
59
- }, Object.keys(files).map(function (file) {
60
- return /*#__PURE__*/React.createElement(FileItem, {
61
- key: file,
62
- file: files[file],
63
- cancelText: cancelText,
64
- deleteText: deleteText,
65
- onFileDeleted: handleFileDeleted
66
- });
67
- })) : /*#__PURE__*/React.createElement("div", {
68
- className: "ffe-file-upload__info-section"
69
- }, /*#__PURE__*/React.createElement("div", {
70
- className: "ffe-file-upload__info-section-text"
71
- }, infoText), /*#__PURE__*/React.createElement("div", {
72
- className: "ffe-file-upload__info-section-subtext"
73
- }, infoSubText)), /*#__PURE__*/React.createElement("div", {
74
- className: "ffe-file-upload__upload-section",
75
- role: "presentation",
76
- onDrop: handleFilesDropped,
77
- onDragOver: function onDragOver(event) {
78
- event.preventDefault();
79
- setIsHover(true);
80
- },
81
- onDragLeave: function onDragLeave() {
82
- return setIsHover(false);
83
- }
84
- }, /*#__PURE__*/React.createElement("div", {
85
- className: classNames('ffe-file-upload__upload-section-border', {
86
- 'ffe-file-upload__upload-section-border--hover': isHover
87
- })
88
- }, /*#__PURE__*/React.createElement("div", {
89
- className: "ffe-file-upload__upload-section-title"
90
- }, uploadTitle), /*#__PURE__*/React.createElement("div", {
91
- className: "ffe-file-upload__upload-section-microtext"
92
- }, uploadMicroText), /*#__PURE__*/React.createElement(SecondaryButton, {
93
- leftIcon: /*#__PURE__*/React.createElement(Icon, {
94
- fileUrl: downloadIcon,
95
- size: "sm"
96
- }),
97
- onClick: triggerUploadFileNativeHandler,
98
- id: "".concat(id, "-button")
99
- }, /*#__PURE__*/React.createElement("span", {
100
- id: "".concat(id, "-label")
101
- }, label)), /*#__PURE__*/React.createElement("div", {
102
- className: "ffe-file-upload__upload-section-subtext"
103
- }, uploadSubText))), /*#__PURE__*/React.createElement("input", {
104
- id: id,
105
- type: "file",
106
- multiple: multiple,
107
- ref: fileInputElement,
108
- onChange: handleFileSelected,
109
- "aria-labelledby": "".concat(id, "-label"),
110
- accept: accept || '*'
111
- }));
112
- }
6
+ export function FileUpload(_a) {
7
+ var id = _a.id, label = _a.label, files = _a.files, cancelText = _a.cancelText, deleteText = _a.deleteText, multiple = _a.multiple, title = _a.title, infoText = _a.infoText, infoSubText = _a.infoSubText, uploadTitle = _a.uploadTitle, uploadMicroText = _a.uploadMicroText, uploadSubText = _a.uploadSubText, accept = _a.accept, onFilesDropped = _a.onFilesDropped, onFileDeleted = _a.onFileDeleted, onFilesSelected = _a.onFilesSelected;
8
+ var _b = useState(false), isHover = _b[0], setIsHover = _b[1];
9
+ var fileInputElement = useRef(null);
10
+ var downloadIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00NzkuOC0zNTcuNTM5cS02LjQzMSAwLTExLjk2MS0yLjMwOC01LjUzMS0yLjMwNy0xMC4xNDYtNi45MjNMMzM1LjMwOS00ODkuMTUzcS03LjkyMy03LjgzMi03LjgwNy0xOC4zMzguMTE1LTEwLjUwNyA4LjMyOS0xOC44MTUgOC43ODYtOC4zMDcgMTguODYyLTguMTE1IDEwLjA3Ny4xOTIgMTguMzg1IDguNWw4MC45MjMgODEuOTIzdi0zMjYuMDAxcTAtMTEuMDY5IDcuNDA0LTE4LjUzNCA3LjQwNS03LjQ2NiAxOC4zODQtNy40NjYgMTAuOTggMCAxOC41OTUgNy40NjYgNy42MTUgNy40NjUgNy42MTUgMTguNTM0djMyNi4wMDFsODEuOTIzLTgxLjkyM3E3LjU5LTcuOTIzIDE4LjAyNi03LjgwOCAxMC40MzUuMTE2IDE5LjIyMSA4LjQyMyA4LjIxNCA4LjMwOCA4LjAyMSAxOC41NzctLjE5MiAxMC4yNjktOC40OTkgMTguNTc2TDUwMi4zMDctMzY2Ljc3cS01LjAxNSA0LjYxNi0xMC41NDYgNi45MjMtNS41MyAyLjMwOC0xMS45NjEgMi4zMDhaTTI3Ni4wMjUtMjEyLjAwMXEtMjcuMDI0IDAtNDUuNTI0LTE4LjY1dC0xOC41LTQ1LjY1OHYtMzQuNDYxcTAtMTEuMDY5IDcuNDA1LTE4LjUzNCA3LjQwNS03LjQ2NSAxOC4zODQtNy40NjUgMTAuOTggMCAxOC41OTUgNy40NjVRMjY0LTMyMS44MzkgMjY0LTMxMC43N3YzNC40NjFxMCA0LjYxNiAzLjg0NiA4LjQ2MyAzLjg0NyAzLjg0NiA4LjQ2MyAzLjg0Nmg0MDcuMzgycTQuNjE2IDAgOC40NjMtMy44NDYgMy44NDYtMy44NDcgMy44NDYtOC40NjN2LTM0LjQ2MXEwLTExLjA2OSA3LjQwNS0xOC41MzQgNy40MDQtNy40NjUgMTguMzg0LTcuNDY1IDEwLjk3OSAwIDE4LjU5NCA3LjQ2NSA3LjYxNiA3LjQ2NSA3LjYxNiAxOC41MzR2MzQuNDYxcTAgMjcuMDA4LTE4LjY2MiA0NS42NTgtMTguNjYyIDE4LjY1LTQ1LjY4NiAxOC42NUgyNzYuMDI1WiIvPjwvc3ZnPg==';
11
+ var handleFilesDropped = function (event) {
12
+ event.preventDefault();
13
+ setIsHover(false);
14
+ onFilesDropped(event.dataTransfer.files);
15
+ };
16
+ var handleFileDeleted = function (event) {
17
+ onFileDeleted(files[event.currentTarget.id]);
18
+ };
19
+ var triggerUploadFileNativeHandler = function () {
20
+ // clear file input to trigger onChange when uploading same filename
21
+ if (fileInputElement.current) {
22
+ fileInputElement.current.value = '';
23
+ fileInputElement.current.click();
24
+ }
25
+ };
26
+ var handleFileSelected = function (event) {
27
+ onFilesSelected(event.target.files);
28
+ };
29
+ return (React.createElement("div", { className: "ffe-file-upload" },
30
+ React.createElement("div", { className: "ffe-file-upload__title" }, title),
31
+ Object.keys(files).length > 0 ? (React.createElement("div", { className: "ffe-file-upload__file-items-section" }, Object.keys(files).map(function (file) { return (React.createElement(FileItem, { key: file, file: files[file], cancelText: cancelText, deleteText: deleteText, onFileDeleted: handleFileDeleted })); }))) : (React.createElement("div", { className: "ffe-file-upload__info-section" },
32
+ React.createElement("div", { className: "ffe-file-upload__info-section-text" }, infoText),
33
+ React.createElement("div", { className: "ffe-file-upload__info-section-subtext" }, infoSubText))),
34
+ React.createElement("div", { className: "ffe-file-upload__upload-section", role: "presentation", onDrop: handleFilesDropped, onDragOver: function (event) {
35
+ event.preventDefault();
36
+ setIsHover(true);
37
+ }, onDragLeave: function () { return setIsHover(false); } },
38
+ React.createElement("div", { className: classNames('ffe-file-upload__upload-section-border', {
39
+ 'ffe-file-upload__upload-section-border--hover': isHover,
40
+ }) },
41
+ React.createElement("div", { className: "ffe-file-upload__upload-section-title" }, uploadTitle),
42
+ React.createElement("div", { className: "ffe-file-upload__upload-section-microtext" }, uploadMicroText),
43
+ React.createElement(SecondaryButton, { leftIcon: React.createElement(Icon, { fileUrl: downloadIcon, size: "sm" }), onClick: triggerUploadFileNativeHandler, id: "".concat(id, "-button") },
44
+ React.createElement("span", { id: "".concat(id, "-label") }, label)),
45
+ React.createElement("div", { className: "ffe-file-upload__upload-section-subtext" }, uploadSubText))),
46
+ React.createElement("input", { id: id, type: "file", multiple: multiple, ref: fileInputElement, onChange: handleFileSelected, "aria-labelledby": "".concat(id, "-label"), accept: accept || '*' })));
47
+ }
@@ -1,12 +1,10 @@
1
- export var getFileContent = function getFileContent(file) {
2
- return new Promise(function (resolve, reject) {
3
- var reader = new window.FileReader();
4
- reader.onload = function (event) {
5
- return resolve(event.target ? event.target.result : null);
6
- };
7
- reader.onerror = function (error) {
8
- return reject(error);
9
- };
10
- reader.readAsDataURL(file);
11
- });
12
- };
1
+ export var getFileContent = function (file) {
2
+ return new Promise(function (resolve, reject) {
3
+ var reader = new window.FileReader();
4
+ reader.onload = function (event) {
5
+ return resolve(event.target ? event.target.result : null);
6
+ };
7
+ reader.onerror = function (error) { return reject(error); };
8
+ reader.readAsDataURL(file);
9
+ });
10
+ };
package/es/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { FileUpload, FileUploadProps } from './FileUpload';
2
- export { getFileContent } from './getFileContent';
1
+ export { FileUpload } from './FileUpload';
2
+ export { getFileContent } from './getFileContent';
package/lib/FileItem.js CHANGED
@@ -1,83 +1,39 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileItem = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var ffe_icons_react_1 = require("@sb1/ffe-icons-react");
9
+ function FileItem(_a) {
10
+ var file = _a.file, onFileDeleted = _a.onFileDeleted, cancelText = _a.cancelText, deleteText = _a.deleteText;
11
+ var closeIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtNDM3Ljg0NyAyNzcuMDc2LTIzNC45MjRxLTguMzA3IDguMzA4LTIwLjg4NCA4LjUtMTIuNTc2LjE5My0yMS4yNjgtOC41LTguNjkzLTguNjkyLTguNjkzLTIxLjA3NnQ4LjY5My0yMS4wNzZMNDM3Ljg0Ny00ODAgMjM0LjkyNC02ODIuOTI0cS04LjMwOC04LjMwNy04LjUtMjAuODg0LS4xOTMtMTIuNTc2IDguNS0yMS4yNjggOC42OTItOC42OTMgMjEuMDc2LTguNjkzdDIxLjA3NiA4LjY5M0w0ODAtNTIyLjE1M2wyMDIuOTI0LTIwMi45MjNxOC4zMDctOC4zMDggMjAuODg0LTguNSAxMi41NzYtLjE5MyAyMS4yNjggOC41IDguNjkzIDguNjkyIDguNjkzIDIxLjA3NnQtOC42OTMgMjEuMDc2TDUyMi4xNTMtNDgwbDIwMi45MjMgMjAyLjkyNHE4LjMwOCA4LjMwNyA4LjUgMjAuODg0LjE5MyAxMi41NzYtOC41IDIxLjI2OC04LjY5MiA4LjY5My0yMS4wNzYgOC42OTN0LTIxLjA3Ni04LjY5M0w0ODAtNDM3Ljg0N1oiLz48L3N2Zz4=';
12
+ var exclamationIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00ODAuMjExLTM4MC40MTNxLTE3LjM2MyAwLTI5LjUzNy0xMi4wMjRUNDM4LjUtNDIxLjkxM3YtMjY0cTAtMTcuNDUyIDExLjk2My0yOS40NzYgMTEuOTY0LTEyLjAyNCAyOS4zMjYtMTIuMDI0IDE3LjM2MyAwIDI5LjUzNyAxMi4wMjR0MTIuMTc0IDI5LjQ3NnYyNjRxMCAxNy40NTItMTEuOTYzIDI5LjQ3Ni0xMS45NjQgMTIuMDI0LTI5LjMyNiAxMi4wMjRabTAgMTQ3LjgyNnEtMTcuMzYzIDAtMjkuNTM3LTExLjk2My0xMi4xNzQtMTEuOTY0LTEyLjE3NC0yOS4zMjYgMC0xNy4zNjMgMTEuOTYzLTI5LjUzNyAxMS45NjQtMTIuMTc0IDI5LjMyNi0xMi4xNzQgMTcuMzYzIDAgMjkuNTM3IDExLjk2M1E1MjEuNS0yOTEuNjYgNTIxLjUtMjc0LjI5N3EwIDE3LjM2Mi0xMS45NjMgMjkuNTM2LTExLjk2NCAxMi4xNzQtMjkuMzI2IDEyLjE3NFoiLz48L3N2Zz4=';
13
+ return (react_1.default.createElement("li", null,
14
+ // File is loading
15
+ !file.document && !file.error && (react_1.default.createElement("div", { className: "ffe-file-upload__file-item-stencil" },
16
+ react_1.default.createElement("button", { type: "button", id: file.name, className: "ffe-file-upload__file-item-delete-button", onClick: onFileDeleted },
17
+ react_1.default.createElement("span", { className: "ffe-file-upload__file-item-delete-button-text" }, cancelText),
18
+ react_1.default.createElement(ffe_icons_react_1.Icon, { fileUrl: closeIcon, size: "md", className: "ffe-file-upload__file-item-delete-icon" })),
19
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-stencil-info" },
20
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-stencil-info-background" }),
21
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-stencil-info-filename" }, file.name)))),
22
+ // File finished loading without error
23
+ file.document && !file.error && (react_1.default.createElement("div", { className: "ffe-file-upload__file-item-loaded" },
24
+ react_1.default.createElement("button", { type: "button", id: file.name, className: "ffe-file-upload__file-item-delete-button", onClick: onFileDeleted },
25
+ react_1.default.createElement("span", { className: "ffe-file-upload__file-item-delete-button-text" }, deleteText),
26
+ react_1.default.createElement(ffe_icons_react_1.Icon, { fileUrl: closeIcon, size: "md", className: "ffe-file-upload__file-item-delete-icon" })),
27
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-filename" }, file.name))),
28
+ // File has error
29
+ file.error && (react_1.default.createElement("div", { className: "ffe-file-upload__file-item-error", role: "alert" },
30
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-error-icon" },
31
+ react_1.default.createElement(ffe_icons_react_1.Icon, { fileUrl: exclamationIcon, size: "sm" })),
32
+ react_1.default.createElement("button", { type: "button", id: file.name, className: "ffe-file-upload__file-item-delete-button", onClick: onFileDeleted },
33
+ react_1.default.createElement("span", { className: "ffe-file-upload__file-item-delete-button-text" }, deleteText),
34
+ react_1.default.createElement(ffe_icons_react_1.Icon, { fileUrl: closeIcon, size: "md", className: "ffe-file-upload__file-item-delete-icon" })),
35
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-error-info" },
36
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-error-filename" }, file.name),
37
+ react_1.default.createElement("div", { className: "ffe-file-upload__file-item-error-message" }, file.error))))));
38
+ }
6
39
  exports.FileItem = FileItem;
7
- var _react = _interopRequireDefault(require("react"));
8
- var _ffeIconsReact = require("@sb1/ffe-icons-react");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- function FileItem(_ref) {
11
- var file = _ref.file,
12
- onFileDeleted = _ref.onFileDeleted,
13
- cancelText = _ref.cancelText,
14
- deleteText = _ref.deleteText;
15
- var closeIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtNDM3Ljg0NyAyNzcuMDc2LTIzNC45MjRxLTguMzA3IDguMzA4LTIwLjg4NCA4LjUtMTIuNTc2LjE5My0yMS4yNjgtOC41LTguNjkzLTguNjkyLTguNjkzLTIxLjA3NnQ4LjY5My0yMS4wNzZMNDM3Ljg0Ny00ODAgMjM0LjkyNC02ODIuOTI0cS04LjMwOC04LjMwNy04LjUtMjAuODg0LS4xOTMtMTIuNTc2IDguNS0yMS4yNjggOC42OTItOC42OTMgMjEuMDc2LTguNjkzdDIxLjA3NiA4LjY5M0w0ODAtNTIyLjE1M2wyMDIuOTI0LTIwMi45MjNxOC4zMDctOC4zMDggMjAuODg0LTguNSAxMi41NzYtLjE5MyAyMS4yNjggOC41IDguNjkzIDguNjkyIDguNjkzIDIxLjA3NnQtOC42OTMgMjEuMDc2TDUyMi4xNTMtNDgwbDIwMi45MjMgMjAyLjkyNHE4LjMwOCA4LjMwNyA4LjUgMjAuODg0LjE5MyAxMi41NzYtOC41IDIxLjI2OC04LjY5MiA4LjY5My0yMS4wNzYgOC42OTN0LTIxLjA3Ni04LjY5M0w0ODAtNDM3Ljg0N1oiLz48L3N2Zz4=';
16
- var exclamationIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00ODAuMjExLTM4MC40MTNxLTE3LjM2MyAwLTI5LjUzNy0xMi4wMjRUNDM4LjUtNDIxLjkxM3YtMjY0cTAtMTcuNDUyIDExLjk2My0yOS40NzYgMTEuOTY0LTEyLjAyNCAyOS4zMjYtMTIuMDI0IDE3LjM2MyAwIDI5LjUzNyAxMi4wMjR0MTIuMTc0IDI5LjQ3NnYyNjRxMCAxNy40NTItMTEuOTYzIDI5LjQ3Ni0xMS45NjQgMTIuMDI0LTI5LjMyNiAxMi4wMjRabTAgMTQ3LjgyNnEtMTcuMzYzIDAtMjkuNTM3LTExLjk2My0xMi4xNzQtMTEuOTY0LTEyLjE3NC0yOS4zMjYgMC0xNy4zNjMgMTEuOTYzLTI5LjUzNyAxMS45NjQtMTIuMTc0IDI5LjMyNi0xMi4xNzQgMTcuMzYzIDAgMjkuNTM3IDExLjk2M1E1MjEuNS0yOTEuNjYgNTIxLjUtMjc0LjI5N3EwIDE3LjM2Mi0xMS45NjMgMjkuNTM2LTExLjk2NCAxMi4xNzQtMjkuMzI2IDEyLjE3NFoiLz48L3N2Zz4=';
17
- return /*#__PURE__*/_react.default.createElement("li", null,
18
- // File is loading
19
- !file.document && !file.error && /*#__PURE__*/_react.default.createElement("div", {
20
- className: "ffe-file-upload__file-item-stencil"
21
- }, /*#__PURE__*/_react.default.createElement("button", {
22
- type: "button",
23
- id: file.name,
24
- className: "ffe-file-upload__file-item-delete-button",
25
- onClick: onFileDeleted
26
- }, /*#__PURE__*/_react.default.createElement("span", {
27
- className: "ffe-file-upload__file-item-delete-button-text"
28
- }, cancelText), /*#__PURE__*/_react.default.createElement(_ffeIconsReact.Icon, {
29
- fileUrl: closeIcon,
30
- size: "md",
31
- className: "ffe-file-upload__file-item-delete-icon"
32
- })), /*#__PURE__*/_react.default.createElement("div", {
33
- className: "ffe-file-upload__file-item-stencil-info"
34
- }, /*#__PURE__*/_react.default.createElement("div", {
35
- className: "ffe-file-upload__file-item-stencil-info-background"
36
- }), /*#__PURE__*/_react.default.createElement("div", {
37
- className: "ffe-file-upload__file-item-stencil-info-filename"
38
- }, file.name))),
39
- // File finished loading without error
40
- file.document && !file.error && /*#__PURE__*/_react.default.createElement("div", {
41
- className: "ffe-file-upload__file-item-loaded"
42
- }, /*#__PURE__*/_react.default.createElement("button", {
43
- type: "button",
44
- id: file.name,
45
- className: "ffe-file-upload__file-item-delete-button",
46
- onClick: onFileDeleted
47
- }, /*#__PURE__*/_react.default.createElement("span", {
48
- className: "ffe-file-upload__file-item-delete-button-text"
49
- }, deleteText), /*#__PURE__*/_react.default.createElement(_ffeIconsReact.Icon, {
50
- fileUrl: closeIcon,
51
- size: "md",
52
- className: "ffe-file-upload__file-item-delete-icon"
53
- })), /*#__PURE__*/_react.default.createElement("div", {
54
- className: "ffe-file-upload__file-item-filename"
55
- }, file.name)),
56
- // File has error
57
- file.error && /*#__PURE__*/_react.default.createElement("div", {
58
- className: "ffe-file-upload__file-item-error",
59
- role: "alert"
60
- }, /*#__PURE__*/_react.default.createElement("div", {
61
- className: "ffe-file-upload__file-item-error-icon"
62
- }, /*#__PURE__*/_react.default.createElement(_ffeIconsReact.Icon, {
63
- fileUrl: exclamationIcon,
64
- size: "sm"
65
- })), /*#__PURE__*/_react.default.createElement("button", {
66
- type: "button",
67
- id: file.name,
68
- className: "ffe-file-upload__file-item-delete-button",
69
- onClick: onFileDeleted
70
- }, /*#__PURE__*/_react.default.createElement("span", {
71
- className: "ffe-file-upload__file-item-delete-button-text"
72
- }, deleteText), /*#__PURE__*/_react.default.createElement(_ffeIconsReact.Icon, {
73
- fileUrl: closeIcon,
74
- size: "md",
75
- className: "ffe-file-upload__file-item-delete-icon"
76
- })), /*#__PURE__*/_react.default.createElement("div", {
77
- className: "ffe-file-upload__file-item-error-info"
78
- }, /*#__PURE__*/_react.default.createElement("div", {
79
- className: "ffe-file-upload__file-item-error-filename"
80
- }, file.name), /*#__PURE__*/_react.default.createElement("div", {
81
- className: "ffe-file-upload__file-item-error-message"
82
- }, file.error))));
83
- }
package/lib/FileUpload.js CHANGED
@@ -1,122 +1,77 @@
1
1
  "use strict";
2
-
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
6
17
  });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.FileUpload = void 0;
30
+ var react_1 = __importStar(require("react"));
31
+ var FileItem_1 = require("./FileItem");
32
+ var classnames_1 = __importDefault(require("classnames"));
33
+ var ffe_buttons_react_1 = require("@sb1/ffe-buttons-react");
34
+ var ffe_icons_react_1 = require("@sb1/ffe-icons-react");
35
+ function FileUpload(_a) {
36
+ var id = _a.id, label = _a.label, files = _a.files, cancelText = _a.cancelText, deleteText = _a.deleteText, multiple = _a.multiple, title = _a.title, infoText = _a.infoText, infoSubText = _a.infoSubText, uploadTitle = _a.uploadTitle, uploadMicroText = _a.uploadMicroText, uploadSubText = _a.uploadSubText, accept = _a.accept, onFilesDropped = _a.onFilesDropped, onFileDeleted = _a.onFileDeleted, onFilesSelected = _a.onFilesSelected;
37
+ var _b = (0, react_1.useState)(false), isHover = _b[0], setIsHover = _b[1];
38
+ var fileInputElement = (0, react_1.useRef)(null);
39
+ var downloadIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00NzkuOC0zNTcuNTM5cS02LjQzMSAwLTExLjk2MS0yLjMwOC01LjUzMS0yLjMwNy0xMC4xNDYtNi45MjNMMzM1LjMwOS00ODkuMTUzcS03LjkyMy03LjgzMi03LjgwNy0xOC4zMzguMTE1LTEwLjUwNyA4LjMyOS0xOC44MTUgOC43ODYtOC4zMDcgMTguODYyLTguMTE1IDEwLjA3Ny4xOTIgMTguMzg1IDguNWw4MC45MjMgODEuOTIzdi0zMjYuMDAxcTAtMTEuMDY5IDcuNDA0LTE4LjUzNCA3LjQwNS03LjQ2NiAxOC4zODQtNy40NjYgMTAuOTggMCAxOC41OTUgNy40NjYgNy42MTUgNy40NjUgNy42MTUgMTguNTM0djMyNi4wMDFsODEuOTIzLTgxLjkyM3E3LjU5LTcuOTIzIDE4LjAyNi03LjgwOCAxMC40MzUuMTE2IDE5LjIyMSA4LjQyMyA4LjIxNCA4LjMwOCA4LjAyMSAxOC41NzctLjE5MiAxMC4yNjktOC40OTkgMTguNTc2TDUwMi4zMDctMzY2Ljc3cS01LjAxNSA0LjYxNi0xMC41NDYgNi45MjMtNS41MyAyLjMwOC0xMS45NjEgMi4zMDhaTTI3Ni4wMjUtMjEyLjAwMXEtMjcuMDI0IDAtNDUuNTI0LTE4LjY1dC0xOC41LTQ1LjY1OHYtMzQuNDYxcTAtMTEuMDY5IDcuNDA1LTE4LjUzNCA3LjQwNS03LjQ2NSAxOC4zODQtNy40NjUgMTAuOTggMCAxOC41OTUgNy40NjVRMjY0LTMyMS44MzkgMjY0LTMxMC43N3YzNC40NjFxMCA0LjYxNiAzLjg0NiA4LjQ2MyAzLjg0NyAzLjg0NiA4LjQ2MyAzLjg0Nmg0MDcuMzgycTQuNjE2IDAgOC40NjMtMy44NDYgMy44NDYtMy44NDcgMy44NDYtOC40NjN2LTM0LjQ2MXEwLTExLjA2OSA3LjQwNS0xOC41MzQgNy40MDQtNy40NjUgMTguMzg0LTcuNDY1IDEwLjk3OSAwIDE4LjU5NCA3LjQ2NSA3LjYxNiA3LjQ2NSA3LjYxNiAxOC41MzR2MzQuNDYxcTAgMjcuMDA4LTE4LjY2MiA0NS42NTgtMTguNjYyIDE4LjY1LTQ1LjY4NiAxOC42NUgyNzYuMDI1WiIvPjwvc3ZnPg==';
40
+ var handleFilesDropped = function (event) {
41
+ event.preventDefault();
42
+ setIsHover(false);
43
+ onFilesDropped(event.dataTransfer.files);
44
+ };
45
+ var handleFileDeleted = function (event) {
46
+ onFileDeleted(files[event.currentTarget.id]);
47
+ };
48
+ var triggerUploadFileNativeHandler = function () {
49
+ // clear file input to trigger onChange when uploading same filename
50
+ if (fileInputElement.current) {
51
+ fileInputElement.current.value = '';
52
+ fileInputElement.current.click();
53
+ }
54
+ };
55
+ var handleFileSelected = function (event) {
56
+ onFilesSelected(event.target.files);
57
+ };
58
+ return (react_1.default.createElement("div", { className: "ffe-file-upload" },
59
+ react_1.default.createElement("div", { className: "ffe-file-upload__title" }, title),
60
+ Object.keys(files).length > 0 ? (react_1.default.createElement("div", { className: "ffe-file-upload__file-items-section" }, Object.keys(files).map(function (file) { return (react_1.default.createElement(FileItem_1.FileItem, { key: file, file: files[file], cancelText: cancelText, deleteText: deleteText, onFileDeleted: handleFileDeleted })); }))) : (react_1.default.createElement("div", { className: "ffe-file-upload__info-section" },
61
+ react_1.default.createElement("div", { className: "ffe-file-upload__info-section-text" }, infoText),
62
+ react_1.default.createElement("div", { className: "ffe-file-upload__info-section-subtext" }, infoSubText))),
63
+ react_1.default.createElement("div", { className: "ffe-file-upload__upload-section", role: "presentation", onDrop: handleFilesDropped, onDragOver: function (event) {
64
+ event.preventDefault();
65
+ setIsHover(true);
66
+ }, onDragLeave: function () { return setIsHover(false); } },
67
+ react_1.default.createElement("div", { className: (0, classnames_1.default)('ffe-file-upload__upload-section-border', {
68
+ 'ffe-file-upload__upload-section-border--hover': isHover,
69
+ }) },
70
+ react_1.default.createElement("div", { className: "ffe-file-upload__upload-section-title" }, uploadTitle),
71
+ react_1.default.createElement("div", { className: "ffe-file-upload__upload-section-microtext" }, uploadMicroText),
72
+ react_1.default.createElement(ffe_buttons_react_1.SecondaryButton, { leftIcon: react_1.default.createElement(ffe_icons_react_1.Icon, { fileUrl: downloadIcon, size: "sm" }), onClick: triggerUploadFileNativeHandler, id: "".concat(id, "-button") },
73
+ react_1.default.createElement("span", { id: "".concat(id, "-label") }, label)),
74
+ react_1.default.createElement("div", { className: "ffe-file-upload__upload-section-subtext" }, uploadSubText))),
75
+ react_1.default.createElement("input", { id: id, type: "file", multiple: multiple, ref: fileInputElement, onChange: handleFileSelected, "aria-labelledby": "".concat(id, "-label"), accept: accept || '*' })));
76
+ }
7
77
  exports.FileUpload = FileUpload;
8
- var _react = _interopRequireWildcard(require("react"));
9
- var _FileItem = require("./FileItem");
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _ffeButtonsReact = require("@sb1/ffe-buttons-react");
12
- var _ffeIconsReact = require("@sb1/ffe-icons-react");
13
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
17
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
19
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
20
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
21
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22
- function FileUpload(_ref) {
23
- var id = _ref.id,
24
- label = _ref.label,
25
- files = _ref.files,
26
- cancelText = _ref.cancelText,
27
- deleteText = _ref.deleteText,
28
- multiple = _ref.multiple,
29
- title = _ref.title,
30
- infoText = _ref.infoText,
31
- infoSubText = _ref.infoSubText,
32
- uploadTitle = _ref.uploadTitle,
33
- uploadMicroText = _ref.uploadMicroText,
34
- uploadSubText = _ref.uploadSubText,
35
- accept = _ref.accept,
36
- onFilesDropped = _ref.onFilesDropped,
37
- onFileDeleted = _ref.onFileDeleted,
38
- onFilesSelected = _ref.onFilesSelected;
39
- var _useState = (0, _react.useState)(false),
40
- _useState2 = _slicedToArray(_useState, 2),
41
- isHover = _useState2[0],
42
- setIsHover = _useState2[1];
43
- var fileInputElement = (0, _react.useRef)(null);
44
- var downloadIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjAiPjxwYXRoIGQ9Ik00NzkuOC0zNTcuNTM5cS02LjQzMSAwLTExLjk2MS0yLjMwOC01LjUzMS0yLjMwNy0xMC4xNDYtNi45MjNMMzM1LjMwOS00ODkuMTUzcS03LjkyMy03LjgzMi03LjgwNy0xOC4zMzguMTE1LTEwLjUwNyA4LjMyOS0xOC44MTUgOC43ODYtOC4zMDcgMTguODYyLTguMTE1IDEwLjA3Ny4xOTIgMTguMzg1IDguNWw4MC45MjMgODEuOTIzdi0zMjYuMDAxcTAtMTEuMDY5IDcuNDA0LTE4LjUzNCA3LjQwNS03LjQ2NiAxOC4zODQtNy40NjYgMTAuOTggMCAxOC41OTUgNy40NjYgNy42MTUgNy40NjUgNy42MTUgMTguNTM0djMyNi4wMDFsODEuOTIzLTgxLjkyM3E3LjU5LTcuOTIzIDE4LjAyNi03LjgwOCAxMC40MzUuMTE2IDE5LjIyMSA4LjQyMyA4LjIxNCA4LjMwOCA4LjAyMSAxOC41NzctLjE5MiAxMC4yNjktOC40OTkgMTguNTc2TDUwMi4zMDctMzY2Ljc3cS01LjAxNSA0LjYxNi0xMC41NDYgNi45MjMtNS41MyAyLjMwOC0xMS45NjEgMi4zMDhaTTI3Ni4wMjUtMjEyLjAwMXEtMjcuMDI0IDAtNDUuNTI0LTE4LjY1dC0xOC41LTQ1LjY1OHYtMzQuNDYxcTAtMTEuMDY5IDcuNDA1LTE4LjUzNCA3LjQwNS03LjQ2NSAxOC4zODQtNy40NjUgMTAuOTggMCAxOC41OTUgNy40NjVRMjY0LTMyMS44MzkgMjY0LTMxMC43N3YzNC40NjFxMCA0LjYxNiAzLjg0NiA4LjQ2MyAzLjg0NyAzLjg0NiA4LjQ2MyAzLjg0Nmg0MDcuMzgycTQuNjE2IDAgOC40NjMtMy44NDYgMy44NDYtMy44NDcgMy44NDYtOC40NjN2LTM0LjQ2MXEwLTExLjA2OSA3LjQwNS0xOC41MzQgNy40MDQtNy40NjUgMTguMzg0LTcuNDY1IDEwLjk3OSAwIDE4LjU5NCA3LjQ2NSA3LjYxNiA3LjQ2NSA3LjYxNiAxOC41MzR2MzQuNDYxcTAgMjcuMDA4LTE4LjY2MiA0NS42NTgtMTguNjYyIDE4LjY1LTQ1LjY4NiAxOC42NUgyNzYuMDI1WiIvPjwvc3ZnPg==';
45
- var handleFilesDropped = function handleFilesDropped(event) {
46
- event.preventDefault();
47
- setIsHover(false);
48
- onFilesDropped(event.dataTransfer.files);
49
- };
50
- var handleFileDeleted = function handleFileDeleted(event) {
51
- onFileDeleted(files[event.currentTarget.id]);
52
- };
53
- var triggerUploadFileNativeHandler = function triggerUploadFileNativeHandler() {
54
- // clear file input to trigger onChange when uploading same filename
55
- if (fileInputElement.current) {
56
- fileInputElement.current.value = '';
57
- fileInputElement.current.click();
58
- }
59
- };
60
- var handleFileSelected = function handleFileSelected(event) {
61
- onFilesSelected(event.target.files);
62
- };
63
- return /*#__PURE__*/_react.default.createElement("div", {
64
- className: "ffe-file-upload"
65
- }, /*#__PURE__*/_react.default.createElement("div", {
66
- className: "ffe-file-upload__title"
67
- }, title), Object.keys(files).length > 0 ? /*#__PURE__*/_react.default.createElement("div", {
68
- className: "ffe-file-upload__file-items-section"
69
- }, Object.keys(files).map(function (file) {
70
- return /*#__PURE__*/_react.default.createElement(_FileItem.FileItem, {
71
- key: file,
72
- file: files[file],
73
- cancelText: cancelText,
74
- deleteText: deleteText,
75
- onFileDeleted: handleFileDeleted
76
- });
77
- })) : /*#__PURE__*/_react.default.createElement("div", {
78
- className: "ffe-file-upload__info-section"
79
- }, /*#__PURE__*/_react.default.createElement("div", {
80
- className: "ffe-file-upload__info-section-text"
81
- }, infoText), /*#__PURE__*/_react.default.createElement("div", {
82
- className: "ffe-file-upload__info-section-subtext"
83
- }, infoSubText)), /*#__PURE__*/_react.default.createElement("div", {
84
- className: "ffe-file-upload__upload-section",
85
- role: "presentation",
86
- onDrop: handleFilesDropped,
87
- onDragOver: function onDragOver(event) {
88
- event.preventDefault();
89
- setIsHover(true);
90
- },
91
- onDragLeave: function onDragLeave() {
92
- return setIsHover(false);
93
- }
94
- }, /*#__PURE__*/_react.default.createElement("div", {
95
- className: (0, _classnames.default)('ffe-file-upload__upload-section-border', {
96
- 'ffe-file-upload__upload-section-border--hover': isHover
97
- })
98
- }, /*#__PURE__*/_react.default.createElement("div", {
99
- className: "ffe-file-upload__upload-section-title"
100
- }, uploadTitle), /*#__PURE__*/_react.default.createElement("div", {
101
- className: "ffe-file-upload__upload-section-microtext"
102
- }, uploadMicroText), /*#__PURE__*/_react.default.createElement(_ffeButtonsReact.SecondaryButton, {
103
- leftIcon: /*#__PURE__*/_react.default.createElement(_ffeIconsReact.Icon, {
104
- fileUrl: downloadIcon,
105
- size: "sm"
106
- }),
107
- onClick: triggerUploadFileNativeHandler,
108
- id: "".concat(id, "-button")
109
- }, /*#__PURE__*/_react.default.createElement("span", {
110
- id: "".concat(id, "-label")
111
- }, label)), /*#__PURE__*/_react.default.createElement("div", {
112
- className: "ffe-file-upload__upload-section-subtext"
113
- }, uploadSubText))), /*#__PURE__*/_react.default.createElement("input", {
114
- id: id,
115
- type: "file",
116
- multiple: multiple,
117
- ref: fileInputElement,
118
- onChange: handleFileSelected,
119
- "aria-labelledby": "".concat(id, "-label"),
120
- accept: accept || '*'
121
- }));
122
- }
@@ -1,18 +1,14 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
2
+ Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.getFileContent = void 0;
7
- var getFileContent = exports.getFileContent = function getFileContent(file) {
8
- return new Promise(function (resolve, reject) {
9
- var reader = new window.FileReader();
10
- reader.onload = function (event) {
11
- return resolve(event.target ? event.target.result : null);
12
- };
13
- reader.onerror = function (error) {
14
- return reject(error);
15
- };
16
- reader.readAsDataURL(file);
17
- });
18
- };
4
+ var getFileContent = function (file) {
5
+ return new Promise(function (resolve, reject) {
6
+ var reader = new window.FileReader();
7
+ reader.onload = function (event) {
8
+ return resolve(event.target ? event.target.result : null);
9
+ };
10
+ reader.onerror = function (error) { return reject(error); };
11
+ reader.readAsDataURL(file);
12
+ });
13
+ };
14
+ exports.getFileContent = getFileContent;
package/lib/index.js CHANGED
@@ -1,25 +1,7 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "FileUpload", {
7
- enumerable: true,
8
- get: function get() {
9
- return _FileUpload.FileUpload;
10
- }
11
- });
12
- Object.defineProperty(exports, "FileUploadProps", {
13
- enumerable: true,
14
- get: function get() {
15
- return _FileUpload.FileUploadProps;
16
- }
17
- });
18
- Object.defineProperty(exports, "getFileContent", {
19
- enumerable: true,
20
- get: function get() {
21
- return _getFileContent.getFileContent;
22
- }
23
- });
24
- var _FileUpload = require("./FileUpload");
25
- var _getFileContent = require("./getFileContent");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileContent = exports.FileUpload = void 0;
4
+ var FileUpload_1 = require("./FileUpload");
5
+ Object.defineProperty(exports, "FileUpload", { enumerable: true, get: function () { return FileUpload_1.FileUpload; } });
6
+ var getFileContent_1 = require("./getFileContent");
7
+ Object.defineProperty(exports, "getFileContent", { enumerable: true, get: function () { return getFileContent_1.getFileContent; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sb1/ffe-file-upload-react",
3
- "version": "11.0.5",
3
+ "version": "11.0.7",
4
4
  "description": "Upload file button with validation and list of uploaded files.",
5
5
  "keywords": [
6
6
  "ffe"
@@ -21,22 +21,22 @@
21
21
  "url": "ssh://git@github.com:SpareBank1/designsystem.git"
22
22
  },
23
23
  "scripts": {
24
- "build": "ffe-buildtool babel",
25
- "watch": "ffe-buildtool babel-watch",
24
+ "build": "ffe-buildtool tsc",
25
+ "build:es": "ffe-buildtool tsc --es",
26
26
  "lint": "eslint src --ext ts,tsx",
27
27
  "lint:fix": "eslint src --fix --ext ts,tsx",
28
28
  "test": "ffe-buildtool jest",
29
29
  "test:watch": "ffe-buildtool jest --watch"
30
30
  },
31
31
  "dependencies": {
32
- "@sb1/ffe-buttons-react": "^23.0.1",
33
- "@sb1/ffe-file-upload": "^10.0.43",
34
- "@sb1/ffe-form": "^29.0.17",
35
- "@sb1/ffe-icons-react": "^10.0.2",
32
+ "@sb1/ffe-buttons-react": "^23.0.2",
33
+ "@sb1/ffe-file-upload": "^10.0.44",
34
+ "@sb1/ffe-form": "^29.0.18",
35
+ "@sb1/ffe-icons-react": "^10.0.3",
36
36
  "classnames": "^2.3.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@sb1/ffe-buildtool": "^0.6.2",
39
+ "@sb1/ffe-buildtool": "^0.6.3",
40
40
  "@types/sinon": "^17.0.3",
41
41
  "react": "^16.9.0",
42
42
  "react-dom": "^16.9.0",
@@ -48,5 +48,5 @@
48
48
  "publishConfig": {
49
49
  "access": "public"
50
50
  },
51
- "gitHead": "127dc5b80ec3e599b2d34242626232bdcef25e3c"
51
+ "gitHead": "f9439b117955babfcd2ea4389d38618679598e2d"
52
52
  }
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ export interface FileItemProps<Document> {
3
+ /** Shape of the file type, name is required, error and document.content is optional */
4
+ file: {
5
+ name: string;
6
+ document?: Document;
7
+ error?: string;
8
+ };
9
+ /**
10
+ * Called when the user clicks the delete button for a given file. Is called with the name of the file in question.
11
+ */
12
+ onFileDeleted: React.MouseEventHandler<HTMLButtonElement>;
13
+ /** Label for the cancel button */
14
+ cancelText?: string;
15
+ /** Label for the delete button */
16
+ deleteText?: string;
17
+ }
18
+ export declare function FileItem<Document>({ file, onFileDeleted, cancelText, deleteText, }: FileItemProps<Document>): React.JSX.Element;
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import { FileItemProps } from './FileItem';
3
+ export interface FileUploadProps<Document> {
4
+ /** ID for the input field. The ID is used as a base for the label ID as well. */
5
+ id: string;
6
+ /** Label for the button to trigger native upload handling. */
7
+ label: string;
8
+ /**
9
+ * A map of files, indexed by file name (check file-shape on FileItem.js propTypes), that the user has uploaded.
10
+ * Must be maintained outside of `FileUpload`. It is up to the implementation to deny or accept file types, sizes, etc,
11
+ * and it is important that duplicates are not allowed.
12
+ * */
13
+ files: Record<string, FileItemProps<Document>['file']>;
14
+ /**
15
+ * Will be called with `FileList`-object containing the `File`-objects the user selected.
16
+ * See MDN for documentation on
17
+ * [FileList](https://developer.mozilla.org/en-US/docs/Web/API/FileList) and
18
+ * [File](https://developer.mozilla.org/en-US/docs/Web/API/File).
19
+ */
20
+ onFilesSelected(fileList: FileList | null): void;
21
+ /** Will be called when objects are dropped over the upload-section. */
22
+ onFilesDropped(fileList: FileList | null): void;
23
+ /**
24
+ * Called when the user clicks the delete button for a given file. Is called with the `File`
25
+ * object of the file in question.
26
+ */
27
+ onFileDeleted(file: FileItemProps<Document>['file']): void;
28
+ /** Whether or not uploading multiple files at once via the native file handler is allowed*/
29
+ multiple?: boolean;
30
+ /** Title module */
31
+ title: string;
32
+ /** Text on the info-section */
33
+ infoText: string;
34
+ /** Subtext on the info-section */
35
+ infoSubText?: string;
36
+ /** Label for the cancel button */
37
+ cancelText?: string;
38
+ /** Label for the delete button */
39
+ deleteText?: string;
40
+ /** Title on the upload-section */
41
+ uploadTitle: string;
42
+ /** MicroText on the upload-section */
43
+ uploadMicroText: string;
44
+ /** SubText on the upload-section */
45
+ uploadSubText: string;
46
+ /** Unique file type specifier that describes a type of file that may be selected by the user, e.g. ".pdf"
47
+ * See MDN for documentation on
48
+ * [Unique file type specifiers](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers)
49
+ */
50
+ accept?: string;
51
+ }
52
+ export declare function FileUpload<Document>({ id, label, files, cancelText, deleteText, multiple, title, infoText, infoSubText, uploadTitle, uploadMicroText, uploadSubText, accept, onFilesDropped, onFileDeleted, onFilesSelected, }: FileUploadProps<Document>): React.JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const getFileContent: (file: File) => Promise<ArrayBuffer | string | null>;
@@ -0,0 +1,2 @@
1
+ export { FileUpload, FileUploadProps } from './FileUpload';
2
+ export { getFileContent } from './getFileContent';
@@ -1,62 +0,0 @@
1
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
- import React from 'react';
3
- import { spy } from 'sinon';
4
- import { FileUpload } from './FileUpload';
5
- import { render, screen, fireEvent } from '@testing-library/react';
6
- var renderFileUpload = function renderFileUpload(props) {
7
- return render( /*#__PURE__*/React.createElement(FileUpload, _extends({
8
- id: "file-upload",
9
- label: "label",
10
- title: "title",
11
- infoText: "infoText",
12
- uploadTitle: "uploadTitle",
13
- uploadMicroText: "uploadMicroText",
14
- uploadSubText: "uploadSubText",
15
- files: {},
16
- onFilesSelected: function onFilesSelected() {},
17
- onFileDeleted: function onFileDeleted() {},
18
- onFilesDropped: function onFilesDropped() {}
19
- }, props)));
20
- };
21
- describe('<FileUpload/>', function () {
22
- it('should have a button and input', function () {
23
- var _renderFileUpload = renderFileUpload(),
24
- container = _renderFileUpload.container;
25
- expect(container.querySelector('#file-upload-button')).toBeTruthy();
26
- expect(container.querySelector('#file-upload')).toBeTruthy();
27
- });
28
- it('should render input label', function () {
29
- renderFileUpload();
30
- expect(screen.getByRole('button', {
31
- name: 'label'
32
- })).toBeInTheDocument();
33
- });
34
- it('should extract and return files when user finishes selecting files', function () {
35
- var onFilesSelected = spy();
36
- var _renderFileUpload2 = renderFileUpload({
37
- onFilesSelected: onFilesSelected
38
- }),
39
- container = _renderFileUpload2.container;
40
- var input = container.querySelector('input#file-upload');
41
- fireEvent.change(input);
42
- expect(onFilesSelected.calledOnce).toBe(true);
43
- });
44
- it('should remove file from files when delete button is clicked', function () {
45
- var onFileDeleted = spy();
46
- // Do click on span inside button with event listener instead of actual button to catch nested clicks.
47
- var _renderFileUpload3 = renderFileUpload({
48
- onFileDeleted: onFileDeleted,
49
- files: {
50
- fileToDelete: {
51
- name: 'fileToDelete'
52
- }
53
- }
54
- }),
55
- container = _renderFileUpload3.container;
56
- var deleteButton = container.querySelector('.ffe-file-upload__file-item-delete-button-text');
57
- fireEvent.click(deleteButton);
58
- expect(onFileDeleted.calledWith({
59
- name: 'fileToDelete'
60
- })).toBe(true);
61
- });
62
- });
@@ -1,65 +0,0 @@
1
- "use strict";
2
-
3
- var _react = _interopRequireDefault(require("react"));
4
- var _sinon = require("sinon");
5
- var _FileUpload = require("./FileUpload");
6
- var _react2 = require("@testing-library/react");
7
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
9
- var renderFileUpload = function renderFileUpload(props) {
10
- return (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_FileUpload.FileUpload, _extends({
11
- id: "file-upload",
12
- label: "label",
13
- title: "title",
14
- infoText: "infoText",
15
- uploadTitle: "uploadTitle",
16
- uploadMicroText: "uploadMicroText",
17
- uploadSubText: "uploadSubText",
18
- files: {},
19
- onFilesSelected: function onFilesSelected() {},
20
- onFileDeleted: function onFileDeleted() {},
21
- onFilesDropped: function onFilesDropped() {}
22
- }, props)));
23
- };
24
- describe('<FileUpload/>', function () {
25
- it('should have a button and input', function () {
26
- var _renderFileUpload = renderFileUpload(),
27
- container = _renderFileUpload.container;
28
- expect(container.querySelector('#file-upload-button')).toBeTruthy();
29
- expect(container.querySelector('#file-upload')).toBeTruthy();
30
- });
31
- it('should render input label', function () {
32
- renderFileUpload();
33
- expect(_react2.screen.getByRole('button', {
34
- name: 'label'
35
- })).toBeInTheDocument();
36
- });
37
- it('should extract and return files when user finishes selecting files', function () {
38
- var onFilesSelected = (0, _sinon.spy)();
39
- var _renderFileUpload2 = renderFileUpload({
40
- onFilesSelected: onFilesSelected
41
- }),
42
- container = _renderFileUpload2.container;
43
- var input = container.querySelector('input#file-upload');
44
- _react2.fireEvent.change(input);
45
- expect(onFilesSelected.calledOnce).toBe(true);
46
- });
47
- it('should remove file from files when delete button is clicked', function () {
48
- var onFileDeleted = (0, _sinon.spy)();
49
- // Do click on span inside button with event listener instead of actual button to catch nested clicks.
50
- var _renderFileUpload3 = renderFileUpload({
51
- onFileDeleted: onFileDeleted,
52
- files: {
53
- fileToDelete: {
54
- name: 'fileToDelete'
55
- }
56
- }
57
- }),
58
- container = _renderFileUpload3.container;
59
- var deleteButton = container.querySelector('.ffe-file-upload__file-item-delete-button-text');
60
- _react2.fireEvent.click(deleteButton);
61
- expect(onFileDeleted.calledWith({
62
- name: 'fileToDelete'
63
- })).toBe(true);
64
- });
65
- });