@widergy/utilitygo-smart-bill-web 3.6.2 → 3.7.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [3.7.1](https://github.com/widergy/UtilityGO-Smart-Bill-Web/compare/v3.7.0...v3.7.1) (2025-06-18)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * levels loop fixed ([#54](https://github.com/widergy/UtilityGO-Smart-Bill-Web/issues/54)) ([44442d6](https://github.com/widergy/UtilityGO-Smart-Bill-Web/commit/44442d647ab8db6eb56e52426ab75de2215c2634))
7
+
8
+ # [3.7.0](https://github.com/widergy/UtilityGO-Smart-Bill-Web/compare/v3.6.2...v3.7.0) (2025-05-28)
9
+
10
+
11
+ ### Features
12
+
13
+ * [CX-746] smartbill ai question list new services ([#52](https://github.com/widergy/UtilityGO-Smart-Bill-Web/issues/52)) ([ba403da](https://github.com/widergy/UtilityGO-Smart-Bill-Web/commit/ba403da3cef06f935d585e282355d641ae4b79e9))
14
+
1
15
  ## [3.6.2](https://github.com/widergy/UtilityGO-Smart-Bill-Web/compare/v3.6.1...v3.6.2) (2025-05-26)
2
16
 
3
17
 
@@ -7,7 +7,6 @@ exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _energyUi = require("@widergy/energy-ui");
9
9
  var _propTypes = require("prop-types");
10
- var _i18next = _interopRequireDefault(require("i18next"));
11
10
  var _reactLoadingSkeleton = _interopRequireDefault(require("react-loading-skeleton"));
12
11
  var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
13
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -15,15 +14,22 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
15
14
  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
15
  const AIPanel = _ref => {
17
16
  let {
18
- aiQuestionsList,
17
+ aiQuestionsList = [],
18
+ aiQuestionsListError,
19
+ aiQuestionsListLoading,
19
20
  answer,
20
21
  error,
21
22
  getAnswer,
22
23
  isOpen,
23
24
  loading,
24
25
  notEnoughBillsErrorType,
25
- onClose
26
+ onClose,
27
+ translations
26
28
  } = _ref;
29
+ const {
30
+ generatedByLabel,
31
+ title: panelTitle
32
+ } = translations?.AIPanel || {};
27
33
  const [openCards, setOpenCards] = (0, _react.useState)([]);
28
34
  const toggleCard = id => {
29
35
  if (!answer?.[id] && !openCards.includes(id)) {
@@ -35,6 +41,9 @@ const AIPanel = _ref => {
35
41
  onClose?.();
36
42
  setOpenCards([]);
37
43
  };
44
+ (0, _react.useEffect)(() => {
45
+ if (aiQuestionsListError && !aiQuestionsListLoading) handleClose();
46
+ }, [isOpen, aiQuestionsListError, aiQuestionsListLoading]);
38
47
  return /*#__PURE__*/_react.default.createElement(_energyUi.UTPanel, {
39
48
  classes: {
40
49
  paper: _stylesModule.default.paper,
@@ -48,12 +57,14 @@ const AIPanel = _ref => {
48
57
  }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
49
58
  weight: "medium",
50
59
  variant: "title2"
51
- }, _i18next.default.t('IAPanel:title')), /*#__PURE__*/_react.default.createElement("div", {
60
+ }, panelTitle), /*#__PURE__*/_react.default.createElement(_energyUi.UTLoading, {
61
+ loading: aiQuestionsListLoading
62
+ }, /*#__PURE__*/_react.default.createElement("div", {
52
63
  className: _stylesModule.default.questionsContainer
53
64
  }, aiQuestionsList.map(_ref2 => {
54
65
  let {
55
66
  id,
56
- title
67
+ question
57
68
  } = _ref2;
58
69
  const isLoading = loading?.[id];
59
70
  const errorContent = error?.[id];
@@ -67,14 +78,14 @@ const AIPanel = _ref => {
67
78
  expandableContent: _stylesModule.default.expandableContent,
68
79
  expandableContentActive: _stylesModule.default.activeCard
69
80
  },
70
- header: title,
81
+ header: question,
71
82
  isCollapsible: true,
72
83
  isOpen: openCards.includes(id),
73
84
  key: id,
74
85
  onClick: () => toggleCard(id)
75
86
  }, renderAnswer ? /*#__PURE__*/_react.default.createElement("div", {
76
87
  className: `${_stylesModule.default.answer} ${errorContent && !isLoading ? notEnoughBills ? _stylesModule.default.notEnoughBillsContainer : _stylesModule.default.errorAnswer : ''}`
77
- }, isLoading ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactLoadingSkeleton.default, {
88
+ }, isLoading ? /*#__PURE__*/_react.default.createElement("section", null, /*#__PURE__*/_react.default.createElement(_reactLoadingSkeleton.default, {
78
89
  containerClassName: _stylesModule.default.skeletonContainer,
79
90
  count: 3,
80
91
  height: 22
@@ -83,17 +94,17 @@ const AIPanel = _ref => {
83
94
  }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
84
95
  colorTheme: "gray",
85
96
  variant: "small"
86
- }, "Generado con AI"), /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
97
+ }, generatedByLabel), /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
87
98
  colorTheme: "neutral",
88
99
  name: "IconSparkles",
89
100
  size: 18
90
- }))) : errorContent ? /*#__PURE__*/_react.default.createElement("div", {
101
+ }))) : errorContent ? /*#__PURE__*/_react.default.createElement("section", {
91
102
  className: _stylesModule.default.errorCard
92
103
  }, /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
93
104
  colorTheme: notEnoughBills ? 'gray' : 'error',
94
105
  name: notEnoughBills ? 'IconFileX' : 'IconCircleX',
95
106
  shade: "04"
96
- }), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, null, notEnoughBills ? notEnoughBillsContent : errorContent)) : answerContent ? /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
107
+ }), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, null, notEnoughBills ? notEnoughBillsContent : errorContent)) : answerContent ? /*#__PURE__*/_react.default.createElement("section", null, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
97
108
  className: _stylesModule.default.answerContent,
98
109
  withMarkdown: true
99
110
  }, answerContent), /*#__PURE__*/_react.default.createElement("div", {
@@ -101,24 +112,27 @@ const AIPanel = _ref => {
101
112
  }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
102
113
  colorTheme: "gray",
103
114
  variant: "small"
104
- }, "Generado con AI"), /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
115
+ }, generatedByLabel), /*#__PURE__*/_react.default.createElement(_energyUi.UTIcon, {
105
116
  colorTheme: "neutral",
106
117
  name: "IconSparkles",
107
118
  size: 18
108
119
  }))) : null) : null);
