@snack-uikit/toaster 0.8.19 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +74 -37
  3. package/dist/cjs/components/ToastSystemEvent/styles.module.css +2 -3
  4. package/dist/cjs/components/ToastUpload/ToastUpload.d.ts +59 -0
  5. package/dist/cjs/components/ToastUpload/ToastUpload.js +132 -0
  6. package/dist/cjs/components/ToastUpload/constants.d.ts +16 -0
  7. package/dist/cjs/components/ToastUpload/constants.js +26 -0
  8. package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.d.ts +3 -0
  9. package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.js +32 -0
  10. package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/index.d.ts +1 -0
  11. package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/index.js +25 -0
  12. package/dist/cjs/components/ToastUpload/helperComponents/ButtonIcon/styles.module.css +32 -0
  13. package/dist/cjs/components/ToastUpload/helperComponents/ButtonTextNeutral/ButtonTextNeutral.d.ts +7 -0
  14. package/dist/cjs/components/ToastUpload/helperComponents/ButtonTextNeutral/ButtonTextNeutral.js +28 -0
  15. package/dist/cjs/components/ToastUpload/helperComponents/ButtonTextNeutral/index.d.ts +1 -0
  16. package/dist/cjs/components/ToastUpload/helperComponents/ButtonTextNeutral/index.js +25 -0
  17. package/dist/cjs/components/ToastUpload/helperComponents/ButtonTextNeutral/styles.module.css +33 -0
  18. package/dist/cjs/components/ToastUpload/helperComponents/FileItem/FileItem.d.ts +5 -0
  19. package/dist/cjs/components/ToastUpload/helperComponents/FileItem/FileItem.js +90 -0
  20. package/dist/cjs/components/ToastUpload/helperComponents/FileItem/index.d.ts +1 -0
  21. package/dist/cjs/components/ToastUpload/helperComponents/FileItem/index.js +25 -0
  22. package/dist/cjs/components/ToastUpload/helperComponents/FileItem/styles.module.css +87 -0
  23. package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.d.ts +7 -0
  24. package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.js +43 -0
  25. package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/index.d.ts +1 -0
  26. package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/index.js +25 -0
  27. package/dist/cjs/components/ToastUpload/helperComponents/LoadingStatus/styles.module.css +3 -0
  28. package/dist/cjs/components/ToastUpload/index.d.ts +1 -0
  29. package/dist/cjs/components/ToastUpload/index.js +25 -0
  30. package/dist/cjs/components/ToastUpload/styles.module.css +111 -0
  31. package/dist/cjs/components/ToastUpload/types.d.ts +55 -0
  32. package/dist/cjs/components/ToastUpload/types.js +5 -0
  33. package/dist/cjs/components/ToastUpload/utils/formatPercent.d.ts +1 -0
  34. package/dist/cjs/components/ToastUpload/utils/formatPercent.js +8 -0
  35. package/dist/cjs/components/ToastUpload/utils/index.d.ts +1 -0
  36. package/dist/cjs/components/ToastUpload/utils/index.js +25 -0
  37. package/dist/cjs/components/ToasterContainer/styles.module.css +9 -9
  38. package/dist/cjs/components/index.d.ts +1 -0
  39. package/dist/cjs/components/index.js +2 -1
  40. package/dist/cjs/constants.d.ts +2 -4
  41. package/dist/cjs/constants.js +10 -2
  42. package/dist/cjs/helperComponents/ButtonAction/styles.module.css +2 -2
  43. package/dist/cjs/helpers.d.ts +4 -0
  44. package/dist/cjs/helpers.js +42 -1
  45. package/dist/cjs/index.d.ts +2 -2
  46. package/dist/cjs/index.js +20 -0
  47. package/dist/cjs/testIds.d.ts +14 -0
  48. package/dist/cjs/testIds.js +16 -1
  49. package/dist/cjs/types.d.ts +9 -1
  50. package/dist/esm/components/ToastSystemEvent/styles.module.css +2 -3
  51. package/dist/esm/components/ToastUpload/ToastUpload.d.ts +59 -0
  52. package/dist/esm/components/ToastUpload/ToastUpload.js +45 -0
  53. package/dist/esm/components/ToastUpload/constants.d.ts +16 -0
  54. package/dist/esm/components/ToastUpload/constants.js +20 -0
  55. package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.d.ts +3 -0
  56. package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.js +18 -0
  57. package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/index.d.ts +1 -0
  58. package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/index.js +1 -0
  59. package/dist/esm/components/ToastUpload/helperComponents/ButtonIcon/styles.module.css +32 -0
  60. package/dist/esm/components/ToastUpload/helperComponents/ButtonTextNeutral/ButtonTextNeutral.d.ts +7 -0
  61. package/dist/esm/components/ToastUpload/helperComponents/ButtonTextNeutral/ButtonTextNeutral.js +5 -0
  62. package/dist/esm/components/ToastUpload/helperComponents/ButtonTextNeutral/index.d.ts +1 -0
  63. package/dist/esm/components/ToastUpload/helperComponents/ButtonTextNeutral/index.js +1 -0
  64. package/dist/esm/components/ToastUpload/helperComponents/ButtonTextNeutral/styles.module.css +33 -0
  65. package/dist/esm/components/ToastUpload/helperComponents/FileItem/FileItem.d.ts +5 -0
  66. package/dist/esm/components/ToastUpload/helperComponents/FileItem/FileItem.js +26 -0
  67. package/dist/esm/components/ToastUpload/helperComponents/FileItem/index.d.ts +1 -0
  68. package/dist/esm/components/ToastUpload/helperComponents/FileItem/index.js +1 -0
  69. package/dist/esm/components/ToastUpload/helperComponents/FileItem/styles.module.css +87 -0
  70. package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.d.ts +7 -0
  71. package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.js +16 -0
  72. package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/index.d.ts +1 -0
  73. package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/index.js +1 -0
  74. package/dist/esm/components/ToastUpload/helperComponents/LoadingStatus/styles.module.css +3 -0
  75. package/dist/esm/components/ToastUpload/index.d.ts +1 -0
  76. package/dist/esm/components/ToastUpload/index.js +1 -0
  77. package/dist/esm/components/ToastUpload/styles.module.css +111 -0
  78. package/dist/esm/components/ToastUpload/types.d.ts +55 -0
  79. package/dist/esm/components/ToastUpload/types.js +1 -0
  80. package/dist/esm/components/ToastUpload/utils/formatPercent.d.ts +1 -0
  81. package/dist/esm/components/ToastUpload/utils/formatPercent.js +1 -0
  82. package/dist/esm/components/ToastUpload/utils/index.d.ts +1 -0
  83. package/dist/esm/components/ToastUpload/utils/index.js +1 -0
  84. package/dist/esm/components/ToasterContainer/styles.module.css +9 -9
  85. package/dist/esm/components/index.d.ts +1 -0
  86. package/dist/esm/components/index.js +1 -0
  87. package/dist/esm/constants.d.ts +2 -4
  88. package/dist/esm/constants.js +8 -0
  89. package/dist/esm/helperComponents/ButtonAction/styles.module.css +2 -2
  90. package/dist/esm/helpers.d.ts +4 -0
  91. package/dist/esm/helpers.js +42 -1
  92. package/dist/esm/index.d.ts +2 -2
  93. package/dist/esm/index.js +1 -0
  94. package/dist/esm/testIds.d.ts +14 -0
  95. package/dist/esm/testIds.js +15 -0
  96. package/dist/esm/types.d.ts +9 -1
  97. package/package.json +10 -6
  98. package/src/components/ToastSystemEvent/styles.module.scss +2 -2
  99. package/src/components/ToastUpload/ToastUpload.tsx +182 -0
  100. package/src/components/ToastUpload/constants.ts +26 -0
  101. package/src/components/ToastUpload/helperComponents/ButtonIcon/ButtonIcon.tsx +10 -0
  102. package/src/components/ToastUpload/helperComponents/ButtonIcon/index.ts +1 -0
  103. package/src/components/ToastUpload/helperComponents/ButtonIcon/styles.module.scss +43 -0
  104. package/src/components/ToastUpload/helperComponents/ButtonTextNeutral/ButtonTextNeutral.tsx +23 -0
  105. package/src/components/ToastUpload/helperComponents/ButtonTextNeutral/index.ts +1 -0
  106. package/src/components/ToastUpload/helperComponents/ButtonTextNeutral/styles.module.scss +38 -0
  107. package/src/components/ToastUpload/helperComponents/FileItem/FileItem.tsx +83 -0
  108. package/src/components/ToastUpload/helperComponents/FileItem/index.ts +1 -0
  109. package/src/components/ToastUpload/helperComponents/FileItem/styles.module.scss +91 -0
  110. package/src/components/ToastUpload/helperComponents/LoadingStatus/LoadingStatus.tsx +39 -0
  111. package/src/components/ToastUpload/helperComponents/LoadingStatus/index.ts +1 -0
  112. package/src/components/ToastUpload/helperComponents/LoadingStatus/styles.module.scss +5 -0
  113. package/src/components/ToastUpload/index.ts +1 -0
  114. package/src/components/ToastUpload/styles.module.scss +121 -0
  115. package/src/components/ToastUpload/types.ts +62 -0
  116. package/src/components/ToastUpload/utils/formatPercent.ts +1 -0
  117. package/src/components/ToastUpload/utils/index.ts +1 -0
  118. package/src/components/ToasterContainer/styles.module.scss +1 -1
  119. package/src/components/index.ts +1 -0
  120. package/src/constants.ts +9 -1
  121. package/src/helpers.tsx +38 -0
  122. package/src/index.ts +2 -10
  123. package/src/testIds.ts +17 -0
  124. package/src/types.ts +7 -1
