@bigbinary/neeto-commons-frontend 4.13.93 → 4.13.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -64,6 +64,7 @@ React utilities [↗](./docs/react/README.md)
64
64
  - [useMutationWithInvalidation](./docs/react/hooks/useMutationWithInvalidation.md)
65
65
  - [useFetchNeetoApps](./docs/react/hooks/useFetchNeetoApps.md)
66
66
  - [usePersistedQuery](./docs/react/hooks/usePersistedQuery.md)
67
+ - [usePrefersReducedMotion](./docs/react/hooks/usePrefersReducedMotion.md)
67
68
  - [useIsElementVisibleInDom](./docs/react/hooks/useIsElementVisibleInDom.md)
68
69
  - [useStateWithDependency](./docs/react/hooks/useStateWithDependency.md)
69
70
  - [useQueryParams](./docs/react/hooks/useQueryParams.md)
@@ -15,6 +15,7 @@ var reactUtils_useMutationWithInvalidation_useMutationWithInvalidation = require
15
15
  var reactUtils_useOnClickOutside_useOnClickOutside = require('./useOnClickOutside/useOnClickOutside.js');
16
16
  var reactUtils_usePersistedQuery_usePersistedQuery = require('./usePersistedQuery/usePersistedQuery.js');
17
17
  var reactUtils_usePrevious_usePrevious = require('./usePrevious/usePrevious.js');
18
+ var reactUtils_usePrefersReducedMotion_usePrefersReducedMotion = require('./usePrefersReducedMotion/usePrefersReducedMotion.js');
18
19
  var reactUtils_useQueryParams_useQueryParams = require('./useQueryParams/useQueryParams.js');
19
20
  var reactUtils_useRegisterNavigationCheckpoint_useRegisterNavigationCheckpoint = require('./useRegisterNavigationCheckpoint/useRegisterNavigationCheckpoint.js');
20
21
  var reactUtils_useStateWithDependency_useStateWithDependency = require('./useStateWithDependency/useStateWithDependency.js');
@@ -79,6 +80,7 @@ require('../lodash-yQg9l0eZ.js');
79
80
  require('@bigbinary/neeto-time-zones');
80
81
  require('ua-parser-js');
81
82
  require('@tanstack/react-query');
83
+ require('./usePrefersReducedMotion/constants.js');
82
84
  require('./useBreakpoints/utils.js');
83
85
  require('./useColumnConfig/useConfigApi.js');
84
86
  require('./useColumnConfig/api.js');
@@ -113,6 +115,7 @@ exports.useMutationWithInvalidation = reactUtils_useMutationWithInvalidation_use
113
115
  exports.useOnClickOutside = reactUtils_useOnClickOutside_useOnClickOutside;
114
116
  exports.usePersistedQuery = reactUtils_usePersistedQuery_usePersistedQuery;
115
117
  exports.usePrevious = reactUtils_usePrevious_usePrevious;
118
+ exports.usePrefersReducedMotion = reactUtils_usePrefersReducedMotion_usePrefersReducedMotion;
116
119
  exports.useQueryParams = reactUtils_useQueryParams_useQueryParams;
117
120
  exports.useNavigationCheckpoints = reactUtils_useRegisterNavigationCheckpoint_useRegisterNavigationCheckpoint.useNavigationCheckpoints;
118
121
  exports.useRegisterNavigationCheckpoint = reactUtils_useRegisterNavigationCheckpoint_useRegisterNavigationCheckpoint.default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var QUERY = "(prefers-reduced-motion: no-preference)";
