oa-componentbook 1.0.1-stage.40 → 1.0.1-stage.401

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 (131) hide show
  1. package/build/components/oa-component-accordion/Accordion.js +120 -42
  2. package/build/components/oa-component-accordion/styles.js +2 -2
  3. package/build/components/oa-component-button/CustomButton.js +24 -19
  4. package/build/components/oa-component-button/styles.js +1 -1
  5. package/build/components/oa-component-checkbox/CustomCheckBox.js +20 -17
  6. package/build/components/oa-component-checkbox/styles.js +1 -1
  7. package/build/components/oa-component-datepicker/CustomDatePicker.js +37 -26
  8. package/build/components/oa-component-drawer/CustomDrawer.js +2 -0
  9. package/build/components/oa-component-dropdown/CustomDropdown.js +16 -4
  10. package/build/components/oa-component-icons/MaterialIcon.js +1 -1
  11. package/build/components/oa-component-modal/CustomModal.js +51 -46
  12. package/build/components/oa-component-modal/styles.js +3 -2
  13. package/build/components/oa-component-pagination/CustomPagination.js +111 -0
  14. package/build/components/oa-component-pagination/styles.js +12 -0
  15. package/build/components/oa-component-select/CustomSelect.js +116 -56
  16. package/build/components/oa-component-steps/CustomSteps.js +117 -0
  17. package/build/components/oa-component-steps/styles.js +12 -0
  18. package/build/components/oa-component-table/CustomTable.js +28 -5
  19. package/build/components/oa-component-table/CustomTableV1.js +610 -0
  20. package/build/components/oa-component-table/styles.js +1 -1
  21. package/build/components/oa-component-table/stylesV1.js +19 -0
  22. package/build/components/oa-component-tabs/CustomTabs.js +1 -1
  23. package/build/components/oa-component-tag/CustomTag.js +29 -11
  24. package/build/components/oa-component-tag/styles.js +30 -3
  25. package/build/components/oa-component-textarea/{TextArea.js → CustomTextArea.js} +4 -4
  26. package/build/components/oa-component-tooltip/CustomTooltip.js +8 -4
  27. package/build/components/oa-component-upload/CustomUpload.js +120 -40
  28. package/build/components/oa-component-viewer/CustomViewer.js +3 -1
  29. package/build/dev/oa-component-document-viewer/CustomDocumentViewer.js +367 -0
  30. package/build/dev/oa-component-document-viewer/styles.js +12 -0
  31. package/build/dev/oa-component-upload/CustomUpload.js +3 -0
  32. package/build/dev/oa-widget-document-modal/DocumentSideModal.js +166 -0
  33. package/build/dev/oa-widget-document-modal/styles.js +12 -0
  34. package/build/dev/oa-widget-document-side-drawer/DocumentSideDrawer.js +196 -0
  35. package/build/dev/oa-widget-document-side-drawer/styles.js +12 -0
  36. package/build/global-css/GlobalCss.js +2 -1
  37. package/build/global-css/GridLayout.js +1 -1
  38. package/build/global-css/commonStyles.js +11 -0
  39. package/build/images/Car.png +0 -0
  40. package/build/images/TwoWheeler.png +0 -0
  41. package/build/images/astronaut_emptystate.png +0 -0
  42. package/build/images/exportGrp01.png +0 -0
  43. package/build/images/exportGrp02.png +0 -0
  44. package/build/images/exportGrp03.png +0 -0
  45. package/build/images/outOfStock.png +0 -0
  46. package/build/index.js +114 -2
  47. package/build/layout/DetailDataLayout/DetailDataLayout.js +20 -0
  48. package/build/layout/DetailDataLayout/components/Form.js +22 -0
  49. package/build/layout/DetailDataLayout/components/Header.js +32 -0
  50. package/build/layout/DetailDataLayout/style.css +9 -0
  51. package/build/layout/DetailDataLayout/styles.js +12 -0
  52. package/build/layout/EntityOverviewLayout/EntityOverviewLayout.js +235 -0
  53. package/build/layout/EntityOverviewLayout/reducer/entityOverviewLayoutReducer.js +63 -0
  54. package/build/layout/EntityOverviewLayout/styles.js +13 -0
  55. package/build/layout/GenricLayOut/GenricLayOut.js +2351 -0
  56. package/build/layout/GenricLayOut/components/AppliedFilters.js +91 -0
  57. package/build/layout/GenricLayOut/components/CardList.js +34 -0
  58. package/build/layout/GenricLayOut/components/DropdownSearch.js +48 -0
  59. package/build/layout/GenricLayOut/components/Header.js +74 -0
  60. package/build/layout/GenricLayOut/components/Modal.js +93 -0
  61. package/build/layout/GenricLayOut/components/ProfileSection.js +87 -0
  62. package/build/layout/GenricLayOut/components/Search.js +51 -0
  63. package/build/layout/GenricLayOut/components/StaticFilter.css +73 -0
  64. package/build/layout/GenricLayOut/components/StaticFilter.js +37 -0
  65. package/build/layout/GenricLayOut/reducer/layoutReducer.js +306 -0
  66. package/build/layout/GenricLayOut/resolver/staticConfigResolver.js +98 -0
  67. package/build/layout/GenricLayOut/styles.js +30 -0
  68. package/build/utils/download-file.js +23 -0
  69. package/build/widgets/oa-form-widget/FormWidget.js +576 -0
  70. package/build/widgets/oa-form-widget/FormWidgetStyle.js +18 -0
  71. package/build/widgets/oa-widget-add-spare-part/AddSparePartCollapseWidget.js +80 -16
  72. package/build/widgets/oa-widget-add-spare-part/AddSparePartWidget.js +50 -7
  73. package/build/widgets/oa-widget-address/AddressWidget.js +12 -17
  74. package/build/widgets/oa-widget-approval/ApprovalWidget.js +19 -11
  75. package/build/widgets/oa-widget-approval/ApprovalWidgetNew.js +492 -0
  76. package/build/widgets/oa-widget-approval/styles.js +2 -2
  77. package/build/widgets/oa-widget-chat/ChatWidget.js +5 -5
  78. package/build/widgets/oa-widget-close-claim/CloseClaimWidget.js +17 -5
  79. package/build/widgets/oa-widget-collapsible-key-value/CollapsibleKeyValueWidget.js +396 -0
  80. package/build/widgets/oa-widget-collapsible-key-value/styles.js +16 -0
  81. package/build/widgets/oa-widget-content-panel/ContentPanel.js +82 -0
  82. package/build/widgets/oa-widget-content-panel/styles.js +12 -0
  83. package/build/widgets/oa-widget-customer-rating-card/CustomerRatingCard.js +5 -5
  84. package/build/widgets/oa-widget-detailcard/styles.js +1 -1
  85. package/build/widgets/oa-widget-document-upload/DocUploadWidget.js +6 -9
  86. package/build/widgets/oa-widget-dropdown-search-input/DropdownSearchInput.js +53 -19
  87. package/build/widgets/oa-widget-dropdown-search-input/styles.js +1 -1
  88. package/build/widgets/oa-widget-guide/GuideWidget.js +70 -0
  89. package/build/widgets/oa-widget-guide/GuideWidgetStyle.js +12 -0
  90. package/build/widgets/oa-widget-hub-automation-modal/HubAutomationDeleteBiker.js +24 -0
  91. package/build/widgets/oa-widget-hub-automation-modal/HubAutomationModal.js +34 -0
  92. package/build/widgets/oa-widget-hub-automation-modal/HubAutomationModalStyle.js +13 -0
  93. package/build/widgets/oa-widget-image-carousel/ImageCarouselWidget.js +256 -0
  94. package/build/widgets/oa-widget-image-carousel/styles.js +23 -0
  95. package/build/widgets/oa-widget-image-gallery/FullscreenViewer.js +169 -0
  96. package/build/widgets/oa-widget-image-gallery/ImageGallery.js +87 -0
  97. package/build/widgets/oa-widget-image-gallery/ThumbnailGrid.js +146 -0
  98. package/build/widgets/oa-widget-image-gallery/imageCache.js +15 -0
  99. package/build/widgets/oa-widget-image-gallery/imageGalleryStyle.js +16 -0
  100. package/build/widgets/oa-widget-item-info-card/InfoCardListWidget.js +60 -0
  101. package/build/widgets/oa-widget-item-info-card/ItemInfoCardWidget.js +77 -0
  102. package/build/widgets/oa-widget-item-info-card/styles.css +50 -0
  103. package/build/widgets/oa-widget-item-info-card/styles.js +14 -0
  104. package/build/widgets/oa-widget-key-value/KeyValueWidget.js +46 -12
  105. package/build/widgets/oa-widget-key-value/styles.js +1 -1
  106. package/build/widgets/oa-widget-kpi/KPICardWidget.js +86 -0
  107. package/build/widgets/oa-widget-kpi/styles.js +12 -0
  108. package/build/widgets/oa-widget-map-base-location/AddressDetails.js +21 -7
  109. package/build/widgets/oa-widget-map-base-location/AddressForm.js +32 -5
  110. package/build/widgets/oa-widget-map-base-location/MapBaseLocation.js +9 -3
  111. package/build/widgets/oa-widget-map-base-location/MapComponent.js +17 -2
  112. package/build/widgets/oa-widget-membershipcard/MembershipCard.js +14 -3
  113. package/build/widgets/oa-widget-membershipcard/styles.js +1 -1
  114. package/build/widgets/oa-widget-notes/NotesWidget.js +32 -30
  115. package/build/widgets/oa-widget-notes/styles.js +4 -3
  116. package/build/widgets/oa-widget-profile-data/ProfileDataWidget.js +117 -0
  117. package/build/widgets/oa-widget-profile-data/styles.js +13 -0
  118. package/build/widgets/oa-widget-progressive-steps/ProgressiveStepsWidget.js +362 -0
  119. package/build/widgets/oa-widget-progressive-steps/styles.js +12 -0
  120. package/build/widgets/oa-widget-reimbursement-breakup/ReimbursementBreakupWidget.js +18 -9
  121. package/build/widgets/oa-widget-reimbursement-breakup/styles.js +1 -1
  122. package/build/widgets/oa-widget-reupload-drawer/ReUploadDrawer.js +164 -0
  123. package/build/widgets/oa-widget-select-list-item-modal/SelectListItemModal.js +79 -0
  124. package/build/widgets/oa-widget-sidebar/SidebarWidget.js +175 -0
  125. package/build/widgets/oa-widget-sidebar/components/Header.js +33 -0
  126. package/build/widgets/oa-widget-sidebar/styles.js +13 -0
  127. package/build/widgets/oa-widget-spare-part/SparePartsWidget.js +57 -29
  128. package/build/widgets/oa-widget-track-shipment-list/fn.js +16 -4
  129. package/build/widgets/oa-widget-user-management/UserManagementWidget.js +352 -0
  130. package/build/widgets/oa-widget-user-management/styles.js +15 -0
  131. package/package.json +4 -2