109
- }))));
120
+ })))));
110
121
  };
111
122
  AIPanel.propTypes = {
112
123
  aiQuestionsList: (0, _propTypes.arrayOf)((0, _propTypes.shape)({
113
- id: _propTypes.string,
114
- title: _propTypes.string
124
+ id: _propTypes.number,
125
+ question: _propTypes.string
115
126
  })),
127
+ aiQuestionsListLoading: _propTypes.bool,
128
+ aiQuestionsListError: _propTypes.bool,
116
129
  answer: _propTypes.object,
117
130
  error: _propTypes.object,
118
131
  getAnswer: _propTypes.func,
119
132
  isOpen: _propTypes.bool,
120
133
  loading: _propTypes.object,
121
134
  notEnoughBillsErrorType: _propTypes.string,
122
- onClose: _propTypes.func
135
+ onClose: _propTypes.func,
136
+ translations: _propTypes.object
123
137
  };
124
138
  var _default = exports.default = AIPanel;
@@ -24,6 +24,10 @@ $ia-panel-width: 600px;
24
24
  display: flex;
25
25
  flex-direction: column;
26
26
  grid-gap: 12px;
27
+
28
+ &:last-child {
29
+ padding-bottom: 24px;
30
+ }
27
31
  }
28
32
 
29
33
  .card {
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _energyUi = require("@widergy/energy-ui");
9
9
  var _propTypes = require("prop-types");
10
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
10
11
  var _billDataTypes = require("../../shared/types/billDataTypes");
11
12
  var _constants = require("./constants");
12
13
  var _utils = require("./utils");
@@ -29,6 +30,8 @@ const SmartBillSummary = _ref => {
29
30
  } = _ref;
30
31
  const {
31
32
  aiQuestionsList,
33
+ aiQuestionsListError,
34
+ aiQuestionsListLoading,
32
35
  aiQuestionsPanelEnabled,
33
36
  consumptionLevels,
34
37
  currentAccount,
@@ -44,6 +47,7 @@ const SmartBillSummary = _ref => {
44
47
  const {
45
48
  getGlossaryData,
46
49
  getSmartBillAIAnswer,
50
+ getSmartBillAIQuestions,
47
51
  resetSmartBillAIAnswers
48
52
  } = handlers;
49
53
  const filteredTabOptions = loading ? [] : (0, _utils.getTabOptions)(isDesktopSize, tabOptions, smartBill);
@@ -51,7 +55,10 @@ const SmartBillSummary = _ref => {
51
55
  const [currentTab, setCurrentTab] = (0, _react.useState)(defaultCurrentTab);
52
56
  const [aiPanelIsOpen, setAiPanelIsOpen] = (0, _react.useState)(false);
53
57
  const changeCurrentTab = newTab => setCurrentTab(newTab);
54
- const openAIPanel = () => setAiPanelIsOpen(true);
58
+ const openAIPanel = () => {
59
+ if ((0, _isEmpty.default)(aiQuestionsList)) getSmartBillAIQuestions();
60
+ setAiPanelIsOpen(true);
61
+ };
55
62
  const closeAIPanel = () => {
56
63
  setAiPanelIsOpen(false);
57
64
  resetSmartBillAIAnswers();
@@ -106,13 +113,16 @@ const SmartBillSummary = _ref => {
106
113
  name: "EnergyIconChatSparkFilled"
107
114
  })), /*#__PURE__*/_react.default.createElement(_AIPanel.default, {
108
115
  aiQuestionsList: aiQuestionsList,
116
+ aiQuestionsListError: aiQuestionsListError,
117
+ aiQuestionsListLoading: aiQuestionsListLoading,
109
118
  answer: smartBillAIAnswer,
110
119
  error: smartBillAIAnswerError,
111
120
  getAnswer: getSmartBillAIAnswer,
112
121
  isOpen: aiPanelIsOpen,
113
122
  loading: smartBillAIAnswerLoading,
114
123
  notEnoughBillsErrorType: notEnoughBillsErrorType,
115
- onClose: closeAIPanel
124
+ onClose: closeAIPanel,
125
+ translations: translations
116
126
  })));
117
127
  };