@@ -0,0 +1,62 @@
1
+ import { LinkProps } from '@snack-uikit/link';
2
+ import { ProgressBarProps } from '@snack-uikit/progress-bar';
3
+ import { ValueOf } from '@snack-uikit/utils';
4
+
5
+ import { TOAST_UPLOAD_ITEM_STATUS, TOAST_UPLOAD_STATUS } from './constants';
6
+
7
+ export type ToastUploadStatus = ValueOf<typeof TOAST_UPLOAD_STATUS>;
8
+
9
+ export type ToastUploadItemStatus = ValueOf<typeof TOAST_UPLOAD_ITEM_STATUS>;
10
+
11
+ export type ToastUploadStateSubscription<T> = (subscription: (newValue: T) => void) => () => void;
12
+ export type WithStateSubscription<T> = {
13
+ /**Позволяет подписываться на изменения процесса загрузки файла внутри конпонента,
14
+ * тем самым обновляет элементы не зависимо от всего списка
15
+ * (можно использовать для улучшения производительности из-за частых обновлений)
16
+ */
17
+ subscribeToState?: ToastUploadStateSubscription<Partial<T>>;
18
+ } & T;
19
+
20
+ export type ToastUploadItemLink = Pick<LinkProps, 'target' | 'href' | 'onClick' | 'text'>;
21
+
22
+ export type UploadActions = {
23
+ onCancel?: () => void;
24
+ onPause?: () => void;
25
+ onRetry?: () => void;
26
+ onContinue?: () => void;
27
+ };
28
+
29
+ export type UploadItem = WithStateSubscription<{
30
+ /**
31
+ * Уникальный id элемента
32
+ */
33
+ id?: string;
34
+ /**
35
+ * Название элемента
36
+ */
37
+ title: string;
38
+ /**
39
+ * Статус загрузки
40
+ */
41
+ status: ToastUploadItemStatus;
42
+ /**
43
+ * Описание статуса загрузки
44
+ */
45
+ statusLabel: string;
46
+ /**
47
+ * Процент прогресса
48
+ */
49
+ progress: ProgressBarProps['progress'];
50
+ /**
51
+ * Отображаемый размер файла
52
+ */
53
+ formattedSize: string;
54
+ /**
55
+ * Экшены для управления загрузкой
56
+ */
57
+ actions: UploadActions;
58
+ /**
59
+ * Ссылка на файл
60
+ */
61
+ link?: ToastUploadItemLink;
62
+ }>;
@@ -0,0 +1 @@
1
+ export const formatPercent = (value: number) => `${value}%`;
@@ -0,0 +1 @@
1
+ export * from './formatPercent';
@@ -61,7 +61,7 @@
61
61
  }
