@opengeoweb/shared 4.6.1 → 4.7.1

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/index.esm.js CHANGED
@@ -8,6 +8,7 @@ import { throttle } from 'lodash';
8
8
  import Draggable from 'react-draggable';
9
9
  import { Resizable } from 're-resizable';
10
10
  import { useStore } from 'react-redux';
11
+ import { parseISO, parse, format, isEqual, isBefore, isAfter } from 'date-fns';
11
12
 
12
13
  /*! *****************************************************************************
13
14
  Copyright (c) Microsoft Corporation.
@@ -581,7 +582,9 @@ var useDraftFormHelpers = function useDraftFormHelpers() {
581
582
  register = _useFormContext.register;
582
583
 
583
584
  React.useEffect(function () {
584
- setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDefaultDraft); // eslint-disable-next-line react-hooks/exhaustive-deps
585
+ setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDefaultDraft, {
586
+ shouldDirty: false
587
+ }); // eslint-disable-next-line react-hooks/exhaustive-deps
585
588
  }, []);
586
589
 
587
590
  var isDraft = function isDraft() {
@@ -597,7 +600,9 @@ var useDraftFormHelpers = function useDraftFormHelpers() {
597
600
  };
598
601
 
599
602
  var toggleIsDraft = function toggleIsDraft(isDraft) {
600
- return setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDraft);
603
+ return setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDraft, {
604
+ shouldDirty: false
605
+ });
601
606
  };
602
607
 
603
608
  var DraftFieldHelper = function DraftFieldHelper() {
@@ -1918,15 +1923,13 @@ var DraggableComponent = function DraggableComponent(_a) {
1918
1923
  leftHeaderComponent = _a$leftHeaderComponen === void 0 ? null : _a$leftHeaderComponen,
1919
1924
  _a$rightHeaderCompone = _a.rightHeaderComponent,
1920
1925
  rightHeaderComponent = _a$rightHeaderCompone === void 0 ? null : _a$rightHeaderCompone,
1921
- _a$hasElevation = _a.hasElevation,
1922
- hasElevation = _a$hasElevation === void 0 ? true : _a$hasElevation,
1923
1926
  className = _a.className,
1924
1927
  _a$sx = _a.sx,
1925
1928
  sx = _a$sx === void 0 ? {} : _a$sx,
1926
- props = __rest(_a, ["title", "bounds", "headerSize", "startSize", "startPosition", "children", "isOpen", "onClose", "initialMaxHeight", "onChangeSize", "onMouseDown", "onResizeStop", "onDragEnd", "order", "source", "leftHeaderComponent", "rightHeaderComponent", "hasElevation", "className", "sx"]);
1929
+ props = __rest(_a, ["title", "bounds", "headerSize", "startSize", "startPosition", "children", "isOpen", "onClose", "initialMaxHeight", "onChangeSize", "onMouseDown", "onResizeStop", "onDragEnd", "order", "source", "leftHeaderComponent", "rightHeaderComponent", "className", "sx"]);
1927
1930
 
1928
1931
  var zIndex = (source === 'app' ? BASE_Z_INDEX : 1000) + order;
1929
- var elevation = hasElevation ? BASE_ELEVATION + order : 0;
1932
+ var elevation = BASE_ELEVATION + order;
1930
1933
  var nodeRef = React__default.useRef(null);
1931
1934
 
1932
1935
  var _React$useState = React__default.useState({
@@ -3299,4 +3302,245 @@ var getWarningMessage = function getWarningMessage(error) {
3299
3302
  // temporary check until we get the unit test passing with container queries
3300
3303
  var IS_JEST = typeof jest !== 'undefined';
3301
3304
 
3302
- export { AlertBanner, AlertIcon, AppHeader, AppLayout, Avatar, ConfirmationDialog, ConfirmationServiceProvider, CustomAccordion, CustomSlider, CustomToggleButton, CustomTooltip, DEFAULT_ERROR_MESSAGE, DraggableComponent$1 as Draggable, EnableButton, ErrorBoundary, HIDDEN_INPUT_HELPER_IS_DRAFT, IS_JEST, ManagerButton, ManagerDeleteButton, ResizeComponent as Resizable, StatusTag, ToggleMenu, ToolButton, ToolContainer, DraggableComponent as ToolContainerDraggable, ToolFooter, ToolHeader, TooltipSelect, UserMenu, UserMenuItemCheatSheet, MenuItemTheme as UserMenuItemTheme, adjustPosition, calculateDialogSizeAndPosition, defaultDelay, getAxiosErrorMessage, getAxiosWarningMessage, getErrorMessage, getInitials, getPosition, getWarningMessage, isAxiosError, showPrompt, sliderHeaderStyle, tooltipContainerStyles, useConfirmationDialog, useControlledTooltip, useDialogActions, useDraftFormHelpers, useIsMounted, useMakeSureContainerStaysInsideWindow, usePoller, usePreventBrowserClose, usePrevious, useUserMenu, withEggs };
3305
+ /* *
3306
+ * Licensed under the Apache License, Version 2.0 (the "License");
3307
+ * you may not use this file except in compliance with the License.
3308
+ * You may obtain a copy of the License at
3309
+ *
3310
+ * http://www.apache.org/licenses/LICENSE-2.0
3311
+ *
3312
+ * Unless required by applicable law or agreed to in writing, software
3313
+ * distributed under the License is distributed on an "AS IS" BASIS,
3314
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3315
+ * See the License for the specific language governing permissions and
3316
+ * limitations under the License.
3317
+ *
3318
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3319
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
3320
+ * */
3321
+ /**
3322
+ * Parsing date strings with geoweb dateUtils:
3323
+ *
3324
+ * An ISO String *with timezone* can safely be parsed directly to a date:
3325
+ *
3326
+ * date = new Date('2022-10-10T15:30:00Z')
3327
+ * date = new Date('2022-10-10T15:30:00+00:00')
3328
+ * date = new Date('2022-10-10T15:30:00+02:00')
3329
+ *
3330
+ * or using the dateUtils isoStringToDate function *with utc=false*
3331
+ *
3332
+ * date = isoStringToDate('2022-10-10T15:30:00Z', false)
3333
+ *
3334
+ * An ISO String *without a timezone* can be parsed with isoStringToDate
3335
+ *
3336
+ * date = isoStringToDate('2022-10-10T15:30:00')
3337
+ *
3338
+ * *Do not parse ISO without timezone using `new Date()` unless you correct for the local timezone*
3339
+ *
3340
+ * To parse an arbitrary date string with timezone use:
3341
+ *
3342
+ * date = stringToDate('2022.11.10, 11:15 +01:00', 'yyyy.MM.dd, HH:mm xxx', false)
3343
+ *
3344
+ * To parse an arbitrary date string without timezone use:
3345
+ *
3346
+ * date = stringToDate('2022.11.10, 11:15', 'yyyy.MM.dd, HH:mm')
3347
+ *
3348
+ *
3349
+ * To safely convert dates to utc strings use:
3350
+ *
3351
+ * date.toISOString()
3352
+ *
3353
+ * To get parts of UTC time use
3354
+ *
3355
+ * date.getUTCHours()
3356
+ * date.getUTCMins()
3357
+ *
3358
+ * To parse an arbitrary date string to a UTC string use:
3359
+ *
3360
+ * dateToString(new Date('2022-10-10T15:30:00Z', 'HH:ss dd MMM yyyy')
3361
+ *
3362
+ */
3363
+
3364
+ /**
3365
+ * Parse an ISO string to a date
3366
+ *
3367
+ * Expects the following props:
3368
+ * @param {string} input - string containing date
3369
+ *
3370
+ * @returns {Date} Date
3371
+ * @example
3372
+ * ``` isoStringToDate("2022-5-10T20:32:00+00:00")) ```
3373
+ */
3374
+
3375
+ var isoStringToDate = function isoStringToDate(input) {
3376
+ var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
3377
+ var parsed = parseISO(input);
3378
+
3379
+ if (utc) {
3380
+ return setUTCDate(parsed);
3381
+ }
3382
+
3383
+ return parsed;
3384
+ };
3385
+ /**
3386
+ * Parse a string to a date
3387
+ *
3388
+ * ***NOTE: String will be parsed in local time if utc is set to false***
3389
+ *
3390
+ * Expects the following props:
3391
+ * @param {string} input - string containing date
3392
+ * @param {string} strFormat - format of the string, see: https://date-fns.org/v2.29.3/docs/parse
3393
+ * @param {boolean} utc [ default = true ] - boolean indicating whether to parse as UTC
3394
+ * @param {Date} referenceDate [ default = new Date() ] - defines values missing from the parsed dateString
3395
+ *
3396
+ * @returns {Date} Date
3397
+ * @example
3398
+ * ``` stringToDate("2022 5 10 20:32", 'yyyy M d HH:mm')) ```
3399
+ */
3400
+
3401
+ var stringToDate = function stringToDate(input, strFormat) {
3402
+ var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
3403
+ var referenceDate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Date();
3404
+ var parsed = parse(input, strFormat, referenceDate);
3405
+
3406
+ if (utc) {
3407
+ return setUTCDate(parsed);
3408
+ }
3409
+
3410
+ return parsed;
3411
+ };
3412
+ /**
3413
+ * Use this if you initialise a date without a timezone to set it to utc correctly
3414
+ * eg.
3415
+ * new Date(2022, 10, 12, 15, 30)
3416
+ * should be:
3417
+ * setUTCDate(new Date(2022, 10, 12, 15, 30))
3418
+ *
3419
+ * Expects the following props:
3420
+ * @param {Date} inDate - date to be set to UTC
3421
+ *
3422
+ * @returns {Date} - Date in UTC
3423
+ * @example
3424
+ * ``` setUTCDate(new Date(2022, 10, 12, 15, 30)) ```
3425
+ */
3426
+
3427
+ var setUTCDate = function setUTCDate(inDate) {
3428
+ var utcDate = new Date(inDate);
3429
+ utcDate.setUTCFullYear(inDate.getFullYear(), inDate.getMonth(), inDate.getDate());
3430
+ utcDate.setUTCHours(inDate.getHours(), inDate.getMinutes(), inDate.getSeconds(), inDate.getMilliseconds());
3431
+ return utcDate;
3432
+ };
3433
+ /**
3434
+ * Format a date to a string
3435
+ *
3436
+ * Expects the following props:
3437
+ * @param {Date} inDate - date to be formatted
3438
+ * @param {string} strFormat - format of string
3439
+ * @param {boolean} utc - [default: true] true to return in utc otherwise return in local timezone
3440
+ *
3441
+ * @returns {string} - formatted date string
3442
+ * @example
3443
+ * ``` dateToString(new Date(2022, 10, 12, 15, 30), 'dd MMM yyyy') ```
3444
+ */
3445
+
3446
+ var dateToString = function dateToString(inDate, strFormat) {
3447
+ var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
3448
+
3449
+ if (utc) {
3450
+ return format(new Date(inDate.getUTCFullYear(), inDate.getUTCMonth(), inDate.getUTCDate(), inDate.getUTCHours(), inDate.getUTCMinutes(), inDate.getUTCSeconds()), strFormat);
3451
+ }
3452
+
3453
+ return format(inDate, strFormat);
3454
+ };
3455
+ /**
3456
+ * Find out if a date is between two other dates.
3457
+ *
3458
+ * Inclusivity parameter matches that used in momentjs where '[' indicates inclusion and '(' indicates exclusion.
3459
+ *
3460
+ * Expects the following props:
3461
+ * @param {Date} date - date to be tested
3462
+ * @param {Date} from - first date
3463
+ * @param {Date} to - last date
3464
+ * @param {string} inclusivity - [default: '()'] Must be one of : '()', '[]', '(]', '[)'
3465
+ *
3466
+ * @returns {boolen} - true if date is between, otherwise false
3467
+ *
3468
+ */
3469
+
3470
+ var isBetween = function isBetween(date, from, to) {
3471
+ var inclusivity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '()';
3472
+
3473
+ if (!['()', '[]', '(]', '[)'].includes(inclusivity)) {
3474
+ throw new Error('Inclusivity parameter must be one of (), [], (], [)');
3475
+ }
3476
+
3477
+ var isBeforeEqual = inclusivity[0] === '[';
3478
+ var isAfterEqual = inclusivity[1] === ']';
3479
+ return (isBeforeEqual ? isEqual(from, date) || isBefore(from, date) : isBefore(from, date)) && (isAfterEqual ? isEqual(to, date) || isAfter(to, date) : isAfter(to, date));
3480
+ };
3481
+ /**
3482
+ * Creates a new Date object with the specified date and time, or the current date and time if no arguments are provided.
3483
+ *
3484
+ * @param yearOrIsoString The year for the new Date object, or an ISO-formatted string representing the date and time.
3485
+ * @param month The month for the new Date object (0-11).
3486
+ * @param day The day for the new Date object (1-31).
3487
+ * @param hours The hour for the new Date object (0-23).
3488
+ * @param minutes The minute for the new Date object (0-59).
3489
+ * @param seconds The second for the new Date object (0-59).
3490
+ * @param milliseconds The millisecond for the new Date object (0-999).
3491
+ * @returns A new Date object with the specified date and time, or the current date and time if no arguments are provided.
3492
+ *
3493
+ * @example
3494
+ * createDate(2022, 11, 13);
3495
+ * // => 2022-12-13T00:00:00.000Z
3496
+ *
3497
+ * @example
3498
+ * createDate('2022-12-13T00:00:00.000Z');
3499
+ * // => 2022-12-13T00:00:00.000Z
3500
+ */
3501
+
3502
+ var createDate = function createDate(yearOrIsoString, month, day) {
3503
+ var hours = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
3504
+ var minutes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
3505
+ var seconds = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
3506
+ var milliseconds = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
3507
+
3508
+ if (yearOrIsoString === undefined) {
3509
+ return new Date();
3510
+ }
3511
+
3512
+ if (typeof yearOrIsoString === 'string') {
3513
+ return new Date(yearOrIsoString);
3514
+ }
3515
+
3516
+ return new Date(yearOrIsoString, month, day, hours, minutes, seconds, milliseconds);
3517
+ };
3518
+
3519
+ /* *
3520
+ * Licensed under the Apache License, Version 2.0 (the "License");
3521
+ * you may not use this file except in compliance with the License.
3522
+ * You may obtain a copy of the License at
3523
+ *
3524
+ * http://www.apache.org/licenses/LICENSE-2.0
3525
+ *
3526
+ * Unless required by applicable law or agreed to in writing, software
3527
+ * distributed under the License is distributed on an "AS IS" BASIS,
3528
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3529
+ * See the License for the specific language governing permissions and
3530
+ * limitations under the License.
3531
+ *
3532
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3533
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
3534
+ * */
3535
+
3536
+ var index = /*#__PURE__*/Object.freeze({
3537
+ __proto__: null,
3538
+ isoStringToDate: isoStringToDate,
3539
+ stringToDate: stringToDate,
3540
+ setUTCDate: setUTCDate,
3541
+ dateToString: dateToString,
3542
+ isBetween: isBetween,
3543
+ createDate: createDate
3544
+ });
3545
+
3546
+ export { AlertBanner, AlertIcon, AppHeader, AppLayout, Avatar, ConfirmationDialog, ConfirmationServiceProvider, CustomAccordion, CustomSlider, CustomToggleButton, CustomTooltip, DEFAULT_ERROR_MESSAGE, DraggableComponent$1 as Draggable, EnableButton, ErrorBoundary, HIDDEN_INPUT_HELPER_IS_DRAFT, IS_JEST, ManagerButton, ManagerDeleteButton, ResizeComponent as Resizable, StatusTag, ToggleMenu, ToolButton, ToolContainer, DraggableComponent as ToolContainerDraggable, ToolFooter, ToolHeader, TooltipSelect, UserMenu, UserMenuItemCheatSheet, MenuItemTheme as UserMenuItemTheme, adjustPosition, calculateDialogSizeAndPosition, index as dateUtils, defaultDelay, getAxiosErrorMessage, getAxiosWarningMessage, getErrorMessage, getInitials, getPosition, getWarningMessage, isAxiosError, showPrompt, sliderHeaderStyle, tooltipContainerStyles, useConfirmationDialog, useControlledTooltip, useDialogActions, useDraftFormHelpers, useIsMounted, useMakeSureContainerStaysInsideWindow, usePoller, usePreventBrowserClose, usePrevious, useUserMenu, withEggs };
package/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@mui/material'), require('@opengeoweb/theme'), require('react-hook-form'), require('@opengeoweb/form-fields'), require('lodash'), require('react-draggable'), require('re-resizable'), require('react-redux')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'react', '@mui/material', '@opengeoweb/theme', 'react-hook-form', '@opengeoweb/form-fields', 'lodash', 'react-draggable', 're-resizable', 'react-redux'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Shared = {}, global.React, global.material, global.theme, global.reactHookForm, global.formFields, global.lodash, global.Draggable, global.reResizable, global.reactRedux));
5
- })(this, (function (exports, React, material, theme, reactHookForm, formFields, lodash, Draggable, reResizable, reactRedux) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@mui/material'), require('@opengeoweb/theme'), require('react-hook-form'), require('@opengeoweb/form-fields'), require('lodash'), require('react-draggable'), require('re-resizable'), require('react-redux'), require('date-fns')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'react', '@mui/material', '@opengeoweb/theme', 'react-hook-form', '@opengeoweb/form-fields', 'lodash', 'react-draggable', 're-resizable', 'react-redux', 'date-fns'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Shared = {}, global.React, global.material, global.theme, global.reactHookForm, global.formFields, global.lodash, global.Draggable, global.reResizable, global.reactRedux, global.dateFns));
5
+ })(this, (function (exports, React, material, theme, reactHookForm, formFields, lodash, Draggable, reResizable, reactRedux, dateFns) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -450,7 +450,9 @@
450
450
  register = _a.register;
451
451
 
452
452
  React__namespace.useEffect(function () {
453
- setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDefaultDraft); // eslint-disable-next-line react-hooks/exhaustive-deps
453
+ setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDefaultDraft, {
454
+ shouldDirty: false
455
+ }); // eslint-disable-next-line react-hooks/exhaustive-deps
454
456
  }, []);