4
+
5
+ exports.QUERY = QUERY;
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/react-utils/usePrefersReducedMotion/constants.js"],"sourcesContent":["export const QUERY = \"(prefers-reduced-motion: no-preference)\";\n"],"names":["QUERY"],"mappings":";;AAAO,IAAMA,KAAK,GAAG;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var reactUtils_usePrefersReducedMotion_usePrefersReducedMotion = require('./usePrefersReducedMotion.js');
4
+ require('../../slicedToArray-BcL7fKuL.js');
5
+ require('../../unsupportedIterableToArray-BoHMiKNA.js');
6
+ require('react');
7
+ require('./constants.js');
8
+
9
+
10
+
11
+ module.exports = reactUtils_usePrefersReducedMotion_usePrefersReducedMotion;
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var slicedToArray = require('../../slicedToArray-BcL7fKuL.js');
4
+ var React = require('react');
5
+ var reactUtils_usePrefersReducedMotion_constants = require('./constants.js');
6
+ require('../../unsupportedIterableToArray-BoHMiKNA.js');
7
+
8
+ var isRenderingOnServer = typeof window === "undefined";
9
+ var getInitialState = function getInitialState() {
10
+ return (
11
+ // For our initial server render, we won't know if the user
12
+ // prefers reduced motion, but it doesn't matter. This value
13
+ // will be overwritten on the client, before any animations
14
+ // occur.
15
+ isRenderingOnServer ? true : !window.matchMedia(reactUtils_usePrefersReducedMotion_constants.QUERY).matches
16
+ );
17
+ };
18
+ var usePrefersReducedMotion = function usePrefersReducedMotion() {
19
+ var _useState = React.useState(getInitialState),
20
+ _useState2 = slicedToArray._slicedToArray(_useState, 2),
21
+ prefersReducedMotion = _useState2[0],
22
+ setPrefersReducedMotion = _useState2[1];
23
+ React.useEffect(function () {
24
+ if (isRenderingOnServer) return undefined;
25
+ var mediaQueryList = window.matchMedia(reactUtils_usePrefersReducedMotion_constants.QUERY);
26
+ var listener = function listener(event) {
27
+ setPrefersReducedMotion(!event.matches);
28
+ };
29
+ if (mediaQueryList.addEventListener) {
30
+ mediaQueryList.addEventListener("change", listener);
31
+ } else {
32
+ mediaQueryList.addListener(listener);
33
+ }
34
+ return function () {
35
+ if (mediaQueryList.removeEventListener) {
36
+ mediaQueryList.removeEventListener("change", listener);
37
+ } else {
38
+ mediaQueryList.removeListener(listener);
39
+ }
40
+ };
41
+ }, []);
42
+ return prefersReducedMotion;
43
+ };
44
+
45
+ module.exports = usePrefersReducedMotion;
46
+ //# sourceMappingURL=usePrefersReducedMotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrefersReducedMotion.js","sources":["../../../../src/react-utils/usePrefersReducedMotion/usePrefersReducedMotion.js"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\nimport { QUERY } from \"./constants\";\n\nconst isRenderingOnServer = typeof window === \"undefined\";\n\nconst getInitialState = () =>\n // For our initial server render, we won't know if the user\n // prefers reduced motion, but it doesn't matter. This value\n // will be overwritten on the client, before any animations\n // occur.\n isRenderingOnServer ? true : !window.matchMedia(QUERY).matches;\n\nconst usePrefersReducedMotion = () => {\n const [prefersReducedMotion, setPrefersReducedMotion] =\n useState(getInitialState);\n\n useEffect(() => {\n if (isRenderingOnServer) return undefined;\n\n const mediaQueryList = window.matchMedia(QUERY);\n\n const listener = event => {\n setPrefersReducedMotion(!event.matches);\n };\n\n if (mediaQueryList.addEventListener) {\n mediaQueryList.addEventListener(\"change\", listener);\n } else {\n mediaQueryList.addListener(listener);\n }\n\n return () => {\n if (mediaQueryList.removeEventListener) {\n mediaQueryList.removeEventListener(\"change\", listener);\n } else {\n mediaQueryList.removeListener(listener);\n }\n };\n }, []);\n\n return prefersReducedMotion;\n};\n\nexport default usePrefersReducedMotion;\n"],"names":["isRenderingOnServer","window","getInitialState","matchMedia","QUERY","matches","usePrefersReducedMotion","_useState","useState","_useState2","_slicedToArray","prefersReducedMotion","setPrefersReducedMotion","useEffect","undefined","mediaQueryList","listener","event","addEventListener","addListener","removeEventListener","removeListener"],"mappings":";;;;;;;AAIA,IAAMA,mBAAmB,GAAG,OAAOC,MAAM,KAAK,WAAW;AAEzD,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,GAAA;AAAA,EAAA;AACnB;AACA;AACA;AACA;IACAF,mBAAmB,GAAG,IAAI,GAAG,CAACC,MAAM,CAACE,UAAU,CAACC,kDAAK,CAAC,CAACC;AAAO;AAAA,CAAA;AAEhE,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,GAAS;AACpC,EAAA,IAAAC,SAAA,GACEC,cAAQ,CAACN,eAAe,CAAC;IAAAO,UAAA,GAAAC,4BAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AADpBI,IAAAA,oBAAoB,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,uBAAuB,GAAAH,UAAA,CAAA,CAAA,CAAA;AAGpDI,EAAAA,eAAS,CAAC,YAAM;IACd,IAAIb,mBAAmB,EAAE,OAAOc,SAAS;AAEzC,IAAA,IAAMC,cAAc,GAAGd,MAAM,CAACE,UAAU,CAACC,kDAAK,CAAC;AAE/C,IAAA,IAAMY,QAAQ,GAAG,SAAXA,QAAQA,CAAGC,KAAK,EAAI;AACxBL,MAAAA,uBAAuB,CAAC,CAACK,KAAK,CAACZ,OAAO,CAAC;KACxC;IAED,IAAIU,cAAc,CAACG,gBAAgB,EAAE;AACnCH,MAAAA,cAAc,CAACG,gBAAgB,CAAC,QAAQ,EAAEF,QAAQ,CAAC;AACrD,KAAC,MAAM;AACLD,MAAAA,cAAc,CAACI,WAAW,CAACH,QAAQ,CAAC;AACtC;AAEA,IAAA,OAAO,YAAM;MACX,IAAID,cAAc,CAACK,mBAAmB,EAAE;AACtCL,QAAAA,cAAc,CAACK,mBAAmB,CAAC,QAAQ,EAAEJ,QAAQ,CAAC;AACxD,OAAC,MAAM;AACLD,QAAAA,cAAc,CAACM,cAAc,CAACL,QAAQ,CAAC;AACzC;KACD;GACF,EAAE,EAAE,CAAC;AAEN,EAAA,OAAOL,oBAAoB;AAC7B;;;;"}
@@ -13,6 +13,7 @@ export { default as useMutationWithInvalidation } from './useMutationWithInvalid
13
13
  export { default as useOnClickOutside } from './useOnClickOutside/useOnClickOutside.js';