62
62
 
63
63
  .containerWithCloseAllButton {
64
- margin-bottom: calc(styles-theme-variables.$size-toaster-button-close-column + styles-theme-variables.$space-toaster-system-event-gap);
64
+ margin-bottom: calc(styles-theme-variables.$size-toaster-button-close-column + styles-theme-variables.$space-toaster-toast-system-event-gap);
65
65
  }
66
66
 
67
67
  @media only screen and (max-width: 480px) {
@@ -1,3 +1,4 @@
1
1
  export * from './ToastSystemEvent';
2
2
  export * from './ToastUserAction';
3
3
  export * from './ToasterContainer';
4
+ export * from './ToastUpload';
package/src/constants.ts CHANGED
@@ -4,6 +4,7 @@ import { ToasterType } from './types';
4
4
  export const TOASTER_TYPE = {
5
5
  SystemEvent: 'system-event',
6
6
  UserAction: 'user-action',
7
+ Upload: 'upload',
7
8
  } as const;
8
9
 
9
10
  export const TOASTER_CONTAINER_DEFAULT_PROPS: Record<ToasterType, ToasterContainerProps> = {
@@ -19,11 +20,18 @@ export const TOASTER_CONTAINER_DEFAULT_PROPS: Record<ToasterType, ToasterContain
19
20
  displayCloseAllButton: false,
20
21
  type: TOASTER_TYPE.UserAction,
21
22
  },
23
+ [TOASTER_TYPE.Upload]: {
24
+ limit: 5,
25
+ position: 'bottom-right',
26
+ displayCloseAllButton: true,
27
+ type: TOASTER_TYPE.SystemEvent,
28
+ },
22
29
  };