455
457
 
456
458
  var isDraft = function isDraft() {
@@ -466,7 +468,9 @@
466
468
  };
467
469
 
468
470
  var toggleIsDraft = function toggleIsDraft(isDraft) {
469
- return setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDraft);
471
+ return setValue(HIDDEN_INPUT_HELPER_IS_DRAFT, isDraft, {
472
+ shouldDirty: false
473
+ });
470
474
  };
471
475
 
472
476
  var DraftFieldHelper = function DraftFieldHelper() {
@@ -1776,27 +1780,25 @@
1776
1780
  leftHeaderComponent = _q === void 0 ? null : _q,
1777
1781
  _r = _a.rightHeaderComponent,
1778
1782
  rightHeaderComponent = _r === void 0 ? null : _r,
1779
- _s = _a.hasElevation,
1780
- hasElevation = _s === void 0 ? true : _s,
1781
1783
  className = _a.className,
1782
- _t = _a.sx,
1783
- sx = _t === void 0 ? {} : _t,
1784
- props = __rest(_a, ["title", "bounds", "headerSize", "startSize", "startPosition", "children", "isOpen", "onClose", "initialMaxHeight", "onChangeSize", "onMouseDown", "onResizeStop", "onDragEnd", "order", "source", "leftHeaderComponent", "rightHeaderComponent", "hasElevation", "className", "sx"]);
1784
+ _s = _a.sx,
1785
+ sx = _s === void 0 ? {} : _s,
1786
+ props = __rest(_a, ["title", "bounds", "headerSize", "startSize", "startPosition", "children", "isOpen", "onClose", "initialMaxHeight", "onChangeSize", "onMouseDown", "onResizeStop", "onDragEnd", "order", "source", "leftHeaderComponent", "rightHeaderComponent", "className", "sx"]);
1785
1787
 
1786
1788
  var zIndex = (source === 'app' ? BASE_Z_INDEX : 1000) + order;
1787
- var elevation = hasElevation ? BASE_ELEVATION + order : 0;
1789
+ var elevation = BASE_ELEVATION + order;
1788
1790
  var nodeRef = React__default["default"].useRef(null);
1789
1791
 
1790
- var _u = __read(React__default["default"].useState({
1792
+ var _t = __read(React__default["default"].useState({
1791
1793
  x: 0,
1792
1794
  y: 0
1793
1795
  }), 2),
1794
- position = _u[0],
1795
- setPosition = _u[1];
1796
+ position = _t[0],
1797
+ setPosition = _t[1];
1796
1798
 
1797
- var _v = __read(React__default["default"].useState(startSize), 2),
1798
- size = _v[0],
1799
- setSize = _v[1];
1799
+ var _u = __read(React__default["default"].useState(startSize), 2),
1800
+ size = _u[0],
1801
+ setSize = _u[1];
1800
1802
 
1801
1803
  var isRightAligned = startPosition && startPosition.right !== null && startPosition.right !== undefined;
1802
1804
  var onStopDrag = React__default["default"].useCallback(function (_event, position) {
@@ -1804,13 +1806,13 @@
1804
1806
  onDragEnd(position, size);
1805
1807
  }, [setPosition, onDragEnd, size]);
1806
1808
 
1807
- var _w = __read(React__default["default"].useState(defaultInitialMaxHeight), 2),
1808
- initialMaxHeight = _w[0],
1809
- setInitialMaxHeight = _w[1];
1809
+ var _v = __read(React__default["default"].useState(defaultInitialMaxHeight), 2),
1810
+ initialMaxHeight = _v[0],
1811
+ setInitialMaxHeight = _v[1];
1810
1812
 
1811
- var _x = __read(React__default["default"].useState(0), 2),
1812
- initialDragPositionX = _x[0],
1813
- setInitialDragPositionX = _x[1];
1813
+ var _w = __read(React__default["default"].useState(0), 2),
1814
+ initialDragPositionX = _w[0],
1815
+ setInitialDragPositionX = _w[1];
1814
1816
 
1815
1817
  var onStartResize = function onStartResize() {
1816
1818
  setInitialMaxHeight('initial');
@@ -3167,6 +3169,271 @@
3167
3169
  // temporary check until we get the unit test passing with container queries
3168
3170
  var IS_JEST = typeof jest !== 'undefined';
3169
3171
 
3172
+ /* *
3173
+ * Licensed under the Apache License, Version 2.0 (the "License");
3174
+ * you may not use this file except in compliance with the License.
3175
+ * You may obtain a copy of the License at
3176
+ *
3177
+ * http://www.apache.org/licenses/LICENSE-2.0
3178
+ *
3179
+ * Unless required by applicable law or agreed to in writing, software
3180
+ * distributed under the License is distributed on an "AS IS" BASIS,
3181
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3182
+ * See the License for the specific language governing permissions and
3183
+ * limitations under the License.
3184
+ *
3185
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3186
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
3187
+ * */
3188
+ /**
3189
+ * Parsing date strings with geoweb dateUtils:
3190
+ *
3191
+ * An ISO String *with timezone* can safely be parsed directly to a date:
3192
+ *
3193
+ * date = new Date('2022-10-10T15:30:00Z')
3194
+ * date = new Date('2022-10-10T15:30:00+00:00')
3195
+ * date = new Date('2022-10-10T15:30:00+02:00')
3196
+ *
3197
+ * or using the dateUtils isoStringToDate function *with utc=false*
3198
+ *
3199
+ * date = isoStringToDate('2022-10-10T15:30:00Z', false)
3200
+ *
3201
+ * An ISO String *without a timezone* can be parsed with isoStringToDate
3202
+ *
3203
+ * date = isoStringToDate('2022-10-10T15:30:00')
3204
+ *
3205
+ * *Do not parse ISO without timezone using `new Date()` unless you correct for the local timezone*
3206
+ *
3207
+ * To parse an arbitrary date string with timezone use:
3208
+ *
3209
+ * date = stringToDate('2022.11.10, 11:15 +01:00', 'yyyy.MM.dd, HH:mm xxx', false)
3210
+ *
3211
+ * To parse an arbitrary date string without timezone use:
3212
+ *
3213
+ * date = stringToDate('2022.11.10, 11:15', 'yyyy.MM.dd, HH:mm')
3214
+ *
3215
+ *
3216
+ * To safely convert dates to utc strings use:
3217
+ *
3218
+ * date.toISOString()
3219
+ *
3220
+ * To get parts of UTC time use
3221
+ *
3222
+ * date.getUTCHours()
3223
+ * date.getUTCMins()
3224
+ *
3225
+ * To parse an arbitrary date string to a UTC string use:
3226
+ *
3227
+ * dateToString(new Date('2022-10-10T15:30:00Z', 'HH:ss dd MMM yyyy')
3228
+ *
3229
+ */
3230
+
3231
+ /**
3232
+ * Parse an ISO string to a date
3233
+ *
3234
+ * Expects the following props:
3235
+ * @param {string} input - string containing date
3236
+ *
3237
+ * @returns {Date} Date
3238
+ * @example
3239
+ * ``` isoStringToDate("2022-5-10T20:32:00+00:00")) ```
3240
+ */
3241
+
3242
+ var isoStringToDate = function isoStringToDate(input, utc) {
3243
+ if (utc === void 0) {
3244
+ utc = true;
3245
+ }
3246
+
3247
+ var parsed = dateFns.parseISO(input);
3248
+
3249
+ if (utc) {
3250
+ return setUTCDate(parsed);
3251
+ }
3252
+
3253
+ return parsed;
3254
+ };
3255
+ /**
3256
+ * Parse a string to a date
3257
+ *
3258
+ * ***NOTE: String will be parsed in local time if utc is set to false***
3259
+ *
3260
+ * Expects the following props:
3261
+ * @param {string} input - string containing date
3262
+ * @param {string} strFormat - format of the string, see: https://date-fns.org/v2.29.3/docs/parse
3263
+ * @param {boolean} utc [ default = true ] - boolean indicating whether to parse as UTC
3264
+ * @param {Date} referenceDate [ default = new Date() ] - defines values missing from the parsed dateString
3265
+ *
3266
+ * @returns {Date} Date
3267
+ * @example
3268
+ * ``` stringToDate("2022 5 10 20:32", 'yyyy M d HH:mm')) ```
3269
+ */
3270
+
3271
+ var stringToDate = function stringToDate(input, strFormat, utc, referenceDate) {
3272
+ if (utc === void 0) {
3273
+ utc = true;
3274
+ }
3275
+
3276
+ if (referenceDate === void 0) {
3277
+ referenceDate = new Date();
3278
+ }
3279
+
3280
+ var parsed = dateFns.parse(input, strFormat, referenceDate);
3281
+
3282
+ if (utc) {
3283
+ return setUTCDate(parsed);
3284
+ }
3285
+
3286
+ return parsed;
3287
+ };
3288
+ /**
3289
+ * Use this if you initialise a date without a timezone to set it to utc correctly
3290
+ * eg.
3291
+ * new Date(2022, 10, 12, 15, 30)
3292
+ * should be:
3293
+ * setUTCDate(new Date(2022, 10, 12, 15, 30))
3294
+ *
3295
+ * Expects the following props:
3296
+ * @param {Date} inDate - date to be set to UTC
3297
+ *
3298
+ * @returns {Date} - Date in UTC
3299
+ * @example
3300
+ * ``` setUTCDate(new Date(2022, 10, 12, 15, 30)) ```
3301
+ */
3302
+
3303
+ var setUTCDate = function setUTCDate(inDate) {
3304
+ var utcDate = new Date(inDate);
3305
+ utcDate.setUTCFullYear(inDate.getFullYear(), inDate.getMonth(), inDate.getDate());
3306
+ utcDate.setUTCHours(inDate.getHours(), inDate.getMinutes(), inDate.getSeconds(), inDate.getMilliseconds());
3307
+ return utcDate;
3308
+ };
3309
+ /**
3310
+ * Format a date to a string
3311
+ *
3312
+ * Expects the following props:
3313
+ * @param {Date} inDate - date to be formatted
3314
+ * @param {string} strFormat - format of string
3315
+ * @param {boolean} utc - [default: true] true to return in utc otherwise return in local timezone
3316
+ *
3317
+ * @returns {string} - formatted date string
3318
+ * @example
3319
+ * ``` dateToString(new Date(2022, 10, 12, 15, 30), 'dd MMM yyyy') ```
3320
+ */
3321
+
3322
+ var dateToString = function dateToString(inDate, strFormat, utc) {
3323
+ if (utc === void 0) {
3324
+ utc = true;
3325
+ }
3326
+
3327
+ if (utc) {
3328
+ return dateFns.format(new Date(inDate.getUTCFullYear(), inDate.getUTCMonth(), inDate.getUTCDate(), inDate.getUTCHours(), inDate.getUTCMinutes(), inDate.getUTCSeconds()), strFormat);
3329
+ }
3330
+
3331
+ return dateFns.format(inDate, strFormat);
3332
+ };
3333
+ /**
3334
+ * Find out if a date is between two other dates.
3335
+ *
3336
+ * Inclusivity parameter matches that used in momentjs where '[' indicates inclusion and '(' indicates exclusion.
3337
+ *
3338
+ * Expects the following props:
3339
+ * @param {Date} date - date to be tested
3340
+ * @param {Date} from - first date
3341
+ * @param {Date} to - last date
3342
+ * @param {string} inclusivity - [default: '()'] Must be one of : '()', '[]', '(]', '[)'
3343
+ *
3344
+ * @returns {boolen} - true if date is between, otherwise false
3345
+ *
3346
+ */
3347
+
3348
+ var isBetween = function isBetween(date, from, to, inclusivity) {
3349
+ if (inclusivity === void 0) {
3350
+ inclusivity = '()';
3351
+ }
3352
+
3353
+ if (!['()', '[]', '(]', '[)'].includes(inclusivity)) {
3354
+ throw new Error('Inclusivity parameter must be one of (), [], (], [)');
3355
+ }
3356
+
3357
+ var isBeforeEqual = inclusivity[0] === '[';
3358
+ var isAfterEqual = inclusivity[1] === ']';
3359
+ return (isBeforeEqual ? dateFns.isEqual(from, date) || dateFns.isBefore(from, date) : dateFns.isBefore(from, date)) && (isAfterEqual ? dateFns.isEqual(to, date) || dateFns.isAfter(to, date) : dateFns.isAfter(to, date));
3360
+ };
3361
+ /**
3362
+ * Creates a new Date object with the specified date and time, or the current date and time if no arguments are provided.
3363
+ *
3364
+ * @param yearOrIsoString The year for the new Date object, or an ISO-formatted string representing the date and time.
3365
+ * @param month The month for the new Date object (0-11).
3366
+ * @param day The day for the new Date object (1-31).
3367
+ * @param hours The hour for the new Date object (0-23).
3368
+ * @param minutes The minute for the new Date object (0-59).
3369
+ * @param seconds The second for the new Date object (0-59).
3370
+ * @param milliseconds The millisecond for the new Date object (0-999).
3371
+ * @returns A new Date object with the specified date and time, or the current date and time if no arguments are provided.
3372
+ *
3373
+ * @example
3374
+ * createDate(2022, 11, 13);
3375
+ * // => 2022-12-13T00:00:00.000Z
3376
+ *
3377
+ * @example
3378
+ * createDate('2022-12-13T00:00:00.000Z');
3379
+ * // => 2022-12-13T00:00:00.000Z
3380
+ */
3381
+
3382
+ var createDate = function createDate(yearOrIsoString, month, day, hours, minutes, seconds, milliseconds) {
3383
+ if (hours === void 0) {
3384
+ hours = 0;
3385
+ }
3386
+
3387
+ if (minutes === void 0) {
3388
+ minutes = 0;
3389
+ }
3390
+
3391
+ if (seconds === void 0) {
3392
+ seconds = 0;
3393
+ }
3394
+
3395
+ if (milliseconds === void 0) {
3396
+ milliseconds = 0;
3397
+ }
3398
+
3399
+ if (yearOrIsoString === undefined) {
3400
+ return new Date();
3401
+ }
3402
+
3403
+ if (typeof yearOrIsoString === 'string') {
3404
+ return new Date(yearOrIsoString);
3405
+ }
3406
+
3407
+ return new Date(yearOrIsoString, month, day, hours, minutes, seconds, milliseconds);
3408
+ };
3409
+
3410
+ /* *
3411
+ * Licensed under the Apache License, Version 2.0 (the "License");
3412
+ * you may not use this file except in compliance with the License.
3413
+ * You may obtain a copy of the License at
3414
+ *
3415
+ * http://www.apache.org/licenses/LICENSE-2.0
3416
+ *
3417
+ * Unless required by applicable law or agreed to in writing, software
3418
+ * distributed under the License is distributed on an "AS IS" BASIS,
3419
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3420
+ * See the License for the specific language governing permissions and
3421
+ * limitations under the License.
3422
+ *
3423
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3424
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
3425
+ * */
3426
+
3427
+ var index = /*#__PURE__*/Object.freeze({
3428
+ __proto__: null,
3429
+ isoStringToDate: isoStringToDate,
3430
+ stringToDate: stringToDate,
3431
+ setUTCDate: setUTCDate,
3432
+ dateToString: dateToString,
3433
+ isBetween: isBetween,
3434
+ createDate: createDate
3435
+ });
3436
+
3170
3437
  exports.AlertBanner = AlertBanner;
3171
3438
  exports.AlertIcon = AlertIcon;
3172
3439
  exports.AppHeader = AppHeader;
@@ -3200,6 +3467,7 @@
3200
3467
  exports.UserMenuItemTheme = MenuItemTheme;
3201
3468
  exports.adjustPosition = adjustPosition;
3202
3469
  exports.calculateDialogSizeAndPosition = calculateDialogSizeAndPosition;
3470
+ exports.dateUtils = index;
3203
3471
  exports.defaultDelay = defaultDelay;
3204
3472
  exports.getAxiosErrorMessage = getAxiosErrorMessage;
3205
3473
  exports.getAxiosWarningMessage = getAxiosWarningMessage;
@@ -25,7 +25,6 @@ interface DraggableComponentProps extends Omit<ResizableComponentProps, 'bounds'
25
25
  source?: 'app' | 'module';
26
26
  leftHeaderComponent?: React.ReactNode;
27
27
  rightHeaderComponent?: React.ReactNode;
28
- hasElevation?: boolean;
29
28
  sx?: SxProps;
30
29
  }
31
30
  declare const DraggableComponent: React.FC<DraggableComponentProps>;
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Parsing date strings with geoweb dateUtils:
3
+ *
4
+ * An ISO String *with timezone* can safely be parsed directly to a date:
5
+ *
6
+ * date = new Date('2022-10-10T15:30:00Z')
7
+ * date = new Date('2022-10-10T15:30:00+00:00')
8
+ * date = new Date('2022-10-10T15:30:00+02:00')
9
+ *
10
+ * or using the dateUtils isoStringToDate function *with utc=false*
11
+ *
12
+ * date = isoStringToDate('2022-10-10T15:30:00Z', false)
13
+ *
14
+ * An ISO String *without a timezone* can be parsed with isoStringToDate
15
+ *
16
+ * date = isoStringToDate('2022-10-10T15:30:00')
17
+ *
18
+ * *Do not parse ISO without timezone using `new Date()` unless you correct for the local timezone*
19
+ *
20
+ * To parse an arbitrary date string with timezone use:
21
+ *
22
+ * date = stringToDate('2022.11.10, 11:15 +01:00', 'yyyy.MM.dd, HH:mm xxx', false)
23
+ *
24
+ * To parse an arbitrary date string without timezone use:
25
+ *
26
+ * date = stringToDate('2022.11.10, 11:15', 'yyyy.MM.dd, HH:mm')
27
+ *
28
+ *
29
+ * To safely convert dates to utc strings use:
30
+ *
31
+ * date.toISOString()
32
+ *
33
+ * To get parts of UTC time use
34
+ *
35
+ * date.getUTCHours()
36
+ * date.getUTCMins()
37
+ *
38
+ * To parse an arbitrary date string to a UTC string use:
39
+ *
40
+ * dateToString(new Date('2022-10-10T15:30:00Z', 'HH:ss dd MMM yyyy')
41
+ *
42
+ */
43
+ /**
44
+ * Parse an ISO string to a date
45
+ *
46
+ * Expects the following props:
47
+ * @param {string} input - string containing date
48
+ *
49
+ * @returns {Date} Date
50
+ * @example
51
+ * ``` isoStringToDate("2022-5-10T20:32:00+00:00")) ```
52
+ */
53
+ export declare const isoStringToDate: (input: string, utc?: boolean) => Date;
54
+ /**
55
+ * Parse a string to a date
56
+ *
57
+ * ***NOTE: String will be parsed in local time if utc is set to false***
58
+ *
59
+ * Expects the following props:
60
+ * @param {string} input - string containing date
61
+ * @param {string} strFormat - format of the string, see: https://date-fns.org/v2.29.3/docs/parse
62
+ * @param {boolean} utc [ default = true ] - boolean indicating whether to parse as UTC
63
+ * @param {Date} referenceDate [ default = new Date() ] - defines values missing from the parsed dateString
64
+ *
65
+ * @returns {Date} Date
66
+ * @example
67
+ * ``` stringToDate("2022 5 10 20:32", 'yyyy M d HH:mm')) ```
68
+ */
69
+ export declare const stringToDate: (input: string, strFormat: string, utc?: boolean, referenceDate?: Date | number) => Date;
70
+ /**
71
+ * Use this if you initialise a date without a timezone to set it to utc correctly
72
+ * eg.
73
+ * new Date(2022, 10, 12, 15, 30)
74
+ * should be:
75
+ * setUTCDate(new Date(2022, 10, 12, 15, 30))
76
+ *
77
+ * Expects the following props:
78
+ * @param {Date} inDate - date to be set to UTC
79
+ *
80
+ * @returns {Date} - Date in UTC
81
+ * @example
82
+ * ``` setUTCDate(new Date(2022, 10, 12, 15, 30)) ```
83
+ */
84
+ export declare const setUTCDate: (inDate: Date) => Date;
85
+ /**
86
+ * Format a date to a string
87
+ *
88
+ * Expects the following props:
89
+ * @param {Date} inDate - date to be formatted
90
+ * @param {string} strFormat - format of string
91
+ * @param {boolean} utc - [default: true] true to return in utc otherwise return in local timezone
92
+ *
93
+ * @returns {string} - formatted date string
94
+ * @example
95
+ * ``` dateToString(new Date(2022, 10, 12, 15, 30), 'dd MMM yyyy') ```
96
+ */
97
+ export declare const dateToString: (inDate: Date, strFormat: string, utc?: boolean) => string;
98
+ /**
99
+ * Find out if a date is between two other dates.
100
+ *
101
+ * Inclusivity parameter matches that used in momentjs where '[' indicates inclusion and '(' indicates exclusion.
102
+ *
103
+ * Expects the following props:
104
+ * @param {Date} date - date to be tested
105
+ * @param {Date} from - first date
106
+ * @param {Date} to - last date
107
+ * @param {string} inclusivity - [default: '()'] Must be one of : '()', '[]', '(]', '[)'
108
+ *
109
+ * @returns {boolen} - true if date is between, otherwise false
110
+ *
111
+ */
112
+ export declare const isBetween: (date: Date, from: Date, to: Date, inclusivity?: string) => boolean;
113
+ /**
114
+ * Creates a new Date object with the specified date and time, or the current date and time if no arguments are provided.
115
+ *
116
+ * @param yearOrIsoString The year for the new Date object, or an ISO-formatted string representing the date and time.
117
+ * @param month The month for the new Date object (0-11).
118
+ * @param day The day for the new Date object (1-31).
119
+ * @param hours The hour for the new Date object (0-23).
120
+ * @param minutes The minute for the new Date object (0-59).
121
+ * @param seconds The second for the new Date object (0-59).
122
+ * @param milliseconds The millisecond for the new Date object (0-999).
123
+ * @returns A new Date object with the specified date and time, or the current date and time if no arguments are provided.
124
+ *
125
+ * @example
126
+ * createDate(2022, 11, 13);
127
+ * // => 2022-12-13T00:00:00.000Z
128
+ *
129
+ * @example
130
+ * createDate('2022-12-13T00:00:00.000Z');
131
+ * // => 2022-12-13T00:00:00.000Z
132
+ */
133
+ export declare const createDate: (yearOrIsoString?: string | number | undefined, month?: number | undefined, day?: number | undefined, hours?: number, minutes?: number, seconds?: number, milliseconds?: number) => Date;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './dateUtils';
@@ -1,2 +1,3 @@
1
1
  export * from './axiosErrorUtils';
2
2
  export * from './containerQueryHelper';
3
+ export * as dateUtils from './dateUtils';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/shared",
3
- "version": "4.6.1",
3
+ "version": "4.7.1",
4
4
  "description": "GeoWeb shared library with shared components and utils for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,17 +14,18 @@
14
14
  "peerDependencies": {
15
15
  "react": "^17.0.2",
16
16
  "@mui/material": "^5.10.8",
17
- "@opengeoweb/theme": "4.6.1",
17
+ "@opengeoweb/theme": "4.7.1",
18
18
  "react-draggable": "^4.4.5",
19
19
  "re-resizable": "^6.9.0",
20
20
  "@redux-eggs/core": "^2.2.0",
21
21
  "react-redux": "^8.0.4",
22
- "@opengeoweb/form-fields": "4.6.1",
22
+ "@opengeoweb/form-fields": "4.7.1",
23
23
  "react-hook-form": "^6.12.1",
24
24
  "moment": "^2.29.0",
25
25
  "moment-timezone": "^0.5.31",
26
26
  "@mui/x-date-pickers": "^5.0.4",
27
27
  "lodash": "^4.17.20",
28
- "axios": "^0.25.0"
28
+ "axios": "^0.25.0",
29
+ "date-fns": "^2.29.3"
29
30
  }
30
31
  }