@thecb/components 4.1.32-beta.1 → 4.1.32

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/dist/index.cjs.js CHANGED
@@ -4859,7 +4859,8 @@ var HINT_GREEN = "#E8FFEF";
4859
4859
  var SEA_GREEN = "#317D4F"; // YELLOW
4860
4860
 
4861
4861
  var SELECTIVE_YELLOW = "#F8B700";
4862
- var MUSTARD_YELLOW = "#FFD459"; // ORANGE
4862
+ var MUSTARD_YELLOW = "#FFD459";
4863
+ var FIRE_YELLOW = "#B34A00"; // ORANGE
4863
4864
 
4864
4865
  var CARROT_ORANGE = "#ED9620";
4865
4866
  var ZEST_ORANGE = "#F47820";
@@ -4961,6 +4962,7 @@ var colors = /*#__PURE__*/Object.freeze({
4961
4962
  SEA_GREEN: SEA_GREEN,
4962
4963
  SELECTIVE_YELLOW: SELECTIVE_YELLOW,
4963
4964
  MUSTARD_YELLOW: MUSTARD_YELLOW,
4965
+ FIRE_YELLOW: FIRE_YELLOW,
4964
4966
  CARROT_ORANGE: CARROT_ORANGE,
4965
4967
  ZEST_ORANGE: ZEST_ORANGE,
4966
4968
  APRICOT_ORANGE: APRICOT_ORANGE,
@@ -20899,6 +20901,9 @@ function _templateObject$q() {
20899
20901
 
20900
20902
  return data;
20901
20903
  }
20904
+ var ACTIVE = "ACTIVE";
20905
+ var EXPIRING_SOON = "EXPIRING_SOON";
20906
+ var EXPIRED = "EXPIRED";
20902
20907
  var CreditCardWrapper = styled__default.div(_templateObject$q());
20903
20908
  var CCIconWrapper = styled__default.div(_templateObject2$e());
20904
20909
 
@@ -20906,7 +20911,34 @@ var FormattedCreditCard = function FormattedCreditCard(_ref) {
20906
20911
  var lastFour = _ref.lastFour,
20907
20912
  autoPay = _ref.autoPay,
20908
20913
  expireDate = _ref.expireDate,
20914
+ expirationStatus = _ref.expirationStatus,
20909
20915
  themeValues = _ref.themeValues;
20916
+
20917
+ var renderCardStatus = function renderCardStatus() {
20918
+ switch (expirationStatus) {
20919
+ case ACTIVE:
20920
+ return /*#__PURE__*/React__default.createElement(Paragraph$1, {
20921
+ variant: "pXS",
20922
+ color: ASH_GREY,
20923
+ textAlign: "left"
20924
+ }, "Exp Date ", expireDate);
20925
+
20926
+ case EXPIRING_SOON:
20927
+ return /*#__PURE__*/React__default.createElement(Paragraph$1, {
20928
+ variant: "pXS",
20929
+ color: FIRE_YELLOW,
20930
+ textAlign: "left"
20931
+ }, "Expiring Soon ", expireDate);
20932
+
20933
+ case EXPIRED:
20934
+ return /*#__PURE__*/React__default.createElement(Paragraph$1, {
20935
+ variant: "pXS",
20936
+ color: ASH_GREY,
20937
+ textAlign: "left"
20938
+ }, "Expired");
20939
+ }
20940
+ };
20941
+
20910
20942
  return /*#__PURE__*/React__default.createElement(CreditCardWrapper, null, /*#__PURE__*/React__default.createElement(CCIconWrapper, null, /*#__PURE__*/React__default.createElement(GenericCard, null)), /*#__PURE__*/React__default.createElement(Stack, {
20911
20943
  childGap: "0"
20912
20944
  }, /*#__PURE__*/React__default.createElement(Box, {
@@ -20917,11 +20949,7 @@ var FormattedCreditCard = function FormattedCreditCard(_ref) {
20917
20949
  color: themeValues.textColor,
20918
20950
  textAlign: "left",
20919
20951
  extraStyles: "display: inline-block;"
20920
- }, "Card ending in ".concat(lastFour)), expireDate && /*#__PURE__*/React__default.createElement(Paragraph$1, {
20921
- variant: "pXS",
20922
- color: ASH_GREY,
20923
- textAlign: "left"
20924
- }, "Exp ".concat(expireDate))), autoPay && /*#__PURE__*/React__default.createElement(Text$1, {
20952
+ }, "Card ending in ".concat(lastFour)), expireDate && /*#__PURE__*/React__default.createElement(React.Fragment, null, renderCardStatus())), autoPay && /*#__PURE__*/React__default.createElement(Text$1, {
20925
20953
  variant: "p",
20926
20954
  color: themeValues.autopayTextColor,
20927
20955
  extraStyles: "font-style: italic;"
@@ -34627,7 +34655,7 @@ var CollapsibleSection = function CollapsibleSection(_ref) {
34627
34655
  initial: initiallyOpen ? "open" : "closed",
34628
34656
  exit: "closed",
34629
34657
  variants: wrapper,
34630
- extraStyles: "transform-origin: 100% 0; overflow-y: hidden;"
34658
+ extraStyles: "transform-origin: 100% 0;"
34631
34659
  }, children))));
34632
34660
  };
34633
34661
 
@@ -34706,7 +34734,7 @@ function _templateObject2$j() {
34706
34734
  }
34707
34735
 
34708
34736
  function _templateObject$x() {
34709
- var data = _taggedTemplateLiteral(["\n box-sizing: border-box;\n background: ", ";\n height: ", ";\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.5rem;\n :not(:last-child),\n :not(:first-child) {\n box-shadow: inset 0px -1px 0px 0px rgb(202, 206, 216);\n }\n :first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n }\n :last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n box-shadow: none;\n }\n"]);
34737
+ var data = _taggedTemplateLiteral(["\n box-sizing: border-box;\n background: ", ";\n border-color: ", ";\n height: ", ";\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1.5rem;\n :not(:last-child),\n :not(:first-child) {\n box-shadow: inset 0px -1px 0px 0px rgb(202, 206, 216);\n }\n :first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n }\n :last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n box-shadow: none;\n }\n"]);
34710
34738
 
34711
34739
  _templateObject$x = function _templateObject() {
34712
34740
  return data;
@@ -34714,12 +34742,18 @@ function _templateObject$x() {
34714
34742
 
34715
34743
  return data;
34716
34744
  }
34717
- var EditableListItem = styled__default.div(_templateObject$x(), WHITE, function (_ref) {
34718
- var listItemSize = _ref.listItemSize;
34745
+ var EditableListItem = styled__default.div(_templateObject$x(), function (_ref) {
34746
+ var disabled = _ref.disabled;
34747
+ return disabled ? "rgba(246, 246, 249, 0.7)" : WHITE;
34748
+ }, GHOST_GREY, function (_ref2) {
34749
+ var listItemSize = _ref2.listItemSize;
34719
34750
  return listItemSize === "big" ? "120px" : "72px";
34720
34751
  });
34721
34752
  var EditableListItemControls = styled__default.div(_templateObject2$j());
34722
34753
 
34754
+ var ACTIVE$1 = "ACTIVE";
34755
+ var EXPIRED$1 = "EXPIRED";
34756
+
34723
34757
  var EditableList = function EditableList(_ref) {
34724
34758
  var _ref$title = _ref.title,
34725
34759
  title = _ref$title === void 0 ? "" : _ref$title,
@@ -34744,7 +34778,7 @@ var EditableList = function EditableList(_ref) {
34744
34778
  useModal = _ref$useModal === void 0 ? false : _ref$useModal,
34745
34779
  Modal = _ref.modal,
34746
34780
  modalProps = _ref.modalProps,
34747
- autoPayMethods = _ref.autoPayMethods,
34781
+ autoPayMethod = _ref.autoPayMethod,
34748
34782
  qaPrefix = _ref.qaPrefix;
34749
34783
  return /*#__PURE__*/React__default.createElement(Box, {
34750
34784
  padding: "0rem 0rem 1.5rem 0rem"
@@ -34762,16 +34796,18 @@ var EditableList = function EditableList(_ref) {
34762
34796
  borderRadius: "4px",
34763
34797
  extraStyles: "box-shadow: 0px 2px 14px 0px rgb(246, 246, 249),\n 0px 3px 8px 0px rgb(202, 206, 216);"
34764
34798
  }, items.map(function (item) {
34799
+ var _item$expirationStatu;
34800
+
34765
34801
  var _useState = React.useState(false),
34766
34802
  _useState2 = _slicedToArray(_useState, 2),
34767
34803
  modalOpen = _useState2[0],
34768
34804
  toggleModal = _useState2[1];
34769
34805
 
34806
+ var expiredItem = (_item$expirationStatu = item === null || item === void 0 ? void 0 : item.expirationStatus) !== null && _item$expirationStatu !== void 0 ? _item$expirationStatu : ACTIVE$1;
34770
34807
  return /*#__PURE__*/React__default.createElement(EditableListItem, {
34771
- listItemSize: !!item.id && (autoPayMethods === null || autoPayMethods === void 0 ? void 0 : autoPayMethods.some(function (methodID) {
34772
- return methodID === item.id;
34773
- })) ? "big" : listItemSize,
34774
- key: item.id || item
34808
+ listItemSize: !!item.id && item.id === autoPayMethod ? "big" : listItemSize,
34809
+ key: item.id || item,
34810
+ disabled: expiredItem === EXPIRED$1
34775
34811
  }, /*#__PURE__*/React__default.createElement(Text$1, {
34776
34812
  variant: "p",
34777
34813
  color: CHARADE_GREY
@@ -39566,6 +39602,10 @@ function _templateObject$A() {
39566
39602
 
39567
39603
  */
39568
39604
 
39605
+ var ACTIVE$2 = "ACTIVE";
39606
+ var EXPIRING_SOON$1 = "EXPIRING_SOON";
39607
+ var EXPIRED$2 = "EXPIRED";
39608
+
39569
39609
  var RadioSection = function RadioSection(_ref) {
39570
39610
  var themeValues = _ref.themeValues,
39571
39611
  isMobile = _ref.isMobile,
@@ -39588,6 +39628,34 @@ var RadioSection = function RadioSection(_ref) {
39588
39628
  }
39589
39629
  };
39590
39630
 
39631
+ var renderCardStatus = function renderCardStatus(item) {
39632
+ var expirationStatus = item.expirationStatus,
39633
+ expireDate = item.expireDate;
39634
+
39635
+ switch (expirationStatus) {
39636
+ case ACTIVE$2:
39637
+ return /*#__PURE__*/React__default.createElement(Text$1, {
39638
+ variant: "pXS",
39639
+ color: ASH_GREY,
39640
+ extraStyles: "text-align: right;"
39641
+ }, "Exp Date ", expireDate);
39642
+
39643
+ case EXPIRING_SOON$1:
39644
+ return /*#__PURE__*/React__default.createElement(Text$1, {
39645
+ variant: "pXS",
39646
+ color: FIRE_YELLOW,
39647
+ extraStyles: "text-align: right;"
39648
+ }, "Expiring Soon ", expireDate);
39649
+
39650
+ case EXPIRED$2:
39651
+ return /*#__PURE__*/React__default.createElement(Text$1, {
39652
+ variant: "pXS",
39653
+ color: ASH_GREY,
39654
+ extraStyles: "text-align: right;"
39655
+ }, "Expired");
39656
+ }
39657
+ };
39658
+
39591
39659
  var wrapper = {
39592
39660
  open: {
39593
39661
  height: openHeight,
@@ -39704,7 +39772,7 @@ var RadioSection = function RadioSection(_ref) {
39704
39772
  isMobile: isMobile,
39705
39773
  alt: icon.altText
39706
39774
  });
39707
- })))), /*#__PURE__*/React__default.createElement(AnimatePresence, {
39775
+ })), section.shouldDisplayCardExpiration && /*#__PURE__*/React__default.createElement(React.Fragment, null, renderCardStatus(section)))), /*#__PURE__*/React__default.createElement(AnimatePresence, {
39708
39776
  initial: false
39709
39777
  }, openSection === section.id && /*#__PURE__*/React__default.createElement(Motion, {
39710
39778
  key: "content-".concat(section.id),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thecb/components",
3
- "version": "4.1.32-beta.1",
3
+ "version": "4.1.32",
4
4
  "description": "Common lib for CityBase react components",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { Fragment } from "react";
2
2
  import styled from "styled-components";
3
3
  import GenericCard from "../icons/GenericCard";
4
4
  import Text from "../text";
@@ -6,7 +6,11 @@ import Paragraph from "../paragraph";
6
6
  import { Box, Stack } from "../layouts";
7
7
  import { fallbackValues } from "./FormattedCreditCard.theme";
8
8
  import { themeComponent } from "../../../util/themeUtils";
9
- import { ASH_GREY } from "../../../constants/colors";
9
+ import { ASH_GREY, FIRE_YELLOW } from "../../../constants/colors";
10
+
11
+ const ACTIVE = "ACTIVE";
12
+ const EXPIRING_SOON = "EXPIRING_SOON";
13
+ const EXPIRED = "EXPIRED";
10
14
 
11
15
  export const CreditCardWrapper = styled.div`
12
16
  display: flex;
@@ -25,39 +29,62 @@ const FormattedCreditCard = ({
25
29
  lastFour,
26
30
  autoPay,
27
31
  expireDate,
32
+ expirationStatus,
28
33
  themeValues
29
- }) => (
30
- <CreditCardWrapper>
31
- <CCIconWrapper>
32
- <GenericCard />
33
- </CCIconWrapper>
34
- <Stack childGap="0">
35
- <Box padding="0">
36
- <Text
37
- variant="p"
38
- padding="0 0 0 8px"
39
- color={themeValues.textColor}
40
- textAlign="left"
41
- extraStyles={`display: inline-block;`}
42
- >
43
- {`Card ending in ${lastFour}`}
44
- </Text>
45
- {expireDate && (
34
+ }) => {
35
+ const renderCardStatus = () => {
36
+ switch (expirationStatus) {
37
+ case ACTIVE:
38
+ return (
46
39
  <Paragraph variant="pXS" color={ASH_GREY} textAlign="left">
47
- {`Exp ${expireDate}`}
40
+ Exp Date {expireDate}
41
+ </Paragraph>
42
+ );
43
+ case EXPIRING_SOON:
44
+ return (
45
+ <Paragraph variant="pXS" color={FIRE_YELLOW} textAlign="left">
46
+ Expiring Soon {expireDate}
48
47
  </Paragraph>
48
+ );
49
+ case EXPIRED:
50
+ return (
51
+ <Paragraph variant="pXS" color={ASH_GREY} textAlign="left">
52
+ Expired
53
+ </Paragraph>
54
+ );
55
+ default:
56
+ null;
57
+ }
58
+ };
59
+ return (
60
+ <CreditCardWrapper>
61
+ <CCIconWrapper>
62
+ <GenericCard />
63
+ </CCIconWrapper>
64
+ <Stack childGap="0">
65
+ <Box padding="0">
66
+ <Text
67
+ variant="p"
68
+ padding="0 0 0 8px"
69
+ color={themeValues.textColor}
70
+ textAlign="left"
71
+ extraStyles={`display: inline-block;`}
72
+ >
73
+ {`Card ending in ${lastFour}`}
74
+ </Text>
75
+ {expireDate && <Fragment>{renderCardStatus()}</Fragment>}
76
+ </Box>
77
+ {autoPay && (
78
+ <Text
79
+ variant="p"
80
+ color={themeValues.autopayTextColor}
81
+ extraStyles={`font-style: italic;`}
82
+ >{`Autopay Enabled`}</Text>
49
83
  )}
50
- </Box>
51
- {autoPay && (
52
- <Text
53
- variant="p"
54
- color={themeValues.autopayTextColor}
55
- extraStyles={`font-style: italic;`}
56
- >{`Autopay Enabled`}</Text>
57
- )}
58
- </Stack>
59
- </CreditCardWrapper>
60
- );
84
+ </Stack>
85
+ </CreditCardWrapper>
86
+ );
87
+ };
61
88
 
62
89
  export default themeComponent(
63
90
  FormattedCreditCard,
@@ -113,7 +113,7 @@ const CollapsibleSection = ({
113
113
  initial={initiallyOpen ? "open" : "closed"}
114
114
  exit="closed"
115
115
  variants={wrapper}
116
- extraStyles={`transform-origin: 100% 0; overflow-y: hidden;`}
116
+ extraStyles={`transform-origin: 100% 0;`}
117
117
  >
118
118
  {children}
119
119
  </Motion>
@@ -1,5 +1,4 @@
1
1
  import React, { useState } from "react";
2
-
3
2
  import {
4
3
  EditableListItem,
5
4
  EditableListItemControls
@@ -15,6 +14,9 @@ import {
15
14
  CHARADE_GREY
16
15
  } from "../../../constants/colors";
17
16
 
17
+ const ACTIVE = "ACTIVE";
18
+ const EXPIRED = "EXPIRED";
19
+
18
20
  const EditableList = ({
19
21
  title = "",
20
22
  titleWeight = "400",
@@ -32,7 +34,7 @@ const EditableList = ({
32
34
  useModal = false,
33
35
  modal: Modal,
34
36
  modalProps,
35
- autoPayMethods,
37
+ autoPayMethod,
36
38
  qaPrefix
37
39
  }) => (
38
40
  <Box padding="0rem 0rem 1.5rem 0rem">
@@ -57,15 +59,14 @@ const EditableList = ({
57
59
  >
58
60
  {items.map(item => {
59
61
  const [modalOpen, toggleModal] = useState(false);
62
+ const expiredItem = item?.expirationStatus ?? ACTIVE;
60
63
  return (
61
64
  <EditableListItem
62
65
  listItemSize={
63
- !!item.id &&
64
- autoPayMethods?.some(methodID => methodID === item.id)
65
- ? "big"
66
- : listItemSize
66
+ !!item.id && item.id === autoPayMethod ? "big" : listItemSize
67
67
  }
68
68
  key={item.id || item}
69
+ disabled={expiredItem === EXPIRED}
69
70
  >
70
71
  <Text variant="p" color={CHARADE_GREY}>
71
72
  {renderItem(item)}
@@ -1,9 +1,11 @@
1
1
  import styled from "styled-components";
2
- import { WHITE } from "../../../constants/colors";
2
+ import { WHITE, GHOST_GREY } from "../../../constants/colors";
3
3
 
4
4
  export const EditableListItem = styled.div`
5
5
  box-sizing: border-box;
6
- background: ${WHITE};
6
+ background: ${({ disabled }) =>
7
+ disabled ? `rgba(246, 246, 249, 0.7)` : WHITE};
8
+ border-color: ${GHOST_GREY};
7
9
  height: ${({ listItemSize }) => (listItemSize === "big" ? "120px" : "72px")};
8
10
  display: flex;
9
11
  justify-content: space-between;
@@ -1,4 +1,4 @@
1
- import React, { useState } from "react";
1
+ import React, { Fragment, useState } from "react";
2
2
  import styled from "styled-components";
3
3
  import { themeComponent } from "../../../util/themeUtils";
4
4
  import { fallbackValues } from "./RadioSection.theme";
@@ -7,7 +7,7 @@ import RadioButton from "../../atoms/radio-button";
7
7
  import { Box, Cluster, Stack, Motion } from "../../atoms/layouts";
8
8
  import { noop } from "../../../util/general";
9
9
  import Text from "../../atoms/text";
10
- import { CHARADE_GREY } from "../../../constants/colors";
10
+ import { CHARADE_GREY, ASH_GREY, FIRE_YELLOW } from "../../../constants/colors";
11
11
  /*
12
12
  Takes an array of section objects, each object should look like:
13
13
  {
@@ -28,6 +28,10 @@ import { CHARADE_GREY } from "../../../constants/colors";
28
28
 
29
29
  */
30
30
 
31
+ const ACTIVE = "ACTIVE";
32
+ const EXPIRING_SOON = "EXPIRING_SOON";
33
+ const EXPIRED = "EXPIRED";
34
+
31
35
  const RadioSection = ({
32
36
  themeValues,
33
37
  isMobile,
@@ -45,6 +49,44 @@ const RadioSection = ({
45
49
  }
46
50
  };
47
51
 
52
+ const renderCardStatus = item => {
53
+ const { expirationStatus, expireDate } = item;
54
+ switch (expirationStatus) {
55
+ case ACTIVE:
56
+ return (
57
+ <Text
58
+ variant="pXS"
59
+ color={ASH_GREY}
60
+ extraStyles={`text-align: right;`}
61
+ >
62
+ Exp Date {expireDate}
63
+ </Text>
64
+ );
65
+ case EXPIRING_SOON:
66
+ return (
67
+ <Text
68
+ variant="pXS"
69
+ color={FIRE_YELLOW}
70
+ extraStyles={`text-align: right;`}
71
+ >
72
+ Expiring Soon {expireDate}
73
+ </Text>
74
+ );
75
+ case EXPIRED:
76
+ return (
77
+ <Text
78
+ variant="pXS"
79
+ color={ASH_GREY}
80
+ extraStyles={`text-align: right;`}
81
+ >
82
+ Expired
83
+ </Text>
84
+ );
85
+ default:
86
+ null;
87
+ }
88
+ };
89
+
48
90
  const wrapper = {
49
91
  open: {
50
92
  height: openHeight,
@@ -186,6 +228,9 @@ const RadioSection = ({
186
228
  ))}
187
229
  </Cluster>
188
230
  )}
231
+ {section.shouldDisplayCardExpiration && (
232
+ <Fragment>{renderCardStatus(section)}</Fragment>
233
+ )}
189
234
  </Cluster>
190
235
  </Box>
191
236
  <AnimatePresence initial={false}>
@@ -64,6 +64,7 @@ const SEA_GREEN = "#317D4F";
64
64
  // YELLOW
65
65
  const SELECTIVE_YELLOW = "#F8B700";
66
66
  const MUSTARD_YELLOW = "#FFD459";
67
+ const FIRE_YELLOW = "#B34A00";
67
68
  // ORANGE
68
69
  const CARROT_ORANGE = "#ED9620";
69
70
  const ZEST_ORANGE = "#F47820";
@@ -166,6 +167,7 @@ export {
166
167
  SEA_GREEN,
167
168
  SELECTIVE_YELLOW,
168
169
  MUSTARD_YELLOW,
170
+ FIRE_YELLOW,
169
171
  CARROT_ORANGE,
170
172
  ZEST_ORANGE,
171
173
  APRICOT_ORANGE,