23
30
 
24
- export const AUTO_CLOSE_TIME = {
31
+ export const AUTO_CLOSE_TIME: Record<ToasterType, number | false> = {
25
32
  [TOASTER_TYPE.SystemEvent]: 5000,
26
33
  [TOASTER_TYPE.UserAction]: 2000,
34
+ [TOASTER_TYPE.Upload]: false,
27
35
  };
28
36
 
29
37
  export const TOASTER_ROOT_ID = 'toaster-root';
package/src/helpers.tsx CHANGED
@@ -9,6 +9,8 @@ import {
9
9
  ToasterContainerProps,
10
10
  ToastSystemEvent,
11
11
  ToastSystemEventProps,
12
+ ToastUpload,
13
+ ToastUploadProps,
12
14
  ToastUserAction,
13
15
  ToastUserActionProps,
14
16
  } from './components';
@@ -28,6 +30,7 @@ import {
28
30
  ToasterType,
29
31
  ToastOptions,
30
32
  UpdateToast,
33
+ UploadOptions,
31
34
  UserActionOptions,
32
35
  } from './types';
33
36
 
@@ -97,6 +100,8 @@ function getToastComponent<T extends keyof ToasterPropsMap>({
97
100
  return <ToastUserAction {...(toasterProps as ToastUserActionProps)} />;
98
101
  case TOASTER_TYPE.SystemEvent:
99
102
  return <ToastSystemEvent {...(toasterProps as ToastSystemEventProps)} />;
103
+ case TOASTER_TYPE.Upload:
104
+ return <ToastUpload {...(toasterProps as ToastUploadProps)} />;
100
105
  default:
101
106
  return undefined;
102
107
  }
@@ -150,6 +155,10 @@ export const updateToast: UpdateToast = (id, { type, toasterProps, toastOptions,
150
155
  });
151
156
  };
152
157
 
158
+ /**
159
+ * Закрытие тостера
160
+ * @function
161
+ */
153
162
  export const dismissToast = (params?: Id) => toast.dismiss(params);
154
163
  export const isToastActive = toast.isActive;
155
164
 
@@ -331,7 +340,36 @@ const systemEvent = {
331
340
  },
332
341
  };
333
342
 
343
+ const upload = {
344
+ startOrUpdate({ id, ...options }: UploadOptions) {
345
+ const toastId = id || TOASTER_TYPE.Upload;
346
+
347
+ if (toast.isActive(toastId)) {
348
+ return updateToast(toastId, {
349
+ type: TOASTER_TYPE.Upload,
350
+ toasterProps: { ...options },
351
+ });
352
+ }
353
+
354
+ return openToast({
355
+ type: TOASTER_TYPE.Upload,
356
+ toasterProps: {
357
+ ...options,
358
+ },
359
+ toastOptions: {
360
+ id: toastId,
361
+ onClose: options.onClose,
362
+ },
363
+ });
364
+ },
365
+
366
+ dismiss(id?: ToasterId) {
367
+ return toast.dismiss(id);
368
+ },
369
+ };
370
+
334
371
  export const toaster: Toaster = {
335
372
  userAction,
336
373
  systemEvent,
374
+ upload,
337
375
  };