118
128
  SmartBillSummary.propTypes = {
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _energyUi = require("@widergy/energy-ui");
9
9
  var _propTypes = require("prop-types");
10
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
10
11
  var _utils = require("../../../Consumptions/components/CurrentConsumption/utils");
11
12
  var _utils2 = require("./utils");
12
13
  var _ProgressBar = _interopRequireDefault(require("./components/ProgressBar"));
@@ -73,6 +74,8 @@ const RateCard = _ref => {
73
74
  const limitRateValue = Array.isArray(currentRate?.range) && currentRate.range.length > 0 && currentRate.range[currentRate.range.length - 1];
74
75
  const charges = client?.rate?.charges || [];
75
76
  const isT1 = purchasedRate.includes('T1');
77
+ const noLevels = (0, _isEmpty.default)(consumptionLevels);
78
+ const showRateLabel = !isT1 || startRateValue === false || limitRateValue === false;
76
79
  return /*#__PURE__*/_react.default.createElement("div", {
77
80
  className: _stylesModule.default.container
78
81
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -82,7 +85,7 @@ const RateCard = _ref => {
82
85
  weight: "medium"
83
86
  }, title), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
84
87
  colorTheme: "gray"
85
- }, helpText)), /*#__PURE__*/_react.default.createElement(_ProgressBar.default, {
88
+ }, helpText)), !noLevels && /*#__PURE__*/_react.default.createElement(_ProgressBar.default, {
86
89
  components: components,
87
90
  currentPeriod: currentPeriod,
88
91
  data: rates,
@@ -93,7 +96,7 @@ const RateCard = _ref => {
93
96
  translations: rateCardTranslations,
94
97
  value: totalConsumption
95
98
  }), /*#__PURE__*/_react.default.createElement("div", {
96
- className: _stylesModule.default.consumptionDataContainer
99
+ className: `${_stylesModule.default.consumptionDataContainer} ${noLevels ? _stylesModule.default.noLevels : ''}`
97
100
  }, /*#__PURE__*/_react.default.createElement("div", {
98
101
  className: _stylesModule.default.consumptionContent
99
102
  }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
@@ -102,7 +105,7 @@ const RateCard = _ref => {
102
105
  }, (0, _utils2.getCurrentRate)(purchasedRate, currentRate)), /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
103
106
  colorTheme: "gray",
104
107
  variant: "small"
105
- }, !isT1 ? yourRate : limitRateValue === 'Infinity' ? startRateValueLabel?.(startRateValue) : limitRateValueLabel?.(limitRateValue))), /*#__PURE__*/_react.default.createElement("div", {
108
+ }, showRateLabel ? yourRate : limitRateValue === 'Infinity' ? startRateValueLabel?.(startRateValue) : limitRateValueLabel?.(limitRateValue))), /*#__PURE__*/_react.default.createElement("div", {
106
109
  className: _stylesModule.default.consumptionContent
107
110
  }, /*#__PURE__*/_react.default.createElement(_energyUi.UTLabel, {
108
111
  variant: "title3",
@@ -22,6 +22,10 @@
22
22
  padding: 24px 24px 0;
23
23
  }
24
24
 
25
+ .noLevels {
26
+ padding-top: 0;
27
+ }
28
+
25
29
  .consumptionContent {
26
30
  flex: 1;
27
31
  }
@@ -4,9 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = _interopRequireDefault(require("react"));
8
8
  var _energyUi = require("@widergy/energy-ui");
9
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
10
9
  var _propTypes = require("prop-types");
11
10
  var _billDataTypes = require("../../../../shared/types/billDataTypes");
12
11
  var _DebtStatusLabel = _interopRequireDefault(require("./components/DebtStatusLabel"));
@@ -14,8 +13,6 @@ var _utils = require("./utils");
14
13
  var _RateCard = _interopRequireDefault(require("./components/RateCard"));
15
14
  var _stylesModule = _interopRequireDefault(require("./styles.module.scss"));
16
15
  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
16
  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
17
  const Billing = _ref => {
21
18
  let {
@@ -47,8 +44,7 @@ const Billing = _ref => {
47
44
  const {
48
45
  handleAutomaticDebitAdherence = () => {},
49
46
  handleDownloadBill = () => {},
50
- handleGoToDigitalBill = () => {},
51
- getConsumptionLevels = () => {}
47
+ handleGoToDigitalBill = () => {}
52
48
  } = handlers;
53
49
  const {
54
50
  adhered,
@@ -132,9 +128,6 @@ const Billing = _ref => {
132
128
  rightIcon: 'IconDownload',
133
129
  title: downloadBillTitle
134
130
  }];
135
- (0, _react.useEffect)(() => {
136
- if ((0, _isEmpty.default)(consumptionLevels)) getConsumptionLevels();
137
- }, []);
138
131
  return /*#__PURE__*/_react.default.createElement("div", {
139
132
  className: _stylesModule.default.generalContainer
140
133
  }, /*#__PURE__*/_react.default.createElement("div", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widergy/utilitygo-smart-bill-web",
3
- "version": "3.6.2",
3
+ "version": "3.7.1",
4
4
  "description": "UtilityGO SmartBill Web",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",