@shipengine/elements 2.25.0 → 2.26.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.
Files changed (153) hide show
  1. package/dist/cjs/components/display-term/display-term.cjs +13 -4
  2. package/dist/cjs/components/grid-controller/error-banner/error-banner.cjs +74 -0
  3. package/dist/cjs/components/{error-display/error-display.styles.cjs → grid-controller/error-banner/error-banner.styles.cjs} +8 -4
  4. package/dist/cjs/components/grid-controller/error-banner/index.cjs +7 -0
  5. package/dist/cjs/components/grid-controller/grid-controller.cjs +49 -3
  6. package/dist/cjs/components/grid-controller/grid-controller.styles.cjs +11 -1
  7. package/dist/cjs/components/history/history-card/history-card.cjs +1 -1
  8. package/dist/cjs/components/history/history-card-extension/history-card-extension.cjs +0 -1
  9. package/dist/cjs/components/ups-terms-disclosure/index.cjs +7 -0
  10. package/dist/cjs/components/ups-terms-disclosure/ups-terms-disclosure.cjs +35 -0
  11. package/dist/cjs/elements/labels-grid/hooks/use-labels-grid.cjs +45 -5
  12. package/dist/cjs/elements/labels-grid/labels-grid.cjs +24 -6
  13. package/dist/cjs/elements/shipments-grid/hooks/use-shipments-grid.cjs +41 -3
  14. package/dist/cjs/elements/shipments-grid/shipments-grid.cjs +18 -3
  15. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +9 -10
  16. package/dist/cjs/features/manage-carriers/manage-carriers-row/manage-carriers-row.cjs +6 -1
  17. package/dist/cjs/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.cjs +3 -3
  18. package/dist/cjs/locales/en/grid-controller.json.cjs +13 -0
  19. package/dist/cjs/locales/en/index.cjs +2 -1
  20. package/dist/cjs/locales/en/onboarding.json.cjs +5 -0
  21. package/dist/cjs/package.json.cjs +1 -1
  22. package/dist/cjs/utilities/files.cjs +35 -0
  23. package/dist/cjs/utilities/formatString.cjs +9 -0
  24. package/dist/cjs/utilities/index.cjs +2 -0
  25. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +11 -11
  26. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.cjs +0 -3
  27. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +23 -10
  28. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.cjs +10 -4
  29. package/dist/esm/components/display-term/display-term.js +14 -5
  30. package/dist/esm/components/grid-controller/error-banner/error-banner.js +72 -0
  31. package/dist/esm/components/{error-display/error-display.styles.js → grid-controller/error-banner/error-banner.styles.js} +8 -4
  32. package/dist/esm/components/grid-controller/error-banner/index.js +1 -0
  33. package/dist/esm/components/grid-controller/grid-controller.js +51 -5
  34. package/dist/esm/components/grid-controller/grid-controller.styles.js +11 -1
  35. package/dist/esm/components/history/history-card/history-card.js +1 -1
  36. package/dist/esm/components/history/history-card-extension/history-card-extension.js +0 -1
  37. package/dist/esm/components/ups-terms-disclosure/index.js +1 -0
  38. package/dist/esm/components/ups-terms-disclosure/ups-terms-disclosure.js +33 -0
  39. package/dist/esm/elements/labels-grid/hooks/use-labels-grid.js +46 -6
  40. package/dist/esm/elements/labels-grid/labels-grid.js +24 -6
  41. package/dist/esm/elements/shipments-grid/hooks/use-shipments-grid.js +42 -4
  42. package/dist/esm/elements/shipments-grid/shipments-grid.js +18 -3
  43. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +9 -10
  44. package/dist/esm/features/manage-carriers/manage-carriers-row/manage-carriers-row.js +7 -2
  45. package/dist/esm/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.js +3 -3
  46. package/dist/esm/locales/en/grid-controller.json.js +11 -0
  47. package/dist/esm/locales/en/index.js +2 -1
  48. package/dist/esm/locales/en/onboarding.json.js +5 -0
  49. package/dist/esm/package.json.js +1 -1
  50. package/dist/esm/utilities/files.js +32 -0
  51. package/dist/esm/utilities/formatString.js +9 -1
  52. package/dist/esm/utilities/index.js +1 -0
  53. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +11 -11
  54. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.js +0 -3
  55. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +24 -11
  56. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.js +10 -4
  57. package/dist/types/components/display-term/display-term.d.ts +3 -3
  58. package/dist/types/components/display-term/display-term.d.ts.map +1 -1
  59. package/dist/types/components/grid-controller/error-banner/error-banner.d.ts +10 -0
  60. package/dist/types/components/grid-controller/error-banner/error-banner.d.ts.map +1 -0
  61. package/dist/types/components/grid-controller/error-banner/error-banner.styles.d.ts +24 -0
  62. package/dist/types/components/grid-controller/error-banner/error-banner.styles.d.ts.map +1 -0
  63. package/dist/types/components/grid-controller/error-banner/index.d.ts +2 -0
  64. package/dist/types/components/grid-controller/error-banner/index.d.ts.map +1 -0
  65. package/dist/types/components/grid-controller/grid-controller.d.ts +8 -1
  66. package/dist/types/components/grid-controller/grid-controller.d.ts.map +1 -1
  67. package/dist/types/components/grid-controller/grid-controller.styles.d.ts +10 -0
  68. package/dist/types/components/grid-controller/grid-controller.styles.d.ts.map +1 -1
  69. package/dist/types/components/history/history-card-extension/history-card-extension.d.ts.map +1 -1
  70. package/dist/types/components/ups-terms-disclosure/index.d.ts +2 -0
  71. package/dist/types/components/ups-terms-disclosure/index.d.ts.map +1 -0
  72. package/dist/types/components/ups-terms-disclosure/ups-terms-disclosure.d.ts +2 -0
  73. package/dist/types/components/ups-terms-disclosure/ups-terms-disclosure.d.ts.map +1 -0
  74. package/dist/types/elements/labels-grid/hooks/use-labels-grid.d.ts +7 -2
  75. package/dist/types/elements/labels-grid/hooks/use-labels-grid.d.ts.map +1 -1
  76. package/dist/types/elements/labels-grid/labels-grid.d.ts +18 -2
  77. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  78. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +12 -0
  79. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  80. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +12 -0
  81. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  82. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +12 -0
  83. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  84. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +12 -0
  85. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  86. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +12 -0
  87. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  88. package/dist/types/elements/purchase-label/purchase-label.d.ts +12 -0
  89. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  90. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +12 -0
  91. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  92. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +12 -0
  93. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  94. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts +6 -1
  95. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts.map +1 -1
  96. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +21 -1
  97. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  98. package/dist/types/elements/theme-creator/theme-creator.d.ts +12 -0
  99. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  100. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +12 -0
  101. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  102. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +12 -0
  103. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  104. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +12 -0
  105. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  106. package/dist/types/elements/void-label/void-label.d.ts +12 -0
  107. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  108. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  109. package/dist/types/features/manage-carriers/manage-carriers-row/manage-carriers-row.d.ts.map +1 -1
  110. package/dist/types/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.d.ts +3 -2
  111. package/dist/types/features/manage-carriers/register-funding-source-carrier-form/register-funding-source-carrier-form.d.ts.map +1 -1
  112. package/dist/types/locales/en/index.d.ts +12 -0
  113. package/dist/types/locales/en/index.d.ts.map +1 -1
  114. package/dist/types/types/index.d.ts +5 -4
  115. package/dist/types/types/index.d.ts.map +1 -1
  116. package/dist/types/types/terms-with-disclosure.d.ts +7 -0
  117. package/dist/types/types/terms-with-disclosure.d.ts.map +1 -0
  118. package/dist/types/utilities/feature-flags/types.d.ts +4 -0
  119. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  120. package/dist/types/utilities/files.d.ts +12 -0
  121. package/dist/types/utilities/files.d.ts.map +1 -0
  122. package/dist/types/utilities/formatString.d.ts +8 -0
  123. package/dist/types/utilities/formatString.d.ts.map +1 -1
  124. package/dist/types/utilities/index.d.ts +1 -0
  125. package/dist/types/utilities/index.d.ts.map +1 -1
  126. package/dist/types/workflows/account-settings/account-settings.d.ts +12 -0
  127. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  128. package/dist/types/workflows/carrier-services/carrier-services.d.ts +12 -0
  129. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  130. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +12 -0
  131. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  132. package/dist/types/workflows/label-workflow/label-workflow.d.ts +12 -0
  133. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  134. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts +2 -1
  135. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts.map +1 -1
  136. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.d.ts +0 -3
  137. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.styles.d.ts.map +1 -1
  138. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  139. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.d.ts +8 -2
  140. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.styles.d.ts.map +1 -1
  141. package/dist/types/workflows/onboarding/onboarding.d.ts +12 -0
  142. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  143. package/package.json +1 -1
  144. package/dist/cjs/components/error-display/error-display.cjs +0 -34
  145. package/dist/cjs/components/error-display/index.cjs +0 -7
  146. package/dist/esm/components/error-display/error-display.js +0 -32
  147. package/dist/esm/components/error-display/index.js +0 -1
  148. package/dist/types/components/error-display/error-display.d.ts +0 -7
  149. package/dist/types/components/error-display/error-display.d.ts.map +0 -1
  150. package/dist/types/components/error-display/error-display.styles.d.ts +0 -20
  151. package/dist/types/components/error-display/error-display.styles.d.ts.map +0 -1
  152. package/dist/types/components/error-display/index.d.ts +0 -2
  153. package/dist/types/components/error-display/index.d.ts.map +0 -1
