@hh.ru/magritte-ui-snackbar 6.4.26 → 6.4.27

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/Snackbar.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { FC } from 'react';
2
- import { SnackbarProps } from '@hh.ru/magritte-ui-snackbar/types';
2
+ import { SnackbarProps } from './types';
3
3
  export declare const Snackbar: FC<SnackbarProps>;
package/Snackbar.js CHANGED
@@ -3,60 +3,79 @@ import { useContext, useId, useRef, useEffect } from 'react';
3
3
  import { SnackbarContext } from './context.js';
4
4
  import { SnackbarTransitionName } from './types.js';
5
5
 
6
- const Snackbar = ({ actionLabel, align, addon, autohideTime, children, containerId, 'data-qa': dataQa, stretched, showClose, showTimer, 'aria-label-close': ariaLabelClose, 'aria-label': ariaLabel, role, removeOnUnmount = true, onAction, onClose, }) => {
7
- const context = useContext(SnackbarContext);
8
- const uid = useId();
9
- const removeOnUnmountRef = useRef(removeOnUnmount);
10
- removeOnUnmountRef.current = removeOnUnmount;
11
- // коллбэки не мемоизированы => вызывают animateIn
12
- const onActionRef = useRef(onAction);
13
- onActionRef.current = onAction;
14
- const onCloseRef = useRef(onClose);
15
- onCloseRef.current = onClose;
16
- useEffect(() => {
17
- context.animateIn(uid, {
18
- actionLabel,
19
- align,
20
- addon,
21
- autohideTime,
22
- children,
23
- 'data-qa': dataQa,
24
- containerId,
25
- stretched,
26
- showClose,
27
- showTimer,
28
- 'aria-label-close': ariaLabelClose,
29
- 'aria-label': ariaLabel,
30
- role,
31
- onAction: onActionRef.current,
32
- onClose: onCloseRef.current,
33
- });
34
- }, [
35
- context,
6
+ const Snackbar = ({
7
+ actionLabel,
8
+ align,
9
+ addon,
10
+ autohideTime,
11
+ children,
12
+ containerId,
13
+ "data-qa": dataQa,
14
+ stretched,
15
+ showClose,
16
+ showTimer,
17
+ "aria-label-close": ariaLabelClose,
18
+ "aria-label": ariaLabel,
19
+ role,
20
+ removeOnUnmount = true,
21
+ onAction,
22
+ onClose
23
+ }) => {
24
+ const context = useContext(SnackbarContext);
25
+ const uid = useId();
26
+ const removeOnUnmountRef = useRef(removeOnUnmount);
27
+ removeOnUnmountRef.current = removeOnUnmount;
28
+ const onActionRef = useRef(onAction);
29
+ onActionRef.current = onAction;
30
+ const onCloseRef = useRef(onClose);
31
+ onCloseRef.current = onClose;
32
+ useEffect(() => {
33
+ context.animateIn(uid, {
34
+ actionLabel,
35
+ align,
36
+ addon,
37
+ autohideTime,
38
+ children,
39
+ "data-qa": dataQa,
40
+ containerId,
41
+ stretched,
42
+ showClose,
43
+ showTimer,
44
+ "aria-label-close": ariaLabelClose,
45
+ "aria-label": ariaLabel,
46
+ role,
47
+ onAction: onActionRef.current,
48
+ onClose: onCloseRef.current
49
+ });
50
+ }, [
51
+ context,
52
+ uid,
53
+ actionLabel,
54
+ align,
55
+ addon,
56
+ autohideTime,
57
+ dataQa,
58
+ children,
59
+ containerId,
60
+ stretched,
61
+ showClose,
62
+ showTimer,
63
+ ariaLabelClose,
64
+ ariaLabel,
65
+ role
66
+ ]);
67
+ useEffect(() => {
68
+ return () => {
69
+ if (!removeOnUnmountRef.current) {
70
+ return;
71
+ }
72
+ context.animateOut(
36
73
  uid,
37
- actionLabel,
38
- align,
39
- addon,
40
- autohideTime,
41
- dataQa,
42
- children,
43
- containerId,
44
- stretched,
45
- showClose,
46
- showTimer,
47
- ariaLabelClose,
48
- ariaLabel,
49
- role,
50
- ]);
51
- useEffect(() => {
52
- return () => {
53
- if (!removeOnUnmountRef.current) {
54
- return;
55
- }
56
- context.animateOut(uid, context.isShown(uid) ? SnackbarTransitionName.Hide : SnackbarTransitionName.RemoveImmediately);
57
- };
58
- }, [context, uid]);
59
- return null;
74
+ context.isShown(uid) ? SnackbarTransitionName.Hide : SnackbarTransitionName.RemoveImmediately
75
+ );
76
+ };
77
+ }, [context, uid]);
78
+ return null;
60
79
  };
61
80
 
62
81
  export { Snackbar };
package/Snackbar.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.js","sources":["src/Snackbar.tsx"],"sourcesContent":["import { FC, useContext, useEffect, useId, useRef } from 'react';\n\nimport { SnackbarContext } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarProps, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\n\nexport const Snackbar: FC<SnackbarProps> = ({\n actionLabel,\n align,\n addon,\n autohideTime,\n children,\n containerId,\n 'data-qa': dataQa,\n stretched,\n showClose,\n showTimer,\n 'aria-label-close': ariaLabelClose,\n 'aria-label': ariaLabel,\n role,\n removeOnUnmount = true,\n onAction,\n onClose,\n}) => {\n const context = useContext(SnackbarContext);\n const uid = useId();\n const removeOnUnmountRef = useRef(removeOnUnmount);\n removeOnUnmountRef.current = removeOnUnmount;\n\n // коллбэки не мемоизированы => вызывают animateIn\n const onActionRef = useRef<VoidFunction | undefined>(onAction);\n onActionRef.current = onAction;\n const onCloseRef = useRef<SnackbarProps['onClose'] | undefined>(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n context.animateIn(uid, {\n actionLabel,\n align,\n addon,\n autohideTime,\n children,\n 'data-qa': dataQa,\n containerId,\n stretched,\n showClose,\n showTimer,\n 'aria-label-close': ariaLabelClose,\n 'aria-label': ariaLabel,\n role,\n onAction: onActionRef.current,\n onClose: onCloseRef.current,\n } as SnackbarProps);\n }, [\n context,\n uid,\n actionLabel,\n align,\n addon,\n autohideTime,\n dataQa,\n children,\n containerId,\n stretched,\n showClose,\n showTimer,\n ariaLabelClose,\n ariaLabel,\n role,\n ]);\n\n useEffect(() => {\n return () => {\n if (!removeOnUnmountRef.current) {\n return;\n }\n context.animateOut(\n uid,\n context.isShown(uid) ? SnackbarTransitionName.Hide : SnackbarTransitionName.RemoveImmediately\n );\n };\n }, [context, uid]);\n\n return null;\n};\n"],"names":[],"mappings":";;;;MAKa,QAAQ,GAAsB,CAAC,EACxC,WAAW,EACX,KAAK,EACL,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EAAE,MAAM,EACjB,SAAS,EACT,SAAS,EACT,SAAS,EACT,kBAAkB,EAAE,cAAc,EAClC,YAAY,EAAE,SAAS,EACvB,IAAI,EACJ,eAAe,GAAG,IAAI,EACtB,QAAQ,EACR,OAAO,GACV,KAAI;AACD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;AAC5C,IAAA,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;AACpB,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AACnD,IAAA,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;;AAG7C,IAAA,MAAM,WAAW,GAAG,MAAM,CAA2B,QAAQ,CAAC,CAAC;AAC/D,IAAA,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC/B,IAAA,MAAM,UAAU,GAAG,MAAM,CAAuC,OAAO,CAAC,CAAC;AACzE,IAAA,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,SAAS,CAAC,MAAK;AACX,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE;YACnB,WAAW;YACX,KAAK;YACL,KAAK;YACL,YAAY;YACZ,QAAQ;AACR,YAAA,SAAS,EAAE,MAAM;YACjB,WAAW;YACX,SAAS;YACT,SAAS;YACT,SAAS;AACT,YAAA,kBAAkB,EAAE,cAAc;AAClC,YAAA,YAAY,EAAE,SAAS;YACvB,IAAI;YACJ,QAAQ,EAAE,WAAW,CAAC,OAAO;YAC7B,OAAO,EAAE,UAAU,CAAC,OAAO;AACb,SAAA,CAAC,CAAC;AACxB,KAAC,EAAE;QACC,OAAO;QACP,GAAG;QACH,WAAW;QACX,KAAK;QACL,KAAK;QACL,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,WAAW;QACX,SAAS;QACT,SAAS;QACT,SAAS;QACT,cAAc;QACd,SAAS;QACT,IAAI;AACP,KAAA,CAAC,CAAC;IAEH,SAAS,CAAC,MAAK;AACX,QAAA,OAAO,MAAK;AACR,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;gBAC7B,OAAO;aACV;YACD,OAAO,CAAC,UAAU,CACd,GAAG,EACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,IAAI,GAAG,sBAAsB,CAAC,iBAAiB,CAChG,CAAC;AACN,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAEnB,IAAA,OAAO,IAAI,CAAC;AAChB;;;;"}
1
+ {"version":3,"file":"Snackbar.js","sources":["src/Snackbar.tsx"],"sourcesContent":["import { FC, useContext, useEffect, useId, useRef } from 'react';\n\nimport { SnackbarContext } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarProps, SnackbarTransitionName } from '@hh.ru/magritte-ui-snackbar/types';\n\nexport const Snackbar: FC<SnackbarProps> = ({\n actionLabel,\n align,\n addon,\n autohideTime,\n children,\n containerId,\n 'data-qa': dataQa,\n stretched,\n showClose,\n showTimer,\n 'aria-label-close': ariaLabelClose,\n 'aria-label': ariaLabel,\n role,\n removeOnUnmount = true,\n onAction,\n onClose,\n}) => {\n const context = useContext(SnackbarContext);\n const uid = useId();\n const removeOnUnmountRef = useRef(removeOnUnmount);\n removeOnUnmountRef.current = removeOnUnmount;\n\n // коллбэки не мемоизированы => вызывают animateIn\n const onActionRef = useRef<VoidFunction | undefined>(onAction);\n onActionRef.current = onAction;\n const onCloseRef = useRef<SnackbarProps['onClose'] | undefined>(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n context.animateIn(uid, {\n actionLabel,\n align,\n addon,\n autohideTime,\n children,\n 'data-qa': dataQa,\n containerId,\n stretched,\n showClose,\n showTimer,\n 'aria-label-close': ariaLabelClose,\n 'aria-label': ariaLabel,\n role,\n onAction: onActionRef.current,\n onClose: onCloseRef.current,\n } as SnackbarProps);\n }, [\n context,\n uid,\n actionLabel,\n align,\n addon,\n autohideTime,\n dataQa,\n children,\n containerId,\n stretched,\n showClose,\n showTimer,\n ariaLabelClose,\n ariaLabel,\n role,\n ]);\n\n useEffect(() => {\n return () => {\n if (!removeOnUnmountRef.current) {\n return;\n }\n context.animateOut(\n uid,\n context.isShown(uid) ? SnackbarTransitionName.Hide : SnackbarTransitionName.RemoveImmediately\n );\n };\n }, [context, uid]);\n\n return null;\n};\n"],"names":[],"mappings":";;;;AAKO,MAAM,WAA8B,CAAC;AAAA,EACxC,WAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAW,EAAA,MAAA;AAAA,EACX,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAoB,EAAA,cAAA;AAAA,EACpB,YAAc,EAAA,SAAA;AAAA,EACd,IAAA;AAAA,EACA,eAAkB,GAAA,IAAA;AAAA,EAClB,QAAA;AAAA,EACA,OAAA;AACJ,CAAM,KAAA;AACF,EAAM,MAAA,OAAA,GAAU,WAAW,eAAe,CAAA,CAAA;AAC1C,EAAA,MAAM,MAAM,KAAM,EAAA,CAAA;AAClB,EAAM,MAAA,kBAAA,GAAqB,OAAO,eAAe,CAAA,CAAA;AACjD,EAAA,kBAAA,CAAmB,OAAU,GAAA,eAAA,CAAA;AAG7B,EAAM,MAAA,WAAA,GAAc,OAAiC,QAAQ,CAAA,CAAA;AAC7D,EAAA,WAAA,CAAY,OAAU,GAAA,QAAA,CAAA;AACtB,EAAM,MAAA,UAAA,GAAa,OAA6C,OAAO,CAAA,CAAA;AACvE,EAAA,UAAA,CAAW,OAAU,GAAA,OAAA,CAAA;AAErB,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,OAAA,CAAQ,UAAU,GAAK,EAAA;AAAA,MACnB,WAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAW,EAAA,MAAA;AAAA,MACX,WAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,kBAAoB,EAAA,cAAA;AAAA,MACpB,YAAc,EAAA,SAAA;AAAA,MACd,IAAA;AAAA,MACA,UAAU,WAAY,CAAA,OAAA;AAAA,MACtB,SAAS,UAAW,CAAA,OAAA;AAAA,KACN,CAAA,CAAA;AAAA,GACnB,EAAA;AAAA,IACC,OAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,GACH,CAAA,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,OAAO,MAAM;AACT,MAAI,IAAA,CAAC,mBAAmB,OAAS,EAAA;AAC7B,QAAA,OAAA;AAAA,OACJ;AACA,MAAQ,OAAA,CAAA,UAAA;AAAA,QACJ,GAAA;AAAA,QACA,QAAQ,OAAQ,CAAA,GAAG,CAAI,GAAA,sBAAA,CAAuB,OAAO,sBAAuB,CAAA,iBAAA;AAAA,OAChF,CAAA;AAAA,KACJ,CAAA;AAAA,GACD,EAAA,CAAC,OAAS,EAAA,GAAG,CAAC,CAAA,CAAA;AAEjB,EAAO,OAAA,IAAA,CAAA;AACX;;;;"}
@@ -1,3 +1,3 @@
1
1
  import { FC } from 'react';
2
- import { SnackbarContainerProps } from '@hh.ru/magritte-ui-snackbar/types';
2
+ import { SnackbarContainerProps } from './types';
3
3
  export declare const SnackbarContainer: FC<SnackbarContainerProps>;
@@ -2,14 +2,20 @@ import './index.css';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useContext, useCallback, Fragment } from 'react';
4
4
  import { SnackbarContext } from './context.js';
5
- import { s as styles } from './snackbar-Bk-qhcqb.js';
5
+ import { s as styles } from './snackbar-DxehbKoS.js';
6
6
 
7
7
  const SnackbarContainer = ({ children, id, ...props }) => {
8
- const context = useContext(SnackbarContext);
9
- const ref = useCallback((instance) => {
10
- context.setContainerRef(id, instance);
11
- }, [id, context]);
12
- return (jsxs(Fragment, { children: [jsx("div", { ...props, className: styles.snackbarContainer, ref: ref }), children] }));
8
+ const context = useContext(SnackbarContext);
9
+ const ref = useCallback(
10
+ (instance) => {
11
+ context.setContainerRef(id, instance);
12
+ },
13
+ [id, context]
14
+ );
15
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
16
+ /* @__PURE__ */ jsx("div", { ...props, className: styles.snackbarContainer, ref }),
17
+ children
18
+ ] });
13
19
  };