package/src/index.ts CHANGED
@@ -1,12 +1,4 @@
1
1
  export { toaster, openToast, updateToast, dismissToast } from './helpers';
2
- export type { ToastSystemEventProps, ToastUserActionProps, ToasterContainerProps } from './components';
3
- export type {
4
- Toaster,
5
- UpdateToast,
6
- OpenToast,
7
- UserActionOptions,
8
- SystemEventOptions,
9
- ToasterId,
10
- ToastOptions,
11
- } from './types';
2
+ export * from './components';
3
+ export type * from './types';
12
4
  export { TOASTER_TYPE } from './constants';
package/src/testIds.ts CHANGED
@@ -21,3 +21,20 @@ export const TOAST_USER_ACTION_TEST_IDS = {
21
21
  loader: `${TOAST_USER_ACTION_TEST_ID}__loader`,
22
22
  link: `${TOAST_USER_ACTION_TEST_ID}__link`,
23
23
  };
24
+
25
+ const TOAST_UPLOAD_TEST_ID = 'toast-upload';
26
+
27
+ export const TOAST_UPLOAD_TEST_IDS = {
28
+ main: TOAST_UPLOAD_TEST_ID,
29
+ close: `${TOAST_UPLOAD_TEST_ID}__close`,
30
+ title: `${TOAST_UPLOAD_TEST_ID}__title`,
31
+ description: `${TOAST_UPLOAD_TEST_ID}__description`,
32
+ counter: `${TOAST_UPLOAD_TEST_ID}__counter`,
33
+ progress: `${TOAST_UPLOAD_TEST_ID}__progress`,
34
+ list: `${TOAST_UPLOAD_TEST_ID}__list`,
35
+ collapseButton: `${TOAST_UPLOAD_TEST_ID}__collapseButton`,
36
+ progressBar: `${TOAST_UPLOAD_TEST_ID}__progressBar`,
37
+ uploadItem: `${TOAST_UPLOAD_TEST_ID}__uploadItem`,
38
+ uploadItemLink: `${TOAST_UPLOAD_TEST_ID}__uploadItemLink`,
39
+ uploadItemCancel: `${TOAST_UPLOAD_TEST_ID}__uploadItemCancel`,
40
+ };
package/src/types.ts CHANGED
@@ -2,7 +2,7 @@ import { Id, ToastOptions as RtToastOptions } from 'react-toastify';
2
2
 
3
3
  import { ValueOf } from '@snack-uikit/utils';
4
4
 
5
- import { ToasterContainerProps, ToastSystemEventProps, ToastUserActionProps } from './components';
5
+ import { ToasterContainerProps, ToastSystemEventProps, ToastUploadProps, ToastUserActionProps } from './components';
6
6
  import { TOASTER_TYPE } from './constants';
7
7
 
8
8
  export type ToasterId = Id;
@@ -19,6 +19,7 @@ export type ToasterType = ValueOf<typeof TOASTER_TYPE>;
19
19
  export type ToasterPropsMap = {
20
20
  [TOASTER_TYPE.UserAction]: ToastUserActionProps;
21
21
  [TOASTER_TYPE.SystemEvent]: ToastSystemEventProps;
22
+ [TOASTER_TYPE.Upload]: ToastUploadProps & { loading?: boolean };
22
23
  };
23
24
 
24
25
  type OpenNotificationProps<T extends keyof ToasterPropsMap> = {
@@ -49,6 +50,7 @@ export type UpdateToast = <T extends keyof ToasterPropsMap>(
49
50
 
50
51
  export type UserActionOptions = Omit<ToastUserActionProps, 'appearance'> & Pick<ToastOptions, 'id' | 'onClose'>;
51
52
  export type SystemEventOptions = Omit<ToastSystemEventProps, 'appearance'> & Pick<ToastOptions, 'id' | 'onClose'>;
53
+ export type UploadOptions = ToastUploadProps & Pick<ToastOptions, 'id' | 'onClose'>;
52
54
 
53
55
  export type Toaster = {
54
56
  userAction: {
@@ -79,4 +81,8 @@ export type Toaster = {
79
81
  };
80
82
  dismiss(id?: ToasterId): void;
81
83
  };
84
+ upload: {
85
+ startOrUpdate(options: UploadOptions): void;
86
+ dismiss(id?: ToasterId): void;
87
+ };
82
88
  };