@@ -8,14 +8,23 @@ var reactI18next = require('react-i18next');
8
8
  var displayTerm_styles = require('./display-term.styles.cjs');
9
9
 
10
10
  const DisplayTerm = ({
11
- term
11
+ terms
12
12
  }) => {
13
13
  const {
14
14
  t
15
15
  } = reactI18next.useTranslation();
16
- return jsxRuntime.jsx("ul", {
16
+ const {
17
+ links,
18
+ disclosure
19
+ } = terms;
20
+ return jsxRuntime.jsxs("ul", {
17
21
  css: displayTerm_styles.styles.container,
18
- children: term.links.map(({
22
+ children: [disclosure && jsxRuntime.jsx("li", {
23
+ css: {
24
+ listStyle: "none"
25
+ },
26
+ children: disclosure
27
+ }), links.map(({
19
28
  link,
20
29
  title
21
30
  }) => jsxRuntime.jsx("li", {
@@ -33,7 +42,7 @@ const DisplayTerm = ({
33
42
  size: giger.IconSize.SIZE_SMALL
34
43
  })]
35
44
  })
36
- }, title))
45
+ }, title))]
37
46
  });
38
47
  };
39
48
 
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('@emotion/react/jsx-runtime');
4
+ var giger = require('@shipengine/giger');
5
+ var gigerTheme = require('@shipengine/giger-theme');
6
+ var React = require('react');
7
+ var reload = require('../../../assets/reload.svg.cjs');
8
+ var errorBanner_styles = require('./error-banner.styles.cjs');
9
+ var label = require('../../history/history-card/label/label.cjs');
10
+ var linkAction = require('../../link-action/link-action.cjs');
11
+
12
+ // This component is a temporary solution to handle error display, design is working to improve more error patterns to display
13
+ const ErrorBanner = ({
14
+ labelText,
15
+ linkTitle,
16
+ onClick,
17
+ showReloadIcon,
18
+ duration,
19
+ onDurationEnd
20
+ }) => {
21
+ const [isVisible, setIsVisible] = React.useState(true);
22
+ const timerRef = React.useRef(null);
23
+ // Set up the timer when the component mounts or duration changes
24
+ React.useEffect(() => {
25
+ if (duration && duration > 0) {
26
+ // Clear any existing timer
27
+ if (timerRef.current) clearTimeout(timerRef.current);
28
+ // Set up a new timer to hide the component after the specified duration
29
+ timerRef.current = setTimeout(() => {
30
+ setIsVisible(false);
31
+ // Call the onDurationEnd callback if provided
32
+ if (onDurationEnd) {
33
+ onDurationEnd();
34
+ }
35
+ }, duration);
36
+ }
37
+ // Clean up the timer when the component unmounts or duration changes
38
+ return () => {
39
+ if (timerRef.current) clearTimeout(timerRef.current);
40
+ };
41
+ }, [duration, onDurationEnd]);
42
+ if (!isVisible) return null;
43
+ return jsxRuntime.jsxs("div", {
44
+ css: errorBanner_styles.styles.errorContainer,
45
+ children: [showReloadIcon && jsxRuntime.jsx(reload, {
46
+ height: 24,
47
+ width: 24
48
+ }), linkTitle && !labelText && !onClick && jsxRuntime.jsxs("div", {
49
+ css: errorBanner_styles.styles.errorContent,
50
+ children: [jsxRuntime.jsx(giger.Icon, {
51
+ name: gigerTheme.IconNames.ALERT
52
+ }), jsxRuntime.jsx(giger.Typography, {
53
+ component: "p",
54
+ variant: "body2",
55
+ children: linkTitle
56
+ })]
57
+ }), linkTitle && labelText && onClick && jsxRuntime.jsx(label.Label, {
58
+ spacing: 0,
59
+ text: labelText !== null && labelText !== void 0 ? labelText : "",
60
+ textProps: {
61
+ css: errorBanner_styles.styles.errorHeading
62
+ },
63
+ variant: "subtitle",
64
+ children: jsxRuntime.jsx(linkAction.LinkAction, {
65
+ css: errorBanner_styles.styles.errorCTA,
66
+ isBold: false,
67
+ onClick: onClick,
68
+ title: linkTitle
69
+ })
70
+ })]
71
+ });
72
+ };
73
+
74
+ exports.ErrorBanner = ErrorBanner;
@@ -1,15 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var styles$1 = require('../../utilities/styles.cjs');
3
+ var styles$1 = require('../../../utilities/styles.cjs');
4
4
 
