@dnb/eufemia 10.70.1 → 10.71.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/CHANGELOG.md +18 -0
- package/cjs/components/date-picker/DatePickerContext.d.ts +0 -1
- package/cjs/components/date-picker/DatePickerContext.js.map +1 -1
- package/cjs/components/date-picker/DatePickerInput.js +7 -59
- package/cjs/components/date-picker/DatePickerInput.js.map +1 -1
- package/cjs/components/date-picker/DatePickerProvider.js +0 -2
- package/cjs/components/date-picker/DatePickerProvider.js.map +1 -1
- package/cjs/components/date-picker/hooks/useDates.d.ts +0 -2
- package/cjs/components/date-picker/hooks/useDates.js +5 -5
- package/cjs/components/date-picker/hooks/useDates.js.map +1 -1
- package/cjs/components/input-masked/InputMaskedHooks.js +11 -7
- package/cjs/components/input-masked/InputMaskedHooks.js.map +1 -1
- package/cjs/components/input-masked/InputMaskedUtils.d.ts +1 -1
- package/cjs/components/input-masked/InputMaskedUtils.js +2 -1
- package/cjs/components/input-masked/InputMaskedUtils.js.map +1 -1
- package/cjs/components/modal/ModalDocs.d.ts +2 -0
- package/cjs/components/modal/ModalDocs.js +11 -1
- package/cjs/components/modal/ModalDocs.js.map +1 -1
- package/cjs/components/upload/Upload.js +6 -3
- package/cjs/components/upload/Upload.js.map +1 -1
- package/cjs/components/upload/UploadDocs.d.ts +1 -0
- package/cjs/components/upload/UploadDocs.js +43 -1
- package/cjs/components/upload/UploadDocs.js.map +1 -1
- package/cjs/components/upload/UploadFileListCell.js +32 -12
- package/cjs/components/upload/UploadFileListCell.js.map +1 -1
- package/cjs/components/upload/types.d.ts +7 -0
- package/cjs/components/upload/types.js.map +1 -1
- package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
- package/cjs/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
- package/cjs/extensions/forms/Field/Number/Number.js +3 -6
- package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +33 -25
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +8 -3
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
- package/cjs/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
- package/cjs/extensions/forms/Field/Upload/Upload.d.ts +1 -1
- package/cjs/extensions/forms/Field/Upload/Upload.js +3 -1
- package/cjs/extensions/forms/Field/Upload/Upload.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js +11 -4
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
- package/cjs/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
- package/cjs/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
- package/cjs/extensions/forms/hooks/useFieldProps.js +50 -17
- package/cjs/extensions/forms/hooks/useFieldProps.js.map +1 -1
- package/cjs/extensions/forms/types.d.ts +8 -5
- package/cjs/extensions/forms/types.js.map +1 -1
- package/cjs/extensions/forms/utils/FormError.d.ts +20 -16
- package/cjs/extensions/forms/utils/FormError.js.map +1 -1
- package/cjs/shared/Eufemia.d.ts +1 -1
- package/cjs/shared/Eufemia.js +2 -2
- package/cjs/shared/Eufemia.js.map +1 -1
- package/cjs/style/core/scopes.scss +1 -1
- package/cjs/style/dnb-ui-basis.css +1 -1
- package/cjs/style/dnb-ui-basis.min.css +1 -1
- package/cjs/style/dnb-ui-body.css +1 -1
- package/cjs/style/dnb-ui-body.min.css +1 -1
- package/cjs/style/dnb-ui-core.css +1 -1
- package/cjs/style/dnb-ui-core.min.css +1 -1
- package/components/date-picker/DatePickerContext.d.ts +0 -1
- package/components/date-picker/DatePickerContext.js.map +1 -1
- package/components/date-picker/DatePickerInput.js +7 -59
- package/components/date-picker/DatePickerInput.js.map +1 -1
- package/components/date-picker/DatePickerProvider.js +0 -2
- package/components/date-picker/DatePickerProvider.js.map +1 -1
- package/components/date-picker/hooks/useDates.d.ts +0 -2
- package/components/date-picker/hooks/useDates.js +3 -5
- package/components/date-picker/hooks/useDates.js.map +1 -1
- package/components/input-masked/InputMaskedHooks.js +11 -7
- package/components/input-masked/InputMaskedHooks.js.map +1 -1
- package/components/input-masked/InputMaskedUtils.d.ts +1 -1
- package/components/input-masked/InputMaskedUtils.js +2 -1
- package/components/input-masked/InputMaskedUtils.js.map +1 -1
- package/components/modal/ModalDocs.d.ts +2 -0
- package/components/modal/ModalDocs.js +10 -0
- package/components/modal/ModalDocs.js.map +1 -1
- package/components/upload/Upload.js +6 -3
- package/components/upload/Upload.js.map +1 -1
- package/components/upload/UploadDocs.d.ts +1 -0
- package/components/upload/UploadDocs.js +42 -0
- package/components/upload/UploadDocs.js.map +1 -1
- package/components/upload/UploadFileListCell.js +32 -12
- package/components/upload/UploadFileListCell.js.map +1 -1
- package/components/upload/types.d.ts +7 -0
- package/components/upload/types.js.map +1 -1
- package/es/components/date-picker/DatePickerContext.d.ts +0 -1
- package/es/components/date-picker/DatePickerContext.js.map +1 -1
- package/es/components/date-picker/DatePickerInput.js +2 -53
- package/es/components/date-picker/DatePickerInput.js.map +1 -1
- package/es/components/date-picker/DatePickerProvider.js +0 -2
- package/es/components/date-picker/DatePickerProvider.js.map +1 -1
- package/es/components/date-picker/hooks/useDates.d.ts +0 -2
- package/es/components/date-picker/hooks/useDates.js +3 -5
- package/es/components/date-picker/hooks/useDates.js.map +1 -1
- package/es/components/input-masked/InputMaskedHooks.js +11 -7
- package/es/components/input-masked/InputMaskedHooks.js.map +1 -1
- package/es/components/input-masked/InputMaskedUtils.d.ts +1 -1
- package/es/components/input-masked/InputMaskedUtils.js +2 -1
- package/es/components/input-masked/InputMaskedUtils.js.map +1 -1
- package/es/components/modal/ModalDocs.d.ts +2 -0
- package/es/components/modal/ModalDocs.js +6 -0
- package/es/components/modal/ModalDocs.js.map +1 -1
- package/es/components/upload/Upload.js +6 -3
- package/es/components/upload/Upload.js.map +1 -1
- package/es/components/upload/UploadDocs.d.ts +1 -0
- package/es/components/upload/UploadDocs.js +42 -0
- package/es/components/upload/UploadDocs.js.map +1 -1
- package/es/components/upload/UploadFileListCell.js +32 -12
- package/es/components/upload/UploadFileListCell.js.map +1 -1
- package/es/components/upload/types.d.ts +7 -0
- package/es/components/upload/types.js.map +1 -1
- package/es/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
- package/es/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
- package/es/extensions/forms/Field/Number/Number.js +3 -6
- package/es/extensions/forms/Field/Number/Number.js.map +1 -1
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +24 -16
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +7 -2
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
- package/es/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
- package/es/extensions/forms/Field/Upload/Upload.d.ts +1 -1
- package/es/extensions/forms/Field/Upload/Upload.js +3 -1
- package/es/extensions/forms/Field/Upload/Upload.js.map +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlock.js +11 -4
- package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
- package/es/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
- package/es/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
- package/es/extensions/forms/hooks/useFieldProps.js +51 -18
- package/es/extensions/forms/hooks/useFieldProps.js.map +1 -1
- package/es/extensions/forms/types.d.ts +8 -5
- package/es/extensions/forms/types.js.map +1 -1
- package/es/extensions/forms/utils/FormError.d.ts +20 -16
- package/es/extensions/forms/utils/FormError.js +1 -0
- package/es/extensions/forms/utils/FormError.js.map +1 -1
- package/es/shared/Eufemia.d.ts +1 -1
- package/es/shared/Eufemia.js +2 -2
- package/es/shared/Eufemia.js.map +1 -1
- package/es/style/core/scopes.scss +1 -1
- package/es/style/dnb-ui-basis.css +1 -1
- package/es/style/dnb-ui-basis.min.css +1 -1
- package/es/style/dnb-ui-body.css +1 -1
- package/es/style/dnb-ui-body.min.css +1 -1
- package/es/style/dnb-ui-core.css +1 -1
- package/es/style/dnb-ui-core.min.css +1 -1
- package/esm/dnb-ui-basis.min.mjs +1 -1
- package/esm/dnb-ui-components.min.mjs +1 -1
- package/esm/dnb-ui-elements.min.mjs +1 -1
- package/esm/dnb-ui-extensions.min.mjs +1 -1
- package/esm/dnb-ui-lib.min.mjs +1 -1
- package/extensions/forms/DataContext/Provider/ProviderDocs.js +1 -1
- package/extensions/forms/DataContext/Provider/ProviderDocs.js.map +1 -1
- package/extensions/forms/Field/Number/Number.js +3 -6
- package/extensions/forms/Field/Number/Number.js.map +1 -1
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.d.ts +6 -4
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +33 -25
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.d.ts +2 -2
- package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js +7 -2
- package/extensions/forms/Field/PhoneNumber/PhoneNumberDocs.js.map +1 -1
- package/extensions/forms/Field/Provider/useFieldProvider.d.ts +3 -3
- package/extensions/forms/Field/Upload/Upload.d.ts +1 -1
- package/extensions/forms/Field/Upload/Upload.js +3 -1
- package/extensions/forms/Field/Upload/Upload.js.map +1 -1
- package/extensions/forms/FieldBlock/FieldBlock.js +11 -4
- package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -1
- package/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
- package/extensions/forms/hooks/DataValueWritePropsDocs.js +1 -1
- package/extensions/forms/hooks/DataValueWritePropsDocs.js.map +1 -1
- package/extensions/forms/hooks/useFieldProps.js +51 -18
- package/extensions/forms/hooks/useFieldProps.js.map +1 -1
- package/extensions/forms/types.d.ts +8 -5
- package/extensions/forms/types.js.map +1 -1
- package/extensions/forms/utils/FormError.d.ts +20 -16
- package/extensions/forms/utils/FormError.js.map +1 -1
- package/package.json +1 -1
- package/shared/Eufemia.d.ts +1 -1
- package/shared/Eufemia.js +2 -2
- package/shared/Eufemia.js.map +1 -1
- package/style/core/scopes.scss +1 -1
- package/style/dnb-ui-basis.css +1 -1
- package/style/dnb-ui-basis.min.css +1 -1
- package/style/dnb-ui-body.css +1 -1
- package/style/dnb-ui-body.min.css +1 -1
- package/style/dnb-ui-core.css +1 -1
- package/style/dnb-ui-core.min.css +1 -1
- package/umd/dnb-ui-basis.min.js +1 -1
- package/umd/dnb-ui-components.min.js +1 -1
- package/umd/dnb-ui-elements.min.js +1 -1
- package/umd/dnb-ui-extensions.min.js +1 -1
- package/umd/dnb-ui-lib.min.js +1 -1
|
@@ -11,6 +11,7 @@ import Button from '../button/Button';
|
|
|
11
11
|
import Icon from '../../components/Icon';
|
|
12
12
|
import FormStatus from '../../components/FormStatus';
|
|
13
13
|
import ProgressIndicator from '../../components/progress-indicator';
|
|
14
|
+
import P from '../../elements/P';
|
|
14
15
|
import { trash as TrashIcon, exclamation_medium as ExclamationIcon, file_png_medium as png, file_jpg_medium as jpg, file_word_medium as doc, file_pdf_medium as pdf, file_xls_medium as xls, file_ppt_medium as ppt, file_csv_medium as csv, file_txt_medium as txt, file_xml_medium as xml, file_medium as file } from '../../icons';
|
|
15
16
|
import { getPreviousSibling } from '../../shared/component-helper';
|
|
16
17
|
import useUpload, { isFileEqual } from './useUpload';
|
|
@@ -31,7 +32,7 @@ export const fileExtensionImages = {
|
|
|
31
32
|
file
|
|
32
33
|
};
|
|
33
34
|
const UploadFileListCell = _ref => {
|
|
34
|
-
var _div, _FormStatus;
|
|
35
|
+
var _div, _div2, _P, _FormStatus;
|
|
35
36
|
let {
|
|
36
37
|
id,
|
|
37
38
|
uploadFile,
|
|
@@ -45,7 +46,9 @@ const UploadFileListCell = _ref => {
|
|
|
45
46
|
const {
|
|
46
47
|
file,
|
|
47
48
|
errorMessage,
|
|
48
|
-
isLoading
|
|
49
|
+
isLoading,
|
|
50
|
+
description,
|
|
51
|
+
removeDeleteButton
|
|
49
52
|
} = uploadFile;
|
|
50
53
|
const hasWarning = errorMessage != null;
|
|
51
54
|
const imageUrl = (file === null || file === void 0 ? void 0 : file.size) > 0 ? URL.createObjectURL(file) : null;
|
|
@@ -73,13 +76,7 @@ const UploadFileListCell = _ref => {
|
|
|
73
76
|
className: "dnb-upload__file-cell__content__left"
|
|
74
77
|
}, getFileIcon(file, {
|
|
75
78
|
isLoading
|
|
76
|
-
}, hasWarning), getTitle()),
|
|
77
|
-
icon: TrashIcon,
|
|
78
|
-
variant: "tertiary",
|
|
79
|
-
onClick: onDeleteHandler,
|
|
80
|
-
icon_position: "left",
|
|
81
|
-
disabled: isLoading
|
|
82
|
-
}, deleteButtonText))), getWarning());
|
|
79
|
+
}, hasWarning), getTitle()), getDeleteButton()), getWarning());
|
|
83
80
|
function getTitle() {
|
|
84
81
|
return isLoading ? _div || (_div = React.createElement("div", {
|
|
85
82
|
className: "dnb-upload__file-cell__text-container dnb-upload__file-cell__text-container--loading"
|
|
@@ -91,14 +88,37 @@ const UploadFileListCell = _ref => {
|
|
|
91
88
|
download: download,
|
|
92
89
|
onClick: onClick,
|
|
93
90
|
bottom: 0
|
|
94
|
-
}));
|
|
91
|
+
}), getDescription());
|
|
92
|
+
}
|
|
93
|
+
function getDeleteButton() {
|
|
94
|
+
if (removeDeleteButton) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return _div2 || (_div2 = React.createElement("div", null, React.createElement(Button, {
|
|
98
|
+
icon: TrashIcon,
|
|
99
|
+
variant: "tertiary",
|
|
100
|
+
onClick: onDeleteHandler,
|
|
101
|
+
icon_position: "left",
|
|
102
|
+
disabled: isLoading
|
|
103
|
+
}, deleteButtonText)));
|
|
104
|
+
}
|
|
105
|
+
function getDescription() {
|
|
106
|
+
if (!description) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return _P || (_P = React.createElement(P, {
|
|
110
|
+
className: "dnb-upload__text"
|
|
111
|
+
}, description));
|
|
95
112
|
}
|
|
96
113
|
function getWarning() {
|
|
97
|
-
|
|
114
|
+
if (!hasWarning) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return _FormStatus || (_FormStatus = React.createElement(FormStatus, {
|
|
98
118
|
top: "small",
|
|
99
119
|
text: errorMessage,
|
|
100
120
|
stretch: true
|
|
101
|
-
}))
|
|
121
|
+
}));
|
|
102
122
|
}
|
|
103
123
|
};
|
|
104
124
|
export default UploadFileListCell;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UploadFileListCell.js","names":["React","useCallback","useRef","classnames","Button","Icon","FormStatus","ProgressIndicator","trash","TrashIcon","exclamation_medium","ExclamationIcon","file_png_medium","png","file_jpg_medium","jpg","file_word_medium","doc","file_pdf_medium","pdf","file_xls_medium","xls","file_ppt_medium","ppt","file_csv_medium","csv","file_txt_medium","txt","file_xml_medium","xml","file_medium","file","getPreviousSibling","useUpload","isFileEqual","getFileTypeFromExtension","UploadFileLink","fileExtensionImages","docx","odt","UploadFileListCell","_ref","_div","_FormStatus","id","uploadFile","onDelete","onClick","loadingText","deleteButtonText","download","allowDuplicates","errorMessage","isLoading","hasWarning","imageUrl","size","URL","createObjectURL","cellRef","exists","useExistsHighlight","isDuplicate","handleDisappearFocus","_getPreviousSibling","cellElement","current","focusElement","querySelector","focus","preventScroll","onDeleteHandler","createElement","className","ref","getFileIcon","getTitle","icon","variant","icon_position","disabled","getWarning","text","name","href","bottom","top","stretch","internalFiles","updateExists","useState","timerRef","clearTimers","clearTimeout","useEffect","some","_ref2","f","setTimeout","loading","_loading$size","_Icon","iconFileType","mimeParts","type","split","Object","prototype","hasOwnProperty","call"],"sources":["../../../../src/components/upload/UploadFileListCell.tsx"],"sourcesContent":["import React, { useCallback, useRef } from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport Button from '../button/Button'\nimport Icon from '../../components/Icon'\nimport FormStatus from '../../components/FormStatus'\nimport ProgressIndicator from '../../components/progress-indicator'\n\n// Icons\nimport {\n trash as TrashIcon,\n exclamation_medium as ExclamationIcon,\n file_png_medium as png,\n file_jpg_medium as jpg,\n file_word_medium as doc,\n file_pdf_medium as pdf,\n file_xls_medium as xls,\n file_ppt_medium as ppt,\n file_csv_medium as csv,\n file_txt_medium as txt,\n file_xml_medium as xml,\n file_medium as file,\n} from '../../icons'\nimport { UploadFile, UploadFileNative } from './types'\n\n// Shared\nimport { getPreviousSibling } from '../../shared/component-helper'\nimport useUpload, { isFileEqual } from './useUpload'\nimport { getFileTypeFromExtension } from './UploadVerify'\nimport UploadFileLink from './UploadFileListLink'\nimport { ProgressIndicatorAllProps } from '../progress-indicator/types'\n\n// Will be deprecated - and then default to only showing the file icon,\n// and not file icon per file extension type\nexport const fileExtensionImages = {\n png,\n jpg,\n pdf,\n doc,\n docx: doc,\n odt: doc,\n xls,\n ppt,\n csv,\n txt,\n xml,\n file,\n}\n\nexport type UploadFileListCellProps = {\n id: string\n\n /**\n * Uploaded file\n */\n uploadFile: UploadFile | UploadFileNative\n\n /**\n * Calls onDelete when clicking the delete button\n */\n onDelete: () => void\n\n /**\n * Calls onClick when clicking the file name\n */\n onClick?: () => void\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Text\n */\n loadingText: React.ReactNode\n deleteButtonText: React.ReactNode\n}\n\nconst UploadFileListCell = ({\n id,\n uploadFile,\n onDelete,\n onClick,\n loadingText,\n deleteButtonText,\n download,\n allowDuplicates,\n}: UploadFileListCellProps) => {\n const { file, errorMessage, isLoading } = uploadFile\n const hasWarning = errorMessage != null\n\n const imageUrl = file?.size > 0 ? URL.createObjectURL(file) : null\n const cellRef = useRef<HTMLLIElement>()\n const exists = useExistsHighlight(id, file)\n const isDuplicate = !allowDuplicates && exists\n\n const handleDisappearFocus = useCallback(() => {\n const cellElement = cellRef.current\n const focusElement = getPreviousSibling(\n '.dnb-upload',\n cellElement\n )?.querySelector('.dnb-upload__file-input-button') as HTMLButtonElement\n focusElement?.focus({ preventScroll: true })\n }, [cellRef])\n\n const onDeleteHandler = useCallback(() => {\n handleDisappearFocus()\n\n onDelete()\n }, [handleDisappearFocus, onDelete])\n\n return (\n <li\n className={classnames(\n 'dnb-upload__file-cell',\n hasWarning && 'dnb-upload__file-cell--warning',\n isDuplicate && 'dnb-upload__file-cell--highlight'\n )}\n ref={cellRef}\n >\n <div className=\"dnb-upload__file-cell__content\">\n <div className=\"dnb-upload__file-cell__content__left\">\n {getFileIcon(file, { isLoading }, hasWarning)}\n {getTitle()}\n </div>\n <div>\n <Button\n icon={TrashIcon}\n variant=\"tertiary\"\n onClick={onDeleteHandler}\n icon_position=\"left\"\n disabled={isLoading}\n >\n {deleteButtonText}\n </Button>\n </div>\n </div>\n\n {getWarning()}\n </li>\n )\n\n function getTitle() {\n return isLoading ? (\n <div\n className={classnames(\n 'dnb-upload__file-cell__text-container',\n 'dnb-upload__file-cell__text-container--loading'\n )}\n >\n {loadingText}\n </div>\n ) : (\n <div className=\"dnb-upload__file-cell__text-container\">\n <UploadFileLink\n text={file.name}\n href={imageUrl}\n download={download}\n onClick={onClick}\n bottom={0}\n />\n </div>\n )\n }\n\n function getWarning() {\n return hasWarning ? (\n <FormStatus top=\"small\" text={errorMessage} stretch />\n ) : null\n }\n}\n\nexport default UploadFileListCell\n\nfunction useExistsHighlight(id: string, file: File) {\n const { internalFiles } = useUpload(id)\n const [exists, updateExists] = React.useState(false)\n const timerRef = React.useRef<NodeJS.Timer>()\n\n const clearTimers = () => {\n clearTimeout(timerRef.current)\n }\n\n React.useEffect(() => {\n const exists = internalFiles.some(({ exists, file: f }) => {\n return exists && isFileEqual(file, f)\n })\n\n if (exists) {\n updateExists(true)\n clearTimers()\n timerRef.current = setTimeout(() => updateExists(false), 1500) // transition-duration in CSS\n }\n\n return clearTimers\n }, [file, internalFiles])\n\n return exists\n}\n\nexport function getFileIcon(\n file: File,\n loading?: {\n isLoading: UploadFile['isLoading']\n size?: ProgressIndicatorAllProps['size']\n },\n hasWarning?: boolean\n) {\n if (loading?.isLoading) {\n return <ProgressIndicator size={loading?.size ?? 'default'} />\n }\n\n if (hasWarning) return <Icon icon={ExclamationIcon} />\n\n let iconFileType = getFileTypeFromExtension(file)\n\n if (!iconFileType) {\n const mimeParts = file.type.split('/')\n iconFileType =\n fileExtensionImages[mimeParts[0]] ||\n fileExtensionImages[mimeParts[1]]\n }\n\n if (\n !Object.prototype.hasOwnProperty.call(\n fileExtensionImages,\n iconFileType\n )\n ) {\n iconFileType = 'file'\n }\n\n return <Icon icon={fileExtensionImages[iconFileType]} />\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"UploadFileListCell.js","names":["React","useCallback","useRef","classnames","Button","Icon","FormStatus","ProgressIndicator","P","trash","TrashIcon","exclamation_medium","ExclamationIcon","file_png_medium","png","file_jpg_medium","jpg","file_word_medium","doc","file_pdf_medium","pdf","file_xls_medium","xls","file_ppt_medium","ppt","file_csv_medium","csv","file_txt_medium","txt","file_xml_medium","xml","file_medium","file","getPreviousSibling","useUpload","isFileEqual","getFileTypeFromExtension","UploadFileLink","fileExtensionImages","docx","odt","UploadFileListCell","_ref","_div","_div2","_P","_FormStatus","id","uploadFile","onDelete","onClick","loadingText","deleteButtonText","download","allowDuplicates","errorMessage","isLoading","description","removeDeleteButton","hasWarning","imageUrl","size","URL","createObjectURL","cellRef","exists","useExistsHighlight","isDuplicate","handleDisappearFocus","_getPreviousSibling","cellElement","current","focusElement","querySelector","focus","preventScroll","onDeleteHandler","createElement","className","ref","getFileIcon","getTitle","getDeleteButton","getWarning","text","name","href","bottom","getDescription","icon","variant","icon_position","disabled","top","stretch","internalFiles","updateExists","useState","timerRef","clearTimers","clearTimeout","useEffect","some","_ref2","f","setTimeout","loading","_loading$size","_Icon","iconFileType","mimeParts","type","split","Object","prototype","hasOwnProperty","call"],"sources":["../../../../src/components/upload/UploadFileListCell.tsx"],"sourcesContent":["import React, { useCallback, useRef } from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport Button from '../button/Button'\nimport Icon from '../../components/Icon'\nimport FormStatus from '../../components/FormStatus'\nimport ProgressIndicator from '../../components/progress-indicator'\n\n// Elements\nimport P from '../../elements/P'\n\n// Icons\nimport {\n trash as TrashIcon,\n exclamation_medium as ExclamationIcon,\n file_png_medium as png,\n file_jpg_medium as jpg,\n file_word_medium as doc,\n file_pdf_medium as pdf,\n file_xls_medium as xls,\n file_ppt_medium as ppt,\n file_csv_medium as csv,\n file_txt_medium as txt,\n file_xml_medium as xml,\n file_medium as file,\n} from '../../icons'\nimport { UploadFile, UploadFileNative } from './types'\n\n// Shared\nimport { getPreviousSibling } from '../../shared/component-helper'\nimport useUpload, { isFileEqual } from './useUpload'\nimport { getFileTypeFromExtension } from './UploadVerify'\nimport UploadFileLink from './UploadFileListLink'\nimport { ProgressIndicatorAllProps } from '../progress-indicator/types'\n\n// Will be deprecated - and then default to only showing the file icon,\n// and not file icon per file extension type\nexport const fileExtensionImages = {\n png,\n jpg,\n pdf,\n doc,\n docx: doc,\n odt: doc,\n xls,\n ppt,\n csv,\n txt,\n xml,\n file,\n}\n\nexport type UploadFileListCellProps = {\n id: string\n\n /**\n * Uploaded file\n */\n uploadFile: UploadFile | UploadFileNative\n\n /**\n * Calls onDelete when clicking the delete button\n */\n onDelete: () => void\n\n /**\n * Calls onClick when clicking the file name\n */\n onClick?: () => void\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Text\n */\n loadingText: React.ReactNode\n deleteButtonText: React.ReactNode\n}\n\nconst UploadFileListCell = ({\n id,\n uploadFile,\n onDelete,\n onClick,\n loadingText,\n deleteButtonText,\n download,\n allowDuplicates,\n}: UploadFileListCellProps) => {\n const {\n file,\n errorMessage,\n isLoading,\n description,\n removeDeleteButton,\n } = uploadFile\n const hasWarning = errorMessage != null\n\n const imageUrl = file?.size > 0 ? URL.createObjectURL(file) : null\n const cellRef = useRef<HTMLLIElement>()\n const exists = useExistsHighlight(id, file)\n const isDuplicate = !allowDuplicates && exists\n\n const handleDisappearFocus = useCallback(() => {\n const cellElement = cellRef.current\n const focusElement = getPreviousSibling(\n '.dnb-upload',\n cellElement\n )?.querySelector('.dnb-upload__file-input-button') as HTMLButtonElement\n focusElement?.focus({ preventScroll: true })\n }, [cellRef])\n\n const onDeleteHandler = useCallback(() => {\n handleDisappearFocus()\n\n onDelete()\n }, [handleDisappearFocus, onDelete])\n\n return (\n <li\n className={classnames(\n 'dnb-upload__file-cell',\n hasWarning && 'dnb-upload__file-cell--warning',\n isDuplicate && 'dnb-upload__file-cell--highlight'\n )}\n ref={cellRef}\n >\n <div className=\"dnb-upload__file-cell__content\">\n <div className=\"dnb-upload__file-cell__content__left\">\n {getFileIcon(file, { isLoading }, hasWarning)}\n {getTitle()}\n </div>\n {getDeleteButton()}\n </div>\n {getWarning()}\n </li>\n )\n\n function getTitle() {\n return isLoading ? (\n <div\n className={classnames(\n 'dnb-upload__file-cell__text-container',\n 'dnb-upload__file-cell__text-container--loading'\n )}\n >\n {loadingText}\n </div>\n ) : (\n <div className=\"dnb-upload__file-cell__text-container\">\n <UploadFileLink\n text={file.name}\n href={imageUrl}\n download={download}\n onClick={onClick}\n bottom={0}\n />\n {getDescription()}\n </div>\n )\n }\n\n function getDeleteButton() {\n if (removeDeleteButton) {\n return null\n }\n return (\n <div>\n <Button\n icon={TrashIcon}\n variant=\"tertiary\"\n onClick={onDeleteHandler}\n icon_position=\"left\"\n disabled={isLoading}\n >\n {deleteButtonText}\n </Button>\n </div>\n )\n }\n\n function getDescription() {\n if (!description) {\n return null\n }\n return <P className=\"dnb-upload__text\">{description}</P>\n }\n\n function getWarning() {\n if (!hasWarning) {\n return null\n }\n return <FormStatus top=\"small\" text={errorMessage} stretch />\n }\n}\n\nexport default UploadFileListCell\n\nfunction useExistsHighlight(id: string, file: File) {\n const { internalFiles } = useUpload(id)\n const [exists, updateExists] = React.useState(false)\n const timerRef = React.useRef<NodeJS.Timer>()\n\n const clearTimers = () => {\n clearTimeout(timerRef.current)\n }\n\n React.useEffect(() => {\n const exists = internalFiles.some(({ exists, file: f }) => {\n return exists && isFileEqual(file, f)\n })\n\n if (exists) {\n updateExists(true)\n clearTimers()\n timerRef.current = setTimeout(() => updateExists(false), 1500) // transition-duration in CSS\n }\n\n return clearTimers\n }, [file, internalFiles])\n\n return exists\n}\n\nexport function getFileIcon(\n file: File,\n loading?: {\n isLoading: UploadFile['isLoading']\n size?: ProgressIndicatorAllProps['size']\n },\n hasWarning?: boolean\n) {\n if (loading?.isLoading) {\n return <ProgressIndicator size={loading?.size ?? 'default'} />\n }\n\n if (hasWarning) return <Icon icon={ExclamationIcon} />\n\n let iconFileType = getFileTypeFromExtension(file)\n\n if (!iconFileType) {\n const mimeParts = file.type.split('/')\n iconFileType =\n fileExtensionImages[mimeParts[0]] ||\n fileExtensionImages[mimeParts[1]]\n }\n\n if (\n !Object.prototype.hasOwnProperty.call(\n fileExtensionImages,\n iconFileType\n )\n ) {\n iconFileType = 'file'\n }\n\n return <Icon icon={fileExtensionImages[iconFileType]} />\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -60,6 +60,11 @@ export type UploadProps = {
|
|
|
60
60
|
* Default: false
|
|
61
61
|
*/
|
|
62
62
|
allowDuplicates?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Disables file drag and drop, by removing the drop zone.
|
|
65
|
+
* Default: false
|
|
66
|
+
*/
|
|
67
|
+
disableDragAndDrop?: boolean;
|
|
63
68
|
/**
|
|
64
69
|
* Custom text properties
|
|
65
70
|
*/
|
|
@@ -90,5 +95,7 @@ export type UploadFile = {
|
|
|
90
95
|
exists: boolean;
|
|
91
96
|
isLoading?: boolean;
|
|
92
97
|
errorMessage?: React.ReactNode;
|
|
98
|
+
description?: React.ReactNode;
|
|
99
|
+
removeDeleteButton?: boolean;
|
|
93
100
|
};
|
|
94
101
|
export type UploadFileNative = Omit<UploadFile, 'id' | 'exists'> & Partial<Pick<UploadFile, 'id' | 'exists'>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/components/upload/types.ts"],"sourcesContent":["import React from 'react'\nimport type { SkeletonShow } from '../skeleton/Skeleton'\nimport type { LocaleProps, SpacingProps } from '../../shared/types'\nimport type { SharedStateId } from '../../shared/helpers/useSharedState'\n\nexport type UploadAcceptedFileTypes = string[]\n\nexport type UploadAcceptedFileTypesWithFileMaxSize =\n UploadAcceptedFileTypeObject[]\n\nexport type UploadAcceptedFileTypeObject = {\n fileType: string\n fileMaxSize?: number | false\n}\n\nexport type UploadProps = {\n /**\n * unique id used with the useUpload hook to manage the files\n */\n id?: SharedStateId\n\n /**\n * list of accepted file types.\n */\n acceptedFileTypes:\n | UploadAcceptedFileTypes\n | UploadAcceptedFileTypesWithFileMaxSize\n\n /**\n * Skeleton should be applied when loading content\n * Default: null\n */\n skeleton?: SkeletonShow\n\n /**\n * Defines the amount of files the user can select and upload\n * Default: 100\n */\n filesAmountLimit?: number\n\n /**\n * Defines the max file size of each file in MB. Use either `0` or `false` to disable.\n * Default: 5 MB\n */\n fileMaxSize?: number | false\n\n /**\n * will be called on `files` changes made by the user. Access the files with `{ files }`.\n */\n onChange?: ({ files }: { files: Array<UploadFile> }) => void\n\n /**\n * will be called once a file gets deleted by the user. Access the deleted file with `{ fileItem }`.\n */\n onFileDelete?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Will be called once a file gets clicked on by the user. Access the clicked file with `{ fileItem }`.\n */\n onFileClick?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Custom text properties\n */\n title?: React.ReactNode\n text?: React.ReactNode\n fileTypeTableCaption?: React.ReactNode\n fileTypeDescription?: React.ReactNode\n fileSizeDescription?: React.ReactNode\n fileAmountDescription?: React.ReactNode\n fileSizeContent?: React.ReactNode\n buttonText?: React.ReactNode\n errorLargeFile?: React.ReactNode\n errorUnsupportedFile?: React.ReactNode\n errorAmountLimit?: React.ReactNode\n loadingText?: React.ReactNode\n deleteButton?: React.ReactNode\n fileListAriaLabel?: string\n children?: React.ReactNode\n}\n\nexport type UploadAllProps = UploadProps &\n SpacingProps &\n LocaleProps &\n Omit<React.HTMLProps<HTMLElement>, 'onChange' | 'title'>\n\nexport type UploadContextProps = {\n id?: string\n onInputUpload: (files: Array<UploadFileNative>) => void\n} & Partial<UploadAllProps>\n\nexport type UploadFile = {\n file: File\n id: string\n exists: boolean\n isLoading?: boolean\n errorMessage?: React.ReactNode\n}\n\nexport type UploadFileNative = Omit<UploadFile, 'id' | 'exists'> &\n Partial<Pick<UploadFile, 'id' | 'exists'>>\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/components/upload/types.ts"],"sourcesContent":["import React from 'react'\nimport type { SkeletonShow } from '../skeleton/Skeleton'\nimport type { LocaleProps, SpacingProps } from '../../shared/types'\nimport type { SharedStateId } from '../../shared/helpers/useSharedState'\n\nexport type UploadAcceptedFileTypes = string[]\n\nexport type UploadAcceptedFileTypesWithFileMaxSize =\n UploadAcceptedFileTypeObject[]\n\nexport type UploadAcceptedFileTypeObject = {\n fileType: string\n fileMaxSize?: number | false\n}\n\nexport type UploadProps = {\n /**\n * unique id used with the useUpload hook to manage the files\n */\n id?: SharedStateId\n\n /**\n * list of accepted file types.\n */\n acceptedFileTypes:\n | UploadAcceptedFileTypes\n | UploadAcceptedFileTypesWithFileMaxSize\n\n /**\n * Skeleton should be applied when loading content\n * Default: null\n */\n skeleton?: SkeletonShow\n\n /**\n * Defines the amount of files the user can select and upload\n * Default: 100\n */\n filesAmountLimit?: number\n\n /**\n * Defines the max file size of each file in MB. Use either `0` or `false` to disable.\n * Default: 5 MB\n */\n fileMaxSize?: number | false\n\n /**\n * will be called on `files` changes made by the user. Access the files with `{ files }`.\n */\n onChange?: ({ files }: { files: Array<UploadFile> }) => void\n\n /**\n * will be called once a file gets deleted by the user. Access the deleted file with `{ fileItem }`.\n */\n onFileDelete?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Will be called once a file gets clicked on by the user. Access the clicked file with `{ fileItem }`.\n */\n onFileClick?: ({\n fileItem,\n }: {\n fileItem: UploadFile\n }) => void | Promise<void>\n\n /**\n * Causes the browser to treat all listed files as downloadable instead of opening them in a new browser tab or window.\n * Default: false\n */\n download?: boolean\n\n /**\n * Allows uploading of duplicate files.\n * Default: false\n */\n allowDuplicates?: boolean\n\n /**\n * Disables file drag and drop, by removing the drop zone.\n * Default: false\n */\n disableDragAndDrop?: boolean\n\n /**\n * Custom text properties\n */\n title?: React.ReactNode\n text?: React.ReactNode\n fileTypeTableCaption?: React.ReactNode\n fileTypeDescription?: React.ReactNode\n fileSizeDescription?: React.ReactNode\n fileAmountDescription?: React.ReactNode\n fileSizeContent?: React.ReactNode\n buttonText?: React.ReactNode\n errorLargeFile?: React.ReactNode\n errorUnsupportedFile?: React.ReactNode\n errorAmountLimit?: React.ReactNode\n loadingText?: React.ReactNode\n deleteButton?: React.ReactNode\n fileListAriaLabel?: string\n children?: React.ReactNode\n}\n\nexport type UploadAllProps = UploadProps &\n SpacingProps &\n LocaleProps &\n Omit<React.HTMLProps<HTMLElement>, 'onChange' | 'title'>\n\nexport type UploadContextProps = {\n id?: string\n onInputUpload: (files: Array<UploadFileNative>) => void\n} & Partial<UploadAllProps>\n\nexport type UploadFile = {\n file: File\n id: string\n exists: boolean\n isLoading?: boolean\n errorMessage?: React.ReactNode\n description?: React.ReactNode\n removeDeleteButton?: boolean\n}\n\nexport type UploadFileNative = Omit<UploadFile, 'id' | 'exists'> &\n Partial<Pick<UploadFile, 'id' | 'exists'>>\n"],"mappings":"","ignoreList":[]}
|
|
@@ -13,7 +13,6 @@ export type DatePickerContextValues = ContextProps & DatePickerDates & {
|
|
|
13
13
|
props: DatePickerAllProps;
|
|
14
14
|
translation: ContextProps['translation'];
|
|
15
15
|
views: Array<CalendarView>;
|
|
16
|
-
hasHadValidDate: boolean;
|
|
17
16
|
previousDateProps: DatePickerDateProps;
|
|
18
17
|
updateDates: (dates: DatePickerDates, callback?: (dates: DatePickerDates) => void) => void;
|
|
19
18
|
setState?: (state: DatePickerProviderState) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerContext.js","names":["React","DatePickerContext","createContext"],"sources":["../../../../src/components/date-picker/DatePickerContext.ts"],"sourcesContent":["/**\n * Web DatePicker Context\n *\n */\n\nimport React from 'react'\nimport { DatePickerAllProps, DisplayPickerEvent } from './DatePicker'\nimport { ContextProps } from '../../shared/Context'\nimport {\n DatePickerChangeEvent,\n DatePickerProviderState,\n GetReturnObjectParams,\n ReturnObject,\n} from './DatePickerProvider'\nimport { DatePickerDateProps, DatePickerDates } from './hooks/useDates'\nimport { CalendarView } from './hooks/useViews'\n\nexport type DateType = Date | string\n\nexport type DatePickerContextValues = ContextProps &\n DatePickerDates & {\n props: DatePickerAllProps\n translation: ContextProps['translation']\n views: Array<CalendarView>\n
|
|
1
|
+
{"version":3,"file":"DatePickerContext.js","names":["React","DatePickerContext","createContext"],"sources":["../../../../src/components/date-picker/DatePickerContext.ts"],"sourcesContent":["/**\n * Web DatePicker Context\n *\n */\n\nimport React from 'react'\nimport { DatePickerAllProps, DisplayPickerEvent } from './DatePicker'\nimport { ContextProps } from '../../shared/Context'\nimport {\n DatePickerChangeEvent,\n DatePickerProviderState,\n GetReturnObjectParams,\n ReturnObject,\n} from './DatePickerProvider'\nimport { DatePickerDateProps, DatePickerDates } from './hooks/useDates'\nimport { CalendarView } from './hooks/useViews'\n\nexport type DateType = Date | string\n\nexport type DatePickerContextValues = ContextProps &\n DatePickerDates & {\n props: DatePickerAllProps\n translation: ContextProps['translation']\n views: Array<CalendarView>\n previousDateProps: DatePickerDateProps\n updateDates: (\n dates: DatePickerDates,\n callback?: (dates: DatePickerDates) => void\n ) => void\n setState?: (state: DatePickerProviderState) => void\n setViews: (views: Array<CalendarView>, callback?: () => void) => void\n setHasClickedCalendarDay: (hasClicked: boolean) => void\n callOnChangeHandler: <E>(event: DatePickerChangeEvent<E>) => void\n hidePicker: (event: DisplayPickerEvent) => void\n getReturnObject: <E>(\n params: GetReturnObjectParams<E>\n ) => ReturnObject<E>\n }\n\nconst DatePickerContext = React.createContext<DatePickerContextValues>(\n {} as DatePickerContextValues\n)\n\nexport default DatePickerContext\n"],"mappings":"AAKA,OAAOA,KAAK,MAAM,OAAO;AAkCzB,MAAMC,iBAAiB,GAAGD,KAAK,CAACE,aAAa,CAC3C,CAAC,CACH,CAAC;AAED,eAAeD,iBAAiB","ignoreList":[]}
|
|
@@ -10,9 +10,6 @@ const _excluded = ["isRange", "maskOrder", "separatorRegExp", "id", "title", "su
|
|
|
10
10
|
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; }
|
|
11
11
|
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(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; }
|
|
12
12
|
import React, { useCallback, useContext, useMemo, useRef, useState } from 'react';
|
|
13
|
-
import addDays from 'date-fns/addDays';
|
|
14
|
-
import addMonths from 'date-fns/addMonths';
|
|
15
|
-
import addYears from 'date-fns/addYears';
|
|
16
13
|
import isValid from 'date-fns/isValid';
|
|
17
14
|
import parseISO from 'date-fns/parseISO';
|
|
18
15
|
import classnames from 'classnames';
|
|
@@ -72,7 +69,6 @@ function DatePickerInput(externalProps) {
|
|
|
72
69
|
const {
|
|
73
70
|
updateDates,
|
|
74
71
|
callOnChangeHandler,
|
|
75
|
-
hasHadValidDate,
|
|
76
72
|
getReturnObject,
|
|
77
73
|
__startDay,
|
|
78
74
|
__startMonth,
|
|
@@ -89,6 +85,7 @@ function DatePickerInput(externalProps) {
|
|
|
89
85
|
}
|
|
90
86
|
} = useContext(DatePickerContext);
|
|
91
87
|
const translation = useTranslation().DatePicker;
|
|
88
|
+
const hasHadValidDate = isValid(startDate) || isValid(endDate);
|
|
92
89
|
const modeDate = useMemo(() => ({
|
|
93
90
|
startDate,
|
|
94
91
|
endDate
|
|
@@ -277,40 +274,6 @@ function DatePickerInput(externalProps) {
|
|
|
277
274
|
is_valid_end_date
|
|
278
275
|
}, returnObject), typedDates));
|
|
279
276
|
}, [setPartialDates, isRange, getReturnObject, partialDatesRef, onType, inputDates]);
|
|
280
|
-
const prepareCounting = useCallback(async ({
|
|
281
|
-
keyCode,
|
|
282
|
-
target,
|
|
283
|
-
event
|
|
284
|
-
}) => {
|
|
285
|
-
try {
|
|
286
|
-
const isDate = target.getAttribute('class').match(/__input--(day|month|year)($|\s)/)[1];
|
|
287
|
-
const isInRange = target.getAttribute('id').match(/-(start|end)-(day|month|year)/)[1];
|
|
288
|
-
let date = isInRange === 'start' ? startDate : endDate;
|
|
289
|
-
if (!date) {
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
const count = keyCode === 'ArrowUp' ? 1 : -1;
|
|
293
|
-
if (keyCode === 'ArrowUp' || keyCode === 'ArrowDown') {
|
|
294
|
-
switch (isDate) {
|
|
295
|
-
case 'day':
|
|
296
|
-
date = addDays(date, count);
|
|
297
|
-
break;
|
|
298
|
-
case 'month':
|
|
299
|
-
date = addMonths(date, count);
|
|
300
|
-
break;
|
|
301
|
-
case 'year':
|
|
302
|
-
date = addYears(date, count);
|
|
303
|
-
break;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
callOnChange({
|
|
307
|
-
[isInRange === 'start' ? 'startDate' : 'endDate']: date,
|
|
308
|
-
event
|
|
309
|
-
});
|
|
310
|
-
} catch (e) {
|
|
311
|
-
warn(e);
|
|
312
|
-
}
|
|
313
|
-
}, [startDate, endDate, callOnChange]);
|
|
314
277
|
const setDate = useCallback((event, mode, type) => {
|
|
315
278
|
event.persist();
|
|
316
279
|
const value = event.target.value;
|
|
@@ -397,20 +360,6 @@ function DatePickerInput(externalProps) {
|
|
|
397
360
|
if (correctInvalidDate && target.selectionStart !== target.selectionEnd) {
|
|
398
361
|
setCursorPosition(target);
|
|
399
362
|
}
|
|
400
|
-
switch (keyCode) {
|
|
401
|
-
case 'ArrowUp':
|
|
402
|
-
case 'ArrowDown':
|
|
403
|
-
event.persist();
|
|
404
|
-
event.preventDefault();
|
|
405
|
-
prepareCounting({
|
|
406
|
-
event,
|
|
407
|
-
keyCode,
|
|
408
|
-
target
|
|
409
|
-
});
|
|
410
|
-
return false;
|
|
411
|
-
case 'Tab':
|
|
412
|
-
return false;
|
|
413
|
-
}
|
|
414
363
|
const size = parseFloat(target.getAttribute('size'));
|
|
415
364
|
const firstSelectionStart = target.selectionStart;
|
|
416
365
|
const firstSelectionEnd = target.selectionEnd;
|
|
@@ -463,7 +412,7 @@ function DatePickerInput(externalProps) {
|
|
|
463
412
|
}
|
|
464
413
|
}
|
|
465
414
|
}
|
|
466
|
-
}, [correctInvalidDate, dateSetters
|
|
415
|
+
}, [correctInvalidDate, dateSetters]);
|
|
467
416
|
const onInputHandler = useCallback(event => {
|
|
468
417
|
const target = event.currentTarget;
|
|
469
418
|
if (IS_ANDROID && event.nativeEvent.inputType === 'deleteContentBackward' && target.selectionStart === 0 && target.selectionEnd === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerInput.js","names":["React","useCallback","useContext","useMemo","useRef","useState","addDays","addMonths","addYears","isValid","parseISO","classnames","TextMask","Button","Input","SubmitButton","warn","validateDOMAttributes","toCapitalized","IS_ANDROID","IS_IOS","convertStringToDate","DatePickerContext","useTranslation","usePartialDates","defaultProps","maskOrder","maskPlaceholder","separatorRegExp","statusState","opened","DatePickerInput","externalProps","props","_objectSpread","isRange","id","title","submitAttributes","onFocus","onBlur","onChange","onSubmit","selectedDateTitle","showInput","inputElement","lang","disabled","skeleton","size","status","statusProps","attributes","_objectWithoutProperties","_excluded","focusState","setFocusState","partialDatesRef","setPartialDates","invalidDatesRef","invalidStartDate","invalidEndDate","isDateFullyFilledOutRef","updateDates","callOnChangeHandler","hasHadValidDate","getReturnObject","__startDay","__startMonth","__startYear","__endDay","__endMonth","__endYear","startDate","endDate","onType","label","correctInvalidDate","translation","DatePicker","modeDate","inputDates","inputRefs","startDayRef","current","undefined","startMonthRef","startYearRef","endDayRef","endMonthRef","endYearRef","dateRefs","startDay","startMonth","startYear","endDay","endMonth","endYear","syncDateRefs","temporaryDates","refList","focusMode","maskList","separators","match","split","reduce","acc","cur","push","length","shift","pasteHandler","event","success","clipboardData","window","getData","preventDefault","possibleFormats","forEach","date","sep","replace","reverse","join","index","dateFormat","mode","error","callOnChangeAsInvalid","state","hoverDate","dates","callOnChange","callOnType","getDates","partialStartDate","partialEndDate","parsedStartDate","parsedEndDate","isStartDateValid","isEndDateValid","_getReturnObject","is_valid","is_valid_start_date","is_valid_end_date","returnObject","_excluded2","typedDates","start_date","end_date","prepareCounting","keyCode","target","isDate","getAttribute","isInRange","count","e","setDate","type","persist","value","fallback","year","getFullYear","month","getMonth","day","getDate","Date","parseFloat","String","isValidDate","test","dateString","dateSetters","set_startDay","set_startMonth","set_startYear","set_endDay","set_endMonth","set_endYear","onFocusHandler","isNaN","setCursorPosition","onBlurHandler","onKeyDownHandler","key","selectionStart","selectionEnd","firstSelectionStart","firstSelectionEnd","wait","secondSelectionStart","refListArray","findIndex","isLastChar","isFirstChar","isMovingForward","isExplicitForward","hasNextField","_refListArray","nextSibling","withoutDelay","name","slice","isMovingBackward","isPressingBackspace","_refListArray2","prevSibling","endPos","onInputHandler","currentTarget","nativeEvent","inputType","getPlaceholderChar","indexOf","generateDateList","element","map","i","placeholderChar","isRangeLabel","onInput","onKeyDown","onPaste","DateField","isValidElement","InputElement","inputSizeClassName","createElement","Fragment","_extends","className","mask","inputRef","hidden","htmlFor","renderInputElement","startDateList","endDateList","_span","ariaLabel","openPickerText","SubmitElement","innerRef","ref","input_state","input_element","status_state","submit_element","icon","variant","on_submit","on_click","position","options","focus","select","setSelectionRange","process","env","NODE_ENV","setTimeout","_ref","_excluded3","guide","inputMode","showMask","keepCharPositions","autoComplete","autoCapitalize","spellCheck","autoCorrect","dateRefValue","inputDateValue","duration","Promise","r"],"sources":["../../../../src/components/date-picker/DatePickerInput.tsx"],"sourcesContent":["/**\n * Web DatePicker Component\n *\n */\n\nimport React, {\n MutableRefObject,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\n// date-fns\nimport addDays from 'date-fns/addDays'\nimport addMonths from 'date-fns/addMonths'\nimport addYears from 'date-fns/addYears'\nimport isValid from 'date-fns/isValid'\nimport parseISO from 'date-fns/parseISO'\n\nimport classnames from 'classnames'\nimport TextMask, { TextMaskProps } from '../input-masked/TextMask'\nimport Button from '../button/Button'\nimport Input, { SubmitButton } from '../input/Input'\nimport type { InputInputElement, InputSize } from '../Input'\nimport {\n warn,\n validateDOMAttributes,\n toCapitalized,\n} from '../../shared/component-helper'\nimport { IS_ANDROID, IS_IOS } from '../../shared/helpers'\nimport { convertStringToDate } from './DatePickerCalc'\nimport DatePickerContext from './DatePickerContext'\n\nimport type {\n FormStatusProps,\n FormStatusState,\n FormStatusText,\n} from '../FormStatus'\nimport type { SkeletonShow } from '../Skeleton'\nimport { ReturnObject } from './DatePickerProvider'\nimport { DatePickerEventAttributes } from './DatePicker'\nimport { useTranslation } from '../../shared'\nimport { DatePickerInputDates } from './hooks/useDates'\nimport usePartialDates from './hooks/usePartialDates'\n\nexport type DatePickerInputProps = Omit<\n React.HTMLProps<HTMLInputElement>,\n | 'children'\n | 'ref'\n | 'value'\n | 'size'\n | 'onFocus'\n | 'onBlur'\n | 'onSubmit'\n | 'label'\n> & {\n selectedDateTitle?: string\n maskOrder?: string\n maskPlaceholder?: string\n separatorRegExp?: RegExp\n submitAttributes?: Record<string, unknown>\n isRange?: boolean\n /**\n * The sizes you can choose is `small` (1.5rem), `default` (2rem), `medium` (2.5rem) and `large` (3rem) are supported component sizes. Defaults to `default` / `null`.\n */\n size?: InputSize\n /**\n * Text with a status message. The style defaults to an error message. You can use `true` to only get the status color, without a message.\n */\n status?: FormStatusText\n /**\n * Defines the state of the status. Currently, there are two statuses `[error, info]`. Defaults to `error`.\n */\n statusState?: FormStatusState\n /**\n * Use an object to define additional FormStatus properties.\n */\n statusProps?: FormStatusProps\n /**\n * Gives you the possibility to use a plain/vanilla `<input />` HTML element by defining it as a string `input_element=\"input\"`, a React element, or a render function `input_element={(internalProps) => (<Return />)}`. Can also be used in circumstances where the `react-text-mask` not should be used, e.g. in testing environments. Defaults to custom masked input.\n */\n inputElement?: InputInputElement\n /**\n * If set to `true`, an overlaying skeleton with animation will be shown.\n */\n skeleton?: SkeletonShow\n /**\n * To open the date-picker by default. Defaults to `false`.\n */\n opened?: boolean\n showInput?: boolean\n onSubmit?: (event: React.MouseEvent<HTMLButtonElement>) => void\n onChange?: (\n event: ReturnObject<React.ChangeEvent<HTMLInputElement>>\n ) => void\n /**\n * Will be called once the input gets focus.\n */\n onFocus?: (\n event: ReturnObject<React.FocusEvent<HTMLInputElement>>\n ) => void\n /**\n * Will be called once the input lose focus.\n */\n onBlur?: (\n event: ReturnObject<React.FocusEvent<HTMLInputElement>>\n ) => void\n}\n\nexport type InvalidDates = {\n invalidDate?: string\n invalidStartDate?: string\n invalidEndDate?: string\n}\n\nconst defaultProps: DatePickerInputProps = {\n maskOrder: 'dd/mm/yyyy',\n maskPlaceholder: 'dd/mm/åååå',\n separatorRegExp: /[-/ ]/g,\n statusState: 'error',\n opened: false,\n}\n\nfunction DatePickerInput(externalProps: DatePickerInputProps) {\n const props = { ...defaultProps, ...externalProps }\n\n const {\n isRange,\n maskOrder,\n separatorRegExp,\n id,\n title,\n submitAttributes,\n maskPlaceholder, // eslint-disable-line\n onFocus,\n onBlur,\n onChange, // eslint-disable-line\n onSubmit, // eslint-disable-line\n selectedDateTitle, // eslint-disable-line\n showInput, // eslint-disable-line\n inputElement,\n lang,\n disabled,\n skeleton,\n opened,\n size,\n status,\n statusState,\n statusProps,\n\n ...attributes\n } = props\n const [focusState, setFocusState] = useState<string>('virgin')\n\n const { partialDatesRef, setPartialDates } = usePartialDates()\n\n const invalidDatesRef = useRef<InvalidDates>({\n invalidStartDate: null,\n invalidEndDate: null,\n })\n const isDateFullyFilledOutRef = useRef(false)\n\n const {\n updateDates,\n callOnChangeHandler,\n hasHadValidDate,\n getReturnObject,\n __startDay,\n __startMonth,\n __startYear,\n __endDay,\n __endMonth,\n __endYear,\n startDate,\n endDate,\n props: { onType, label, correctInvalidDate },\n } = useContext(DatePickerContext)\n\n const translation = useTranslation().DatePicker\n\n const modeDate = useMemo(\n () => ({\n startDate,\n endDate,\n }),\n [startDate, endDate]\n )\n\n const inputDates = useMemo(\n () => ({\n __startDay,\n __startMonth,\n __startYear,\n __endDay,\n __endMonth,\n __endYear,\n }),\n [\n __startDay,\n __startMonth,\n __startYear,\n __endDay,\n __endMonth,\n __endYear,\n ]\n )\n\n const inputRefs = useRef<\n Record<string, MutableRefObject<HTMLInputElement>>\n >({\n startDayRef: { current: undefined },\n startMonthRef: { current: undefined },\n startYearRef: { current: undefined },\n endDayRef: { current: undefined },\n endMonthRef: { current: undefined },\n endYearRef: { current: undefined },\n })\n\n const dateRefs = useRef<Record<string, string>>({\n startDay: '',\n startMonth: '',\n startYear: '',\n endDay: '',\n endMonth: '',\n endYear: '',\n })\n\n // Keep dateRefs in sync with inputDates on re-render\n syncDateRefs(dateRefs, inputDates)\n\n const temporaryDates = useRef<Record<string, Date>>({\n startDate: undefined,\n endDate: undefined,\n })\n\n const refList = useRef<Array<MutableRefObject<HTMLInputElement>>>()\n\n const focusMode = useRef<string>()\n\n const maskList = useMemo(() => {\n const separators = maskOrder.match(separatorRegExp)\n\n return maskOrder\n .split(separatorRegExp)\n .reduce<Array<string>>((acc, cur) => {\n if (!cur) {\n return acc\n }\n\n acc.push(cur)\n\n if (separators.length > 0) {\n // makes sure that separators are added at the correct places and removed from array when added\n acc.push(separators.shift())\n }\n\n return acc\n }, [])\n }, [maskOrder, separatorRegExp])\n\n const pasteHandler = useCallback(\n async (event: React.ClipboardEvent<HTMLInputElement>) => {\n if (!focusMode.current) {\n return // Stop here\n }\n\n const success = (\n event.clipboardData ||\n (typeof window !== 'undefined' && window['clipboardData'])\n ).getData('text')\n\n if (!success) {\n return // Stop here\n }\n\n event.preventDefault()\n\n try {\n const separators = ['.', '/']\n const possibleFormats = ['yyyy-MM-dd']\n\n // TODO: Merge these loops\n possibleFormats.forEach((date) => {\n separators.forEach((sep) => {\n possibleFormats.push(date.replace(/-/g, sep))\n })\n })\n\n possibleFormats.forEach((date) => {\n possibleFormats.push(date.split('').reverse().join(''))\n })\n\n let date: Date\n let index = 0\n\n for (index; index < possibleFormats.length; ++index) {\n date = convertStringToDate(success, {\n dateFormat: possibleFormats[index],\n })\n\n if (date) {\n break\n }\n }\n\n const mode =\n focusMode.current === 'start' ? 'startDate' : 'endDate'\n\n if (date) {\n updateDates({\n [mode]: date,\n })\n }\n } catch (error: unknown) {\n warn(error)\n }\n },\n [updateDates]\n )\n\n const callOnChangeAsInvalid = useCallback(\n (state: {\n endDate?: Date\n starDate?: Date\n event: React.ChangeEvent<HTMLInputElement>\n }) => {\n updateDates(\n {\n hoverDate: null,\n },\n (dates) => {\n // Should fire if user has filled out an invalid date,\n // or if the date was valid. Like if the user has pressed backspace or removed the valid date.\n if (isDateFullyFilledOutRef.current || hasHadValidDate) {\n const { startDate, endDate, event } = {\n ...state,\n ...dates,\n }\n callOnChangeHandler({\n startDate,\n endDate,\n event,\n ...invalidDatesRef.current,\n })\n }\n }\n )\n },\n [updateDates, callOnChangeHandler, hasHadValidDate]\n )\n\n const callOnChange = useCallback(\n ({\n startDate,\n endDate,\n event,\n }: {\n startDate?: Date\n endDate?: Date\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n }) => {\n const state = {}\n if (typeof startDate !== 'undefined' && isValid(startDate)) {\n state['startDate'] = startDate\n }\n if (!isRange) {\n endDate = startDate\n }\n if (typeof endDate !== 'undefined' && isValid(endDate)) {\n state['endDate'] = endDate\n }\n\n updateDates(state, (dates) => {\n if (\n (typeof startDate !== 'undefined' && isValid(startDate)) ||\n (typeof endDate !== 'undefined' && isValid(endDate))\n ) {\n callOnChangeHandler({\n event,\n ...dates,\n ...invalidDatesRef.current,\n })\n }\n })\n },\n [updateDates, callOnChangeHandler, isRange]\n )\n\n const callOnType = useCallback(\n ({ event }: { event: React.ChangeEvent<HTMLInputElement> }) => {\n const getDates = () =>\n ['start', 'end'].reduce(\n (acc, mode) => {\n acc[`${mode}Date`] = [\n dateRefs.current[`${mode}Year`] ||\n inputDates[`__${mode}Year`] ||\n 'yyyy',\n dateRefs.current[`${mode}Month`] ||\n inputDates[`__${mode}Month`] ||\n 'mm',\n dateRefs.current[`${mode}Day`] ||\n inputDates[`__${mode}Day`] ||\n 'dd',\n ].join('-')\n return acc\n },\n { startDate: undefined, endDate: undefined }\n )\n\n // Get the typed dates, so we can ...\n const { startDate, endDate } = getDates()\n\n // Get the partial dates, so we can know if something was typed or not in an optional date field\n setPartialDates({\n partialStartDate: startDate,\n // Only set endDate if in range mode\n ...(isRange && { partialEndDate: endDate }),\n })\n\n const parsedStartDate = parseISO(startDate)\n const parsedEndDate = parseISO(endDate)\n\n const isStartDateValid = isValid(parsedStartDate)\n const isEndDateValid = isValid(parsedEndDate)\n\n const {\n is_valid,\n is_valid_start_date,\n is_valid_end_date,\n ...returnObject\n } = getReturnObject({\n startDate: isStartDateValid ? parsedStartDate : null,\n endDate: isEndDateValid ? parsedEndDate : null,\n event,\n ...partialDatesRef.current,\n ...invalidDatesRef.current,\n })\n\n // Re-assigns dates to the typed date, instead of `null` from getReturnObject, if dates are invalid\n const typedDates = {\n ...(!isRange && is_valid === false && { date: startDate }),\n ...(isRange &&\n is_valid_start_date === false && { start_date: startDate }),\n ...(isRange &&\n is_valid_end_date === false && { end_date: endDate }),\n }\n\n onType?.({\n is_valid,\n is_valid_start_date,\n is_valid_end_date,\n ...returnObject,\n ...typedDates,\n })\n },\n [\n setPartialDates,\n isRange,\n getReturnObject,\n partialDatesRef,\n onType,\n inputDates,\n ]\n )\n\n const prepareCounting = useCallback(\n async ({\n keyCode,\n target,\n event,\n }: {\n keyCode: string\n target: HTMLInputElement\n event: React.KeyboardEvent<HTMLInputElement>\n }) => {\n try {\n const isDate = target\n .getAttribute('class')\n .match(/__input--(day|month|year)($|\\s)/)[1]\n\n const isInRange = target\n .getAttribute('id')\n .match(/-(start|end)-(day|month|year)/)[1]\n\n let date = isInRange === 'start' ? startDate : endDate\n\n // do nothing if date is not set yet\n if (!date) {\n return\n }\n\n const count = keyCode === 'ArrowUp' ? 1 : -1\n\n if (keyCode === 'ArrowUp' || keyCode === 'ArrowDown') {\n switch (isDate) {\n case 'day':\n date = addDays(date, count)\n break\n case 'month':\n date = addMonths(date, count)\n break\n case 'year':\n date = addYears(date, count)\n break\n }\n }\n\n callOnChange({\n [isInRange === 'start' ? 'startDate' : 'endDate']: date,\n event,\n })\n } catch (e) {\n warn(e)\n }\n },\n [startDate, endDate, callOnChange]\n )\n\n const setDate = useCallback(\n (\n event: React.ChangeEvent<HTMLInputElement>,\n mode: 'start' | 'end',\n type: 'Day' | 'Month' | 'Year'\n ) => {\n event.persist() // since we have later a state update and afterwards the callback\n\n const value = (event.target as HTMLInputElement).value\n\n dateRefs.current[`${mode}${type}`] = value\n\n if (modeDate[`${mode}Date`]) {\n temporaryDates.current[`${mode}Date`] = modeDate[`${mode}Date`]\n }\n\n const fallback = temporaryDates.current[`${mode}Date`]\n\n // provide fallbacks to create a temp fallback\n const year =\n dateRefs.current[`${mode}Year`] ||\n (fallback && fallback.getFullYear())\n const month =\n dateRefs.current[`${mode}Month`] ||\n (fallback && fallback.getMonth() + 1)\n const day =\n dateRefs.current[`${mode}Day`] || (fallback && fallback.getDate())\n\n // calculate new date\n const date = new Date(\n parseFloat(String(year)),\n parseFloat(String(month)) - 1,\n parseFloat(String(day))\n )\n\n const isValidDate =\n !/[^0-9]/.test(String(day)) &&\n !/[^0-9]/.test(String(month)) &&\n !/[^0-9]/.test(String(year)) &&\n isValid(date) &&\n date.getDate() == parseFloat(String(day)) &&\n date.getMonth() + 1 == parseFloat(String(month)) &&\n date.getFullYear() == parseFloat(String(year))\n\n const dateString = `${year}-${month}-${day}`\n\n isDateFullyFilledOutRef.current =\n /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(dateString)\n\n // update the date\n if (isValidDate) {\n invalidDatesRef.current = {\n ...invalidDatesRef.current,\n ...(mode === 'start'\n ? { invalidStartDate: null }\n : { invalidEndDate: null }),\n }\n\n callOnChange({\n [`${mode}Date`]: date,\n event,\n })\n } else {\n updateDates({\n [`${mode}Date`]: null,\n [`__${mode}${type}`]: value,\n })\n\n invalidDatesRef.current = {\n ...invalidDatesRef.current,\n ...(mode === 'start'\n ? { invalidStartDate: dateString }\n : { invalidEndDate: dateString }),\n }\n\n callOnChangeAsInvalid({\n [`${mode}Date`]: null,\n event,\n })\n }\n\n callOnType({ event })\n },\n [\n updateDates,\n callOnChange,\n callOnChangeAsInvalid,\n callOnType,\n modeDate,\n dateRefs,\n temporaryDates,\n ]\n )\n\n const dateSetters = useMemo(\n () => ({\n set_startDay: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'start', 'Day')\n },\n\n set_startMonth: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'start', 'Month')\n },\n\n set_startYear: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'start', 'Year')\n },\n\n set_endDay: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'end', 'Day')\n },\n\n set_endMonth: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'end', 'Month')\n },\n\n set_endYear: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'end', 'Year')\n },\n }),\n [setDate]\n )\n\n const onFocusHandler = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocusState('focus')\n\n onFocus?.({\n ...event,\n ...getReturnObject({ event }),\n })\n\n if (isNaN(parseFloat(event.target.value))) {\n setCursorPosition(event.target)\n }\n },\n [getReturnObject, onFocus]\n )\n\n const onBlurHandler = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n focusMode.current = null\n setFocusState('blur')\n\n onBlur?.({\n ...event,\n ...getReturnObject({ event, ...partialDatesRef.current }),\n })\n },\n [onBlur, getReturnObject, partialDatesRef]\n )\n\n const onKeyDownHandler = useCallback(\n async (event: React.KeyboardEvent<HTMLInputElement>) => {\n const keyCode = event.key\n const target = event.target as HTMLInputElement\n\n if (\n correctInvalidDate &&\n target.selectionStart !== target.selectionEnd\n ) {\n setCursorPosition(target)\n }\n\n // Only to process key up and down press\n switch (keyCode) {\n case 'ArrowUp':\n case 'ArrowDown':\n event.persist()\n event.preventDefault()\n prepareCounting({ event, keyCode, target })\n return false\n case 'Tab':\n return false\n }\n\n // The rest is for value entry\n\n const size = parseFloat(target.getAttribute('size'))\n const firstSelectionStart = target.selectionStart\n const firstSelectionEnd = target.selectionEnd\n\n // To get the correct position afterwards.\n // Use 10ms in order to make it work on iOS Safari\n await wait(IS_IOS ? 10 : 1)\n\n const secondSelectionStart = target.selectionStart\n\n // Always false (since the old keycode function set number keys to undefined) but needed to not break tests\n const isValid = /[0-9]/g.test(keyCode)\n const refListArray = refList.current\n\n const index = refListArray.findIndex(\n ({ current }) => current === target\n )\n\n const isLastChar = secondSelectionStart === size\n const isFirstChar = firstSelectionStart === size\n\n const isMovingForward =\n keyCode !== 'ArrowLeft' &&\n keyCode !== 'Backspace' &&\n isValid &&\n isLastChar\n\n const isExplicitForward =\n (keyCode === 'ArrowRight' || keyCode === 'Enter') && isFirstChar\n\n const hasNextField = index < refListArray.length - 1\n\n if (hasNextField && (isMovingForward || isExplicitForward)) {\n // stop in case there is no next input element\n if (!refListArray[index + 1].current) {\n return // stop here\n }\n const nextSibling = refListArray[index + 1]?.current\n\n if (nextSibling) {\n setCursorPosition(nextSibling, 0, { withoutDelay: true })\n }\n\n // When the cursor is at the end of the input\n // and the user types a number, we want to set the value on the next input.\n if (\n parseFloat(keyCode) <= 9 &&\n firstSelectionStart === target.size\n ) {\n const name = toCapitalized(\n nextSibling\n .getAttribute('class')\n .match(/__input--(day|month|year)($|\\s)/)[1]\n )\n const mode = nextSibling\n .getAttribute('id')\n .match(/-(start|end)-(day|month|year)/)[1]\n\n dateSetters[`set_${mode}${name}`]({\n persist: () => null,\n ...event,\n target: {\n value: keyCode + nextSibling.value.slice(1),\n },\n })\n\n setCursorPosition(nextSibling, 1)\n }\n } else if (index > 0 && firstSelectionStart === firstSelectionEnd) {\n const isMovingBackward =\n keyCode === 'ArrowLeft' && firstSelectionStart === 0\n const isPressingBackspace =\n keyCode === 'Backspace' && firstSelectionStart <= 1\n\n if (isMovingBackward || isPressingBackspace) {\n const prevSibling = refListArray[index - 1]?.current\n if (prevSibling) {\n const endPos = prevSibling.value.length\n setCursorPosition(prevSibling, endPos, {\n withoutDelay: true,\n })\n }\n }\n }\n },\n [correctInvalidDate, dateSetters, prepareCounting]\n )\n\n const onInputHandler = useCallback(\n (event) => {\n const target = event.currentTarget\n\n // Add support for \"backspace\" on Android virtual keyboard\n if (\n IS_ANDROID &&\n event.nativeEvent.inputType === 'deleteContentBackward' &&\n target.selectionStart === 0 &&\n target.selectionEnd === 0\n ) {\n onKeyDownHandler({\n ...event,\n key: 'Backspace',\n })\n }\n },\n [onKeyDownHandler]\n )\n\n const getPlaceholderChar = useCallback(\n (value: string) => {\n const index = maskOrder.indexOf(value)\n return maskPlaceholder[index]\n },\n [maskOrder, maskPlaceholder]\n )\n\n // TODO: Replace with MultiInputMask\n const generateDateList = useCallback(\n (\n element: Omit<React.HTMLProps<HTMLInputElement>, 'size'> &\n DatePickerEventAttributes,\n mode: 'start' | 'end'\n ) => {\n return maskList.map((value, i) => {\n const state = value.slice(0, 1)\n const placeholderChar = getPlaceholderChar(value)\n const { day, month, year } = translation\n const isRangeLabel = isRange ? `${translation[mode]} ` : ''\n\n if (!separatorRegExp.test(value)) {\n if (!inputElement) {\n element = {\n ...element,\n onInput: onInputHandler,\n onKeyDown: onKeyDownHandler,\n onPaste: pasteHandler,\n onFocus: (e) => {\n focusMode.current = mode\n onFocusHandler(e)\n },\n onBlur: onBlurHandler,\n placeholderChar,\n }\n }\n\n // this makes it possible to use a vanilla <input /> like: input_element=\"input\"\n const DateField =\n inputElement && React.isValidElement(inputElement)\n ? inputElement.type\n : InputElement\n\n const inputSizeClassName =\n size && `dnb-date-picker__input--${size}`\n\n switch (state) {\n case 'd':\n refList.current.push(inputRefs.current[`${mode}DayRef`])\n\n return (\n <React.Fragment key={'dd' + i}>\n <DateField\n {...element}\n id={`${id}-${mode}-day`}\n key={'di' + i}\n className={classnames(\n element.className,\n 'dnb-date-picker__input',\n 'dnb-date-picker__input--day',\n inputSizeClassName\n )}\n size={2}\n mask={[/[0-9]/, /[0-9]/]}\n inputRef={inputRefs.current[`${mode}DayRef`]}\n onChange={dateSetters[`set_${mode}Day`]}\n value={inputDates[`__${mode}Day`] || ''}\n aria-labelledby={`${id}-${mode}-day-label`}\n />\n <label\n key={'dl' + i}\n hidden\n id={`${id}-${mode}-day-label`}\n htmlFor={`${id}-${mode}-day`}\n >\n {isRangeLabel + day}\n </label>\n </React.Fragment>\n )\n case 'm':\n refList.current.push(inputRefs.current[`${mode}MonthRef`])\n\n return (\n <React.Fragment key={'mm' + i}>\n <DateField\n {...element}\n id={`${id}-${mode}-month`}\n key={'mi' + i}\n className={classnames(\n element.className,\n 'dnb-date-picker__input',\n 'dnb-date-picker__input--month',\n inputSizeClassName\n )}\n size={2}\n mask={[/[0-9]/, /[0-9]/]}\n inputRef={inputRefs.current[`${mode}MonthRef`]}\n onChange={dateSetters[`set_${mode}Month`]}\n value={inputDates[`__${mode}Month`] || ''}\n aria-labelledby={`${id}-${mode}-month-label`}\n />\n <label\n key={'ml' + i}\n hidden\n id={`${id}-${mode}-month-label`}\n htmlFor={`${id}-${mode}-month`}\n >\n {isRangeLabel + month}\n </label>\n </React.Fragment>\n )\n case 'y':\n refList.current.push(inputRefs.current[`${mode}YearRef`])\n\n return (\n <React.Fragment key={'yy' + i}>\n <DateField\n {...element}\n id={`${id}-${mode}-year`}\n key={'yi' + i}\n className={classnames(\n element.className,\n 'dnb-date-picker__input',\n 'dnb-date-picker__input--year',\n inputSizeClassName\n )}\n size={4}\n mask={[/[0-9]/, /[0-9]/, /[0-9]/, /[0-9]/]}\n inputRef={inputRefs.current[`${mode}YearRef`]}\n onChange={dateSetters[`set_${mode}Year`]}\n value={inputDates[`__${mode}Year`] || ''}\n aria-labelledby={`${id}-${mode}-year-label`}\n />\n <label\n key={'yl' + i}\n hidden\n id={`${id}-${mode}-year-label`}\n htmlFor={`${id}-${mode}-year`}\n >\n {isRangeLabel + year}\n </label>\n </React.Fragment>\n )\n }\n }\n return (\n <span\n key={'s' + i}\n className=\"dnb-date-picker--separator\"\n aria-hidden\n >\n {placeholderChar}\n </span>\n )\n })\n },\n [\n maskList,\n getPlaceholderChar,\n translation,\n isRange,\n separatorRegExp,\n inputElement,\n size,\n onInputHandler,\n onKeyDownHandler,\n pasteHandler,\n onBlurHandler,\n onFocusHandler,\n id,\n dateSetters,\n inputDates,\n ]\n )\n\n const renderInputElement = useCallback(\n (\n element: React.HTMLProps<HTMLInputElement> &\n DatePickerEventAttributes\n ) => {\n refList.current = []\n const startDateList = generateDateList(element, 'start')\n const endDateList = generateDateList(element, 'end')\n\n return (\n <span\n id={`${id}-input`}\n className=\"dnb-date-picker__input__wrapper\"\n >\n {startDateList}\n {isRange && (\n <span className=\"dnb-date-picker--separator\" aria-hidden>\n {' – '}\n </span>\n )}\n {isRange && endDateList}\n </span>\n )\n },\n [id, isRange, generateDateList]\n )\n\n const ariaLabel = useMemo(\n () =>\n selectedDateTitle\n ? `${selectedDateTitle}, ${translation.openPickerText}`\n : translation.openPickerText,\n [selectedDateTitle, translation]\n )\n\n validateDOMAttributes(props, attributes)\n validateDOMAttributes(null, submitAttributes)\n\n const SubmitElement: React.ElementType = useMemo(\n () => (showInput ? SubmitButton : Button),\n [showInput]\n )\n\n if (!showInput) {\n // Use Button inner ref\n submitAttributes.innerRef = submitAttributes.ref\n submitAttributes.ref = null\n }\n\n return (\n <fieldset className=\"dnb-date-picker__fieldset\" lang={lang}>\n {label && <legend className=\"dnb-sr-only\">{label}</legend>}\n <Input\n id={`${id}__input`}\n input_state={disabled ? 'disabled' : focusState}\n input_element={\n inputElement && typeof inputElement !== 'string'\n ? typeof inputElement === 'function'\n ? inputElement(props)\n : inputElement\n : renderInputElement\n }\n disabled={disabled || skeleton}\n skeleton={skeleton}\n size={size}\n status={!opened ? status : null}\n status_state={statusState}\n {...statusProps}\n submit_element={\n <SubmitElement\n id={id}\n disabled={disabled}\n skeleton={skeleton}\n className={classnames(\n showInput && 'dnb-button--input-button',\n opened ? 'dnb-button--active' : null\n )}\n aria-label={ariaLabel}\n title={title}\n size={size}\n status={status}\n status_state={statusState}\n type=\"button\"\n icon=\"calendar\"\n variant=\"secondary\"\n on_submit={onSubmit}\n on_click={onSubmit}\n {...submitAttributes}\n {...statusProps}\n />\n }\n lang={lang}\n {...attributes}\n />\n </fieldset>\n )\n}\n\nexport default DatePickerInput\n\nfunction setCursorPosition(\n target: HTMLInputElement,\n position = 0,\n options?: { withoutDelay?: boolean }\n) {\n target.focus()\n\n const select = () => {\n target.setSelectionRange(position, position)\n }\n\n // Delay for correct iOS Safari appearance\n if (!options?.withoutDelay && process.env.NODE_ENV !== 'test') {\n setTimeout(select, 0)\n } else {\n select()\n }\n}\n\nfunction InputElement({ className, value, ...props }: TextMaskProps) {\n return (\n <TextMask\n guide={true}\n inputMode=\"numeric\"\n showMask={true}\n keepCharPositions={false} // so we can overwrite next value, if it already exists\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n spellCheck={false}\n autoCorrect=\"off\"\n className={classnames(\n className,\n /\\d+/.test(String(value)) && 'dnb-date-picker__input--highlight'\n )}\n value={value}\n {...props}\n />\n )\n}\n\nfunction syncDateRefs(\n dateRefs: React.MutableRefObject<Record<string, string>>,\n inputDates: DatePickerInputDates\n) {\n for (const date in dateRefs.current) {\n const dateRefValue = dateRefs.current[date]\n const inputDateValue = inputDates[`__${date}`]\n\n if (dateRefValue !== inputDateValue) {\n dateRefs.current[date] = inputDateValue\n }\n }\n}\n\nconst wait = (duration: number) =>\n new Promise((r) => setTimeout(r, duration))\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DatePickerInput.js","names":["React","useCallback","useContext","useMemo","useRef","useState","isValid","parseISO","classnames","TextMask","Button","Input","SubmitButton","warn","validateDOMAttributes","toCapitalized","IS_ANDROID","IS_IOS","convertStringToDate","DatePickerContext","useTranslation","usePartialDates","defaultProps","maskOrder","maskPlaceholder","separatorRegExp","statusState","opened","DatePickerInput","externalProps","props","_objectSpread","isRange","id","title","submitAttributes","onFocus","onBlur","onChange","onSubmit","selectedDateTitle","showInput","inputElement","lang","disabled","skeleton","size","status","statusProps","attributes","_objectWithoutProperties","_excluded","focusState","setFocusState","partialDatesRef","setPartialDates","invalidDatesRef","invalidStartDate","invalidEndDate","isDateFullyFilledOutRef","updateDates","callOnChangeHandler","getReturnObject","__startDay","__startMonth","__startYear","__endDay","__endMonth","__endYear","startDate","endDate","onType","label","correctInvalidDate","translation","DatePicker","hasHadValidDate","modeDate","inputDates","inputRefs","startDayRef","current","undefined","startMonthRef","startYearRef","endDayRef","endMonthRef","endYearRef","dateRefs","startDay","startMonth","startYear","endDay","endMonth","endYear","syncDateRefs","temporaryDates","refList","focusMode","maskList","separators","match","split","reduce","acc","cur","push","length","shift","pasteHandler","event","success","clipboardData","window","getData","preventDefault","possibleFormats","forEach","date","sep","replace","reverse","join","index","dateFormat","mode","error","callOnChangeAsInvalid","state","hoverDate","dates","callOnChange","callOnType","getDates","partialStartDate","partialEndDate","parsedStartDate","parsedEndDate","isStartDateValid","isEndDateValid","_getReturnObject","is_valid","is_valid_start_date","is_valid_end_date","returnObject","_excluded2","typedDates","start_date","end_date","setDate","type","persist","value","target","fallback","year","getFullYear","month","getMonth","day","getDate","Date","parseFloat","String","isValidDate","test","dateString","dateSetters","set_startDay","set_startMonth","set_startYear","set_endDay","set_endMonth","set_endYear","onFocusHandler","isNaN","setCursorPosition","onBlurHandler","onKeyDownHandler","keyCode","key","selectionStart","selectionEnd","getAttribute","firstSelectionStart","firstSelectionEnd","wait","secondSelectionStart","refListArray","findIndex","isLastChar","isFirstChar","isMovingForward","isExplicitForward","hasNextField","_refListArray","nextSibling","withoutDelay","name","slice","isMovingBackward","isPressingBackspace","_refListArray2","prevSibling","endPos","onInputHandler","currentTarget","nativeEvent","inputType","getPlaceholderChar","indexOf","generateDateList","element","map","i","placeholderChar","isRangeLabel","onInput","onKeyDown","onPaste","e","DateField","isValidElement","InputElement","inputSizeClassName","createElement","Fragment","_extends","className","mask","inputRef","hidden","htmlFor","renderInputElement","startDateList","endDateList","_span","ariaLabel","openPickerText","SubmitElement","innerRef","ref","input_state","input_element","status_state","submit_element","icon","variant","on_submit","on_click","position","options","focus","select","setSelectionRange","process","env","NODE_ENV","setTimeout","_ref","_excluded3","guide","inputMode","showMask","keepCharPositions","autoComplete","autoCapitalize","spellCheck","autoCorrect","dateRefValue","inputDateValue","duration","Promise","r"],"sources":["../../../../src/components/date-picker/DatePickerInput.tsx"],"sourcesContent":["/**\n * Web DatePicker Component\n *\n */\n\nimport React, {\n MutableRefObject,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\n// date-fns\nimport isValid from 'date-fns/isValid'\nimport parseISO from 'date-fns/parseISO'\n\nimport classnames from 'classnames'\nimport TextMask, { TextMaskProps } from '../input-masked/TextMask'\nimport Button from '../button/Button'\nimport Input, { SubmitButton } from '../input/Input'\nimport type { InputInputElement, InputSize } from '../Input'\nimport {\n warn,\n validateDOMAttributes,\n toCapitalized,\n} from '../../shared/component-helper'\nimport { IS_ANDROID, IS_IOS } from '../../shared/helpers'\nimport { convertStringToDate } from './DatePickerCalc'\nimport DatePickerContext from './DatePickerContext'\n\nimport type {\n FormStatusProps,\n FormStatusState,\n FormStatusText,\n} from '../FormStatus'\nimport type { SkeletonShow } from '../Skeleton'\nimport { ReturnObject } from './DatePickerProvider'\nimport { DatePickerEventAttributes } from './DatePicker'\nimport { useTranslation } from '../../shared'\nimport { DatePickerInputDates } from './hooks/useDates'\nimport usePartialDates from './hooks/usePartialDates'\n\nexport type DatePickerInputProps = Omit<\n React.HTMLProps<HTMLInputElement>,\n | 'children'\n | 'ref'\n | 'value'\n | 'size'\n | 'onFocus'\n | 'onBlur'\n | 'onSubmit'\n | 'label'\n> & {\n selectedDateTitle?: string\n maskOrder?: string\n maskPlaceholder?: string\n separatorRegExp?: RegExp\n submitAttributes?: Record<string, unknown>\n isRange?: boolean\n /**\n * The sizes you can choose is `small` (1.5rem), `default` (2rem), `medium` (2.5rem) and `large` (3rem) are supported component sizes. Defaults to `default` / `null`.\n */\n size?: InputSize\n /**\n * Text with a status message. The style defaults to an error message. You can use `true` to only get the status color, without a message.\n */\n status?: FormStatusText\n /**\n * Defines the state of the status. Currently, there are two statuses `[error, info]`. Defaults to `error`.\n */\n statusState?: FormStatusState\n /**\n * Use an object to define additional FormStatus properties.\n */\n statusProps?: FormStatusProps\n /**\n * Gives you the possibility to use a plain/vanilla `<input />` HTML element by defining it as a string `input_element=\"input\"`, a React element, or a render function `input_element={(internalProps) => (<Return />)}`. Can also be used in circumstances where the `react-text-mask` not should be used, e.g. in testing environments. Defaults to custom masked input.\n */\n inputElement?: InputInputElement\n /**\n * If set to `true`, an overlaying skeleton with animation will be shown.\n */\n skeleton?: SkeletonShow\n /**\n * To open the date-picker by default. Defaults to `false`.\n */\n opened?: boolean\n showInput?: boolean\n onSubmit?: (event: React.MouseEvent<HTMLButtonElement>) => void\n onChange?: (\n event: ReturnObject<React.ChangeEvent<HTMLInputElement>>\n ) => void\n /**\n * Will be called once the input gets focus.\n */\n onFocus?: (\n event: ReturnObject<React.FocusEvent<HTMLInputElement>>\n ) => void\n /**\n * Will be called once the input lose focus.\n */\n onBlur?: (\n event: ReturnObject<React.FocusEvent<HTMLInputElement>>\n ) => void\n}\n\nexport type InvalidDates = {\n invalidDate?: string\n invalidStartDate?: string\n invalidEndDate?: string\n}\n\nconst defaultProps: DatePickerInputProps = {\n maskOrder: 'dd/mm/yyyy',\n maskPlaceholder: 'dd/mm/åååå',\n separatorRegExp: /[-/ ]/g,\n statusState: 'error',\n opened: false,\n}\n\nfunction DatePickerInput(externalProps: DatePickerInputProps) {\n const props = { ...defaultProps, ...externalProps }\n\n const {\n isRange,\n maskOrder,\n separatorRegExp,\n id,\n title,\n submitAttributes,\n maskPlaceholder, // eslint-disable-line\n onFocus,\n onBlur,\n onChange, // eslint-disable-line\n onSubmit, // eslint-disable-line\n selectedDateTitle, // eslint-disable-line\n showInput, // eslint-disable-line\n inputElement,\n lang,\n disabled,\n skeleton,\n opened,\n size,\n status,\n statusState,\n statusProps,\n\n ...attributes\n } = props\n const [focusState, setFocusState] = useState<string>('virgin')\n\n const { partialDatesRef, setPartialDates } = usePartialDates()\n\n const invalidDatesRef = useRef<InvalidDates>({\n invalidStartDate: null,\n invalidEndDate: null,\n })\n const isDateFullyFilledOutRef = useRef(false)\n\n const {\n updateDates,\n callOnChangeHandler,\n getReturnObject,\n __startDay,\n __startMonth,\n __startYear,\n __endDay,\n __endMonth,\n __endYear,\n startDate,\n endDate,\n props: { onType, label, correctInvalidDate },\n } = useContext(DatePickerContext)\n\n const translation = useTranslation().DatePicker\n\n const hasHadValidDate = isValid(startDate) || isValid(endDate)\n\n const modeDate = useMemo(\n () => ({\n startDate,\n endDate,\n }),\n [startDate, endDate]\n )\n\n const inputDates = useMemo(\n () => ({\n __startDay,\n __startMonth,\n __startYear,\n __endDay,\n __endMonth,\n __endYear,\n }),\n [\n __startDay,\n __startMonth,\n __startYear,\n __endDay,\n __endMonth,\n __endYear,\n ]\n )\n\n const inputRefs = useRef<\n Record<string, MutableRefObject<HTMLInputElement>>\n >({\n startDayRef: { current: undefined },\n startMonthRef: { current: undefined },\n startYearRef: { current: undefined },\n endDayRef: { current: undefined },\n endMonthRef: { current: undefined },\n endYearRef: { current: undefined },\n })\n\n const dateRefs = useRef<Record<string, string>>({\n startDay: '',\n startMonth: '',\n startYear: '',\n endDay: '',\n endMonth: '',\n endYear: '',\n })\n\n // Keep dateRefs in sync with inputDates on re-render\n syncDateRefs(dateRefs, inputDates)\n\n const temporaryDates = useRef<Record<string, Date>>({\n startDate: undefined,\n endDate: undefined,\n })\n\n const refList = useRef<Array<MutableRefObject<HTMLInputElement>>>()\n\n const focusMode = useRef<string>()\n\n const maskList = useMemo(() => {\n const separators = maskOrder.match(separatorRegExp)\n\n return maskOrder\n .split(separatorRegExp)\n .reduce<Array<string>>((acc, cur) => {\n if (!cur) {\n return acc\n }\n\n acc.push(cur)\n\n if (separators.length > 0) {\n // makes sure that separators are added at the correct places and removed from array when added\n acc.push(separators.shift())\n }\n\n return acc\n }, [])\n }, [maskOrder, separatorRegExp])\n\n const pasteHandler = useCallback(\n async (event: React.ClipboardEvent<HTMLInputElement>) => {\n if (!focusMode.current) {\n return // Stop here\n }\n\n const success = (\n event.clipboardData ||\n (typeof window !== 'undefined' && window['clipboardData'])\n ).getData('text')\n\n if (!success) {\n return // Stop here\n }\n\n event.preventDefault()\n\n try {\n const separators = ['.', '/']\n const possibleFormats = ['yyyy-MM-dd']\n\n // TODO: Merge these loops\n possibleFormats.forEach((date) => {\n separators.forEach((sep) => {\n possibleFormats.push(date.replace(/-/g, sep))\n })\n })\n\n possibleFormats.forEach((date) => {\n possibleFormats.push(date.split('').reverse().join(''))\n })\n\n let date: Date\n let index = 0\n\n for (index; index < possibleFormats.length; ++index) {\n date = convertStringToDate(success, {\n dateFormat: possibleFormats[index],\n })\n\n if (date) {\n break\n }\n }\n\n const mode =\n focusMode.current === 'start' ? 'startDate' : 'endDate'\n\n if (date) {\n updateDates({\n [mode]: date,\n })\n }\n } catch (error: unknown) {\n warn(error)\n }\n },\n [updateDates]\n )\n\n const callOnChangeAsInvalid = useCallback(\n (state: {\n endDate?: Date\n starDate?: Date\n event: React.ChangeEvent<HTMLInputElement>\n }) => {\n updateDates(\n {\n hoverDate: null,\n },\n (dates) => {\n // Should fire if user has filled out an invalid date,\n // or if the date was valid. Like if the user has pressed backspace or removed the valid date.\n if (isDateFullyFilledOutRef.current || hasHadValidDate) {\n const { startDate, endDate, event } = {\n ...state,\n ...dates,\n }\n callOnChangeHandler({\n startDate,\n endDate,\n event,\n ...invalidDatesRef.current,\n })\n }\n }\n )\n },\n [updateDates, callOnChangeHandler, hasHadValidDate]\n )\n\n const callOnChange = useCallback(\n ({\n startDate,\n endDate,\n event,\n }: {\n startDate?: Date\n endDate?: Date\n event:\n | React.ChangeEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>\n }) => {\n const state = {}\n if (typeof startDate !== 'undefined' && isValid(startDate)) {\n state['startDate'] = startDate\n }\n if (!isRange) {\n endDate = startDate\n }\n if (typeof endDate !== 'undefined' && isValid(endDate)) {\n state['endDate'] = endDate\n }\n\n updateDates(state, (dates) => {\n if (\n (typeof startDate !== 'undefined' && isValid(startDate)) ||\n (typeof endDate !== 'undefined' && isValid(endDate))\n ) {\n callOnChangeHandler({\n event,\n ...dates,\n ...invalidDatesRef.current,\n })\n }\n })\n },\n [updateDates, callOnChangeHandler, isRange]\n )\n\n const callOnType = useCallback(\n ({ event }: { event: React.ChangeEvent<HTMLInputElement> }) => {\n const getDates = () =>\n ['start', 'end'].reduce(\n (acc, mode) => {\n acc[`${mode}Date`] = [\n dateRefs.current[`${mode}Year`] ||\n inputDates[`__${mode}Year`] ||\n 'yyyy',\n dateRefs.current[`${mode}Month`] ||\n inputDates[`__${mode}Month`] ||\n 'mm',\n dateRefs.current[`${mode}Day`] ||\n inputDates[`__${mode}Day`] ||\n 'dd',\n ].join('-')\n return acc\n },\n { startDate: undefined, endDate: undefined }\n )\n\n // Get the typed dates, so we can ...\n const { startDate, endDate } = getDates()\n\n // Get the partial dates, so we can know if something was typed or not in an optional date field\n setPartialDates({\n partialStartDate: startDate,\n // Only set endDate if in range mode\n ...(isRange && { partialEndDate: endDate }),\n })\n\n const parsedStartDate = parseISO(startDate)\n const parsedEndDate = parseISO(endDate)\n\n const isStartDateValid = isValid(parsedStartDate)\n const isEndDateValid = isValid(parsedEndDate)\n\n const {\n is_valid,\n is_valid_start_date,\n is_valid_end_date,\n ...returnObject\n } = getReturnObject({\n startDate: isStartDateValid ? parsedStartDate : null,\n endDate: isEndDateValid ? parsedEndDate : null,\n event,\n ...partialDatesRef.current,\n ...invalidDatesRef.current,\n })\n\n // Re-assigns dates to the typed date, instead of `null` from getReturnObject, if dates are invalid\n const typedDates = {\n ...(!isRange && is_valid === false && { date: startDate }),\n ...(isRange &&\n is_valid_start_date === false && { start_date: startDate }),\n ...(isRange &&\n is_valid_end_date === false && { end_date: endDate }),\n }\n\n onType?.({\n is_valid,\n is_valid_start_date,\n is_valid_end_date,\n ...returnObject,\n ...typedDates,\n })\n },\n [\n setPartialDates,\n isRange,\n getReturnObject,\n partialDatesRef,\n onType,\n inputDates,\n ]\n )\n\n const setDate = useCallback(\n (\n event: React.ChangeEvent<HTMLInputElement>,\n mode: 'start' | 'end',\n type: 'Day' | 'Month' | 'Year'\n ) => {\n event.persist() // since we have later a state update and afterwards the callback\n\n const value = (event.target as HTMLInputElement).value\n\n dateRefs.current[`${mode}${type}`] = value\n\n if (modeDate[`${mode}Date`]) {\n temporaryDates.current[`${mode}Date`] = modeDate[`${mode}Date`]\n }\n\n const fallback = temporaryDates.current[`${mode}Date`]\n\n // provide fallbacks to create a temp fallback\n const year =\n dateRefs.current[`${mode}Year`] ||\n (fallback && fallback.getFullYear())\n const month =\n dateRefs.current[`${mode}Month`] ||\n (fallback && fallback.getMonth() + 1)\n const day =\n dateRefs.current[`${mode}Day`] || (fallback && fallback.getDate())\n\n // calculate new date\n const date = new Date(\n parseFloat(String(year)),\n parseFloat(String(month)) - 1,\n parseFloat(String(day))\n )\n\n const isValidDate =\n !/[^0-9]/.test(String(day)) &&\n !/[^0-9]/.test(String(month)) &&\n !/[^0-9]/.test(String(year)) &&\n isValid(date) &&\n date.getDate() == parseFloat(String(day)) &&\n date.getMonth() + 1 == parseFloat(String(month)) &&\n date.getFullYear() == parseFloat(String(year))\n\n const dateString = `${year}-${month}-${day}`\n\n isDateFullyFilledOutRef.current =\n /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(dateString)\n\n // update the date\n if (isValidDate) {\n invalidDatesRef.current = {\n ...invalidDatesRef.current,\n ...(mode === 'start'\n ? { invalidStartDate: null }\n : { invalidEndDate: null }),\n }\n\n callOnChange({\n [`${mode}Date`]: date,\n event,\n })\n } else {\n updateDates({\n [`${mode}Date`]: null,\n [`__${mode}${type}`]: value,\n })\n\n invalidDatesRef.current = {\n ...invalidDatesRef.current,\n ...(mode === 'start'\n ? { invalidStartDate: dateString }\n : { invalidEndDate: dateString }),\n }\n\n callOnChangeAsInvalid({\n [`${mode}Date`]: null,\n event,\n })\n }\n\n callOnType({ event })\n },\n [\n updateDates,\n callOnChange,\n callOnChangeAsInvalid,\n callOnType,\n modeDate,\n dateRefs,\n temporaryDates,\n ]\n )\n\n const dateSetters = useMemo(\n () => ({\n set_startDay: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'start', 'Day')\n },\n\n set_startMonth: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'start', 'Month')\n },\n\n set_startYear: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'start', 'Year')\n },\n\n set_endDay: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'end', 'Day')\n },\n\n set_endMonth: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'end', 'Month')\n },\n\n set_endYear: (event: React.ChangeEvent<HTMLInputElement>) => {\n setDate(event, 'end', 'Year')\n },\n }),\n [setDate]\n )\n\n const onFocusHandler = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocusState('focus')\n\n onFocus?.({\n ...event,\n ...getReturnObject({ event }),\n })\n\n if (isNaN(parseFloat(event.target.value))) {\n setCursorPosition(event.target)\n }\n },\n [getReturnObject, onFocus]\n )\n\n const onBlurHandler = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n focusMode.current = null\n setFocusState('blur')\n\n onBlur?.({\n ...event,\n ...getReturnObject({ event, ...partialDatesRef.current }),\n })\n },\n [onBlur, getReturnObject, partialDatesRef]\n )\n\n const onKeyDownHandler = useCallback(\n async (event: React.KeyboardEvent<HTMLInputElement>) => {\n const keyCode = event.key\n const target = event.target as HTMLInputElement\n\n if (\n correctInvalidDate &&\n target.selectionStart !== target.selectionEnd\n ) {\n setCursorPosition(target)\n }\n\n // The rest is for value entry\n\n const size = parseFloat(target.getAttribute('size'))\n const firstSelectionStart = target.selectionStart\n const firstSelectionEnd = target.selectionEnd\n\n // To get the correct position afterwards.\n // Use 10ms in order to make it work on iOS Safari\n await wait(IS_IOS ? 10 : 1)\n\n const secondSelectionStart = target.selectionStart\n\n // Always false (since the old keycode function set number keys to undefined) but needed to not break tests\n const isValid = /[0-9]/g.test(keyCode)\n const refListArray = refList.current\n\n const index = refListArray.findIndex(\n ({ current }) => current === target\n )\n\n const isLastChar = secondSelectionStart === size\n const isFirstChar = firstSelectionStart === size\n\n const isMovingForward =\n keyCode !== 'ArrowLeft' &&\n keyCode !== 'Backspace' &&\n isValid &&\n isLastChar\n\n const isExplicitForward =\n (keyCode === 'ArrowRight' || keyCode === 'Enter') && isFirstChar\n\n const hasNextField = index < refListArray.length - 1\n\n if (hasNextField && (isMovingForward || isExplicitForward)) {\n // stop in case there is no next input element\n if (!refListArray[index + 1].current) {\n return // stop here\n }\n const nextSibling = refListArray[index + 1]?.current\n\n if (nextSibling) {\n setCursorPosition(nextSibling, 0, { withoutDelay: true })\n }\n\n // When the cursor is at the end of the input\n // and the user types a number, we want to set the value on the next input.\n if (\n parseFloat(keyCode) <= 9 &&\n firstSelectionStart === target.size\n ) {\n const name = toCapitalized(\n nextSibling\n .getAttribute('class')\n .match(/__input--(day|month|year)($|\\s)/)[1]\n )\n const mode = nextSibling\n .getAttribute('id')\n .match(/-(start|end)-(day|month|year)/)[1]\n\n dateSetters[`set_${mode}${name}`]({\n persist: () => null,\n ...event,\n target: {\n value: keyCode + nextSibling.value.slice(1),\n },\n })\n\n setCursorPosition(nextSibling, 1)\n }\n } else if (index > 0 && firstSelectionStart === firstSelectionEnd) {\n const isMovingBackward =\n keyCode === 'ArrowLeft' && firstSelectionStart === 0\n const isPressingBackspace =\n keyCode === 'Backspace' && firstSelectionStart <= 1\n\n if (isMovingBackward || isPressingBackspace) {\n const prevSibling = refListArray[index - 1]?.current\n if (prevSibling) {\n const endPos = prevSibling.value.length\n setCursorPosition(prevSibling, endPos, {\n withoutDelay: true,\n })\n }\n }\n }\n },\n [correctInvalidDate, dateSetters]\n )\n\n const onInputHandler = useCallback(\n (event) => {\n const target = event.currentTarget\n\n // Add support for \"backspace\" on Android virtual keyboard\n if (\n IS_ANDROID &&\n event.nativeEvent.inputType === 'deleteContentBackward' &&\n target.selectionStart === 0 &&\n target.selectionEnd === 0\n ) {\n onKeyDownHandler({\n ...event,\n key: 'Backspace',\n })\n }\n },\n [onKeyDownHandler]\n )\n\n const getPlaceholderChar = useCallback(\n (value: string) => {\n const index = maskOrder.indexOf(value)\n return maskPlaceholder[index]\n },\n [maskOrder, maskPlaceholder]\n )\n\n // TODO: Replace with MultiInputMask\n const generateDateList = useCallback(\n (\n element: Omit<React.HTMLProps<HTMLInputElement>, 'size'> &\n DatePickerEventAttributes,\n mode: 'start' | 'end'\n ) => {\n return maskList.map((value, i) => {\n const state = value.slice(0, 1)\n const placeholderChar = getPlaceholderChar(value)\n const { day, month, year } = translation\n const isRangeLabel = isRange ? `${translation[mode]} ` : ''\n\n if (!separatorRegExp.test(value)) {\n if (!inputElement) {\n element = {\n ...element,\n onInput: onInputHandler,\n onKeyDown: onKeyDownHandler,\n onPaste: pasteHandler,\n onFocus: (e) => {\n focusMode.current = mode\n onFocusHandler(e)\n },\n onBlur: onBlurHandler,\n placeholderChar,\n }\n }\n\n // this makes it possible to use a vanilla <input /> like: input_element=\"input\"\n const DateField =\n inputElement && React.isValidElement(inputElement)\n ? inputElement.type\n : InputElement\n\n const inputSizeClassName =\n size && `dnb-date-picker__input--${size}`\n\n switch (state) {\n case 'd':\n refList.current.push(inputRefs.current[`${mode}DayRef`])\n\n return (\n <React.Fragment key={'dd' + i}>\n <DateField\n {...element}\n id={`${id}-${mode}-day`}\n key={'di' + i}\n className={classnames(\n element.className,\n 'dnb-date-picker__input',\n 'dnb-date-picker__input--day',\n inputSizeClassName\n )}\n size={2}\n mask={[/[0-9]/, /[0-9]/]}\n inputRef={inputRefs.current[`${mode}DayRef`]}\n onChange={dateSetters[`set_${mode}Day`]}\n value={inputDates[`__${mode}Day`] || ''}\n aria-labelledby={`${id}-${mode}-day-label`}\n />\n <label\n key={'dl' + i}\n hidden\n id={`${id}-${mode}-day-label`}\n htmlFor={`${id}-${mode}-day`}\n >\n {isRangeLabel + day}\n </label>\n </React.Fragment>\n )\n case 'm':\n refList.current.push(inputRefs.current[`${mode}MonthRef`])\n\n return (\n <React.Fragment key={'mm' + i}>\n <DateField\n {...element}\n id={`${id}-${mode}-month`}\n key={'mi' + i}\n className={classnames(\n element.className,\n 'dnb-date-picker__input',\n 'dnb-date-picker__input--month',\n inputSizeClassName\n )}\n size={2}\n mask={[/[0-9]/, /[0-9]/]}\n inputRef={inputRefs.current[`${mode}MonthRef`]}\n onChange={dateSetters[`set_${mode}Month`]}\n value={inputDates[`__${mode}Month`] || ''}\n aria-labelledby={`${id}-${mode}-month-label`}\n />\n <label\n key={'ml' + i}\n hidden\n id={`${id}-${mode}-month-label`}\n htmlFor={`${id}-${mode}-month`}\n >\n {isRangeLabel + month}\n </label>\n </React.Fragment>\n )\n case 'y':\n refList.current.push(inputRefs.current[`${mode}YearRef`])\n\n return (\n <React.Fragment key={'yy' + i}>\n <DateField\n {...element}\n id={`${id}-${mode}-year`}\n key={'yi' + i}\n className={classnames(\n element.className,\n 'dnb-date-picker__input',\n 'dnb-date-picker__input--year',\n inputSizeClassName\n )}\n size={4}\n mask={[/[0-9]/, /[0-9]/, /[0-9]/, /[0-9]/]}\n inputRef={inputRefs.current[`${mode}YearRef`]}\n onChange={dateSetters[`set_${mode}Year`]}\n value={inputDates[`__${mode}Year`] || ''}\n aria-labelledby={`${id}-${mode}-year-label`}\n />\n <label\n key={'yl' + i}\n hidden\n id={`${id}-${mode}-year-label`}\n htmlFor={`${id}-${mode}-year`}\n >\n {isRangeLabel + year}\n </label>\n </React.Fragment>\n )\n }\n }\n return (\n <span\n key={'s' + i}\n className=\"dnb-date-picker--separator\"\n aria-hidden\n >\n {placeholderChar}\n </span>\n )\n })\n },\n [\n maskList,\n getPlaceholderChar,\n translation,\n isRange,\n separatorRegExp,\n inputElement,\n size,\n onInputHandler,\n onKeyDownHandler,\n pasteHandler,\n onBlurHandler,\n onFocusHandler,\n id,\n dateSetters,\n inputDates,\n ]\n )\n\n const renderInputElement = useCallback(\n (\n element: React.HTMLProps<HTMLInputElement> &\n DatePickerEventAttributes\n ) => {\n refList.current = []\n const startDateList = generateDateList(element, 'start')\n const endDateList = generateDateList(element, 'end')\n\n return (\n <span\n id={`${id}-input`}\n className=\"dnb-date-picker__input__wrapper\"\n >\n {startDateList}\n {isRange && (\n <span className=\"dnb-date-picker--separator\" aria-hidden>\n {' – '}\n </span>\n )}\n {isRange && endDateList}\n </span>\n )\n },\n [id, isRange, generateDateList]\n )\n\n const ariaLabel = useMemo(\n () =>\n selectedDateTitle\n ? `${selectedDateTitle}, ${translation.openPickerText}`\n : translation.openPickerText,\n [selectedDateTitle, translation]\n )\n\n validateDOMAttributes(props, attributes)\n validateDOMAttributes(null, submitAttributes)\n\n const SubmitElement: React.ElementType = useMemo(\n () => (showInput ? SubmitButton : Button),\n [showInput]\n )\n\n if (!showInput) {\n // Use Button inner ref\n submitAttributes.innerRef = submitAttributes.ref\n submitAttributes.ref = null\n }\n\n return (\n <fieldset className=\"dnb-date-picker__fieldset\" lang={lang}>\n {label && <legend className=\"dnb-sr-only\">{label}</legend>}\n <Input\n id={`${id}__input`}\n input_state={disabled ? 'disabled' : focusState}\n input_element={\n inputElement && typeof inputElement !== 'string'\n ? typeof inputElement === 'function'\n ? inputElement(props)\n : inputElement\n : renderInputElement\n }\n disabled={disabled || skeleton}\n skeleton={skeleton}\n size={size}\n status={!opened ? status : null}\n status_state={statusState}\n {...statusProps}\n submit_element={\n <SubmitElement\n id={id}\n disabled={disabled}\n skeleton={skeleton}\n className={classnames(\n showInput && 'dnb-button--input-button',\n opened ? 'dnb-button--active' : null\n )}\n aria-label={ariaLabel}\n title={title}\n size={size}\n status={status}\n status_state={statusState}\n type=\"button\"\n icon=\"calendar\"\n variant=\"secondary\"\n on_submit={onSubmit}\n on_click={onSubmit}\n {...submitAttributes}\n {...statusProps}\n />\n }\n lang={lang}\n {...attributes}\n />\n </fieldset>\n )\n}\n\nexport default DatePickerInput\n\nfunction setCursorPosition(\n target: HTMLInputElement,\n position = 0,\n options?: { withoutDelay?: boolean }\n) {\n target.focus()\n\n const select = () => {\n target.setSelectionRange(position, position)\n }\n\n // Delay for correct iOS Safari appearance\n if (!options?.withoutDelay && process.env.NODE_ENV !== 'test') {\n setTimeout(select, 0)\n } else {\n select()\n }\n}\n\nfunction InputElement({ className, value, ...props }: TextMaskProps) {\n return (\n <TextMask\n guide={true}\n inputMode=\"numeric\"\n showMask={true}\n keepCharPositions={false} // so we can overwrite next value, if it already exists\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n spellCheck={false}\n autoCorrect=\"off\"\n className={classnames(\n className,\n /\\d+/.test(String(value)) && 'dnb-date-picker__input--highlight'\n )}\n value={value}\n {...props}\n />\n )\n}\n\nfunction syncDateRefs(\n dateRefs: React.MutableRefObject<Record<string, string>>,\n inputDates: DatePickerInputDates\n) {\n for (const date in dateRefs.current) {\n const dateRefValue = dateRefs.current[date]\n const inputDateValue = inputDates[`__${date}`]\n\n if (dateRefValue !== inputDateValue) {\n dateRefs.current[date] = inputDateValue\n }\n }\n}\n\nconst wait = (duration: number) =>\n new Promise((r) => setTimeout(r, duration))\n"],"mappings":"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","ignoreList":[]}
|