14
14
  export { default as usePersistedQuery } from './usePersistedQuery/usePersistedQuery.js';
15
15
  export { default as usePrevious } from './usePrevious/usePrevious.js';
16
+ export { default as usePrefersReducedMotion } from './usePrefersReducedMotion/usePrefersReducedMotion.js';
16
17
  export { default as useQueryParams } from './useQueryParams/useQueryParams.js';
17
18
  export { useNavigationCheckpoints, default as useRegisterNavigationCheckpoint, useRemoveNavigationCheckpoint } from './useRegisterNavigationCheckpoint/useRegisterNavigationCheckpoint.js';
18
19
  export { default as useStateWithDependency } from './useStateWithDependency/useStateWithDependency.js';
@@ -77,6 +78,7 @@ import '../lodash-M8VRFvKw.js';
77
78
  import '@bigbinary/neeto-time-zones';
78
79
  import 'ua-parser-js';
79
80
  import '@tanstack/react-query';
81
+ import './usePrefersReducedMotion/constants.js';
80
82
  import './useBreakpoints/utils.js';
81
83
  import './useColumnConfig/useConfigApi.js';
82
84
  import './useColumnConfig/api.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ var QUERY = "(prefers-reduced-motion: no-preference)";
2
+
3
+ export { QUERY };
4
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../src/react-utils/usePrefersReducedMotion/constants.js"],"sourcesContent":["export const QUERY = \"(prefers-reduced-motion: no-preference)\";\n"],"names":["QUERY"],"mappings":"AAAO,IAAMA,KAAK,GAAG;;;;"}
@@ -0,0 +1,6 @@
1
+ export { default } from './usePrefersReducedMotion.js';
2
+ import '../../slicedToArray-DmsZvA_9.js';
3
+ import '../../unsupportedIterableToArray-Dqz8Y8_I.js';
4
+ import 'react';
5
+ import './constants.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,44 @@
1
+ import { _ as _slicedToArray } from '../../slicedToArray-DmsZvA_9.js';
2
+ import { useState, useEffect } from 'react';
3
+ import { QUERY } from './constants.js';
4
+ import '../../unsupportedIterableToArray-Dqz8Y8_I.js';
5
+
6
+ var isRenderingOnServer = typeof window === "undefined";
7
+ var getInitialState = function getInitialState() {
8
+ return (
9
+ // For our initial server render, we won't know if the user
10
+ // prefers reduced motion, but it doesn't matter. This value
11
+ // will be overwritten on the client, before any animations
12
+ // occur.
13
+ isRenderingOnServer ? true : !window.matchMedia(QUERY).matches
14
+ );
15
+ };
16
+ var usePrefersReducedMotion = function usePrefersReducedMotion() {
17
+ var _useState = useState(getInitialState),
18
+ _useState2 = _slicedToArray(_useState, 2),
19
+ prefersReducedMotion = _useState2[0],
20
+ setPrefersReducedMotion = _useState2[1];
21
+ useEffect(function () {
22
+ if (isRenderingOnServer) return undefined;
23
+ var mediaQueryList = window.matchMedia(QUERY);
24
+ var listener = function listener(event) {
25
+ setPrefersReducedMotion(!event.matches);
26
+ };
27
+ if (mediaQueryList.addEventListener) {
28
+ mediaQueryList.addEventListener("change", listener);
29
+ } else {
30
+ mediaQueryList.addListener(listener);
31
+ }
32
+ return function () {
33
+ if (mediaQueryList.removeEventListener) {
34
+ mediaQueryList.removeEventListener("change", listener);
35
+ } else {
36
+ mediaQueryList.removeListener(listener);
37
+ }
38
+ };
39
+ }, []);
40
+ return prefersReducedMotion;
41
+ };
42
+
43
+ export { usePrefersReducedMotion as default };
44
+ //# sourceMappingURL=usePrefersReducedMotion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrefersReducedMotion.js","sources":["../../../src/react-utils/usePrefersReducedMotion/usePrefersReducedMotion.js"],"sourcesContent":["import { useState, useEffect } from \"react\";\n\nimport { QUERY } from \"./constants\";\n\nconst isRenderingOnServer = typeof window === \"undefined\";\n\nconst getInitialState = () =>\n // For our initial server render, we won't know if the user\n // prefers reduced motion, but it doesn't matter. This value\n // will be overwritten on the client, before any animations\n // occur.\n isRenderingOnServer ? true : !window.matchMedia(QUERY).matches;\n\nconst usePrefersReducedMotion = () => {\n const [prefersReducedMotion, setPrefersReducedMotion] =\n useState(getInitialState);\n\n useEffect(() => {\n if (isRenderingOnServer) return undefined;\n\n const mediaQueryList = window.matchMedia(QUERY);\n\n const listener = event => {\n setPrefersReducedMotion(!event.matches);\n };\n\n if (mediaQueryList.addEventListener) {\n mediaQueryList.addEventListener(\"change\", listener);\n } else {\n mediaQueryList.addListener(listener);\n }\n\n return () => {\n if (mediaQueryList.removeEventListener) {\n mediaQueryList.removeEventListener(\"change\", listener);\n } else {\n mediaQueryList.removeListener(listener);\n }\n };\n }, []);\n\n return prefersReducedMotion;\n};\n\nexport default usePrefersReducedMotion;\n"],"names":["isRenderingOnServer","window","getInitialState","matchMedia","QUERY","matches","usePrefersReducedMotion","_useState","useState","_useState2","_slicedToArray","prefersReducedMotion","setPrefersReducedMotion","useEffect","undefined","mediaQueryList","listener","event","addEventListener","addListener","removeEventListener","removeListener"],"mappings":";;;;;AAIA,IAAMA,mBAAmB,GAAG,OAAOC,MAAM,KAAK,WAAW;AAEzD,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,GAAA;AAAA,EAAA;AACnB;AACA;AACA;AACA;IACAF,mBAAmB,GAAG,IAAI,GAAG,CAACC,MAAM,CAACE,UAAU,CAACC,KAAK,CAAC,CAACC;AAAO;AAAA,CAAA;AAEhE,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,GAAS;AACpC,EAAA,IAAAC,SAAA,GACEC,QAAQ,CAACN,eAAe,CAAC;IAAAO,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AADpBI,IAAAA,oBAAoB,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,uBAAuB,GAAAH,UAAA,CAAA,CAAA,CAAA;AAGpDI,EAAAA,SAAS,CAAC,YAAM;IACd,IAAIb,mBAAmB,EAAE,OAAOc,SAAS;AAEzC,IAAA,IAAMC,cAAc,GAAGd,MAAM,CAACE,UAAU,CAACC,KAAK,CAAC;AAE/C,IAAA,IAAMY,QAAQ,GAAG,SAAXA,QAAQA,CAAGC,KAAK,EAAI;AACxBL,MAAAA,uBAAuB,CAAC,CAACK,KAAK,CAACZ,OAAO,CAAC;KACxC;IAED,IAAIU,cAAc,CAACG,gBAAgB,EAAE;AACnCH,MAAAA,cAAc,CAACG,gBAAgB,CAAC,QAAQ,EAAEF,QAAQ,CAAC;AACrD,KAAC,MAAM;AACLD,MAAAA,cAAc,CAACI,WAAW,CAACH,QAAQ,CAAC;AACtC;AAEA,IAAA,OAAO,YAAM;MACX,IAAID,cAAc,CAACK,mBAAmB,EAAE;AACtCL,QAAAA,cAAc,CAACK,mBAAmB,CAAC,QAAQ,EAAEJ,QAAQ,CAAC;AACxD,OAAC,MAAM;AACLD,QAAAA,cAAc,CAACM,cAAc,CAACL,QAAQ,CAAC;AACzC;KACD;GACF,EAAE,EAAE,CAAC;AAEN,EAAA,OAAOL,oBAAoB;AAC7B;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-commons-frontend",
3
- "version": "4.13.93",
3
+ "version": "4.13.94",
4
4
  "description": "A package encapsulating common code across neeto projects including initializers, utility functions, common components and hooks and so on.",