5
5
  const styles = styles$1.createStyles({
6
6
  errorContainer: theme => ({
7
7
  alignItems: "center",
8
- backgroundColor: styles$1.scopeTheme(theme).palette.gray.ultraLight,
8
+ backgroundColor: styles$1.scopeTheme(theme).palette.error.light,
9
9
  display: "flex",
10
10
  flexDirection: "column",
11
- paddingBottom: styles$1.scopeTheme(theme).spacing(2),
12
- paddingTop: styles$1.scopeTheme(theme).spacing(2),
13
11
  rowGap: styles$1.scopeTheme(theme).spacing(1)
14
12
  }),
15
13
  errorCTA: theme => ({
@@ -19,6 +17,12 @@ const styles = styles$1.createStyles({
19
17
  }),
20
18
  errorHeading: theme => ({
21
19
  fontSize: styles$1.scopeTheme(theme).typography.fontSize.S
20
+ }),
21
+ errorContent: theme => ({
22
+ display: "flex",
23
+ alignItems: "center",
24
+ gap: styles$1.scopeTheme(theme).spacing(),
25
+ color: styles$1.scopeTheme(theme).palette.error.main
22
26
  })
23
27
  });
24
28
 
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var errorBanner = require('./error-banner.cjs');
4
+
5
+
6
+
7
+ exports.ErrorBanner = errorBanner.ErrorBanner;
@@ -2,9 +2,14 @@
2
2
 
3
3
  var jsxRuntime = require('@emotion/react/jsx-runtime');
4
4
  var giger = require('@shipengine/giger');
5
+ var gigerTheme = require('@shipengine/giger-theme');
5
6
  var React = require('react');
7
+ var reactI18next = require('react-i18next');
6
8
  var gridController_styles = require('./grid-controller.styles.cjs');
9
+ var errorBanner = require('./error-banner/error-banner.cjs');
7
10
 
11
+ const LIMIT_GRID_ITEMS_EXPORT = 10000;
12
+ const ERROR_DISPLAY_DURATION = 7000;
8
13
  /**
9
14
  * @internal
10
15
  *
@@ -22,10 +27,23 @@ const GridController = ({
22
27
  isLoading = false,
23
28
  useCheckboxes = false,
24
29
  filters,
25
- emptyContent
30
+ emptyContent,
31
+ showExportCSV = false,
32
+ onClickExportCSV,
33
+ totalAmountGridItems,
34
+ hasTrackingStatusFilter,
35
+ hasExportCSVError = false,
36
+ isExportCSVLoading = false,
37
+ onExportErrorDurationEnd
26
38
  }) => {
27
39
  var _a, _b, _c;
28
40
  const [isChecked, setIsChecked] = React.useState((_a = data === null || data === void 0 ? void 0 : data.map(() => false)) !== null && _a !== void 0 ? _a : []);
41
+ const {
42
+ t
43
+ } = reactI18next.useTranslation(["common", "grid-controller"]);
44
+ const dataAvailable = !!data.length;
45
+ const isItemsOverExportLimit = !!((totalAmountGridItems !== null && totalAmountGridItems !== void 0 ? totalAmountGridItems : 0) > LIMIT_GRID_ITEMS_EXPORT);
46
+ const isDisableExportButton = isItemsOverExportLimit || !dataAvailable;
29
47
  const columnHeaderContents = React.useMemo(() => columns.map(column => column.headerContent), [columns]);
30
48
  const loadingRows = React.useMemo(() => {
31
49
  const items = [];
@@ -65,8 +83,36 @@ const GridController = ({
65
83
  css: gridController_styles.styles.wrapper,
66
84
  children: [filters && jsxRuntime.jsx("div", {
67
85
  css: gridController_styles.styles.filters,
68
- children: filters
69
- }), data.length === 0 && emptyContent ? emptyContent : jsxRuntime.jsx(giger.Table, {
86
+ children: jsxRuntime.jsxs(jsxRuntime.Fragment, {
87
+ children: [filters, showExportCSV && !hasTrackingStatusFilter && jsxRuntime.jsxs(giger.Button, {
88
+ bold: false,
89
+ css: gridController_styles.styles.button,
90
+ disabled: isItemsOverExportLimit || !dataAvailable || hasExportCSVError,
91
+ isLoading: isExportCSVLoading && !isDisableExportButton,
92
+ onClick: onClickExportCSV,
93
+ type: "button",
94
+ variant: giger.ButtonVariant.FILLED,
95
+ children: [isItemsOverExportLimit ? jsxRuntime.jsx(giger.IconTooltip, {
96
+ css: gridController_styles.styles.iconTooltip,
97
+ icon: gigerTheme.IconNames.DOWNLOAD,
98
+ size: giger.IconSize.SIZE_MEDIUM,
99
+ children: jsxRuntime.jsx("div", {
100
+ children: t("grid-controller:showExportCSV.limit-error", {
101
+ LIMIT_GRID_ITEMS_EXPORT: new Intl.NumberFormat().format(LIMIT_GRID_ITEMS_EXPORT)
102
+ })
103
+ })
104
+ }) : jsxRuntime.jsx(giger.Icon, {
105
+ css: gridController_styles.styles.iconTooltip,
106
+ name: gigerTheme.IconNames.UPLOAD,
107
+ size: giger.IconSize.SIZE_MEDIUM
108
+ }), t("grid-controller:showExportCSV.button")]
109
+ })]
110
+ })
111
+ }), hasExportCSVError && !isDisableExportButton && jsxRuntime.jsx(errorBanner.ErrorBanner, {
112
+ duration: ERROR_DISPLAY_DURATION,
113
+ linkTitle: t("grid-controller:showExportCSV.generic-error-message"),
114
+ onDurationEnd: onExportErrorDurationEnd
115
+ }), !dataAvailable && emptyContent ? emptyContent : jsxRuntime.jsx(giger.Table, {
70
116
  "data-testid": "grid",
71
117
  footer: footerContent && !isLoading && jsxRuntime.jsx(giger.TableFooter, {
72
118
  css: gridController_styles.styles.tableFooter,
@@ -7,10 +7,17 @@ const styles = styles$1.createStyles({
7
7
  width: styles$1.scopeTheme(theme).spacing(6)
8
8
  }),
9
9
  filters: theme => ({
10
+ display: "flex",
10
11
  backgroundColor: styles$1.scopeTheme(theme).palette.white,
11
12
  borderBottom: `1px solid ${styles$1.scopeTheme(theme).palette.gray[200]}`,
12
13
  padding: styles$1.scopeTheme(theme).spacing()
13
14
  }),
15
+ button: () => ({
16
+ marginLeft: "auto"
17
+ }),
18
+ iconTooltip: theme => ({
19
+ marginRight: styles$1.scopeTheme(theme).spacing()
20
+ }),
14
21
  skeletonTableRow: () => ({
15
22
  height: "68px"
16
23
  }),
@@ -30,7 +37,10 @@ const styles = styles$1.createStyles({
30
37
  wrapper: theme => Object.assign({
31
38
  height: "auto",
32
39
  overflow: "hidden"
33
- }, styles$1.scopeTheme(theme).getComponentOverride("Table"))
40
+ }, styles$1.scopeTheme(theme).getComponentOverride("Table")),
41
+ filtersWrapper: () => ({
42
+ display: "flex"
43
+ })
34
44
  });
35
45
 
36
46
  exports.styles = styles;
@@ -8,8 +8,8 @@ var React = require('react');
8
8
  var reactI18next = require('react-i18next');
9
9
  var funding = require('../../../assets/funding.svg.cjs');
10
10
  var historyCard_styles = require('./history-card.styles.cjs');
11
- var label = require('./label/label.cjs');
12
11
  var elementsContextProvider = require('../../../elements-provider/elements-context-provider.cjs');
12
+ var label = require('./label/label.cjs');
13
13
 
14
14
  const HistoryCard = ({
15
15
  transaction,
@@ -31,7 +31,6 @@ var spacer = require('../../spacer/spacer.cjs');
31
31
  // </div>
32
32
  // );
33
33
  //
34
- // const ErrorState = () => <ErrorDisplay />;
35
34
  //
36
35
  // // replace type call with its se version - lmnt-936
37
36
  // const SuccessState = ({ adjustment }: { adjustment: WalletAdjustment }) => {
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var upsTermsDisclosure = require('./ups-terms-disclosure.cjs');
4
+
5
+
6
+
7
+ exports.UPSTermsDisclosure = upsTermsDisclosure.UPSTermsDisclosure;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('@emotion/react/jsx-runtime');
4
+ var giger = require('@shipengine/giger');
5
+ var styles$1 = require('../../utilities/styles.cjs');
6
+ var reactI18next = require('react-i18next');
7
+
8
+ const styles = styles$1.createStyles({
9
+ upsDisclosure: theme => ({
10
+ display: "flex",
11
+ flexDirection: "column",
12
+ gap: styles$1.scopeTheme(theme).spacing(1)
13
+ })
14
+ });
15
+ const UPSTermsDisclosure = () => {
16
+ const {
17
+ t
18
+ } = reactI18next.useTranslation();
19
+ return jsxRuntime.jsxs("div", {
20
+ css: styles.upsDisclosure,
21
+ children: [jsxRuntime.jsx(giger.Typography, {
22
+ bold: true,
23
+ variant: "body1",
24
+ children: t("onboarding:upsDisclosure.title")
25
+ }), jsxRuntime.jsx(giger.Typography, {
26
+ variant: "body1",
27
+ children: t("onboarding:upsDisclosure.line1")
28
+ }), jsxRuntime.jsx(giger.Typography, {
29
+ variant: "body1",
30
+ children: t("onboarding:upsDisclosure.line2")
31
+ })]
32
+ });
33
+ };
34
+
35
+ exports.UPSTermsDisclosure = UPSTermsDisclosure;
@@ -3,6 +3,7 @@
3
3
  var react = require('@emotion/react');
4
4
  var useGetServiceName = require('../../../hooks/use-get-service-name.cjs');
5
5
  var reactApi = require('@shipengine/react-api');
6
+ var files = require('../../../utilities/files.cjs');
6
7
  var styles = require('../../../utilities/styles.cjs');
7
8
  var React = require('react');
8
9
  var useTrackingStatusFilter = require('./use-tracking-status-filter.cjs');
@@ -16,9 +17,10 @@ const useLabelsGrid = ({
16
17
  showStatusFilter,
17
18
  showTrackingStatusFilter,
18
19
  fetchShipments,
19
- sortDir
20
+ sortDir,
21
+ columns
20
22
  }) => {
21
- var _a, _b, _c, _d, _e, _f, _g, _h;
23
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
22
24
  const initialFilters = {
23
25
  labelId: {
24
26
  enabled: !!showLabelIdFilter,
@@ -47,6 +49,7 @@ const useLabelsGrid = ({
47
49
  pagerProps
48
50
  } = usePager.usePager(PAGE_SIZE);
49
51
  const [filters, setFilters] = React.useState(initialFilters);
52
+ const [enabledLabelsExport, setEnabledLabelsExport] = React.useState(false);
50
53
  const clearAllFilters = () => {
51
54
  setFilters(initialFilters);
52
55
  };
@@ -134,6 +137,39 @@ const useLabelsGrid = ({
134
137
  sortDir: sortDir !== null && sortDir !== void 0 ? sortDir : "desc"
135
138
  }
136
139
  });
140
+ const {
141
+ data: exportLabelsData,
142
+ isInitialLoading: isExportLabelsinitialLoading,
143
+ isRefetching,
144
+ isError: isExportLabelsError
145
+ } = reactApi.useExportLabels({
146
+ enabled: enabledLabelsExport,
147
+ queryFnParams: {
148
+ labelStatus: ((_g = filters.status) === null || _g === void 0 ? void 0 : _g.value) || labelStatus,
149
+ labelId: ((_h = filters.labelId) === null || _h === void 0 ? void 0 : _h.value) || undefined,
150
+ shipmentId: filters.shipmentId.value || undefined,
151
+ sortDir: sortDir !== null && sortDir !== void 0 ? sortDir : "desc",
152
+ columns
153
+ }
154
+ });
155
+ React.useEffect(() => {
156
+ if (exportLabelsData && !isExportLabelsinitialLoading && !isRefetching) {
157
+ files.createLocalFileFromBlobResponse("label", exportLabelsData);
158
+ setEnabledLabelsExport(false);
159
+ }
160
+ }, [isExportLabelsinitialLoading, isRefetching, exportLabelsData]);
161
+ // This function will be called when the error display duration ends
162
+ const onExportErrorDurationEnd = () => {
163
+ setEnabledLabelsExport(false);
164
+ };
165
+ const onClickExportLabelsCSV = () => {
166
+ if (exportLabelsData) {
167
+ files.createLocalFileFromBlobResponse("label", exportLabelsData);
168
+ setEnabledLabelsExport(false);
169
+ } else {
170
+ setEnabledLabelsExport(true);
171
+ }
172
+ };
137
173
  const labels = React.useMemo(() => {
138
174
  // If tracking status filter is active, use the filtered labels from the hook
139
175
  if (isTrackingStatusFilterActive) {
@@ -169,8 +205,8 @@ const useLabelsGrid = ({
169
205
  data: labelFilterData,
170
206
  isError: isLabelFilterError,
171
207
  isInitialLoading: isLabelFilterLoading
172
- } = reactApi.useGetLabel(((_g = filters.labelId) === null || _g === void 0 ? void 0 : _g.value) || undefined);
173
- const isLabelFilterActive = (_h = filters.labelId) === null || _h === void 0 ? void 0 : _h.value;
208
+ } = reactApi.useGetLabel(((_j = filters.labelId) === null || _j === void 0 ? void 0 : _j.value) || undefined);
209
+ const isLabelFilterActive = (_k = filters.labelId) === null || _k === void 0 ? void 0 : _k.value;
174
210
  const isStatusFilteredOut = (status, filter) => {
175
211
  return (filter === null || filter === void 0 ? void 0 : filter.length) && !filter.includes(status);
176
212
  };
@@ -227,13 +263,16 @@ const useLabelsGrid = ({
227
263
  return [];
228
264
  };
229
265
  return {
266
+ onClickExportLabelsCSV,
230
267
  clearAllFilters,
231
268
  filters,
232
269
  getGridData,
233
270
  hasMoreUnfetchedResults: isTrackingStatusFilterActive ? hasMoreUnfetchedResults : false,
234
271
  isAnyFilterActive,
272
+ isExportLabelsError,
235
273
  isError: isListLabelsError || isListShipmentsError && fetchShipments,
236
274
  isFetchingNextPage: isTrackingStatusFilterActive ? isFetchingNextPage : false,
275
+ onExportErrorDurationEnd,
237
276
  // Calculate isLoading based on which query should be active
238
277
  isLoading:
239
278
  // Always include label filter loading when label ID filter is active
@@ -251,7 +290,8 @@ const useLabelsGrid = ({
251
290
  totalElements: labelFilteredById ? 1 : isTrackingStatusFilterActive ? (statusFilteredPaginationInfo === null || statusFilteredPaginationInfo === void 0 ? void 0 : statusFilteredPaginationInfo.totalCount) || 0 : (listLabelsData === null || listLabelsData === void 0 ? void 0 : listLabelsData.total) || 0
252
291
  },
253
292
  setFilters: onSetFilters,
254
- shouldShowFilters: isAnyFilterEnabled
293
+ shouldShowFilters: isAnyFilterEnabled,
294
+ isExportLabelsLoading: isExportLabelsinitialLoading || isRefetching
255
295
  };
256
296
  };
257
297
 
@@ -3,6 +3,7 @@
3
3
  var jsxRuntime = require('@emotion/react/jsx-runtime');
4
4
  var useSortableQuery = require('../../hooks/use-sortable-query.cjs');
5
5
  var giger = require('@shipengine/giger');
6
+ var formatString = require('../../utilities/formatString.cjs');
6
7
  var React = require('react');
7
8
  var reactI18next = require('react-i18next');
8
9
  var useLabelsGrid = require('./hooks/use-labels-grid.cjs');
@@ -32,9 +33,10 @@ const Component = ({
32
33
  onRowClick,
33
34
  onClickExternalOrderId,
34
35
  onClickExternalShipmentId,
35
- onClickShipmentNumber
36
+ onClickShipmentNumber,
37
+ onLabelsCSVExportClick
36
38
  }) => {
37
- var _a, _b, _c;
39
+ var _a, _b, _c, _d;
38
40
  const {
39
41
  t
40
42
  } = reactI18next.useTranslation(["common", "list-labels"]);
@@ -76,6 +78,7 @@ const Component = ({
76
78
  const showShipmentIdFilter = shipmentIdColumn && ((_b = shipmentIdColumn.allowFilter) !== null && _b !== void 0 ? _b : true);
77
79
  const showStatusFilter = statusColumn && ((_c = statusColumn.allowFilter) !== null && _c !== void 0 ? _c : true);
78
80
  const showTrackingStatusFilter = trackingStatusColumn && !!trackingStatusColumn.allowFilter;
81
+ const columnsArray = (_d = features === null || features === void 0 ? void 0 : features.columns) === null || _d === void 0 ? void 0 : _d.map(column => formatString.toSnakeCase(column.name));
79
82
  const {
80
83
  labels,
81
84
  getGridData,
@@ -88,7 +91,11 @@ const Component = ({
88
91
  pageConfig,
89
92
  isAnyFilterActive,
90
93
  shouldShowFilters,
91
- clearAllFilters
94
+ clearAllFilters,
95
+ onClickExportLabelsCSV,
96
+ isExportLabelsError,
97
+ isExportLabelsLoading,
98
+ onExportErrorDurationEnd
92
99
  } = useLabelsGrid.useLabelsGrid({
93
100
  fetchShipments: !!shipmentNumberColumn,
94
101
  labelStatus,
@@ -96,7 +103,8 @@ const Component = ({
96
103
  showShipmentIdFilter,
97
104
  showStatusFilter,
98
105
  showTrackingStatusFilter,
99
- sortDir: sortState.dir
106
+ sortDir: sortState.dir,
107
+ columns: columnsArray
100
108
  });
101
109
  React.useEffect(() => {
102
110
  if (prevStatus.current !== labelStatus) {
@@ -383,7 +391,7 @@ const Component = ({
383
391
  });
384
392
  }
385
393
  return cols;
386
- }, [t, toggleCreatedDateSort, sortState.createdAtDir, features === null || features === void 0 ? void 0 : features.columns, features === null || features === void 0 ? void 0 : features.showActions, labels, onClickExternalOrderId, onClickExternalShipmentId, onClickShipmentNumber, onClickVoidLabel, onClickViewDetails, onClickPrintLabel, onClickPrintForms]);
394
+ }, [t, toggleCreatedDateSort, sortState.createdAtDir, features === null || features === void 0 ? void 0 : features.columns, features === null || features === void 0 ? void 0 : features.showActions, labels, onClickExternalOrderId, onClickExternalShipmentId, onClickShipmentNumber, onClickTrackingNumber, onClickVoidLabel, onClickViewDetails, onClickPrintLabel, onClickPrintForms]);
387
395
  const emptyContentComponent = React.useMemo(() => {
388
396
  if (isLoading) {
389
397
  return undefined;
@@ -434,8 +442,18 @@ const Component = ({
434
442
  showPagination: pageConfig.showPagination,
435
443
  total: pageConfig.totalElements
436
444
  }),
445
+ hasExportCSVError: isExportLabelsError,
446
+ hasTrackingStatusFilter: showTrackingStatusFilter,
447
+ isExportCSVLoading: isExportLabelsLoading,
437
448
  isLoading: isLoading,
438
- onRowClick: onRowClick
449
+ onClickExportCSV: () => {
450
+ onClickExportLabelsCSV();
451
+ onLabelsCSVExportClick === null || onLabelsCSVExportClick === void 0 ? void 0 : onLabelsCSVExportClick();
452
+ },
453
+ onExportErrorDurationEnd: onExportErrorDurationEnd,
454
+ onRowClick: onRowClick,
455
+ showExportCSV: features === null || features === void 0 ? void 0 : features.showExportCSVButton,
456
+ totalAmountGridItems: pageConfig.totalElements
439
457
  }), globalFeatures.poweredByShipEngine && jsxRuntime.jsxs(jsxRuntime.Fragment, {
440
458
  children: [jsxRuntime.jsx(spacer.Spacer, {}), jsxRuntime.jsx(poweredByShipengine.PoweredByShipEngine, {})]
441
459
  })]
@@ -2,6 +2,7 @@
2
2
 
3
3
  var useGetServiceName = require('../../../hooks/use-get-service-name.cjs');
4
4
  var reactApi = require('@shipengine/react-api');
5
+ var files = require('../../../utilities/files.cjs');
5
6
  var React = require('react');
6
7
  var createdDateValue = require('../utils/created-date-value.cjs');
7
8
  var usePager = require('../../../components/pager/usePager.cjs');
@@ -22,9 +23,10 @@ const useShipmentsGrid = ({
22
23
  showShipmentIdFilter = true,
23
24
  showCreatedDateFilter = true,
24
25
  sortBy,
25
- sortDir
26
+ sortDir,
27
+ columns
26
28
  }) => {
27
- var _a, _b, _c, _d;
29
+ var _a, _b, _c, _d, _e, _f, _g, _h;
28
30
  const initialFilters = getInitialFilters(showShipmentIdFilter, showCreatedDateFilter);
29
31
  const {
30
32
  getServiceName
@@ -35,6 +37,7 @@ const useShipmentsGrid = ({
35
37
  pagerProps
36
38
  } = usePager.usePager(PAGE_SIZE);
37
39
  const [activeShipmentId, setActiveShipmentId] = React.useState();
40
+ const [enabled, setEnabled] = React.useState(false);
38
41
  const [filters, setFilters] = React.useState(initialFilters);
39
42
  const clearAllFilters = () => {
40
43
  setFilters(initialFilters);
@@ -66,6 +69,37 @@ const useShipmentsGrid = ({
66
69
  sortBy: sortBy,
67
70
  sortDir: sortDir
68
71
  }, createdDateValue.getCreatedDateFilterValue((_b = (_a = filters.createdDate) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.start, (_d = (_c = filters.createdDate) === null || _c === void 0 ? void 0 : _c.value) === null || _d === void 0 ? void 0 : _d.end)));
72
+ const {
73
+ data: exportShipmentsData,
74
+ isInitialLoading: isExportShipmentsinitialLoading,
75
+ isRefetching,
76
+ isError: isExportShipmentsError
77
+ } = reactApi.useExportShipments({
78
+ enabled,
79
+ queryFnParams: Object.assign({
80
+ shipmentId: filters.shipmentId.value || undefined,
81
+ sortDir: sortDir !== null && sortDir !== void 0 ? sortDir : "desc",
82
+ columns
83
+ }, createdDateValue.getCreatedDateFilterValue((_f = (_e = filters.createdDate) === null || _e === void 0 ? void 0 : _e.value) === null || _f === void 0 ? void 0 : _f.start, (_h = (_g = filters.createdDate) === null || _g === void 0 ? void 0 : _g.value) === null || _h === void 0 ? void 0 : _h.end))
84
+ });
85
+ React.useEffect(() => {
86
+ if (exportShipmentsData && !isExportShipmentsinitialLoading && !isRefetching) {
87
+ files.createLocalFileFromBlobResponse("shipment", exportShipmentsData);
88
+ setEnabled(false);
89
+ }
90
+ }, [isExportShipmentsinitialLoading, isRefetching, exportShipmentsData]);
91
+ // This function will be called when the error display duration ends
92
+ const onExportErrorDurationEnd = () => {
93
+ setEnabled(false);
94
+ };
95
+ const onClickDownloadShipmentsCSV = () => {
96
+ if (exportShipmentsData) {
97
+ files.createLocalFileFromBlobResponse("shipment", exportShipmentsData);
98
+ setEnabled(false);
99
+ } else {
100
+ setEnabled(true);
101
+ }
102
+ };
69
103
  const shipments = React.useMemo(() => data === null || data === void 0 ? void 0 : data.shipments.map(shipment => Object.assign(Object.assign({}, shipment), {
70
104
  disableOnRowClick: shipment.shipmentStatus === "cancelled",
71
105
  isLoading: activeShipmentId === shipment.shipmentId,
@@ -122,12 +156,15 @@ const useShipmentsGrid = ({
122
156
  return [];
123
157
  };
124
158
  return {
159
+ onClickDownloadShipmentsCSV,
125
160
  clearAllFilters,
126
161
  filters,
127
162
  getGridData,
128
163
  isAnyFilterActive,
164
+ isExportShipmentsError,
129
165
  isError,
130
166
  isLoading: isLoadingShipments || isLoadingShipment,
167
+ onExportErrorDurationEnd,
131
168
  pageConfig: {
132
169
  currentPage: shipmentFilteredById ? 1 : (data === null || data === void 0 ? void 0 : data.page) || 0,
133
170
  pagerProps,
@@ -139,7 +176,8 @@ const useShipmentsGrid = ({
139
176
  setActiveShipmentId,
140
177
  setFilters: onSetFilters,
141
178
  shipments,
142
- shouldShowFilters: isAnyFilterEnabled
179
+ shouldShowFilters: isAnyFilterEnabled,
180
+ isExportShipmentsLoading: isExportShipmentsinitialLoading || isRefetching
143
181
  };
144
182
  };
145
183
 
@@ -48,7 +48,9 @@ const Component = ({
48
48
  onClickCancelShipment,
49
49
  shipmentStatus,
50
50
  showShipmentIdFilter = true,
51
- showCreatedDateFilter = true
51
+ showCreatedDateFilter = true,
52
+ onShipmentsCSVExportClick,
53
+ showExportCSVButton = false
52
54
  }) => {
53
55
  const {
54
56
  globalFeatures
@@ -73,7 +75,11 @@ const Component = ({
73
75
  isAnyFilterActive,
74
76
  shouldShowFilters,
75
77
  clearAllFilters,
76
- setActiveShipmentId
78
+ setActiveShipmentId,
79
+ onClickDownloadShipmentsCSV,
80
+ isExportShipmentsError,
81
+ isExportShipmentsLoading,
82
+ onExportErrorDurationEnd
77
83
  } = useShipmentsGrid.useShipmentsGrid({
78
84
  shipmentStatus,
79
85
  showCreatedDateFilter,
@@ -256,8 +262,17 @@ const Component = ({
256
262
  showPagination: pageConfig.showPagination,
257
263
  total: pageConfig.totalElements
258
264
  }),
265
+ hasExportCSVError: isExportShipmentsError,
266
+ isExportCSVLoading: isExportShipmentsLoading,
259
267
  isLoading: isLoading,
260
- onRowClick: onRowClick
268
+ onClickExportCSV: () => {
269
+ onClickDownloadShipmentsCSV();
270
+ onShipmentsCSVExportClick === null || onShipmentsCSVExportClick === void 0 ? void 0 : onShipmentsCSVExportClick();
271
+ },
272
+ onExportErrorDurationEnd: onExportErrorDurationEnd,
273
+ onRowClick: onRowClick,
274
+ showExportCSV: showExportCSVButton,
275
+ totalAmountGridItems: pageConfig.totalElements
261
276
  }), globalFeatures.poweredByShipEngine && jsxRuntime.jsxs(jsxRuntime.Fragment, {
262
277
  children: [jsxRuntime.jsx(spacer.Spacer, {}), jsxRuntime.jsx(poweredByShipengine.PoweredByShipEngine, {})]
263
278
  })]