@@ -25,8 +25,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
25
25
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
26
  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 && Object.prototype.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; }
27
27
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
28
- const FlexContainer = _styledComponents.default.section(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n gap: 16px;\n .text-only-size{\n justify-content: left;\n }\n small{\n color: var(--color-secondary-content);\n display: block;\n }\n"])));
29
- const CostBreakdown = _styledComponents.default.aside(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n background: var(--color-secondary-background);\n padding: 0 12px;\n border-radius: 4px;\n ul{\n display: flex;\n margin: 0;\n border-bottom: 1px solid var(--color-divider);\n padding: 12px 0;\n }\n ul:last-child{\n border-bottom: none;\n }\n ul li{\n width: 100%;\n list-style: none;\n }\n ul li:first-child{\n color: var(--color-primary-content);\n font-style: normal;\n }\n ul li:last-child{\n font-style: normal;\n color: var(--color-secondary-content);\n }\n"])));
28
+ const FlexContainer = _styledComponents.default.section(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n gap: 16px;\n .text-only-size{\n justify-content: left;\n }\n small{\n color: var(--color-secondary-content);\n display: block;\n }\n .costClass span {\n display: block;\n text-align: end; \n }\n"])));
29
+ const CostBreakdown = _styledComponents.default.aside(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n background: var(--color-secondary-background);\n padding: 0 12px;\n border-radius: 4px;\n ul{\n display: flex;\n margin: 0;\n border-bottom: 1px solid var(--color-divider);\n padding: 12px 0;\n }\n ul:last-child{\n border-bottom: none;\n }\n ul li{\n width: 100%;\n list-style: none;\n }\n ul li:first-child{\n color: var(--color-primary-content);\n font-style: normal;\n }\n ul li:last-child{\n font-style: normal;\n color: var(--color-secondary-content);\n }\n .font-bold{\n font-weight: 700;\n }\n .subHeadingclass{\n color:rgba(113, 113, 113, 1);\n font-weight: 400;\n }\n\n .alignItemsClass{\n display: flex;\n flex-direction: column;\n justify-content: start;\n gap: 4px;\n }\n .breakDownLastChild{\n text-align: right;\n margin-right: 8px;\n }\n \n"])));
30
30
  // Mapping of how costs are covered
31
31
  const costCoveredBy = {
32
32
  costToCompany: 'Cost to Company',
@@ -34,27 +34,33 @@ const costCoveredBy = {
34
34
  costToInsurer: 'Cost to Insurer',
35
35
  costToOneassist: 'Cost to OneAssist',
36
36
  totalCoverAmount: 'Total Cover Amount',
37
- remainingCoverAmount: 'Remaining Cover Amount'
37
+ remainingCoverAmount: 'Remaining Cover Amount',
38
+ totalAmount: 'Total Amount',
39
+ coveredAmount: 'Covered Amount',
40
+ amountToPay: 'Amount to Pay'
38
41
  };
39
42
 
40
43
  // Renders the cost with currency formatting
41
- const renderCost = cost => {
44
+ const renderCost = (cost, config) => {
42
45
  if ( /*#__PURE__*/_react.default.isValidElement(cost)) {
43
46
  return /*#__PURE__*/_react.default.createElement(_Typography.default, {
44
- typography: "type-b2-400"
47
+ typography: config !== null && config !== void 0 && config.isBold ? 'type-b2-700' : 'type-b2-400',
48
+ color: config !== null && config !== void 0 && config.fontColor ? config === null || config === void 0 ? void 0 : config.fontColor : ''
45
49
  }, cost);
46
50
  }
47
51
  if (!Number.isNaN(cost)) {
48
52
  var _Number;
49
53
  return /*#__PURE__*/_react.default.createElement(_Typography.default, {
50
- typography: "type-b2-400"
54
+ color: config !== null && config !== void 0 && config.fontColor ? config === null || config === void 0 ? void 0 : config.fontColor : '',
55
+ typography: config !== null && config !== void 0 && config.isBold ? 'type-b2-700' : 'type-b2-400'
51
56
  }, (_Number = Number(cost)) === null || _Number === void 0 ? void 0 : _Number.toLocaleString('en-IN', {
52
57
  style: 'currency',
53
58
  currency: 'INR'
54
59
  }));
55
60
  }
56
61
  return /*#__PURE__*/_react.default.createElement(_Typography.default, {
57
- typography: "type-b2-400"
62
+ color: config !== null && config !== void 0 && config.fontColor ? config === null || config === void 0 ? void 0 : config.fontColor : '',
63
+ typography: config !== null && config !== void 0 && config.isBold ? 'type-b2-700' : 'type-b2-400'
58
64
  }, cost);
59
65
  };
60
66
 
@@ -107,7 +113,10 @@ function SparePartsWidget(_ref) {
107
113
  onViewPriceHistory,
108
114
  showGST,
109
115
  showDiscount,
110
- showSparePartsInfo = true
116
+ showSparePartsInfo = true,
117
+ keySettings = {},
118
+ showNonCoverageMessage,
119
+ unCoveredScopeDescription
111
120
  } = _ref;
112
121
  const sparePartList = [...scopeDetails.unCoveredScope, ...scopeDetails.coveredScope];
113
122
  const showActionList = sparePartList.some(sparePart => {
@@ -123,7 +132,9 @@ function SparePartsWidget(_ref) {
123
132
  typography: "type-b2-400"
124
133
  }, scopeName), (record === null || record === void 0 ? void 0 : record.subText) && /*#__PURE__*/_react.default.createElement("small", {
125
134
  className: "type-b2-400"
126
- }, "(", record === null || record === void 0 ? void 0 : record.subText, ")"), showPriceHistory && !['Transport Charge', 'Labour Charge'].includes(scopeName) && /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
135
+ }, "(", record === null || record === void 0 ? void 0 : record.subText, ")"), (record === null || record === void 0 ? void 0 : record.extraNode) && /*#__PURE__*/_react.default.createElement("div", {
136
+ className: "extraNode"
137
+ }, record.extraNode), showPriceHistory && !['Transport Charge', 'Labour Charge'].includes(scopeName) && /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
127
138
  onClick: () => {
128
139
  onViewPriceHistory(record);
129
140
  },
@@ -131,16 +142,29 @@ function SparePartsWidget(_ref) {
131
142
  label: "View Price History",
132
143
  type: "text-only"
133
144
  }))
134
- }, {
145
+ }];
146
+ if (coverageShow) {
147
+ columns.push({
148
+ title: 'Coverage',
149
+ dataIndex: 'isCovered',
150
+ width: '20%',
151
+ key: 'isCovered',
152
+ render: (text, record) => renderCoverage(record.isCovered, record.className)
153
+ });
154
+ }
155
+ // Coverga show column need to be shown first
156
+ columns.push({
135
157
  title: 'Cost',
136
158
  width: '20%',
137
159
  dataIndex: 'cost',
160
+ className: 'costClass',
138
161
  key: 'cost',
139
162
  render: (cost, record) => /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
140
163
  className: "row",
141
164
  style: {
142
165
  gap: '4px',
143
- cursor: 'pointer'
166
+ cursor: 'pointer',
167
+ justifyContent: 'flex-end'
144
168
  }
145
169
  }, ' ', /*#__PURE__*/_react.default.createElement("span", null, renderCost(record.cost - record.discount)), (record === null || record === void 0 ? void 0 : record.showCostInfo) && /*#__PURE__*/_react.default.createElement(_antd.Tooltip, {
146
170
  title: "Basic Price : ".concat(record.basicPrice, " , Discount : ").concat(record.discount)
@@ -149,16 +173,7 @@ function SparePartsWidget(_ref) {
149
173
  }, /*#__PURE__*/_react.default.createElement(_icons.InfoCircleFilled, null)))), (record === null || record === void 0 ? void 0 : record.subText2) && /*#__PURE__*/_react.default.createElement("small", {
150
174
  className: "type-b2-400"
151
175
  }, "(", record === null || record === void 0 ? void 0 : record.subText2, ")"))
