@norges-domstoler/dds-components 11.2.0 → 11.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/dist/cjs/components/FileUploader/useFileUploader.d.ts +5 -1
- package/dist/cjs/index.js +43 -17
- package/dist/components/FileUploader/FileUploader.js +4 -6
- package/dist/components/FileUploader/useFileUploader.d.ts +5 -1
- package/dist/components/FileUploader/useFileUploader.js +41 -13
- package/package.json +3 -3
|
@@ -3,8 +3,12 @@ import { FileUploaderFile } from './fileUploaderReducer';
|
|
|
3
3
|
import { Accept, FileList } from './types';
|
|
4
4
|
export type FileUploaderHookProps = {
|
|
5
5
|
id: string | undefined;
|
|
6
|
-
/**Dersom komponenten styres
|
|
6
|
+
/**Dersom komponenten skal styres internt. Utgangspunktet for filene som har blitt lastet opp. */
|
|
7
7
|
initialFiles: FileList | undefined;
|
|
8
|
+
/**Dersom komponenten styres utenfra. Filene som har blitt lastet opp. */
|
|
9
|
+
value: FileList | undefined;
|
|
10
|
+
/**Callback for når fil-listen endres. */
|
|
11
|
+
onChange: (newFiles: FileList) => void;
|
|
8
12
|
/**Hvilke filendelser eller mime-typer som filopplasteren skal akseptere. */
|
|
9
13
|
accept: Accept[] | undefined;
|
|
10
14
|
/**Om filopplasteren er avslått eller ikke */
|
package/dist/cjs/index.js
CHANGED
|
@@ -11251,6 +11251,8 @@ var calcRootErrors = function calcRootErrors(files, maxFiles, errorMessage) {
|
|
|
11251
11251
|
};
|
|
11252
11252
|
var useFileUploader = function useFileUploader(props) {
|
|
11253
11253
|
var initialFiles = props.initialFiles,
|
|
11254
|
+
value = props.value,
|
|
11255
|
+
onChange = props.onChange,
|
|
11254
11256
|
accept = props.accept,
|
|
11255
11257
|
maxFiles = props.maxFiles,
|
|
11256
11258
|
disabled = props.disabled,
|
|
@@ -11258,6 +11260,7 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
11258
11260
|
var rootRef = React.useRef(null);
|
|
11259
11261
|
var inputRef = React.useRef(null);
|
|
11260
11262
|
var buttonRef = React.useRef(null);
|
|
11263
|
+
var isControlled = !!value;
|
|
11261
11264
|
var initialFileUploaderFiles = React.useMemo(function () {
|
|
11262
11265
|
return (initialFiles !== null && initialFiles !== void 0 ? initialFiles : []).map(function (f) {
|
|
11263
11266
|
return {
|
|
@@ -11277,6 +11280,21 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
11277
11280
|
state = _useReducer2[0],
|
|
11278
11281
|
dispatch = _useReducer2[1];
|
|
11279
11282
|
var stateFiles = state.files;
|
|
11283
|
+
React.useEffect(function () {
|
|
11284
|
+
if (isControlled) {
|
|
11285
|
+
var files = value.map(function (file) {
|
|
11286
|
+
var accepted = isFileAccepted(file, accept);
|
|
11287
|
+
return {
|
|
11288
|
+
file: file,
|
|
11289
|
+
errors: accepted ? [] : [getInvalidFileTypeErrorMessage()]
|
|
11290
|
+
};
|
|
11291
|
+
});
|
|
11292
|
+
dispatch({
|
|
11293
|
+
type: 'onSetFiles',
|
|
11294
|
+
payload: files
|
|
11295
|
+
});
|
|
11296
|
+
}
|
|
11297
|
+
}, [value, isControlled, accept, dispatch]);
|
|
11280
11298
|
React.useEffect(function () {
|
|
11281
11299
|
dispatch({
|
|
11282
11300
|
type: 'setRootErrors',
|
|
@@ -11349,7 +11367,7 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
11349
11367
|
case 0:
|
|
11350
11368
|
evt.preventDefault();
|
|
11351
11369
|
if (!isEventWithFiles(evt)) {
|
|
11352
|
-
_context2.next =
|
|
11370
|
+
_context2.next = 9;
|
|
11353
11371
|
break;
|
|
11354
11372
|
}
|
|
11355
11373
|
existingFileNames = stateFiles.map(function (f) {
|
|
@@ -11368,17 +11386,22 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
11368
11386
|
errors: accepted ? [] : [getInvalidFileTypeErrorMessage()]
|
|
11369
11387
|
};
|
|
11370
11388
|
}).concat(stateFiles);
|
|
11371
|
-
|
|
11372
|
-
|
|
11373
|
-
|
|
11374
|
-
|
|
11375
|
-
|
|
11389
|
+
onChange(newFiles.map(function (f) {
|
|
11390
|
+
return f.file;
|
|
11391
|
+
}));
|
|
11392
|
+
if (!isControlled) {
|
|
11393
|
+
dispatch({
|
|
11394
|
+
type: 'onSetFiles',
|
|
11395
|
+
payload: newFiles
|
|
11396
|
+
});
|
|
11397
|
+
}
|
|
11398
|
+
case 9:
|
|
11376
11399
|
case "end":
|
|
11377
11400
|
return _context2.stop();
|
|
11378
11401
|
}
|
|
11379
11402
|
}, _callee2);
|
|
11380
11403
|
}));
|
|
11381
|
-
}, [stateFiles,
|
|
11404
|
+
}, [stateFiles, isControlled, accept, errorMessage, maxFiles, onChange, dispatch]);
|
|
11382
11405
|
var openFileDialog = React.useCallback(function () {
|
|
11383
11406
|
if (inputRef.current) {
|
|
11384
11407
|
inputRef.current.value = '';
|
|
@@ -11388,11 +11411,16 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
11388
11411
|
var removeFile = React.useCallback(function (file) {
|
|
11389
11412
|
var newFiles = _toConsumableArray(stateFiles);
|
|
11390
11413
|
newFiles.splice(stateFiles.indexOf(file), 1);
|
|
11391
|
-
|
|
11392
|
-
|
|
11393
|
-
|
|
11394
|
-
|
|
11395
|
-
|
|
11414
|
+
onChange(newFiles.map(function (f) {
|
|
11415
|
+
return f.file;
|
|
11416
|
+
}));
|
|
11417
|
+
if (!isControlled) {
|
|
11418
|
+
dispatch({
|
|
11419
|
+
type: 'onRemoveFile',
|
|
11420
|
+
payload: newFiles
|
|
11421
|
+
});
|
|
11422
|
+
}
|
|
11423
|
+
}, [stateFiles, isControlled, maxFiles, errorMessage, onChange, dispatch]);
|
|
11396
11424
|
var getRootProps = React.useCallback(function () {
|
|
11397
11425
|
return {
|
|
11398
11426
|
onBlur: onRootBlur,
|
|
@@ -11473,6 +11501,7 @@ var FileUploader = function FileUploader(props) {
|
|
|
11473
11501
|
_props$required = props.required,
|
|
11474
11502
|
required = _props$required === void 0 ? false : _props$required,
|
|
11475
11503
|
initialFiles = props.initialFiles,
|
|
11504
|
+
value = props.value,
|
|
11476
11505
|
accept = props.accept,
|
|
11477
11506
|
maxFiles = props.maxFiles,
|
|
11478
11507
|
disabled = props.disabled,
|
|
@@ -11484,6 +11513,8 @@ var FileUploader = function FileUploader(props) {
|
|
|
11484
11513
|
var _useFileUploader = useFileUploader({
|
|
11485
11514
|
id: id,
|
|
11486
11515
|
initialFiles: initialFiles,
|
|
11516
|
+
value: value,
|
|
11517
|
+
onChange: onChange,
|
|
11487
11518
|
accept: accept,
|
|
11488
11519
|
disabled: disabled,
|
|
11489
11520
|
maxFiles: maxFiles,
|
|
@@ -11497,11 +11528,6 @@ var FileUploader = function FileUploader(props) {
|
|
|
11497
11528
|
getInputProps = _useFileUploader.getInputProps,
|
|
11498
11529
|
getButtonProps = _useFileUploader.getButtonProps,
|
|
11499
11530
|
_removeFile = _useFileUploader.removeFile;
|
|
11500
|
-
React.useEffect(function () {
|
|
11501
|
-
onChange(stateFiles.map(function (f) {
|
|
11502
|
-
return f.file;
|
|
11503
|
-
}));
|
|
11504
|
-
}, [stateFiles]);
|
|
11505
11531
|
var hasLabel = label !== undefined;
|
|
11506
11532
|
var hasTip = tip !== undefined;
|
|
11507
11533
|
var hasRootErrors = rootErrors.length > 0;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { toConsumableArray as _toConsumableArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
import { useId
|
|
3
|
+
import { useId } from 'react';
|
|
4
4
|
import styled from 'styled-components';
|
|
5
5
|
import 'tslib';
|
|
6
6
|
import '../../icons/utils/StyledSvg.js';
|
|
@@ -58,6 +58,7 @@ var FileUploader = function FileUploader(props) {
|
|
|
58
58
|
_props$required = props.required,
|
|
59
59
|
required = _props$required === void 0 ? false : _props$required,
|
|
60
60
|
initialFiles = props.initialFiles,
|
|
61
|
+
value = props.value,
|
|
61
62
|
accept = props.accept,
|
|
62
63
|
maxFiles = props.maxFiles,
|
|
63
64
|
disabled = props.disabled,
|
|
@@ -69,6 +70,8 @@ var FileUploader = function FileUploader(props) {
|
|
|
69
70
|
var _useFileUploader = useFileUploader({
|
|
70
71
|
id: id,
|
|
71
72
|
initialFiles: initialFiles,
|
|
73
|
+
value: value,
|
|
74
|
+
onChange: onChange,
|
|
72
75
|
accept: accept,
|
|
73
76
|
disabled: disabled,
|
|
74
77
|
maxFiles: maxFiles,
|
|
@@ -82,11 +85,6 @@ var FileUploader = function FileUploader(props) {
|
|
|
82
85
|
getInputProps = _useFileUploader.getInputProps,
|
|
83
86
|
getButtonProps = _useFileUploader.getButtonProps,
|
|
84
87
|
_removeFile = _useFileUploader.removeFile;
|
|
85
|
-
useEffect(function () {
|
|
86
|
-
onChange(stateFiles.map(function (f) {
|
|
87
|
-
return f.file;
|
|
88
|
-
}));
|
|
89
|
-
}, [stateFiles]);
|
|
90
88
|
var hasLabel = label !== undefined;
|
|
91
89
|
var hasTip = tip !== undefined;
|
|
92
90
|
var hasRootErrors = rootErrors.length > 0;
|
|
@@ -3,8 +3,12 @@ import { FileUploaderFile } from './fileUploaderReducer';
|
|
|
3
3
|
import { Accept, FileList } from './types';
|
|
4
4
|
export type FileUploaderHookProps = {
|
|
5
5
|
id: string | undefined;
|
|
6
|
-
/**Dersom komponenten styres
|
|
6
|
+
/**Dersom komponenten skal styres internt. Utgangspunktet for filene som har blitt lastet opp. */
|
|
7
7
|
initialFiles: FileList | undefined;
|
|
8
|
+
/**Dersom komponenten styres utenfra. Filene som har blitt lastet opp. */
|
|
9
|
+
value: FileList | undefined;
|
|
10
|
+
/**Callback for når fil-listen endres. */
|
|
11
|
+
onChange: (newFiles: FileList) => void;
|
|
8
12
|
/**Hvilke filendelser eller mime-typer som filopplasteren skal akseptere. */
|
|
9
13
|
accept: Accept[] | undefined;
|
|
10
14
|
/**Om filopplasteren er avslått eller ikke */
|
|
@@ -3,7 +3,7 @@ import { __awaiter } from 'tslib';
|
|
|
3
3
|
import { useRef, useMemo, useReducer, useEffect, useCallback } from 'react';
|
|
4
4
|
import { fileUploaderReducer } from './fileUploaderReducer.js';
|
|
5
5
|
import { fromEvent } from 'file-selector';
|
|
6
|
-
import {
|
|
6
|
+
import { isFileAccepted, getInvalidFileTypeErrorMessage, preventDefaults, isEventWithFiles, getTooManyFilesErrorMessage } from './utils.js';
|
|
7
7
|
|
|
8
8
|
var calcRootErrors = function calcRootErrors(files, maxFiles, errorMessage) {
|
|
9
9
|
var errors = [];
|
|
@@ -17,6 +17,8 @@ var calcRootErrors = function calcRootErrors(files, maxFiles, errorMessage) {
|
|
|
17
17
|
};
|
|
18
18
|
var useFileUploader = function useFileUploader(props) {
|
|
19
19
|
var initialFiles = props.initialFiles,
|
|
20
|
+
value = props.value,
|
|
21
|
+
onChange = props.onChange,
|
|
20
22
|
accept = props.accept,
|
|
21
23
|
maxFiles = props.maxFiles,
|
|
22
24
|
disabled = props.disabled,
|
|
@@ -24,6 +26,7 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
24
26
|
var rootRef = useRef(null);
|
|
25
27
|
var inputRef = useRef(null);
|
|
26
28
|
var buttonRef = useRef(null);
|
|
29
|
+
var isControlled = !!value;
|
|
27
30
|
var initialFileUploaderFiles = useMemo(function () {
|
|
28
31
|
return (initialFiles !== null && initialFiles !== void 0 ? initialFiles : []).map(function (f) {
|
|
29
32
|
return {
|
|
@@ -43,6 +46,21 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
43
46
|
state = _useReducer2[0],
|
|
44
47
|
dispatch = _useReducer2[1];
|
|
45
48
|
var stateFiles = state.files;
|
|
49
|
+
useEffect(function () {
|
|
50
|
+
if (isControlled) {
|
|
51
|
+
var files = value.map(function (file) {
|
|
52
|
+
var accepted = isFileAccepted(file, accept);
|
|
53
|
+
return {
|
|
54
|
+
file: file,
|
|
55
|
+
errors: accepted ? [] : [getInvalidFileTypeErrorMessage()]
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
dispatch({
|
|
59
|
+
type: 'onSetFiles',
|
|
60
|
+
payload: files
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}, [value, isControlled, accept, dispatch]);
|
|
46
64
|
useEffect(function () {
|
|
47
65
|
dispatch({
|
|
48
66
|
type: 'setRootErrors',
|
|
@@ -115,7 +133,7 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
115
133
|
case 0:
|
|
116
134
|
evt.preventDefault();
|
|
117
135
|
if (!isEventWithFiles(evt)) {
|
|
118
|
-
_context2.next =
|
|
136
|
+
_context2.next = 9;
|
|
119
137
|
break;
|
|
120
138
|
}
|
|
121
139
|
existingFileNames = stateFiles.map(function (f) {
|
|
@@ -134,17 +152,22 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
134
152
|
errors: accepted ? [] : [getInvalidFileTypeErrorMessage()]
|
|
135
153
|
};
|
|
136
154
|
}).concat(stateFiles);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
155
|
+
onChange(newFiles.map(function (f) {
|
|
156
|
+
return f.file;
|
|
157
|
+
}));
|
|
158
|
+
if (!isControlled) {
|
|
159
|
+
dispatch({
|
|
160
|
+
type: 'onSetFiles',
|
|
161
|
+
payload: newFiles
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
case 9:
|
|
142
165
|
case "end":
|
|
143
166
|
return _context2.stop();
|
|
144
167
|
}
|
|
145
168
|
}, _callee2);
|
|
146
169
|
}));
|
|
147
|
-
}, [stateFiles,
|
|
170
|
+
}, [stateFiles, isControlled, accept, errorMessage, maxFiles, onChange, dispatch]);
|
|
148
171
|
var openFileDialog = useCallback(function () {
|
|
149
172
|
if (inputRef.current) {
|
|
150
173
|
inputRef.current.value = '';
|
|
@@ -154,11 +177,16 @@ var useFileUploader = function useFileUploader(props) {
|
|
|
154
177
|
var removeFile = useCallback(function (file) {
|
|
155
178
|
var newFiles = _toConsumableArray(stateFiles);
|
|
156
179
|
newFiles.splice(stateFiles.indexOf(file), 1);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
180
|
+
onChange(newFiles.map(function (f) {
|
|
181
|
+
return f.file;
|
|
182
|
+
}));
|
|
183
|
+
if (!isControlled) {
|
|
184
|
+
dispatch({
|
|
185
|
+
type: 'onRemoveFile',
|
|
186
|
+
payload: newFiles
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}, [stateFiles, isControlled, maxFiles, errorMessage, onChange, dispatch]);
|
|
162
190
|
var getRootProps = useCallback(function () {
|
|
163
191
|
return {
|
|
164
192
|
onBlur: onRootBlur,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@norges-domstoler/dds-components",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.3.0",
|
|
4
4
|
"description": "React components used in Elsa - domstolenes designsystem",
|
|
5
5
|
"author": "Elsa team",
|
|
6
6
|
"license": "MIT",
|
|
@@ -71,13 +71,13 @@
|
|
|
71
71
|
"@types/react": "^18.0.21",
|
|
72
72
|
"@types/react-dom": "^18.0.11",
|
|
73
73
|
"@types/styled-components": "^5.1.26",
|
|
74
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
74
|
+
"@typescript-eslint/eslint-plugin": "^5.54.1",
|
|
75
75
|
"@typescript-eslint/parser": "^5.54.0",
|
|
76
76
|
"babel-loader": "^9.1.2",
|
|
77
77
|
"babel-plugin-styled-components": "^2.0.7",
|
|
78
78
|
"concurrently": "^7.4.0",
|
|
79
79
|
"eslint": "^8.24.0",
|
|
80
|
-
"eslint-config-prettier": "^8.
|
|
80
|
+
"eslint-config-prettier": "^8.7.0",
|
|
81
81
|
"eslint-plugin-prettier": "^4.2.1",
|
|
82
82
|
"eslint-plugin-react": "^7.32.2",
|
|
83
83
|
"eslint-plugin-storybook": "^0.6.4",
|