5
5
  "repository": "git@github.com:bigbinary/neeto-commons-frontend.git",
6
6
  "author": "Amaljith K <amaljith.k@bigbinary.com>",
package/react-utils.d.ts CHANGED
@@ -527,6 +527,71 @@ export function useOnClickOutside<T>(ref: React.MutableRefObject<T>, handler: (e
527
527
  *
528
528
  */
529
529
  export function usePrevious<T>(value: T): T;
530
+ /**
531
+ *
532
+ * The usePrefersReducedMotion hook is a utility that detects whether the user has
533
+ *
534
+ * preferred reduced motion enabled in their system settings. This is particularly
535
+ *
536
+ * useful for creating accessible user interfaces that respect user preferences for
537
+ *
538
+ * motion and animations. The hook listens to changes in the user's motion
539
+ *
540
+ * preferences and updates accordingly.
541
+ *
542
+ * This hook uses the CSS media query (prefers-reduced-motion: no-preference) to
543
+ *
544
+ * determine if the user prefers reduced motion. When the user has reduced motion
545
+ *
546
+ * enabled, the media query will not match, and the hook will return true.
547
+ *
548
+ * This hook does not accept any arguments.
549
+ *
550
+ * The following code snippet demonstrates the usage of usePrefersReducedMotion to
551
+ *
552
+ * conditionally apply animations based on user preferences.
553
+ *
554
+ * @example
555
+ *
556
+ * import { usePrefersReducedMotion } from "@bigbinary/neeto-commons-frontend/react-utils";
557
+ *
558
+ * const MyComponent = () => {
559
+ * const prefersReducedMotion = usePrefersReducedMotion();
560
+ *
561
+ * return (
562
+ * <div
563
+ * className={prefersReducedMotion ? "static" : "animate-fade-in"}
564
+ * >
565
+ * Content that respects motion preferences
566
+ * </div>
567
+ * );
568
+ * };
569
+ * @endexample
570
+ * You can also use this hook to conditionally render animation libraries or
571
+ *
572
+ * components:
573
+ *
574
+ * @example
575
+ *
576
+ * import { usePrefersReducedMotion } from "@bigbinary/neeto-commons-frontend/react-utils";
577
+ * import { motion } from "framer-motion";
578
+ *
579
+ * const AnimatedComponent = ({ children }) => {
580
+ * const prefersReducedMotion = usePrefersReducedMotion();
581
+ *
582
+ * return (
583
+ * <motion.div
584
+ * initial={{ opacity: 0 }}
585
+ * animate={{ opacity: 1 }}
586
+ * transition={{ duration: prefersReducedMotion ? 0 : 0.5 }}
587
+ * >
588
+ * {children}
589
+ * </motion.div>
590
+ * );
591
+ * };
592
+ * @endexample
593
+ */
594
+ export function usePrefersReducedMotion(): boolean;
530
595
  /**
531
596
  *
532
597
  * The useUpdateEffect hook is a variation of the standard useEffect hook in