@widergy/utilitygo-smart-bill-web 3.2.0 → 3.3.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 (19) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/components/SmartBillSummary/constants.js +4 -5
  3. package/dist/components/SmartBillSummary/index.js +30 -5
  4. package/dist/components/SmartBillSummary/styles.module.scss +1 -1
  5. package/dist/components/SmartBillSummary/tabs/Billing/components/DebtStatusLabel/constants.js +9 -0
  6. package/dist/components/SmartBillSummary/tabs/Billing/components/DebtStatusLabel/index.js +34 -0
  7. package/dist/components/SmartBillSummary/tabs/Billing/components/DebtStatusLabel/styles.module.scss +16 -0
  8. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/components/ProgressBar/constants.js +8 -0
  9. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/components/ProgressBar/index.js +154 -0
  10. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/components/ProgressBar/styles.module.scss +174 -0
  11. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/components/ProgressBar/utils.js +88 -0
  12. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/index.js +165 -0
  13. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/styles.module.scss +60 -0
  14. package/dist/components/SmartBillSummary/tabs/Billing/components/RateCard/utils.js +14 -0
  15. package/dist/components/SmartBillSummary/tabs/Billing/index.js +288 -0
  16. package/dist/components/SmartBillSummary/tabs/Billing/styles.module.scss +132 -0
  17. package/dist/components/SmartBillSummary/tabs/Billing/utils.js +13 -0
  18. package/dist/components/SmartBillSummary/tabs/Consumptions/components/CurrentConsumption/utils.js +2 -2
  19. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [3.3.0](https://github.com/widergy/UtilityGO-Smart-Bill-Web/compare/v3.2.0...v3.3.0) (2025-03-19)
2
+
3
+
4
+ ### Features
5
+
6
+ * [CX-201] billing tab smartbill ([#44](https://github.com/widergy/UtilityGO-Smart-Bill-Web/issues/44)) ([d4175c3](https://github.com/widergy/UtilityGO-Smart-Bill-Web/commit/d4175c3fd8a6e773b750bfe9d0c525c35689e8ef))
7
+
1
8
  # [3.2.0](https://github.com/widergy/UtilityGO-Smart-Bill-Web/compare/v3.1.0...v3.2.0) (2025-03-12)
2
9
 
3
10
 
@@ -7,18 +7,17 @@ exports.TAB_COMPONENT_MAPPER = exports.BIMESTRAL_PERIODICITY = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _tabs = require("../../shared/constants/tabs");
9
9
  var _Consumptions = _interopRequireDefault(require("./tabs/Consumptions"));
10
+ var _Billing = _interopRequireDefault(require("./tabs/Billing"));
10
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
12
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /* eslint-disable react/prop-types */
12
13
  const BIMESTRAL_PERIODICITY = exports.BIMESTRAL_PERIODICITY = 'BIMESTRAL';
13
14
  const renderComponentWithProps = (Component, tab) => props => /*#__PURE__*/_react.default.createElement(Component, _extends({}, props, {
14
- assets: props?.assets?.[tab],
15
- translations: props?.translations?.[tab]
15
+ assets: props?.assets?.[tab] || {},
16
+ translations: props?.translations?.[tab] || {}
16
17
  }));
17
18
  const TAB_COMPONENT_MAPPER = exports.TAB_COMPONENT_MAPPER = {
18
19
  [_tabs.SMARTBILL_TABS.CONSUMPTIONS]: renderComponentWithProps(_Consumptions.default, _tabs.SMARTBILL_TABS.CONSUMPTIONS),
19
- [_tabs.SMARTBILL_TABS.BILLING]: renderComponentWithProps(() => /*#__PURE__*/_react.default.createElement("div", null, "Facturaci\xF3n: CX-201"),
20
- // TODO
21
- _tabs.SMARTBILL_TABS.BILLING),
20
+ [_tabs.SMARTBILL_TABS.BILLING]: renderComponentWithProps(_Billing.default, _tabs.SMARTBILL_TABS.BILLING),
22
21
  [_tabs.SMARTBILL_TABS.GLOSSARY]: renderComponentWithProps(() => /*#__PURE__*/_react.default.createElement("div", null, "Glosario: CX-243"),
23
22
  // TODO
24
23
  _tabs.SMARTBILL_TABS.GLOSSARY)
@@ -17,12 +17,19 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
17
17
  const SmartBillSummary = _ref => {
18
18
  let {
19
19
  assets,
20
+ constants,
21
+ consumptionLevels,
22
+ components,
23
+ currentAccount,
24
+ handlers,
25
+ isDesktopSize,
20
26
  loading,
21
27
  smartBill,
22
28
  tabOptions,
23
- translations
29
+ translations,
30
+ utils
24
31
  } = _ref;
25
- const filteredTabOptions = loading ? [] : (0, _utils.getTabOptions)(tabOptions, smartBill);
32
+ const filteredTabOptions = (0, _utils.getTabOptions)(tabOptions, smartBill) || [];
26
33
  const defaultCurrentTab = (0, _utils.getDefaultCurrentTab)(filteredTabOptions);
27
34
  const [currentTab, setCurrentTab] = (0, _react.useState)(defaultCurrentTab);
28
35
  const changeCurrentTab = newTab => setCurrentTab(newTab);
@@ -47,15 +54,32 @@ const SmartBillSummary = _ref => {
47
54
  value: currentTab
48
55
  }), /*#__PURE__*/_react.default.createElement("div", {
49
56
  className: _stylesModule.default.contentContainer
50
- }, _constants.TAB_COMPONENT_MAPPER[currentTab]({
57
+ }, _constants.TAB_COMPONENT_MAPPER?.[currentTab]?.({
51
58
  assets,
59
+ constants,
60
+ consumptionLevels,
61
+ components,
62
+ currentAccount,
63
+ handlers,
64
+ isDesktopSize,
52
65
  loading,
53
66
  smartBill,
54
- translations
67
+ translations,
68
+ utils
55
69
  })));
56
70
  };
57
71
  SmartBillSummary.propTypes = {
58
72
  assets: _propTypes.object,
73
+ constants: _propTypes.object,
74
+ consumptionLevels: _propTypes.array,
75
+ components: (0, _propTypes.shape)({
76
+ [_propTypes.string]: _propTypes.elementType
77
+ }),
78
+ currentAccount: _propTypes.array,
79
+ handlers: (0, _propTypes.shape)({
80
+ [_propTypes.string]: _propTypes.func
81
+ }),
82
+ isDesktopSize: _propTypes.bool,
59
83
  loading: _propTypes.bool,
60
84
  smartBill: _billDataTypes.billDataTypes,
61
85
  tabOptions: (0, _propTypes.arrayOf)((0, _propTypes.shape)({
@@ -65,6 +89,7 @@ SmartBillSummary.propTypes = {
65
89
  label: _propTypes.string,
66
90
  value: _propTypes.string
67
91
  })),
68
- translations: _propTypes.object
92
+ translations: _propTypes.object,
93
+ utils: _propTypes.object
69
94
  };
70
95
  var _default = exports.default = SmartBillSummary;
@@ -1,4 +1,4 @@
1
- @import '_sizes.scss';
1
+ @import '../../scss/variables/sizes.module.scss';
2
2
 
3
3
  $max-content-width: 1264px;
4
4
  $tab-height: 48px;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEFAULT_WARNING_ICON = exports.DEFAULT_SUCCESS_ICON = exports.DEFAULT_ICON_SIZE = void 0;
7
+ const DEFAULT_WARNING_ICON = exports.DEFAULT_WARNING_ICON = 'IconAlertTriangle';
8
+ const DEFAULT_SUCCESS_ICON = exports.DEFAULT_SUCCESS_ICON = 'IconCheck';
9
+ const DEFAULT_ICON_SIZE = exports.DEFAULT_ICON_SIZE = 16;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _energyUi = require("@widergy/energy-ui");
9
+ var _propTypes = require("prop-types");
10
+ var _constants = require("./constants");
11
+ var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const DebtStatusLabel = _ref => {
14
+ let {
15
+ debtStatusLabel,
16
+ isWarning
17
+ } = _ref;
18
+ return /*#__PURE__*/_react.default.createElement("div", {
19
+ className: `${_stylesModule.default.container} ${isWarning ? _stylesModule.default.withDebtsContainer : _stylesModule.default.adheredToAutomaticDebit} `
20
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
21
+ colorTheme: isWarning ? 'warning' : 'success',
22
+ name: isWarning ? _constants.DEFAULT_WARNING_ICON : _constants.DEFAULT_SUCCESS_ICON,
23
+ size: _constants.DEFAULT_ICON_SIZE
24
+ }), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
25
+ colorTheme: isWarning ? 'warning' : 'success',
26
+ variant: "small",
27
+ weight: "medium"
28
+ }, debtStatusLabel));
29
+ };
30
+ DebtStatusLabel.propTypes = {
31
+ debtStatusLabel: _propTypes.string,
32
+ isWarning: _propTypes.bool
33
+ };
34
+ var _default = exports.default = DebtStatusLabel;
@@ -0,0 +1,16 @@
1
+ .container {
2
+ align-items: center;
3
+ border-radius: 4px;
4
+ display: flex;
5
+ grid-gap: 8px;
6
+ justify-content: space-between;
7
+ padding: 4px 8px;
8
+ }
9
+
10
+ .withDebtsContainer {
11
+ background-color: var(--semanticWarning01);
12
+ }
13
+
14
+ .adheredToAutomaticDebit {
15
+ background-color: var(--semanticSuccess01);
16
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MIN_VALUE_PROGRESS = exports.MAX_VALUE_PROGRESS = void 0;
7
+ const MIN_VALUE_PROGRESS = exports.MIN_VALUE_PROGRESS = 0;
8
+ const MAX_VALUE_PROGRESS = exports.MAX_VALUE_PROGRESS = 100;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = require("prop-types");
9
+ var _energyUi = require("@widergy/energy-ui");
10
+ var _utils = require("./utils");
11
+ var _constants = require("./constants");
12
+ var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ const ProgressBar = _ref => {
17
+ let {
18
+ components = {},
19
+ currentPeriod,
20
+ data,
21
+ isT1,
22
+ limitValue,
23
+ specificRate,
24
+ tooltipContent,
25
+ translations,
26
+ value
27
+ } = _ref;
28
+ const {
29
+ LinearProgress
30
+ } = components;
31
+ const lastRange = data[data.length - 1]?.range[1];
32
+ const totalRange = lastRange === 'Infinity' ? data[data.length - 2]?.range[1] * 1.5 : lastRange;
33
+ const progressOverlayValue = (0, _utils.getProgressOverlayValue)(specificRate, totalRange, value);
34
+ const isOverLimit = value > limitValue;
35
+ const {
36
+ initialLabel,
37
+ dynamicLabel,
38
+ finalLabel,
39
+ currentValueLabel,
40
+ contrastValueLabel
41
+ } = (0, _utils.formatLabels)({
42
+ currentPeriod,
43
+ isOverLimit,
44
+ limitValue,
45
+ translations,
46
+ value
47
+ }) || {};
48
+ const consumptionPercentage = (0, _utils.getConsumptionPercentage)(value, limitValue, isOverLimit) || _constants.MAX_VALUE_PROGRESS;
49
+ const shouldRenderDynamicLabel = value > 0 && limitValue > 0;
50
+ const [limitLabelWidth, setLimitLabelWidth] = (0, _react.useState)(0);
51
+ const limitLabelRef = (0, _react.useRef)(null);
52
+ (0, _react.useEffect)(() => {
53
+ if (limitLabelRef.current) {
54
+ setLimitLabelWidth(limitLabelRef.current.offsetWidth);
55
+ }
56
+ }, [dynamicLabel, finalLabel]);
57
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, isT1 ? /*#__PURE__*/_react.default.createElement("div", {
58
+ className: _stylesModule.default.progressBar
59
+ }, /*#__PURE__*/_react.default.createElement("div", {
60
+ className: _stylesModule.default.progressBackground
61
+ }, data.map(_ref2 => {
62
+ let {
63
+ range,
64
+ name
65
+ } = _ref2;
66
+ const isLast = range[1] === 'Infinity';
67
+ const width = isLast ? '20%' : `${range[1] / totalRange * 100}%`;
68
+ return /*#__PURE__*/_react.default.createElement("div", {
69
+ key: name,
70
+ className: _stylesModule.default.progressSegment,
71
+ style: {
72
+ width,
73
+ flexGrow: isLast ? 1 : 0
74
+ }
75
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
76
+ className: _stylesModule.default.segmentName,
77
+ colorTheme: "gray",
78
+ variant: "xsmall"
79
+ }, name));
80
+ })), /*#__PURE__*/_react.default.createElement("div", {
81
+ className: _stylesModule.default.progressOverlay,
82
+ style: {
83
+ left: `${progressOverlayValue}%`,
84
+ width: `calc(100% - ${progressOverlayValue - 0.5}%)`
85
+ }
86
+ })) : /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
87
+ className: `
88
+ ${_stylesModule.default.powerAndDatesContainer}
89
+ ${isOverLimit && _stylesModule.default.overHiredContainer}
90
+ `
91
+ }, /*#__PURE__*/_react.default.createElement("div", {
92
+ className: _stylesModule.default.consumptionDetailsContainer
93
+ }, /*#__PURE__*/_react.default.createElement("div", {
94
+ className: _stylesModule.default.consumptionComparison
95
+ }, value >= 0 && /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
96
+ variant: "subtitle1"
97
+ }, currentValueLabel), value >= 0 && limitValue > 0 && /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
98
+ colorTheme: "gray",
99
+ variant: "small"
100
+ }, contrastValueLabel)), tooltipContent && /*#__PURE__*/_react.default.createElement(_energyUi.UTTooltip, {
101
+ content: tooltipContent
102
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
103
+ colorTheme: "neutral",
104
+ name: "EnergyIconQuestionFilled",
105
+ size: 20
106
+ }))))), /*#__PURE__*/_react.default.createElement("div", {
107
+ className: _stylesModule.default.progressContainer
108
+ }, /*#__PURE__*/_react.default.createElement(LinearProgress, {
109
+ classes: (0, _utils.getProgressBarClasses)({
110
+ consumptionPercentage,
111
+ limitValue,
112
+ value,
113
+ hiredValue: limitValue,
114
+ isOverLimit,
115
+ styles: _stylesModule.default
116
+ }),
117
+ value: consumptionPercentage,
118
+ variant: "determinate"
119
+ }), /*#__PURE__*/_react.default.createElement("div", {
120
+ className: _stylesModule.default.progressLabels
121
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
122
+ colorTheme: "gray",
123
+ variant: "xsmall"
124
+ }, initialLabel), shouldRenderDynamicLabel && /*#__PURE__*/_react.default.createElement("div", {
125
+ className: _stylesModule.default.dinamicLabel,
126
+ style: {
127
+ left: (0, _utils.getDynamicPosition)(consumptionPercentage, limitLabelWidth)
128
+ }
129
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
130
+ colorTheme: "gray",
131
+ variant: "xsmall"
132
+ }, dynamicLabel)), /*#__PURE__*/_react.default.createElement("span", {
133
+ className: _stylesModule.default.smallGrayLabel,
134
+ ref: limitLabelRef
135
+ }, finalLabel)))));
136
+ };
137
+ ProgressBar.propTypes = {
138
+ components: (0, _propTypes.shape)({
139
+ [_propTypes.string]: _propTypes.elementType
140
+ }),
141
+ currentPeriod: _propTypes.object,
142
+ data: (0, _propTypes.arrayOf)((0, _propTypes.shape)({
143
+ name: _propTypes.string,
144
+ color: _propTypes.string,
145
+ range: (0, _propTypes.arrayOf)((0, _propTypes.oneOfType)([_propTypes.number, _propTypes.string]))
146
+ })),
147
+ isT1: _propTypes.bool,
148
+ limitValue: _propTypes.number,
149
+ specificRate: _propTypes.string,
150
+ tooltipContent: _propTypes.string,
151
+ translations: _propTypes.object,
152
+ value: _propTypes.number
153
+ };
154
+ var _default = exports.default = ProgressBar;
@@ -0,0 +1,174 @@
1
+ @import '../../../../../../../../scss/variables/fontSizes.module.scss';
2
+
3
+ $default-border-radius: 100px;
4
+ $default-progress-bar-background: linear-gradient(88.75deg, #30e3a2 1.07%, #efc73c 50.13%, #ec574d 98.93%);
5
+ $default-information-color: #21c7e4;
6
+
7
+ .progressBar {
8
+ height: 9px;
9
+ margin: 0 24px;
10
+ position: relative;
11
+ }
12
+
13
+ .progressBackground {
14
+ background: $default-progress-bar-background;
15
+ border-radius: $default-border-radius;
16
+ display: flex;
17
+ height: 100%;
18
+ left: 0;
19
+ position: absolute;
20
+ top: 0;
21
+ width: 100%;
22
+ }
23
+
24
+ .progressSegment {
25
+ flex-grow: 1;
26
+ height: 100%;
27
+ position: relative;
28
+
29
+ &:last-child {
30
+ border-bottom-right-radius: $default-border-radius;
31
+ border-top-right-radius: $default-border-radius;
32
+ &::after {
33
+ display: none;
34
+ }
35
+ }
36
+ }
37
+
38
+ .progressSegment::after {
39
+ background-color: var(--light01);
40
+ content: '';
41
+ height: 100%;
42
+ position: absolute;
43
+ right: 0;
44
+ top: 0;
45
+ width: 2px;
46
+ z-index: 3;
47
+ }
48
+
49
+ .segmentName {
50
+ position: absolute;
51
+ top: 18px;
52
+ }
53
+
54
+ .progressOverlay {
55
+ background-color: var(--light04);
56
+ height: 100%;
57
+ left: 0;
58
+ pointer-events: none;
59
+ position: absolute;
60
+ top: 0;
61
+ width: 100%;
62
+ z-index: 2;
63
+
64
+ &:last-child {
65
+ border-bottom-right-radius: $default-border-radius;
66
+ border-top-right-radius: $default-border-radius;
67
+ }
68
+ }
69
+
70
+ .backgroundBar {
71
+ background: var(--light02);
72
+ border-radius: $default-border-radius;
73
+ height: 9px;
74
+ }
75
+
76
+ .foregroundBar {
77
+ background: $default-information-color;
78
+ border-radius: $default-border-radius;
79
+ }
80
+
81
+ .overHiredBackgroundBar {
82
+ background: var(--semanticWarning04);
83
+ border-radius: $default-border-radius;
84
+ }
85
+
86
+ .overHiredForegroundBar {
87
+ background: var(--chartGradientHorizontal1);
88
+ border-radius: $default-border-radius;
89
+ }
90
+
91
+ .powerAndDatesContainer {
92
+ display: flex;
93
+ height: unset !important;
94
+ justify-content: space-between;
95
+ margin: 0 24px;
96
+ position: relative;
97
+ }
98
+
99
+ .highestConsumptionContainer {
100
+ display: flex;
101
+ flex-direction: column;
102
+ place-items: flex-start;
103
+ }
104
+
105
+ .hiredPowerContainer {
106
+ display: flex;
107
+ flex-direction: column;
108
+ place-items: flex-end;
109
+ }
110
+
111
+ .powerAmount {
112
+ align-items: baseline;
113
+ display: flex;
114
+ }
115
+
116
+ .hidden {
117
+ display: none;
118
+ }
119
+
120
+ .overHiredContainer {
121
+ flex-direction: row-reverse;
122
+ margin-bottom: 8px;
123
+
124
+ .highestConsumptionContainer {
125
+ place-items: flex-end;
126
+ }
127
+
128
+ .hiredPowerContainer {
129
+ place-items: flex-start;
130
+ }
131
+ }
132
+
133
+ .hiredLabel {
134
+ color: var(--actionNeutral04);
135
+ }
136
+
137
+ .progressContainer {
138
+ margin: 0 24px;
139
+ position: relative;
140
+ }
141
+
142
+ .progressLabels {
143
+ display: flex;
144
+ justify-content: space-between;
145
+ margin: 8px 0 -24px;
146
+ position: relative;
147
+ }
148
+
149
+ .dinamicLabel {
150
+ position: absolute;
151
+ top: 0;
152
+ transform: translateX(-50%);
153
+ }
154
+
155
+ .consumptionDetailsContainer {
156
+ display: flex;
157
+ flex: 1;
158
+ flex-direction: row;
159
+ grid-gap: 4px;
160
+ justify-content: space-between;
161
+ }
162
+
163
+ .consumptionComparison {
164
+ display: flex;
165
+ flex-direction: row;
166
+ grid-gap: 4px;
167
+ margin-bottom: 8px;
168
+ }
169
+
170
+ .smallGrayLabel {
171
+ color: var(--gray04);
172
+ font-size: $small;
173
+ line-height: 1.125rem;
174
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getProgressOverlayValue = exports.getProgressBarClasses = exports.getDynamicPosition = exports.getConsumptionPercentage = exports.formatMaxPowerRegisteredDate = exports.formatLabels = void 0;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ var _numeral = _interopRequireDefault(require("numeral"));
9
+ var _isBetween = _interopRequireDefault(require("dayjs/plugin/isBetween"));
10
+ var _constants = require("./constants");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ const getConsumptionPercentage = (currentValue, contrastValue, isOverLimit) => (currentValue > contrastValue ? isOverLimit ? contrastValue / currentValue : 1 : currentValue / contrastValue) * 100;
13
+ exports.getConsumptionPercentage = getConsumptionPercentage;
14
+ const formatMaxPowerRegisteredDate = maxConsumptionDay => (0, _dayjs.default)(maxConsumptionDay).tz().format('D MMM');
15
+ exports.formatMaxPowerRegisteredDate = formatMaxPowerRegisteredDate;
16
+ const getDynamicPosition = (percentage, labelWidth) => `clamp(50px, calc(${percentage}% - 10px), calc(100% - ${labelWidth + 28}px))`;
17
+ exports.getDynamicPosition = getDynamicPosition;
18
+ _dayjs.default.extend(_isBetween.default);
19
+ const formatLabels = _ref => {
20
+ let {
21
+ currentPeriod,
22
+ isOverLimit,
23
+ limitValue,
24
+ translations = {},
25
+ value
26
+ } = _ref;
27
+ const currentValueFormatted = (0, _numeral.default)(value).format('0,0.[00]');
28
+ const contrastValueFormatted = (0, _numeral.default)(limitValue).format('0,0.[00]') || 0;
29
+ const maxConsumptionDay = (0, _dayjs.default)(`${currentPeriod?.year}-${currentPeriod?.number}-01`);
30
+ const {
31
+ currentValueWithUnitLabel,
32
+ maxValueWithUnitLabel
33
+ } = translations;
34
+ return {
35
+ initialLabel: _constants.MIN_VALUE_PROGRESS,
36
+ dynamicLabel: isOverLimit ? contrastValueFormatted : currentValueFormatted,
37
+ finalLabel: isOverLimit || !limitValue ? currentValueFormatted : contrastValueFormatted,
38
+ currentValueLabel: currentValueWithUnitLabel?.({
39
+ value: currentValueFormatted,
40
+ day: formatMaxPowerRegisteredDate(maxConsumptionDay)
41
+ }),
42
+ contrastValueLabel: maxValueWithUnitLabel?.({
43
+ detailLabel: 'contratada',
44
+ value: contrastValueFormatted
45
+ })
46
+ };
47
+ };
48
+ exports.formatLabels = formatLabels;
49
+ const getProgressBarClasses = _ref2 => {
50
+ let {
51
+ consumptionPercentage,
52
+ contrastValue,
53
+ currentValue,
54
+ hiredValue,
55
+ isOverLimit,
56
+ styles
57
+ } = _ref2;
58
+ return {
59
+ root: `${isOverLimit && styles.overHiredBackgroundBar} ${styles.backgroundBar}`,
60
+ bar: `
61
+ ${!isOverLimit ? styles.foregroundBar : styles.overHiredForegroundBar}
62
+ ${currentValue > hiredValue && !contrastValue && styles.overHiredBackgroundBar}
63
+ ${!consumptionPercentage && styles.hidden}
64
+ `
65
+ };
66
+ };
67
+ exports.getProgressBarClasses = getProgressBarClasses;
68
+ const getProgressOverlayValue = (rate, totalRange, value) => {
69
+ const rateName = rate?.name;
70
+ const defaultProgress = value / totalRange * 100;
71
+ switch (rateName) {
72
+ case 'R1':
73
+ return defaultProgress * 0.4;
74
+ case 'R2':
75
+ return defaultProgress * 0.55;
76
+ case 'R3':
77
+ return defaultProgress * 0.85;
78
+ case 'R4':
79
+ return defaultProgress * 1.13;
80
+ case 'R5':
81
+ return defaultProgress * 1.368;
82
+ case 'R6':
83
+ return defaultProgress * 1.37;
84
+ default:
85
+ return defaultProgress;
86
+ }
87
+ };
88
+ exports.getProgressOverlayValue = getProgressOverlayValue;
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _energyUi = require("@widergy/energy-ui");
9
+ var _propTypes = require("prop-types");
10
+ var _utils = require("../../../Consumptions/components/CurrentConsumption/utils");
11
+ var _utils2 = require("./utils");
12
+ var _ProgressBar = _interopRequireDefault(require("./components/ProgressBar"));
13
+ var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const RateCard = _ref => {
16
+ let {
17
+ components,
18
+ consumptionLevels,
19
+ currentPeriod,
20
+ formatAmount,
21
+ normalizedRate = '',
22
+ rateCardTranslations = {},
23
+ ratesTableLink,
24
+ smartBill = {},
25
+ subsidy = '',
26
+ subsidyLevels
27
+ } = _ref;
28
+ const {
29
+ helpText,
30
+ limitRateValueLabel,
31
+ seeRatesTable,
32
+ startRateValueLabel,
33
+ title,
34
+ tooltipContent,
35
+ unit,
36
+ yourConsumption,
37
+ yourRate
38
+ } = rateCardTranslations;
39
+ const {
40
+ client,
41
+ detail,
42
+ periods
43
+ } = smartBill;
44
+ const purchasedRate = client?.rate?.purchased || '';
45
+ const periodsToCompare = (0, _utils.getConsumptionPeriodsToCompare)(periods);
46
+ const {
47
+ totalConsumption
48
+ } = (0, _utils.getConsumptionLabels)(periodsToCompare) || {};
49
+ const {
50
+ levels = []
51
+ } = consumptionLevels.find(_ref2 => {
52
+ let {
53
+ rate
54
+ } = _ref2;
55
+ return rate === normalizedRate;
56
+ }) || consumptionLevels[0] || {};
57
+ const {
58
+ rates = []
59
+ } = levels.find(_ref3 => {
60
+ let {
61
+ name
62
+ } = _ref3;
63
+ return name && name === subsidyLevels[subsidy];
64
+ }) || levels[0] || {};
65
+ const currentIndex = rates.findIndex(_ref4 => {
66
+ let {
67
+ range
68
+ } = _ref4;
69
+ return range[1] >= totalConsumption;
70
+ });
71
+ const currentRate = rates[currentIndex] ?? {};
72
+ const startRateValue = Array.isArray(currentRate?.range) && currentRate.range[0];
73
+ const limitRateValue = Array.isArray(currentRate?.range) && currentRate.range.length > 0 && currentRate.range[currentRate.range.length - 1];
74
+ const concepts = detail?.concepts?.[0]?.lines;
75
+ const fixedCharges = concepts?.[0];
76
+ const variableCharges = concepts?.[1];
77
+ const {
78
+ title: fixedChargeTitle,
79
+ amount: fixedChargeValue
80
+ } = fixedCharges || {};
81
+ const {
82
+ title: variableChargeTitle,
83
+ amount: variableChargeValue
84
+ } = variableCharges || {};
85
+ const isT1 = purchasedRate.includes('T1');
86
+ return /*#__PURE__*/_react.default.createElement("div", {
87
+ className: _stylesModule.default.container
88
+ }, /*#__PURE__*/_react.default.createElement("div", {
89
+ className: _stylesModule.default.headerTitles
90
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
91
+ variant: "title2",
92
+ weight: "medium"
93
+ }, title), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
94
+ colorTheme: "gray"
95
+ }, helpText)), /*#__PURE__*/_react.default.createElement(_ProgressBar.default, {
96
+ components: components,
97
+ currentPeriod: currentPeriod,
98
+ data: rates,
99
+ isT1: isT1,
100
+ limitValue: limitRateValue,
101
+ specificRate: currentRate,
102
+ tooltipContent: tooltipContent,
103
+ translations: rateCardTranslations,
104
+ value: totalConsumption
105
+ }), /*#__PURE__*/_react.default.createElement("div", {
106
+ className: _stylesModule.default.consumptionDataContainer
107
+ }, /*#__PURE__*/_react.default.createElement("div", {
108
+ className: _stylesModule.default.consumptionContent
109
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
110
+ variant: "title3",
111
+ weight: "medium"
112
+ }, (0, _utils2.getCurrentRate)(purchasedRate, currentRate)), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
113
+ colorTheme: "gray",
114
+ variant: "small"
115
+ }, !isT1 ? yourRate : limitRateValue === 'Infinity' ? startRateValueLabel?.(startRateValue) : limitRateValueLabel?.(limitRateValue))), /*#__PURE__*/_react.default.createElement("div", {
116
+ className: _stylesModule.default.consumptionContent
117
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
118
+ variant: "title3",
119
+ weight: "medium"
120
+ }, totalConsumption, " ", unit), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
121
+ colorTheme: "gray",
122
+ variant: "small"
123
+ }, yourConsumption))), /*#__PURE__*/_react.default.createElement("div", {
124
+ className: _stylesModule.default.footer
125
+ }, /*#__PURE__*/_react.default.createElement("div", {
126
+ className: _stylesModule.default.detail
127
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
128
+ weight: "medium"
129
+ }, fixedChargeTitle), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
130
+ variant: "subtitle1",
131
+ weight: "medium"
132
+ }, formatAmount?.(fixedChargeValue))), /*#__PURE__*/_react.default.createElement("div", {
133
+ className: _stylesModule.default.detail
134
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
135
+ weight: "medium"
136
+ }, variableChargeTitle), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
137
+ variant: "subtitle1",
138
+ weight: "medium"
139
+ }, formatAmount?.(variableChargeValue))), /*#__PURE__*/_react.default.createElement("a", {
140
+ className: _stylesModule.default.footerAction,
141
+ href: ratesTableLink,
142
+ rel: "noopener noreferrer",
143
+ target: "_blank"
144
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
145
+ colorTheme: "neutral",
146
+ weight: "medium"
147
+ }, seeRatesTable), /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
148
+ colorTheme: "neutral",
149
+ name: "IconChevronRight",
150
+ size: 20
151
+ }))));
152
+ };
153
+ RateCard.propTypes = {
154
+ components: _propTypes.object,
155
+ consumptionLevels: _propTypes.array,
156
+ currentPeriod: _propTypes.object,
157
+ formatAmount: _propTypes.func,
158
+ normalizedRate: _propTypes.string,
159
+ rateCardTranslations: _propTypes.object,
160
+ ratesTableLink: _propTypes.string,
161
+ smartBill: _propTypes.object,
162
+ subsidy: _propTypes.string,
163
+ subsidyLevels: (0, _propTypes.objectOf)(_propTypes.string)
164
+ };
165
+ var _default = exports.default = RateCard;
@@ -0,0 +1,60 @@
1
+ .container {
2
+ background-color: var(--light01);
3
+ border-radius: 8px;
4
+ box-shadow: var(--shadowGrayBottom1);
5
+ display: flex;
6
+ flex-direction: column;
7
+ grid-gap: 24px;
8
+ }
9
+
10
+ .headerTitles {
11
+ display: flex;
12
+ flex-direction: column;
13
+ grid-gap: 8px;
14
+ padding: 24px 24px 0;
15
+ }
16
+
17
+ .consumptionDataContainer {
18
+ align-items: center;
19
+ display: flex;
20
+ grid-gap: 24px;
21
+ justify-content: space-between;
22
+ padding: 24px 24px 0;
23
+ }
24
+
25
+ .consumptionContent {
26
+ flex: 1;
27
+ }
28
+
29
+ .footer {
30
+ width: 100%;
31
+ }
32
+
33
+ .footerAction {
34
+ align-items: center;
35
+ background-color: transparent;
36
+ border-top: 1px solid var(--light04);
37
+ display: flex;
38
+ grid-gap: 8px;
39
+ justify-content: space-between;
40
+ padding: 16px;
41
+ text-decoration: none;
42
+ transition: all 0.2s ease;
43
+
44
+ &:hover {
45
+ background-color: var(--light03);
46
+ }
47
+
48
+ &:active {
49
+ background-color: var(--light04);
50
+ }
51
+ }
52
+
53
+ .detail {
54
+ align-items: center;
55
+ border-top: 1px solid var(--light04);
56
+ display: flex;
57
+ grid-gap: 16px;
58
+ justify-content: space-between;
59
+ padding: 16px;
60
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCurrentRate = void 0;
7
+ const getCurrentRate = function () {
8
+ let baseRate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
9
+ let specificRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
10
+ const isT1 = baseRate.includes('T1');
11
+ const baseRateParts = baseRate.split('-');
12
+ return isT1 ? `${baseRateParts[0]}-${specificRate?.name || baseRateParts[1]}` : baseRate;
13
+ };
14
+ exports.getCurrentRate = getCurrentRate;
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _energyUi = require("@widergy/energy-ui");
9
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
10
+ var _propTypes = require("prop-types");
11
+ var _billDataTypes = require("../../../../shared/types/billDataTypes");
12
+ var _DebtStatusLabel = _interopRequireDefault(require("./components/DebtStatusLabel"));
13
+ var _utils = require("./utils");
14
+ var _RateCard = _interopRequireDefault(require("./components/RateCard"));
15
+ var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
20
+ const Billing = _ref => {
21
+ let {
22
+ assets,
23
+ constants = {},
24
+ consumptionLevels = [],
25
+ components,
26
+ currentAccount = {},
27
+ handlers = {},
28
+ isDesktopSize,
29
+ smartBill = {},
30
+ translations,
31
+ utils = {}
32
+ } = _ref;
33
+ const {
34
+ formatters = {}
35
+ } = utils;
36
+ const {
37
+ clientNumberFormatter,
38
+ formatAmount
39
+ } = formatters;
40
+ const {
41
+ adherenceStatus,
42
+ subsidyLevels
43
+ } = constants;
44
+ const {
45
+ UtilityLogo
46
+ } = assets;
47
+ const {
48
+ handleAutomaticDebitAdherence = () => {},
49
+ handleDownloadBill = () => {},
50
+ handleGoToDigitalBill = () => {},
51
+ getConsumptionLevels = () => {}
52
+ } = handlers;
53
+ const {
54
+ adhered,
55
+ automaticDebit = {},
56
+ digitalBill = {},
57
+ downloadBill = {},
58
+ header = {},
59
+ notAdhered,
60
+ rateCard: rateCardTranslations,
61
+ ratesTableLink,
62
+ titularCard = {},
63
+ totalAmountLabel,
64
+ totalCard = {}
65
+ } = translations;
66
+ const {
67
+ billIssueDate,
68
+ billTypeHelpText
69
+ } = header;
70
+ const {
71
+ title: digitalBillTitle
72
+ } = digitalBill;
73
+ const {
74
+ title: downloadBillTitle
75
+ } = downloadBill;
76
+ const {
77
+ title: automaticDebitTitle
78
+ } = automaticDebit;
79
+ const {
80
+ title: titularCardTitle,
81
+ addressHelpText,
82
+ titularHelpText,
83
+ clientNumberHelpText,
84
+ ivaConditionHelpText
85
+ } = titularCard;
86
+ const {
87
+ firstExpiration
88
+ } = totalCard;
89
+ const {
90
+ bill_number: billNumber,
91
+ client,
92
+ debt_status_label: debtStatusLabel,
93
+ detail,
94
+ expirations
95
+ } = smartBill;
96
+ const debtStatusValidation = debtStatusLabel !== null;
97
+ const currentPeriod = (0, _utils.getCurrentPeriod)(smartBill);
98
+ const issuedOnDate = (0, _utils.getFormattedDate)(currentPeriod?.settlements?.current?.issued_on);
99
+ const isAdheredToDigitalBill = client?.adherence_to_digital_bill;
100
+ const {
101
+ account_address: accountAddress,
102
+ client_number: clientNumber = '',
103
+ holder_name: titularName,
104
+ postal_address: postalAddress,
105
+ iva_condition: ivaCondition
106
+ } = client || {};
107
+ const firstExpirationDate = (0, _utils.getFormattedDate)(expirations?.[0]?.date);
108
+ const {
109
+ total_amount: totalAmount
110
+ } = detail || {};
111
+ const {
112
+ adherence_to_automatic_debit: adherenceToAutomaticDebit,
113
+ normalized_rate: normalizedRate,
114
+ subsidy_level: subsidy
115
+ } = currentAccount;
116
+ const isAdheredToAutomaticDebit = adherenceToAutomaticDebit === adherenceStatus?.subscribed;
117
+ const actionCards = [{
118
+ isAdhered: isAdheredToDigitalBill,
119
+ leftIcon: 'IconReceipt',
120
+ onClick: !isAdheredToDigitalBill && handleGoToDigitalBill,
121
+ showStatus: true,
122
+ title: digitalBillTitle
123
+ }, {
124
+ isAdhered: isAdheredToAutomaticDebit,
125
+ leftIcon: 'IconCreditCard',
126
+ onClick: !isAdheredToAutomaticDebit && handleAutomaticDebitAdherence,
127
+ showStatus: true,
128
+ title: automaticDebitTitle
129
+ }, {
130
+ leftIcon: 'IconInfoCircle',
131
+ leftIconProps: {
132
+ area: true,
133
+ size: 28
134
+ },
135
+ onClick: handleDownloadBill,
136
+ rightIcon: 'IconDownload',
137
+ title: downloadBillTitle
138
+ }];
139
+ (0, _react.useEffect)(() => {
140
+ if ((0, _isEmpty.default)(consumptionLevels)) getConsumptionLevels();
141
+ }, []);
142
+ return /*#__PURE__*/_react.default.createElement("div", {
143
+ className: _stylesModule.default.generalContainer
144
+ }, /*#__PURE__*/_react.default.createElement("div", {
145
+ className: _stylesModule.default.billHeader
146
+ }, UtilityLogo && /*#__PURE__*/_react.default.createElement(UtilityLogo, {
147
+ className: _stylesModule.default.logo
148
+ }), /*#__PURE__*/_react.default.createElement("div", {
149
+ className: _stylesModule.default.billHeaderLabels
150
+ }, /*#__PURE__*/_react.default.createElement("div", {
151
+ className: _stylesModule.default.valueAndHelpText
152
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
153
+ variant: "small"
154
+ }, billNumber), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
155
+ colorTheme: "gray",
156
+ variant: "small"
157
+ }, billTypeHelpText)), /*#__PURE__*/_react.default.createElement("div", {
158
+ className: _stylesModule.default.valueAndHelpText
159
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
160
+ variant: "small"
161
+ }, issuedOnDate), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
162
+ colorTheme: "gray",
163
+ variant: "small"
164
+ }, billIssueDate)), debtStatusValidation && /*#__PURE__*/_react.default.createElement(_DebtStatusLabel.default, {
165
+ debtStatusLabel: debtStatusLabel,
166
+ isWarning: smartBill?.warning
167
+ }))), /*#__PURE__*/_react.default.createElement("div", {
168
+ className: _stylesModule.default.detailColumns
169
+ }, /*#__PURE__*/_react.default.createElement("div", {
170
+ className: _stylesModule.default.column
171
+ }, actionCards?.map(_ref2 => {
172
+ let {
173
+ isAdhered,
174
+ leftIcon,
175
+ leftIconProps = {},
176
+ onClick,
177
+ rightIcon,
178
+ showStatus,
179
+ title
180
+ } = _ref2;
181
+ return /*#__PURE__*/_react.default.createElement(_energyUi.UTTouchableWithoutFeedback, {
182
+ className: `${_stylesModule.default.cardContainer} ${!onClick && _stylesModule.default.unclickableCardContainer}`,
183
+ disabled: !onClick,
184
+ key: title,
185
+ onClick: onClick,
186
+ withRipple: true
187
+ }, isDesktopSize && /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, _extends({
188
+ colorTheme: "gray",
189
+ name: leftIcon
190
+ }, leftIconProps)), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
191
+ className: _stylesModule.default.cardTitle,
192
+ variant: "subtitle1",
193
+ weight: "medium"
194
+ }, title), showStatus && /*#__PURE__*/_react.default.createElement(_energyUi.UTStatus, {
195
+ type: "light",
196
+ variant: isAdhered ? 'success' : 'unassigned',
197
+ withoutIcon: !isAdhered
198
+ }, isAdhered ? adhered : notAdhered), onClick && /*#__PURE__*/_react.default.createElement("div", {
199
+ className: _stylesModule.default.cardIconContainer
200
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
201
+ colorTheme: "accent",
202
+ name: rightIcon || 'IconChevronRight'
203
+ })));
204
+ }), /*#__PURE__*/_react.default.createElement("div", {
205
+ className: _stylesModule.default.titularCard
206
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
207
+ variant: "title2",
208
+ weight: "medium"
209
+ }, titularCardTitle), /*#__PURE__*/_react.default.createElement("div", {
210
+ className: _stylesModule.default.titularDataContainer
211
+ }, /*#__PURE__*/_react.default.createElement("div", {
212
+ className: _stylesModule.default.titularData
213
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
214
+ className: _stylesModule.default.titularDataTitle,
215
+ weight: "bold"
216
+ }, accountAddress), accountAddress !== postalAddress && /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, null, postalAddress), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
217
+ colorTheme: "gray"
218
+ }, addressHelpText)), /*#__PURE__*/_react.default.createElement("div", {
219
+ className: _stylesModule.default.titularData
220
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
221
+ className: _stylesModule.default.titularDataTitle,
222
+ weight: "bold"
223
+ }, titularName), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
224
+ colorTheme: "gray"
225
+ }, titularHelpText)), /*#__PURE__*/_react.default.createElement("div", {
226
+ className: _stylesModule.default.titularFooter
227
+ }, /*#__PURE__*/_react.default.createElement("div", {
228
+ className: _stylesModule.default.titularData
229
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
230
+ className: _stylesModule.default.titularDataTitle,
231
+ weight: "bold"
232
+ }, clientNumberFormatter?.(clientNumber)), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
233
+ colorTheme: "gray"
234
+ }, clientNumberHelpText)), /*#__PURE__*/_react.default.createElement("div", {
235
+ className: _stylesModule.default.titularData
236
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
237
+ className: _stylesModule.default.titularDataTitle,
238
+ weight: "bold"
239
+ }, ivaCondition), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
240
+ colorTheme: "gray"
241
+ }, ivaConditionHelpText)))))), /*#__PURE__*/_react.default.createElement("div", {
242
+ className: _stylesModule.default.column
243
+ }, /*#__PURE__*/_react.default.createElement("div", {
244
+ className: _stylesModule.default.totalCard
245
+ }, /*#__PURE__*/_react.default.createElement("div", {
246
+ className: _stylesModule.default.total
247
+ }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
248
+ variant: "subtitle1",
249
+ weight: "medium"
250
+ }, totalAmountLabel), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
251
+ colorTheme: "accent",
252
+ variant: "title2",
253
+ weight: "medium"
254
+ }, formatAmount?.(totalAmount))), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
255
+ colorTheme: "gray",
256
+ variant: "small",
257
+ weight: "medium"
258
+ }, firstExpiration?.(firstExpirationDate))), /*#__PURE__*/_react.default.createElement(_RateCard.default, {
259
+ consumptionLevels,
260
+ components,
261
+ currentPeriod,
262
+ formatAmount,
263
+ normalizedRate,
264
+ rateCardTranslations,
265
+ ratesTableLink,
266
+ smartBill,
267
+ subsidy,
268
+ subsidyLevels,
269
+ translations
270
+ }))));
271
+ };
272
+ Billing.propTypes = {
273
+ assets: _propTypes.object,
274
+ constants: _propTypes.object,
275
+ consumptionLevels: _propTypes.array,
276
+ components: (0, _propTypes.shape)({
277
+ [_propTypes.string]: _propTypes.elementType
278
+ }),
279
+ currentAccount: _propTypes.object,
280
+ handlers: (0, _propTypes.shape)({
281
+ [_propTypes.string]: _propTypes.func
282
+ }),
283
+ isDesktopSize: _propTypes.bool,
284
+ smartBill: _billDataTypes.billDataTypes,
285
+ translations: _propTypes.object,
286
+ utils: _propTypes.object
287
+ };
288
+ var _default = exports.default = Billing;
@@ -0,0 +1,132 @@
1
+ @import '../../../../scss/variables/mediaQueries.module.scss';
2
+
3
+ .generalContainer {
4
+ display: flex;
5
+ flex-direction: column;
6
+ grid-gap: 32px;
7
+ padding: 24px 32px;
8
+
9
+ @media #{$mobile} {
10
+ padding: 24px 16px;
11
+ }
12
+ }
13
+
14
+ .billHeader {
15
+ align-items: center;
16
+ background-color: var(--light01);
17
+ box-shadow: var(--shadowGrayBottom1);
18
+ display: flex;
19
+ grid-gap: 16px;
20
+ justify-content: space-between;
21
+ padding: 12px 16px;
22
+ }
23
+
24
+ .logo {
25
+ height: 35px;
26
+ object-fit: contain;
27
+ width: auto;
28
+ }
29
+
30
+ .billHeaderLabels {
31
+ align-items: center;
32
+ display: flex;
33
+ grid-gap: 32px;
34
+ justify-content: space-between;
35
+ padding: 16px 0;
36
+ }
37
+
38
+ .valueAndHelpText {
39
+ display: flex;
40
+ flex-direction: column;
41
+ grid-gap: 4px;
42
+ }
43
+
44
+ .detailColumns {
45
+ display: flex;
46
+ flex: 1;
47
+ flex-wrap: wrap;
48
+ grid-gap: 32px;
49
+ }
50
+
51
+ .column {
52
+ display: flex;
53
+ flex: 1;
54
+ flex-direction: column;
55
+ grid-gap: 24px;
56
+ }
57
+
58
+ .cardContainer {
59
+ align-items: center;
60
+ background-color: var(--light01);
61
+ border-radius: 8px;
62
+ box-shadow: var(--shadowGrayBottom1);
63
+ display: flex;
64
+ grid-gap: 16px;
65
+ justify-content: space-between;
66
+ padding: 16px;
67
+ transition: all 0.2s;
68
+ }
69
+
70
+ .unclickableCardContainer {
71
+ cursor: default;
72
+ }
73
+
74
+ .cardTitle {
75
+ flex: 1;
76
+ }
77
+
78
+ .cardIconContainer {
79
+ align-items: center;
80
+ display: flex;
81
+ justify-content: center;
82
+ padding: 8px;
83
+ }
84
+
85
+ .titularCard {
86
+ background-color: var(--light01);
87
+ border-radius: 8px;
88
+ box-shadow: var(--shadowGrayBottom1);
89
+ display: flex;
90
+ flex-direction: column;
91
+ grid-gap: 24px;
92
+ padding: 24px;
93
+ }
94
+
95
+ .titularDataContainer {
96
+ display: flex;
97
+ flex-direction: column;
98
+ }
99
+
100
+ .titularData {
101
+ display: flex;
102
+ flex: 1;
103
+ flex-direction: column;
104
+ grid-gap: 8px;
105
+ padding: 12px 0;
106
+ }
107
+
108
+ .titularDataTitle {
109
+ padding: 4px 0;
110
+ }
111
+
112
+ .titularFooter {
113
+ display: flex;
114
+ grid-gap: 16px;
115
+ justify-content: space-between;
116
+ }
117
+
118
+ .totalCard {
119
+ background-color: var(--light01);
120
+ border-radius: 4px;
121
+ box-shadow: var(--shadowGrayBottom1);
122
+ display: flex;
123
+ flex-direction: column;
124
+ grid-gap: 24px;
125
+ padding: 16px;
126
+ }
127
+
128
+ .total {
129
+ display: flex;
130
+ grid-gap: 8px;
131
+ justify-content: space-between;
132
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getFormattedDate = exports.getCurrentPeriod = void 0;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ var _seamlessImmutable = require("seamless-immutable");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const getCurrentPeriod = billData => (0, _seamlessImmutable.getIn)(billData, ['periods'], []).find(period => period.current) || {};
11
+ exports.getCurrentPeriod = getCurrentPeriod;
12
+ const getFormattedDate = date => (0, _dayjs.default)(date, 'YYYY-MM-DD').format('DD/MM/YYYY');
13
+ exports.getFormattedDate = getFormattedDate;
@@ -27,7 +27,7 @@ const formatDate = date => {
27
27
  };
28
28
  const getConsumptionLabels = function () {
29
29
  let periods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
30
- let texts = arguments.length > 1 ? arguments[1] : undefined;
30
+ let texts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
31
31
  const currentPeriod = periods?.find(period => period?.current);
32
32
  const totalConsumption = currentPeriod?.consumptions?.[0];
33
33
  const dailyConsumption = currentPeriod?.consumptions?.[1];
@@ -41,7 +41,7 @@ const getConsumptionLabels = function () {
41
41
  } = dailyConsumption || {};
42
42
  const startDate = currentPeriod?.settlements?.start_date;
43
43
  const endDate = currentPeriod?.settlements?.end_date;
44
- const description = texts.consumptions.youConsumedDescription({
44
+ const description = texts?.consumptions?.youConsumedDescription?.({
45
45
  dailyConsumptionUnit,
46
46
  dailyConsumptionValue: (0, _numeral.default)(dailyConsumptionValue).format('0,0.[00]'),
47
47
  endDate: formatDate(endDate),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widergy/utilitygo-smart-bill-web",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "UtilityGO SmartBill Web",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",