14
20
 
15
21
  export { SnackbarContainer };
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarContainer.js","sources":["src/SnackbarContainer.tsx"],"sourcesContent":["import { FC, Fragment, RefCallback, useContext, useCallback } from 'react';\n\nimport { SnackbarContext } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarContainerProps } from '@hh.ru/magritte-ui-snackbar/types';\n\nimport styles from './snackbar.less';\n\nexport const SnackbarContainer: FC<SnackbarContainerProps> = ({ children, id, ...props }) => {\n const context = useContext(SnackbarContext);\n\n const ref: RefCallback<HTMLElement> = useCallback(\n (instance) => {\n context.setContainerRef(id, instance);\n },\n [id, context]\n );\n\n return (\n <Fragment>\n <div {...props} className={styles.snackbarContainer} ref={ref} />\n {children}\n </Fragment>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAOO,MAAM,iBAAiB,GAA+B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAI;AACxF,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;AAE5C,IAAA,MAAM,GAAG,GAA6B,WAAW,CAC7C,CAAC,QAAQ,KAAI;AACT,QAAA,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC1C,KAAC,EACD,CAAC,EAAE,EAAE,OAAO,CAAC,CAChB,CAAC;IAEF,QACIA,KAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACLC,gBAAS,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAI,EAChE,QAAQ,CACF,EAAA,CAAA,EACb;AACN;;;;"}
1
+ {"version":3,"file":"SnackbarContainer.js","sources":["src/SnackbarContainer.tsx"],"sourcesContent":["import { FC, Fragment, RefCallback, useContext, useCallback } from 'react';\n\nimport { SnackbarContext } from '@hh.ru/magritte-ui-snackbar/context';\nimport { SnackbarContainerProps } from '@hh.ru/magritte-ui-snackbar/types';\n\nimport styles from './snackbar.less';\n\nexport const SnackbarContainer: FC<SnackbarContainerProps> = ({ children, id, ...props }) => {\n const context = useContext(SnackbarContext);\n\n const ref: RefCallback<HTMLElement> = useCallback(\n (instance) => {\n context.setContainerRef(id, instance);\n },\n [id, context]\n );\n\n return (\n <Fragment>\n <div {...props} className={styles.snackbarContainer} ref={ref} />\n {children}\n </Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;AAOO,MAAM,oBAAgD,CAAC,EAAE,UAAU,EAAI,EAAA,GAAG,OAAY,KAAA;AACzF,EAAM,MAAA,OAAA,GAAU,WAAW,eAAe,CAAA,CAAA;AAE1C,EAAA,MAAM,GAAgC,GAAA,WAAA;AAAA,IAClC,CAAC,QAAa,KAAA;AACV,MAAQ,OAAA,CAAA,eAAA,CAAgB,IAAI,QAAQ,CAAA,CAAA;AAAA,KACxC;AAAA,IACA,CAAC,IAAI,OAAO,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,4BACK,QACG,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAK,GAAG,KAAA,EAAO,SAAW,EAAA,MAAA,CAAO,mBAAmB,GAAU,EAAA,CAAA;AAAA,IAC9D,QAAA;AAAA,GACL,EAAA,CAAA,CAAA;AAER;;;;"}
@@ -5,7 +5,7 @@ import { createPortal } from 'react-dom';
5
5
  import { SnackbarRenderer } from './SnackbarRenderer.js';
6
6
  import { SnackbarContext } from './context.js';
7
7
  import { SnackbarTransitionName } from './types.js';
8
- import { s as styles } from './snackbar-Bk-qhcqb.js';
8
+ import { s as styles } from './snackbar-DxehbKoS.js';
9
9
  import 'react-transition-group';
10
10
  import 'classnames';
11
11
  import '@hh.ru/magritte-common-focus-visible';
@@ -20,164 +20,169 @@ import './useAriaSnackbar.js';
20
20
  import '@hh.ru/magritte-ui-theme-wrapper';
21
21
  import '@hh.ru/magritte-ui-timer';
22
22
 
23
- const DEFAULT_CONTAINER = 'body';
23
+ const DEFAULT_CONTAINER = "body";
24
24
  const DEFAULT_POSITION = 0;
25
- const MAX_SNACKBAR_IN_CONTAINER = 2; // отсчет с 0
25
+ const MAX_SNACKBAR_IN_CONTAINER = 2;
26
26
  const getContainerIdByState = (state, uid) => state[uid]?.containerId ?? DEFAULT_CONTAINER;
27
27
  const getContainerIdByProps = (props) => props.containerId || DEFAULT_CONTAINER;
28
28
  const getContainerWasChanged = (state, props) => {
29
- return getContainerIdByState(state, Object.keys(state)[0]) !== getContainerIdByProps(props);
29
+ return getContainerIdByState(state, Object.keys(state)[0]) !== getContainerIdByProps(props);
30
30
  };
31
31
  const getOverridesByState = (state, props) => {
32
- let stretchedOverride;
33
- let alignOverride;
34
- Object.keys(state).forEach((currentUid) => {
35
- const { stretched: prevStretched, align: prevAlign } = state[currentUid];
36
- if (stretchedOverride === undefined && (prevStretched === true || prevStretched === undefined)) {
37
- stretchedOverride = true;
38
- }
39
- if (alignOverride === undefined) {
40
- alignOverride = prevAlign;
41
- }
42
- });
43
- return getContainerWasChanged(state, props)
44
- ? {}
45
- : {
46
- stretched: stretchedOverride ?? props.stretched,
47
- align: alignOverride ?? props.align,
48
- };
32
+ let stretchedOverride;
33
+ let alignOverride;
34
+ Object.keys(state).forEach((currentUid) => {
35
+ const { stretched: prevStretched, align: prevAlign } = state[currentUid];
36
+ if (stretchedOverride === void 0 && (prevStretched === true || prevStretched === void 0)) {
37
+ stretchedOverride = true;
38
+ }
39
+ if (alignOverride === void 0) {
40
+ alignOverride = prevAlign;
41
+ }
42
+ });
43
+ return getContainerWasChanged(state, props) ? {} : {
44
+ stretched: stretchedOverride ?? props.stretched,
45
+ align: alignOverride ?? props.align
46
+ };
49
47
  };
50
48
  const SnackbarContextProvider = ({ children }) => {
51
- const animationTimeoutRef = useRef({
52
- [SnackbarTransitionName.Show]: 0,
53
- [SnackbarTransitionName.Hide]: 0,
54
- [SnackbarTransitionName.Autohide]: 0,
55
- [SnackbarTransitionName.RemoveImmediately]: 0,
49
+ const animationTimeoutRef = useRef({
50
+ [SnackbarTransitionName.Show]: 0,
51
+ [SnackbarTransitionName.Hide]: 0,
52
+ [SnackbarTransitionName.Autohide]: 0,
53
+ [SnackbarTransitionName.RemoveImmediately]: 0
54
+ });
55
+ const containerRefs = useRef({});
56
+ const isShownRef = useRef({});
57
+ const [state, setState] = useState({});
58
+ const snackbarsByUidMapRef = useRef({});
59
+ const animateOut = useCallback((uid, transition) => {
60
+ setState((prevState) => {
61
+ if (!(uid in prevState)) {
62
+ return prevState;
63
+ }
64
+ const isCurrentlyVisible = prevState[uid].transition === SnackbarTransitionName.Show;
65
+ const willBeHidden = [SnackbarTransitionName.Hide, SnackbarTransitionName.Autohide].includes(transition);
66
+ if (transition === SnackbarTransitionName.RemoveImmediately || willBeHidden && !isCurrentlyVisible) {
67
+ const snackbarsByUidMap = snackbarsByUidMapRef.current[getContainerIdByState(prevState, uid)];
68
+ snackbarsByUidMap.delete(uid);
69
+ const uids = [...snackbarsByUidMap].reverse();
70
+ delete isShownRef.current[uid];
71
+ return Object.fromEntries(
72
+ Object.entries(prevState).filter(([key]) => key !== uid).map(([key, state2]) => {
73
+ const index = uids.indexOf(key);
74
+ state2.position = index !== -1 ? index : state2.position;
75
+ return [key, state2];
76
+ })
77
+ );
78
+ }
79
+ return { ...prevState, [uid]: { ...prevState[uid], transition } };
56
80
  });
57
- const containerRefs = useRef({});
58
- const isShownRef = useRef({});
59
- const [state, setState] = useState({});
60
- const snackbarsByUidMapRef = useRef({});
61
- const animateOut = useCallback((uid, transition) => {
62
- setState((prevState) => {
63
- if (!(uid in prevState)) {
64
- return prevState;
65
- }
66
- const isCurrentlyVisible = prevState[uid].transition === SnackbarTransitionName.Show;
67
- const willBeHidden = [SnackbarTransitionName.Hide, SnackbarTransitionName.Autohide].includes(transition);
68
- if (transition === SnackbarTransitionName.RemoveImmediately || (willBeHidden && !isCurrentlyVisible)) {
69
- const snackbarsByUidMap = snackbarsByUidMapRef.current[getContainerIdByState(prevState, uid)];
70
- snackbarsByUidMap.delete(uid);
71
- const uids = [...snackbarsByUidMap].reverse();
72
- delete isShownRef.current[uid];
73
- return Object.fromEntries(Object.entries(prevState)
74
- .filter(([key]) => key !== uid)
75
- .map(([key, state]) => {
76
- // обновляем позицию на основе нового сета
77
- const index = uids.indexOf(key);
78
- state.position = index !== -1 ? index : state.position;
79
- return [key, state];
80
- }));
81
- }
82
- return { ...prevState, [uid]: { ...prevState[uid], transition } };
83
- });
84
- }, []);
85
- const animateIn = useCallback((uid, props) => {
86
- setState((prevState) => {
87
- if (uid in prevState) {
88
- // не даем менять некоторые пропсы у существующего снекбара
89
- const { autohideTime, containerId, showTimer, ..._props } = props;
90
- // применяем оверайды, так как из пропсов прилетают старые значения
91
- const overridesProps = getOverridesByState(prevState, props);
92
- return {
93
- ...prevState,
94
- [uid]: { ...prevState[uid], ..._props, ...overridesProps },
95
- };
96
- }
97
- // сохраняем информацию о uid
98
- const containerIdFromProps = getContainerIdByProps(props);
99
- const snackbarsByUidMap = snackbarsByUidMapRef.current;
100
- if (snackbarsByUidMap.hasOwnProperty(containerIdFromProps)) {
101
- snackbarsByUidMap[containerIdFromProps].add(uid);
102
- }
103
- else {
104
- snackbarsByUidMap[containerIdFromProps] = new Set([uid]);
105
- }
106
- // если прилетел новый снекбар, то все текущие снеки мы скрываем
107
- const containerWasChanged = getContainerWasChanged(prevState, props);
108
- // если stretched есть в новом снакбаре => везде ставим stretched
109
- // аналогичная логика с align (новому снекбару ставим align из стака)
110
- const uidsFromSet = [...snackbarsByUidMap[containerIdFromProps]].reverse();
111
- const stretchedByNewSnackbar = props.stretched === undefined || props.stretched === true;
112
- // обходим старый стейт и обновлям параметры (align, stretched, position, transition)
113
- const prevStateWithUpdatedProps = Object.keys(prevState).reduce((accumulator, currentUid) => {
114
- const { transition, stretched: prevStretched, position } = prevState[currentUid];
115
- // если stretched есть в стаке => везде ставим stretched
116
- const stretched = prevStretched === false ? stretchedByNewSnackbar : prevStretched;
117
- const positionBySet = uidsFromSet.indexOf(currentUid);
118
- // скрываем последний снэкбар
119
- const limitReached = positionBySet > MAX_SNACKBAR_IN_CONTAINER;
120
- const value = {
121
- ...prevState[currentUid],
122
- transition: containerWasChanged || limitReached ? SnackbarTransitionName.Hide : transition,
123
- position: containerWasChanged || limitReached ? position : positionBySet,
124
- stretched,
125
- };
126
- return { ...accumulator, [currentUid]: value };
127
- }, {});
128
- // создаем новый snackbar
129
- const defaultProps = {
130
- animateOut: (transition) => animateOut(uid, transition),
131
- isShown: () => !!isShownRef.current[uid],
132
- onShown: () => (isShownRef.current[uid] = true),
133
- transition: SnackbarTransitionName.Show,
134
- position: DEFAULT_POSITION,
135
- };
136
- // учитываем оверайды на основе стака
137
- const overridesProps = getOverridesByState(prevState, props);
138
- const newState = {
139
- ...prevStateWithUpdatedProps,
140
- ...{ [uid]: { ...defaultProps, ...props, ...overridesProps } },
141
- };
142
- return newState;
143
- });
144
- }, [animateOut]);
145
- const renderFunc = useCallback((uid) => {
146
- const containerId = state[uid].containerId;
147
- const container = containerId ? containerRefs.current[containerId] : document.body;
148
- if (!container) {
149
- return null;
150
- }
151
- return createPortal(jsx(SnackbarRenderer, { ...state[uid], timeout: animationTimeoutRef.current[state[uid].transition], container: container }), container, uid);
152
- }, [state]);
153
- const setContainerRef = useCallback((containerId, instance) => {
154
- if (!instance) {
155
- return;
81
+ }, []);
82
+ const animateIn = useCallback(
83
+ (uid, props) => {
84
+ setState((prevState) => {
85
+ if (uid in prevState) {
86
+ const { autohideTime, containerId, showTimer, ..._props } = props;
87
+ const overridesProps2 = getOverridesByState(prevState, props);
88
+ return {
89
+ ...prevState,
90
+ [uid]: { ...prevState[uid], ..._props, ...overridesProps2 }
91
+ };
156
92
  }
157
- containerRefs.current[containerId] = instance;
158
- }, []);
159
- useEffect(() => {
160
- const animationTimeoutElement = document.createElement('div');
161
- animationTimeoutElement.classList.add(styles['snackbar-animation-timeout']);
162
- document.body.appendChild(animationTimeoutElement);
163
- const style = window.getComputedStyle(animationTimeoutElement);
164
- for (const transition of Object.values(SnackbarTransitionName)) {
165
- const animationTimeout = parseInt(style.getPropertyValue(`--${transition}-animation-duration`), 10);
166
- if (Number.isInteger(animationTimeout)) {
167
- animationTimeoutRef.current[transition] = animationTimeout;
168
- }
93
+ const containerIdFromProps = getContainerIdByProps(props);
94
+ const snackbarsByUidMap = snackbarsByUidMapRef.current;
95
+ if (snackbarsByUidMap.hasOwnProperty(containerIdFromProps)) {
96
+ snackbarsByUidMap[containerIdFromProps].add(uid);
97
+ } else {
98
+ snackbarsByUidMap[containerIdFromProps] = /* @__PURE__ */ new Set([uid]);
169
99
  }
170
- document.body.removeChild(animationTimeoutElement);
171
- }, []);
172
- const value = useMemo(() => {
173
- return {
174
- animateIn,
175
- animateOut,
176
- isShown: (uid) => isShownRef.current[uid],
177
- setContainerRef,
100
+ const containerWasChanged = getContainerWasChanged(prevState, props);
101
+ const uidsFromSet = [...snackbarsByUidMap[containerIdFromProps]].reverse();
102
+ const stretchedByNewSnackbar = props.stretched === void 0 || props.stretched === true;
103
+ const prevStateWithUpdatedProps = Object.keys(prevState).reduce((accumulator, currentUid) => {
104
+ const { transition, stretched: prevStretched, position } = prevState[currentUid];
105
+ const stretched = prevStretched === false ? stretchedByNewSnackbar : prevStretched;
106
+ const positionBySet = uidsFromSet.indexOf(currentUid);
107
+ const limitReached = positionBySet > MAX_SNACKBAR_IN_CONTAINER;
108
+ const value2 = {
109
+ ...prevState[currentUid],
110
+ transition: containerWasChanged || limitReached ? SnackbarTransitionName.Hide : transition,
111
+ position: containerWasChanged || limitReached ? position : positionBySet,
112
+ stretched
113
+ };
114
+ return { ...accumulator, [currentUid]: value2 };
115
+ }, {});
116
+ const defaultProps = {
117
+ animateOut: (transition) => animateOut(uid, transition),
118
+ isShown: () => !!isShownRef.current[uid],
119
+ onShown: () => isShownRef.current[uid] = true,
120
+ transition: SnackbarTransitionName.Show,
121
+ position: DEFAULT_POSITION
122
+ };
123
+ const overridesProps = getOverridesByState(prevState, props);
124
+ const newState = {
125
+ ...prevStateWithUpdatedProps,
126
+ ...{ [uid]: { ...defaultProps, ...props, ...overridesProps } }
178
127
  };
179
- }, [animateIn, animateOut, setContainerRef]);
180
- return (jsxs(SnackbarContext.Provider, { value: value, children: [Object.keys(state).map(renderFunc), children] }));
128
+ return newState;
129
+ });
130
+ },
131
+ [animateOut]
132
+ );
133
+ const renderFunc = useCallback(
134
+ (uid) => {
135
+ const containerId = state[uid].containerId;
136
+ const container = containerId ? containerRefs.current[containerId] : document.body;
137
+ if (!container) {
138
+ return null;
139
+ }
140
+ return createPortal(
141
+ /* @__PURE__ */ jsx(
142
+ SnackbarRenderer,
143
+ {
144
+ ...state[uid],
145
+ timeout: animationTimeoutRef.current[state[uid].transition],
146
+ container
147
+ }
148
+ ),
149
+ container,
150
+ uid
151
+ );
152
+ },
153
+ [state]
154
+ );
155
+ const setContainerRef = useCallback((containerId, instance) => {
156
+ if (!instance) {
157
+ return;
158
+ }
159
+ containerRefs.current[containerId] = instance;
160
+ }, []);
161
+ useEffect(() => {
162
+ const animationTimeoutElement = document.createElement("div");
163
+ animationTimeoutElement.classList.add(styles["snackbar-animation-timeout"]);
164
+ document.body.appendChild(animationTimeoutElement);
165
+ const style = window.getComputedStyle(animationTimeoutElement);
166
+ for (const transition of Object.values(SnackbarTransitionName)) {
167
+ const animationTimeout = parseInt(style.getPropertyValue(`--${transition}-animation-duration`), 10);
168
+ if (Number.isInteger(animationTimeout)) {
169
+ animationTimeoutRef.current[transition] = animationTimeout;
170
+ }
171
+ }
172
+ document.body.removeChild(animationTimeoutElement);
173
+ }, []);
174
+ const value = useMemo(() => {
175
+ return {
176
+ animateIn,
177
+ animateOut,
178
+ isShown: (uid) => isShownRef.current[uid],
179
+ setContainerRef
180
+ };
181
+ }, [animateIn, animateOut, setContainerRef]);
182
+ return /* @__PURE__ */ jsxs(SnackbarContext.Provider, { value, children: [
183
+ Object.keys(state).map(renderFunc),
184
+ children
185
+ ] });
181
186
  };
182
187
 
183
188
  export { SnackbarContextProvider };
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarContextProvider.js","sources":["src/SnackbarContextProvider.tsx"],"sourcesContent":["import { FC, ReactNode, useCallback, useEffect, useMemo, useState, useRef, PropsWithChildren } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { SnackbarRenderer } from '@hh.ru/magritte-ui-snackbar/SnackbarRenderer';\nimport { SnackbarContext, SnackbarContextProps } from '@hh.ru/magritte-ui-snackbar/context';\nimport {\n Align,\n SnackbarProps,\n SnackbarState,\n SnackbarTransitionName,\n SnackbarInternalState,\n} from '@hh.ru/magritte-ui-snackbar/types';\n\nimport styles from './snackbar.less';\n\ntype ProviderState = { [uid: string]: SnackbarState };\ntype SnackbarsByUidMap = Record<string, Set<string>>;\ntype Overrides = { stretched?: boolean; align?: Align };\n\nconst DEFAULT_CONTAINER = 'body';\nconst DEFAULT_POSITION = 0;\nconst MAX_SNACKBAR_IN_CONTAINER = 2; // отсчет с 0\n\nconst getContainerIdByState = (state: ProviderState, uid: string) => state[uid]?.containerId ?? DEFAULT_CONTAINER;\nconst getContainerIdByProps = (props: SnackbarProps) => props.containerId || DEFAULT_CONTAINER;\n\nconst getContainerWasChanged = (state: ProviderState, props: SnackbarProps) => {\n return getContainerIdByState(state, Object.keys(state)[0]) !== getContainerIdByProps(props);\n};\n\nconst getOverridesByState = (state: ProviderState, props: SnackbarProps): Overrides => {\n let stretchedOverride: undefined | boolean;\n let alignOverride: undefined | Align;\n Object.keys(state).forEach((currentUid) => {\n const { stretched: prevStretched, align: prevAlign } = state[currentUid];\n if (stretchedOverride === undefined && (prevStretched === true || prevStretched === undefined)) {\n stretchedOverride = true;\n }\n if (alignOverride === undefined) {\n alignOverride = prevAlign;\n }\n });\n return getContainerWasChanged(state, props)\n ? {}\n : {\n stretched: stretchedOverride ?? props.stretched,\n align: alignOverride ?? props.align,\n };\n};\n\nexport const SnackbarContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const animationTimeoutRef = useRef({\n [SnackbarTransitionName.Show]: 0,\n [SnackbarTransitionName.Hide]: 0,\n [SnackbarTransitionName.Autohide]: 0,\n [SnackbarTransitionName.RemoveImmediately]: 0,\n });\n const containerRefs = useRef<{ [id: string]: HTMLElement }>({});\n const isShownRef = useRef<{ [uid: string]: boolean }>({});\n const [state, setState] = useState<ProviderState>({});\n const snackbarsByUidMapRef = useRef<SnackbarsByUidMap>({});\n\n const animateOut: SnackbarContextProps['animateOut'] = useCallback((uid, transition) => {\n setState((prevState) => {\n if (!(uid in prevState)) {\n return prevState;\n }\n const isCurrentlyVisible = prevState[uid].transition === SnackbarTransitionName.Show;\n const willBeHidden = [SnackbarTransitionName.Hide, SnackbarTransitionName.Autohide].includes(transition);\n\n if (transition === SnackbarTransitionName.RemoveImmediately || (willBeHidden && !isCurrentlyVisible)) {\n const snackbarsByUidMap = snackbarsByUidMapRef.current[getContainerIdByState(prevState, uid)];\n snackbarsByUidMap.delete(uid);\n const uids = [...snackbarsByUidMap].reverse();\n delete isShownRef.current[uid];\n return Object.fromEntries(\n Object.entries(prevState)\n .filter(([key]) => key !== uid)\n .map(([key, state]) => {\n // обновляем позицию на основе нового сета\n const index = uids.indexOf(key);\n state.position = index !== -1 ? index : state.position;\n return [key, state];\n })\n );\n }\n return { ...prevState, [uid]: { ...prevState[uid], transition } };\n });\n }, []);\n\n const animateIn: SnackbarContextProps['animateIn'] = useCallback(\n (uid: string, props: SnackbarProps) => {\n setState((prevState) => {\n if (uid in prevState) {\n // не даем менять некоторые пропсы у существующего снекбара\n const { autohideTime, containerId, showTimer, ..._props } = props;\n // применяем оверайды, так как из пропсов прилетают старые значения\n const overridesProps = getOverridesByState(prevState, props);\n return {\n ...prevState,\n [uid]: { ...prevState[uid], ..._props, ...overridesProps } as SnackbarState,\n };\n }\n // сохраняем информацию о uid\n const containerIdFromProps = getContainerIdByProps(props);\n const snackbarsByUidMap = snackbarsByUidMapRef.current;\n if (snackbarsByUidMap.hasOwnProperty(containerIdFromProps)) {\n snackbarsByUidMap[containerIdFromProps].add(uid);\n } else {\n snackbarsByUidMap[containerIdFromProps] = new Set([uid]);\n }\n\n // если прилетел новый снекбар, то все текущие снеки мы скрываем\n const containerWasChanged = getContainerWasChanged(prevState, props);\n\n // если stretched есть в новом снакбаре => везде ставим stretched\n // аналогичная логика с align (новому снекбару ставим align из стака)\n const uidsFromSet = [...snackbarsByUidMap[containerIdFromProps]].reverse();\n const stretchedByNewSnackbar = props.stretched === undefined || props.stretched === true;\n\n // обходим старый стейт и обновлям параметры (align, stretched, position, transition)\n const prevStateWithUpdatedProps = Object.keys(prevState).reduce((accumulator, currentUid) => {\n const { transition, stretched: prevStretched, position } = prevState[currentUid];\n // если stretched есть в стаке => везде ставим stretched\n const stretched = prevStretched === false ? stretchedByNewSnackbar : prevStretched;\n const positionBySet = uidsFromSet.indexOf(currentUid);\n // скрываем последний снэкбар\n const limitReached = positionBySet > MAX_SNACKBAR_IN_CONTAINER;\n const value = {\n ...prevState[currentUid],\n transition: containerWasChanged || limitReached ? SnackbarTransitionName.Hide : transition,\n position: containerWasChanged || limitReached ? position : positionBySet,\n stretched,\n };\n return { ...accumulator, [currentUid]: value };\n }, {});\n\n // создаем новый snackbar\n const defaultProps: SnackbarInternalState = {\n animateOut: (transition) => animateOut(uid, transition),\n isShown: () => !!isShownRef.current[uid],\n onShown: () => (isShownRef.current[uid] = true),\n transition: SnackbarTransitionName.Show,\n position: DEFAULT_POSITION,\n };\n\n // учитываем оверайды на основе стака\n const overridesProps = getOverridesByState(prevState, props);\n const newState = {\n ...prevStateWithUpdatedProps,\n ...{ [uid]: { ...defaultProps, ...props, ...overridesProps } },\n };\n return newState;\n });\n },\n [animateOut]\n );\n\n const renderFunc = useCallback(\n (uid: string): ReactNode => {\n const containerId = state[uid].containerId;\n const container = containerId ? containerRefs.current[containerId] : document.body;\n\n if (!container) {\n return null;\n }\n return createPortal(\n <SnackbarRenderer\n {...state[uid]}\n timeout={animationTimeoutRef.current[state[uid].transition]}\n container={container}\n />,\n container,\n uid\n );\n },\n [state]\n );\n\n const setContainerRef: SnackbarContextProps['setContainerRef'] = useCallback((containerId, instance) => {\n if (!instance) {\n return;\n }\n containerRefs.current[containerId] = instance;\n }, []);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles['snackbar-animation-timeout']);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n\n for (const transition of Object.values(SnackbarTransitionName)) {\n const animationTimeout = parseInt(style.getPropertyValue(`--${transition}-animation-duration`), 10);\n if (Number.isInteger(animationTimeout)) {\n animationTimeoutRef.current[transition] = animationTimeout;\n }\n }\n\n document.body.removeChild(animationTimeoutElement);\n }, []);\n\n const value = useMemo<SnackbarContextProps>(() => {\n return {\n animateIn,\n animateOut,\n isShown: (uid) => isShownRef.current[uid],\n setContainerRef,\n };\n }, [animateIn, animateOut, setContainerRef]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {Object.keys(state).map(renderFunc)}\n {children}\n </SnackbarContext.Provider>\n );\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"SnackbarContextProvider.js","sources":["src/SnackbarContextProvider.tsx"],"sourcesContent":["import { FC, ReactNode, useCallback, useEffect, useMemo, useState, useRef, PropsWithChildren } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { SnackbarRenderer } from '@hh.ru/magritte-ui-snackbar/SnackbarRenderer';\nimport { SnackbarContext, SnackbarContextProps } from '@hh.ru/magritte-ui-snackbar/context';\nimport {\n Align,\n SnackbarProps,\n SnackbarState,\n SnackbarTransitionName,\n SnackbarInternalState,\n} from '@hh.ru/magritte-ui-snackbar/types';\n\nimport styles from './snackbar.less';\n\ntype ProviderState = { [uid: string]: SnackbarState };\ntype SnackbarsByUidMap = Record<string, Set<string>>;\ntype Overrides = { stretched?: boolean; align?: Align };\n\nconst DEFAULT_CONTAINER = 'body';\nconst DEFAULT_POSITION = 0;\nconst MAX_SNACKBAR_IN_CONTAINER = 2; // отсчет с 0\n\nconst getContainerIdByState = (state: ProviderState, uid: string) => state[uid]?.containerId ?? DEFAULT_CONTAINER;\nconst getContainerIdByProps = (props: SnackbarProps) => props.containerId || DEFAULT_CONTAINER;\n\nconst getContainerWasChanged = (state: ProviderState, props: SnackbarProps) => {\n return getContainerIdByState(state, Object.keys(state)[0]) !== getContainerIdByProps(props);\n};\n\nconst getOverridesByState = (state: ProviderState, props: SnackbarProps): Overrides => {\n let stretchedOverride: undefined | boolean;\n let alignOverride: undefined | Align;\n Object.keys(state).forEach((currentUid) => {\n const { stretched: prevStretched, align: prevAlign } = state[currentUid];\n if (stretchedOverride === undefined && (prevStretched === true || prevStretched === undefined)) {\n stretchedOverride = true;\n }\n if (alignOverride === undefined) {\n alignOverride = prevAlign;\n }\n });\n return getContainerWasChanged(state, props)\n ? {}\n : {\n stretched: stretchedOverride ?? props.stretched,\n align: alignOverride ?? props.align,\n };\n};\n\nexport const SnackbarContextProvider: FC<PropsWithChildren> = ({ children }) => {\n const animationTimeoutRef = useRef({\n [SnackbarTransitionName.Show]: 0,\n [SnackbarTransitionName.Hide]: 0,\n [SnackbarTransitionName.Autohide]: 0,\n [SnackbarTransitionName.RemoveImmediately]: 0,\n });\n const containerRefs = useRef<{ [id: string]: HTMLElement }>({});\n const isShownRef = useRef<{ [uid: string]: boolean }>({});\n const [state, setState] = useState<ProviderState>({});\n const snackbarsByUidMapRef = useRef<SnackbarsByUidMap>({});\n\n const animateOut: SnackbarContextProps['animateOut'] = useCallback((uid, transition) => {\n setState((prevState) => {\n if (!(uid in prevState)) {\n return prevState;\n }\n const isCurrentlyVisible = prevState[uid].transition === SnackbarTransitionName.Show;\n const willBeHidden = [SnackbarTransitionName.Hide, SnackbarTransitionName.Autohide].includes(transition);\n\n if (transition === SnackbarTransitionName.RemoveImmediately || (willBeHidden && !isCurrentlyVisible)) {\n const snackbarsByUidMap = snackbarsByUidMapRef.current[getContainerIdByState(prevState, uid)];\n snackbarsByUidMap.delete(uid);\n const uids = [...snackbarsByUidMap].reverse();\n delete isShownRef.current[uid];\n return Object.fromEntries(\n Object.entries(prevState)\n .filter(([key]) => key !== uid)\n .map(([key, state]) => {\n // обновляем позицию на основе нового сета\n const index = uids.indexOf(key);\n state.position = index !== -1 ? index : state.position;\n return [key, state];\n })\n );\n }\n return { ...prevState, [uid]: { ...prevState[uid], transition } };\n });\n }, []);\n\n const animateIn: SnackbarContextProps['animateIn'] = useCallback(\n (uid: string, props: SnackbarProps) => {\n setState((prevState) => {\n if (uid in prevState) {\n // не даем менять некоторые пропсы у существующего снекбара\n const { autohideTime, containerId, showTimer, ..._props } = props;\n // применяем оверайды, так как из пропсов прилетают старые значения\n const overridesProps = getOverridesByState(prevState, props);\n return {\n ...prevState,\n [uid]: { ...prevState[uid], ..._props, ...overridesProps } as SnackbarState,\n };\n }\n // сохраняем информацию о uid\n const containerIdFromProps = getContainerIdByProps(props);\n const snackbarsByUidMap = snackbarsByUidMapRef.current;\n if (snackbarsByUidMap.hasOwnProperty(containerIdFromProps)) {\n snackbarsByUidMap[containerIdFromProps].add(uid);\n } else {\n snackbarsByUidMap[containerIdFromProps] = new Set([uid]);\n }\n\n // если прилетел новый снекбар, то все текущие снеки мы скрываем\n const containerWasChanged = getContainerWasChanged(prevState, props);\n\n // если stretched есть в новом снакбаре => везде ставим stretched\n // аналогичная логика с align (новому снекбару ставим align из стака)\n const uidsFromSet = [...snackbarsByUidMap[containerIdFromProps]].reverse();\n const stretchedByNewSnackbar = props.stretched === undefined || props.stretched === true;\n\n // обходим старый стейт и обновлям параметры (align, stretched, position, transition)\n const prevStateWithUpdatedProps = Object.keys(prevState).reduce((accumulator, currentUid) => {\n const { transition, stretched: prevStretched, position } = prevState[currentUid];\n // если stretched есть в стаке => везде ставим stretched\n const stretched = prevStretched === false ? stretchedByNewSnackbar : prevStretched;\n const positionBySet = uidsFromSet.indexOf(currentUid);\n // скрываем последний снэкбар\n const limitReached = positionBySet > MAX_SNACKBAR_IN_CONTAINER;\n const value = {\n ...prevState[currentUid],\n transition: containerWasChanged || limitReached ? SnackbarTransitionName.Hide : transition,\n position: containerWasChanged || limitReached ? position : positionBySet,\n stretched,\n };\n return { ...accumulator, [currentUid]: value };\n }, {});\n\n // создаем новый snackbar\n const defaultProps: SnackbarInternalState = {\n animateOut: (transition) => animateOut(uid, transition),\n isShown: () => !!isShownRef.current[uid],\n onShown: () => (isShownRef.current[uid] = true),\n transition: SnackbarTransitionName.Show,\n position: DEFAULT_POSITION,\n };\n\n // учитываем оверайды на основе стака\n const overridesProps = getOverridesByState(prevState, props);\n const newState = {\n ...prevStateWithUpdatedProps,\n ...{ [uid]: { ...defaultProps, ...props, ...overridesProps } },\n };\n return newState;\n });\n },\n [animateOut]\n );\n\n const renderFunc = useCallback(\n (uid: string): ReactNode => {\n const containerId = state[uid].containerId;\n const container = containerId ? containerRefs.current[containerId] : document.body;\n\n if (!container) {\n return null;\n }\n return createPortal(\n <SnackbarRenderer\n {...state[uid]}\n timeout={animationTimeoutRef.current[state[uid].transition]}\n container={container}\n />,\n container,\n uid\n );\n },\n [state]\n );\n\n const setContainerRef: SnackbarContextProps['setContainerRef'] = useCallback((containerId, instance) => {\n if (!instance) {\n return;\n }\n containerRefs.current[containerId] = instance;\n }, []);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles['snackbar-animation-timeout']);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n\n for (const transition of Object.values(SnackbarTransitionName)) {\n const animationTimeout = parseInt(style.getPropertyValue(`--${transition}-animation-duration`), 10);\n if (Number.isInteger(animationTimeout)) {\n animationTimeoutRef.current[transition] = animationTimeout;\n }\n }\n\n document.body.removeChild(animationTimeoutElement);\n }, []);\n\n const value = useMemo<SnackbarContextProps>(() => {\n return {\n animateIn,\n animateOut,\n isShown: (uid) => isShownRef.current[uid],\n setContainerRef,\n };\n }, [animateIn, animateOut, setContainerRef]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {Object.keys(state).map(renderFunc)}\n {children}\n </SnackbarContext.Provider>\n );\n};\n"],"names":["state","overridesProps","value"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { FC } from 'react';
2
2
  import '@hh.ru/magritte-common-focus-visible';
3
- import { SnackbarRendererProps } from '@hh.ru/magritte-ui-snackbar/types';
3
+ import { SnackbarRendererProps } from './types';
4
4
  export declare const SnackbarRenderer: FC<SnackbarRendererProps>;