152
- }];
153
- if (coverageShow) {
154
- columns.push({
155
- title: 'Coverage',
156
- dataIndex: 'isCovered',
157
- width: '20%',
158
- key: 'isCovered',
159
- render: (text, record) => renderCoverage(record.isCovered, record.className)
160
- });
161
- }
176
+ });
162
177
  if (showDiscount) {
163
178
  columns.push({
164
179
  title: 'Discount',
@@ -196,9 +211,9 @@ function SparePartsWidget(_ref) {
196
211
  var _scopeDetails$unCover;
197
212
  const unCoveredScope = (scopeDetails === null || scopeDetails === void 0 ? void 0 : scopeDetails.unCoveredScope) || [];
198
213
  const coveredScope = (scopeDetails === null || scopeDetails === void 0 ? void 0 : scopeDetails.coveredScope) || [];
199
- return /*#__PURE__*/_react.default.createElement(FlexContainer, null, (scopeDetails === null || scopeDetails === void 0 || (_scopeDetails$unCover = scopeDetails.unCoveredScope) === null || _scopeDetails$unCover === void 0 ? void 0 : _scopeDetails$unCover.length) > 0 && coverageShow && /*#__PURE__*/_react.default.createElement(_CustomInfo.default, {
214
+ return /*#__PURE__*/_react.default.createElement(FlexContainer, null, showNonCoverageMessage && (scopeDetails === null || scopeDetails === void 0 || (_scopeDetails$unCover = scopeDetails.unCoveredScope) === null || _scopeDetails$unCover === void 0 ? void 0 : _scopeDetails$unCover.length) > 0 && coverageShow && /*#__PURE__*/_react.default.createElement(_CustomInfo.default, {
200
215
  color: "background-warning",
201
- description: "Multiple components need to be repaired which are not covered in this plan",
216
+ description: unCoveredScopeDescription,
202
217
  iconConfig: {
203
218
  icon: /*#__PURE__*/_react.default.createElement(_MaterialIcon.default, {
204
219
  color: "warning",
@@ -213,13 +228,20 @@ function SparePartsWidget(_ref) {
213
228
  size: "middle"
214
229
  }), showCostBreakdown && /*#__PURE__*/_react.default.createElement(CostBreakdown, null, Object.keys(scopeDetails).map((key, index) => {
215
230
  if (costCoveredBy[key] && scopeDetails[key] != null && scopeDetails[key] !== undefined) {
231
+ const config = keySettings[key] || {};
232
+ const className = "type-b2-400 alignItemsClass ".concat(config !== null && config !== void 0 && config.isBold ? 'font-bold' : '');
216
233
  return /*#__PURE__*/_react.default.createElement("ul", {
217
234
  key: (0, _utils.getUUID)()
218
235
  }, /*#__PURE__*/_react.default.createElement("li", {
219
- className: "type-b2-400"
220
- }, costCoveredBy[key]), ' ', /*#__PURE__*/_react.default.createElement("li", {
221
- className: "type-b2-400"
222
- }, renderCost(scopeDetails[key])));
236
+ className: className
237
+ }, /*#__PURE__*/_react.default.createElement(_Typography.default, {
238
+ color: config !== null && config !== void 0 && config.fontColor ? config === null || config === void 0 ? void 0 : config.fontColor : ''
239
+ }, costCoveredBy[key]), ' ', (config === null || config === void 0 ? void 0 : config.subHeading) && /*#__PURE__*/_react.default.createElement(_Typography.default, {
240
+ className: "subHeadingclass",
241
+ typography: "type-b2-400"
242
+ }, config === null || config === void 0 ? void 0 : config.subHeading)), ' ', /*#__PURE__*/_react.default.createElement("li", {
243
+ className: "".concat(className, " breakDownLastChild")
244
+ }, renderCost(scopeDetails[key], config)));
223
245
  }
224
246
  return null; // To satisfy React key warning
225
247
  })));
@@ -245,7 +267,10 @@ SparePartsWidget.propTypes = {
245
267
  onViewPriceHistory: _propTypes.default.func,
246
268
  showSparePartsInfo: _propTypes.default.bool,
247
269
  showGST: _propTypes.default.bool,
248
- showDiscount: _propTypes.default.bool
270
+ showDiscount: _propTypes.default.bool,
271
+ keySettings: _propTypes.default.shape({}),
272
+ showNonCoverageMessage: _propTypes.default.bool,
273
+ unCoveredScopeDescription: _propTypes.default.string
249
274
  };
250
275
 
251
276
  // Define default props for SpareParts component
@@ -261,6 +286,9 @@ SparePartsWidget.defaultProps = {
261
286
  onViewPriceHistory: data => console.log(data),
262
287
  showSparePartsInfo: true,
263
288
  showGST: false,
264
- showDiscount: false
289
+ showDiscount: false,
290
+ keySettings: {},
291
+ showNonCoverageMessage: true,
292
+ unCoveredScopeDescription: 'Multiple components need to be repaired which are not covered in this plan'
265
293
  };
266
294
  var _default = exports.default = SparePartsWidget;
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isActive = exports.headerText = exports.getSingleShipmentHistory = exports.getDateString = exports.getCurrentShipmentLabel = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
9
  function numberToOrdinal(number) {
8
10
  const suffixes = ['th', 'st', 'nd', 'rd'];
9
11
  const value = number % 100;
@@ -39,6 +41,12 @@ const getCurrentShipmentLabel = number => {
39
41
  return "".concat(ordinalNumber, " Shipment");
40
42
  };
41
43
  exports.getCurrentShipmentLabel = getCurrentShipmentLabel;
44
+ const showNewLineChar = addressDetail => {
45
+ var _splitedAddress$map;
46
+ const splitedAddress = addressDetail === null || addressDetail === void 0 ? void 0 : addressDetail.split('\n');
47
+ if ((splitedAddress === null || splitedAddress === void 0 ? void 0 : splitedAddress.length) === 1) return addressDetail;
48
+ return (_splitedAddress$map = splitedAddress.map((title, index) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, title, index === 0 && /*#__PURE__*/_react.default.createElement("br", null)))) !== null && _splitedAddress$map !== void 0 ? _splitedAddress$map : '';
49
+ };
42
50
  const isActive = time => time === null;
43
51
  exports.isActive = isActive;
44
52
  const headerText = (index, reassignmentTime, modifiedTime, status) => "".concat(getCurrentShipmentLabel(index + 1), " | ").concat(getDateString(reassignmentTime, modifiedTime)).concat(isActive(modifiedTime) ? ' - Present' : '');
@@ -52,16 +60,20 @@ const getSingleShipmentHistory = item => {
52
60
  fromAddress: {
53
61
  heading: 'From Address:',
54
62
  addressLine1: item === null || item === void 0 ? void 0 : item.origAddressFullName,
55
- addressLine2: item === null || item === void 0 ? void 0 : item.originAddressLine1,
63
+ addressLine2: showNewLineChar(item === null || item === void 0 ? void 0 : item.originAddressLine1),
56
64
  pincode: item === null || item === void 0 ? void 0 : item.originPincode,
57
- city: item === null || item === void 0 ? void 0 : item.originDistrict
65
+ city: item === null || item === void 0 ? void 0 : item.originDistrict,
66
+ landmark: item === null || item === void 0 ? void 0 : item.originLandmark,
67
+ state: item === null || item === void 0 ? void 0 : item.originState
58
68
  },
59
69
  toAddress: {
60
70
  heading: 'To Address:',
61
71
  addressLine1: item === null || item === void 0 ? void 0 : item.destAddressFullName,
62
- addressLine2: item === null || item === void 0 ? void 0 : item.destAddressLine1,
72
+ addressLine2: showNewLineChar(item === null || item === void 0 ? void 0 : item.destAddressLine1),
63
73
  pincode: item === null || item === void 0 ? void 0 : item.destPincode,
64
- city: item === null || item === void 0 ? void 0 : item.destDistrict
74
+ city: item === null || item === void 0 ? void 0 : item.destDistrict,
75
+ landmark: item === null || item === void 0 ? void 0 : item.destLandmark,
76
+ state: item === null || item === void 0 ? void 0 : item.destState
65
77
  },
66
78
  tableData: (_item$history = item === null || item === void 0 ? void 0 : item.history) !== null && _item$history !== void 0 ? _item$history : []
67
79
  };
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.description.js");
4
+ require("core-js/modules/es.weak-map.js");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = UserManagementWidget;
9
+ require("core-js/modules/web.dom-collections.iterator.js");
10
+ require("core-js/modules/es.promise.js");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _antd = require("antd");
13
+ var _EditOutlined = _interopRequireDefault(require("@material-ui/icons/EditOutlined"));
14
+ var _DeleteOutlineOutlined = _interopRequireDefault(require("@material-ui/icons/DeleteOutlineOutlined"));
15
+ var _CustomButton = _interopRequireDefault(require("../../components/oa-component-button/CustomButton"));
16
+ var _CustomInput = _interopRequireDefault(require("../../components/oa-component-input/CustomInput"));
17
+ var _CustomSelect = _interopRequireDefault(require("../../components/oa-component-select/CustomSelect"));
18
+ var _Typography = _interopRequireDefault(require("../../components/oa-component-typography/Typography"));
19
+ var _MaterialIcon = _interopRequireDefault(require("../../components/oa-component-icons/MaterialIcon"));
20
+ var _CustomModal = _interopRequireDefault(require("../../components/oa-component-modal/CustomModal"));
21
+ var _CustomNotification = _interopRequireDefault(require("../../components/oa-component-notification/CustomNotification"));
22
+ var _styles = require("./styles");
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
25
+ 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 && Object.prototype.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; }
26
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
28
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
30
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } /* eslint-disable */
31
+ function UserManagementWidget(_ref) {
32
+ let {
33
+ form,
34
+ fieldName = "users",
35
+ initialData = [],
36
+ fields,
37
+ disabled = false,
38
+ customPageModal,
39
+ addUserClick,
40
+ deleteUserClick,
41
+ editUserClick,
42
+ misc
43
+ } = _ref;
44
+ const finalFields = fields || [];
45
+ const [editingUserId, setEditingUserId] = (0, _react.useState)(null);
46
+ const [addingUser, setAddingUser] = (0, _react.useState)(false);
47
+ const [deleteModalVisible, setDeleteModalVisible] = (0, _react.useState)(false);
48
+ const [userToDelete, setUserToDelete] = (0, _react.useState)(null);
49
+ const [updateTrigger, setUpdateTrigger] = (0, _react.useState)(0);
50
+ const notificationRef = (0, _react.useRef)(null);
51
+ const openNotification = (0, _react.useCallback)(params => notificationRef.current.openNotification(params), []);
52
+ const showErrorNotification = message => {
53
+ openNotification({
54
+ description: message,
55
+ type: "failure",
56
+ mode: "dark",
57
+ showIcon: true,
58
+ placement: "bottomRight"
59
+ });
60
+ };
61
+ const showSuccessNotification = message => {
62
+ openNotification({
63
+ description: message,
64
+ type: "success",
65
+ mode: "dark",
66
+ showIcon: true,
67
+ placement: "bottomRight"
68
+ });
69
+ };
70
+
71
+ // Get current users from form state
72
+ const users = form.getFieldValue(fieldName) || initialData;
73
+
74
+ // Update form state with new user list and trigger re-render
75
+ const updateUsers = newUsers => {
76
+ form.setFieldsValue({
77
+ [fieldName]: newUsers
78
+ });
79
+ setUpdateTrigger(prev => prev + 1); // Trigger re-render
80
+ };
81
+
82
+ // Initialize form field if not already set
83
+ (0, _react.useEffect)(() => {
84
+ const currentUsers = form.getFieldValue(fieldName);
85
+ if (!currentUsers) {
86
+ updateFormUsers(initialData);
87
+ }
88
+ }, [initialData, fieldName, form]);
89
+ const handleEdit = user => {
90
+ setEditingUserId(user.id);
91
+ setAddingUser(false);
92
+
93
+ // Set form values for editing
94
+ const editData = {};
95
+ finalFields.forEach(field => {
96
+ editData["".concat(fieldName, "_").concat(field.key)] = user[field.key] || "";
97
+ });
98
+ form.setFieldsValue(editData);
99
+ };
100
+ const handleAdd = () => {
101
+ setAddingUser(true);
102
+ setEditingUserId(null);
103
+
104
+ // Clear form values for adding
105
+ const clearData = {};
106
+ finalFields.forEach(field => {
107
+ clearData["".concat(fieldName, "_").concat(field.key)] = "";
108
+ });
109
+ form.setFieldsValue(clearData);
110
+ };
111
+ const handleSave = async () => {
112
+ // Validate only the user management fields
113
+ const fieldNames = finalFields.map(field => "".concat(fieldName, "_").concat(field.key));
114
+ try {
115
+ const values = await form.validateFields(fieldNames);
116
+
117
+ // Extract user data from form values
118
+ const userData = {};
119
+ finalFields.forEach(field => {
120
+ userData[field.key] = values["".concat(fieldName, "_").concat(field.key)];
121
+ });
122
+ if (editingUserId) {
123
+ // Update existing user
124
+ if (editUserClick) {
125
+ const {
126
+ error,
127
+ data
128
+ } = await editUserClick(editingUserId, userData);
129
+ if (error) {
130
+ showErrorNotification(error);
131
+ } else {
132
+ const updatedUsers = users.map(user => user.id === editingUserId ? _objectSpread(_objectSpread({}, user), userData) : user);
133
+ updateUsers(updatedUsers);
134
+ setEditingUserId(null);
135
+ showSuccessNotification(data === null || data === void 0 ? void 0 : data.message);
136
+ // Clear the form fields only if operation was successful
137
+ const clearData = {};
138
+ finalFields.forEach(field => {
139
+ clearData["".concat(fieldName, "_").concat(field.key)] = "";
140
+ });
141
+ form.setFieldsValue(clearData);
142
+ }
143
+ }
144
+ } else if (addingUser) {
145
+ // Add new user
146
+ if (addUserClick) {
147
+ const {
148
+ error,
149
+ data
150
+ } = await addUserClick(userData, misc);
151
+ if (error) {
152
+ showErrorNotification(error);
153
+ } else {
154
+ var _data$data;
155
+ const newUser = _objectSpread({
156
+ id: data === null || data === void 0 || (_data$data = data.data) === null || _data$data === void 0 ? void 0 : _data$data.userId
157
+ }, userData);
158
+ const updatedUsers = [...users, newUser];
159
+ updateUsers(updatedUsers);
160
+ setAddingUser(false);
161
+ showSuccessNotification(data === null || data === void 0 ? void 0 : data.message);
162
+ // Clear the form fields only if operation was successful
163
+ const clearData = {};
164
+ finalFields.forEach(field => {
165
+ clearData["".concat(fieldName, "_").concat(field.key)] = "";
166
+ });
167
+ form.setFieldsValue(clearData);
168
+ }
169
+ }
170
+ }
171
+ } catch (errorInfo) {
172
+ console.log("Form validation failed:", errorInfo);
173
+ }
174
+ };
175
+ const handleCancel = () => {
176
+ setEditingUserId(null);
177
+ setAddingUser(false);
178
+
179
+ // Clear only the user management form fields
180
+ const clearData = {};
181
+ finalFields.forEach(field => {
182
+ clearData["".concat(fieldName, "_").concat(field.key)] = "";
183
+ });
184
+ form.setFieldsValue(clearData);
185
+ };
186
+ const handleDelete = userId => {
187
+ setUserToDelete(userId);
188
+ setDeleteModalVisible(true);
189
+ };
190
+ const confirmDelete = async () => {
191
+ if (userToDelete) {
192
+ if (deleteUserClick) {
193
+ const {
194
+ error,
195
+ data
196
+ } = await deleteUserClick(userToDelete);
197
+ if (error) {
198
+ showErrorNotification(error);
199
+ setDeleteModalVisible(false);
200
+ } else {
201
+ const updatedUsers = users.filter(user => user.id !== userToDelete);
202
+ updateUsers(updatedUsers);
203
+ setDeleteModalVisible(false);
204
+ showSuccessNotification(data === null || data === void 0 ? void 0 : data.message);
205
+ setUserToDelete(null);
206
+ }
207
+ }
208
+ }
209
+ };
210
+ const cancelDelete = () => {
211
+ setDeleteModalVisible(false);
212
+ setUserToDelete(null);
213
+ };
214
+ const canDelete = users.length > 1;
215
+ const isEditing = editingUserId !== null || addingUser;
216
+ const renderFormField = field => {
217
+ var _field$options;
218
+ const fieldNameWithPrefix = "".concat(fieldName, "_").concat(field.key);
219
+ switch (field.widget || field.type) {
220
+ case "input":
221
+ return /*#__PURE__*/_react.default.createElement(_antd.Form.Item, {
222
+ name: fieldNameWithPrefix,
223
+ label: field.label,
224
+ rules: field.rules,
225
+ style: {
226
+ marginBottom: 16
227
+ }
228
+ }, /*#__PURE__*/_react.default.createElement(_CustomInput.default, {
229
+ placeholder: field.placeholder || "Enter ".concat(field.label.toLowerCase())
230
+ }));
231
+ case "select":
232
+ return /*#__PURE__*/_react.default.createElement(_antd.Form.Item, {
233
+ name: fieldNameWithPrefix,
234
+ label: field.label,
235
+ rules: field.rules,
236
+ style: {
237
+ marginBottom: 16
238
+ }
239
+ }, /*#__PURE__*/_react.default.createElement(_CustomSelect.default, {
240
+ placeholder: field.placeholder || "Select ".concat(field.label.toLowerCase()),
241
+ options: ((_field$options = field.options) === null || _field$options === void 0 ? void 0 : _field$options.map(option => ({
242
+ value: option.value,
243
+ label: option.label
244
+ }))) || []
245
+ }));
246
+ default:
247
+ return /*#__PURE__*/_react.default.createElement(_antd.Form.Item, {
248
+ name: fieldNameWithPrefix,
249
+ label: field.label,
250
+ rules: field.rules,
251
+ style: {
252
+ marginBottom: 16
253
+ }
254
+ }, /*#__PURE__*/_react.default.createElement(_CustomInput.default, {
255
+ placeholder: field.placeholder || "Enter ".concat(field.label.toLowerCase())
256
+ }));
257
+ }
258
+ };
259
+ return /*#__PURE__*/_react.default.createElement("div", null, users && users.length > 0 && users.map(user => /*#__PURE__*/_react.default.createElement(_styles.UserItem, {
260
+ key: user.id
261
+ }, editingUserId === user.id ? /*#__PURE__*/_react.default.createElement(_styles.EditFormCard, null, /*#__PURE__*/_react.default.createElement(_styles.EditForm, null, /*#__PURE__*/_react.default.createElement("div", {
262
+ className: "form-row"
263
+ }, finalFields.map((field, index) => /*#__PURE__*/_react.default.createElement("div", {
264
+ key: field.key,
265
+ className: "form-field"
266
+ }, renderFormField(field)))), /*#__PURE__*/_react.default.createElement("div", {
267
+ className: "form-actions"
268
+ }, /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
269
+ type: "danger-secondary",
270
+ onClick: handleCancel,
271
+ label: "Cancel"
272
+ }), /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
273
+ type: "secondary",
274
+ onClick: handleSave,
275
+ label: "Save"
276
+ })))) : /*#__PURE__*/_react.default.createElement(_styles.UserInfo, null, /*#__PURE__*/_react.default.createElement("div", {
277
+ className: "user-details"
278
+ }, finalFields.map((field, index) => /*#__PURE__*/_react.default.createElement("div", {
279
+ key: field.key
280
+ }, /*#__PURE__*/_react.default.createElement(_Typography.default, {
281
+ typography: index === 0 ? "type-t2-700" : "type-b1-400",
282
+ color: index === 0 ? "primary-content" : "secondary-content"
283
+ }, user[field.key])))), /*#__PURE__*/_react.default.createElement("div", {
284
+ className: "user-actions"
285
+ }, /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
286
+ type: "text-only",
287
+ onClick: () => handleEdit(user),
288
+ disabled: disabled || isEditing,
289
+ iconConfig: {
290
+ icon: /*#__PURE__*/_react.default.createElement(_MaterialIcon.default, {
291
+ icon: _EditOutlined.default,
292
+ size: 64,
293
+ color: "primary"
294
+ }),
295
+ size: 32,
296
+ position: "right"
297
+ }
298
+ }), canDelete && /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
299
+ type: "text-only",
300
+ onClick: () => handleDelete(user.id),
301
+ disabled: disabled || isEditing,
302
+ iconConfig: {
303
+ icon: /*#__PURE__*/_react.default.createElement(_MaterialIcon.default, {
304
+ icon: _DeleteOutlineOutlined.default,
305
+ color: "negative"
306
+ }),
307
+ color: "negative",
308
+ size: 32,
309
+ position: "right"
310
+ }
311
+ }))))), addingUser && /*#__PURE__*/_react.default.createElement(_styles.EditFormCard, null, /*#__PURE__*/_react.default.createElement(_styles.EditForm, null, /*#__PURE__*/_react.default.createElement("div", {
312
+ className: "form-row"
313
+ }, finalFields.map((field, index) => /*#__PURE__*/_react.default.createElement("div", {
314
+ key: field.key,
315
+ className: "form-field"
316
+ }, renderFormField(field)))), /*#__PURE__*/_react.default.createElement("div", {
317
+ className: "form-actions"
318
+ }, /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
319
+ type: "danger-secondary",
320
+ onClick: handleCancel,
321
+ label: "Cancel"
322
+ }), /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
323
+ type: "primary",
324
+ onClick: handleSave,
325
+ label: "Save"
326
+ })))), !isEditing && /*#__PURE__*/_react.default.createElement(_styles.AddUserButtonContainer, null, /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
327
+ type: "secondary",
328
+ onClick: handleAdd,
329
+ disabled: disabled,
330
+ label: "Add Another User"
331
+ })), deleteModalVisible && /*#__PURE__*/_react.default.createElement(_CustomModal.default, {
332
+ imgSrc: customPageModal === null || customPageModal === void 0 ? void 0 : customPageModal.imgSrc,
333
+ open: deleteModalVisible,
334
+ onCancel: cancelDelete,
335
+ title: customPageModal === null || customPageModal === void 0 ? void 0 : customPageModal.heading,
336
+ buttonConfig: [{
337
+ callback: () => {
338
+ cancelDelete();
339
+ },
340
+ label: "Cancel",
341
+ type: "secondary"
342
+ }, {
343
+ callback: () => {
344
+ confirmDelete();
345
+ },
346
+ label: "Delete",
347
+ type: "danger-primary"
348
+ }]
349
+ }, customPageModal === null || customPageModal === void 0 ? void 0 : customPageModal.subHeading), /*#__PURE__*/_react.default.createElement(_CustomNotification.default, {
350
+ ref: notificationRef
351
+ }));
352
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UserItem = exports.UserInfo = exports.EditFormCard = exports.EditForm = exports.AddUserButtonContainer = void 0;
7
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
11
+ const UserItem = exports.UserItem = _styledComponents.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n margin-bottom: 16px;\n padding: 16px 0;\n width: 100%;\n"])));
12
+ const EditFormCard = exports.EditFormCard = _styledComponents.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n margin-bottom: 16px;\n border-radius: 8px;\n background: #f5f5f5;\n border: 1px solid #e8e8e8;\n padding: 16px;\n width: 100%;\n"])));
13
+ const UserInfo = exports.UserInfo = _styledComponents.default.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n\n .user-details {\n flex: 1;\n }\n\n .user-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n"])));
14
+ const EditForm = exports.EditForm = _styledComponents.default.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n .form-row {\n display: flex;\n gap: 16px;\n margin-bottom: 16px;\n\n .form-field {\n flex: 1;\n }\n }\n\n .form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n"])));
15
+ const AddUserButtonContainer = exports.AddUserButtonContainer = _styledComponents.default.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n margin-top: 16px;\n width: 100%;\n display: flex;\n justify-content: flex-start;\n"])));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oa-componentbook",
3
- "version": "1.0.1-stage.40",
3
+ "version": "1.0.1-stage.401",
4
4
  "private": false,
5
5
  "description": "Reusable components",
6
6
  "main": "build/index.js",
@@ -22,12 +22,14 @@
22
22
  "antd": "^5.11.4",
23
23
  "d3": "^7.8.5",
24
24
  "dayjs": "^1.11.10",
25
+ "immer": "^10.1.1",
25
26
  "pdfjs-dist": "^2.6.347",
26
27
  "react-google-maps": "^9.4.5",
28
+ "react-intersection-observer": "^8.32.5",
27
29
  "react-markdown": "^8.0.7",
28
30
  "react-pattern-lock": "^12.0.12",
29
31
  "react-pdf": "^5.3.0",
30
- "react-zoom-pan-pinch": "^3.4.4"
32
+ "react-zoom-pan-pinch": "^3.7.0"
31
33
  },
32
34
  "devDependencies": {
33
35
  "@babel/cli": "^7.22.9",