oa-componentbook 1.0.1-stage.45 → 1.0.1-stage.451

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 (146) hide show
  1. package/build/components/oa-component-accordion/Accordion.js +147 -40
  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-document-details-panel/DocumentDetailsPanel.js +154 -0
  9. package/build/components/oa-component-drawer/CustomDrawer.js +2 -0
  10. package/build/components/oa-component-dropdown/CustomDropdown.js +16 -4
  11. package/build/components/oa-component-icons/MaterialIcon.js +1 -1
  12. package/build/components/oa-component-info/CustomInfo.js +9 -4
  13. package/build/components/oa-component-info/styles.js +3 -3
  14. package/build/components/oa-component-modal/CustomModal.js +59 -48
  15. package/build/components/oa-component-modal/styles.js +3 -2
  16. package/build/components/oa-component-pagination/CustomPagination.js +111 -0
  17. package/build/components/oa-component-pagination/styles.js +12 -0
  18. package/build/components/oa-component-progress-bar/CustomProgressBar.js +8 -4
  19. package/build/components/oa-component-select/CustomSelect.js +130 -56
  20. package/build/components/oa-component-steps/CustomSteps.js +117 -0
  21. package/build/components/oa-component-steps/styles.js +12 -0
  22. package/build/components/oa-component-table/CustomTable.js +28 -5
  23. package/build/components/oa-component-table/CustomTableV1.js +613 -0
  24. package/build/components/oa-component-table/styles.js +1 -1
  25. package/build/components/oa-component-table/stylesV1.js +19 -0
  26. package/build/components/oa-component-table-with-search-and-filter/TableWithSearchAndFilter.js +469 -0
  27. package/build/components/oa-component-table-with-search-and-filter/styles.js +23 -0
  28. package/build/components/oa-component-tabs/CustomTabs.js +1 -1
  29. package/build/components/oa-component-tag/CustomTag.js +29 -11
  30. package/build/components/oa-component-tag/styles.js +30 -3
  31. package/build/components/oa-component-textarea/CustomTextArea.js +161 -0
  32. package/build/components/oa-component-textarea/constants.js +39 -0
  33. package/build/components/oa-component-textarea/styles.js +12 -3
  34. package/build/components/oa-component-tooltip/CustomTooltip.js +8 -4
  35. package/build/components/oa-component-upload/CustomUpload.js +129 -42
  36. package/build/components/oa-component-viewer/CustomViewer.js +17 -11
  37. package/build/dev/oa-component-document-viewer/CustomDocumentViewer.js +367 -0
  38. package/build/dev/oa-component-document-viewer/styles.js +12 -0
  39. package/build/dev/oa-component-upload/CustomUpload.js +116 -29
  40. package/build/dev/oa-component-upload/styles.js +2 -2
  41. package/build/dev/oa-widget-document-modal/DocumentSideModal.js +166 -0
  42. package/build/dev/oa-widget-document-modal/styles.js +12 -0
  43. package/build/dev/oa-widget-document-side-drawer/DocumentSideDrawer.js +200 -0
  44. package/build/dev/oa-widget-document-side-drawer/styles.js +12 -0
  45. package/build/dev/oa-widget-document-viewer-with-details/DocumentViewerWithDetails.js +123 -0
  46. package/build/global-css/GlobalCss.js +2 -1
  47. package/build/global-css/GridLayout.js +1 -1
  48. package/build/global-css/commonStyles.js +11 -0
  49. package/build/images/Car.png +0 -0
  50. package/build/images/TwoWheeler.png +0 -0
  51. package/build/images/astronaut_emptystate.png +0 -0
  52. package/build/images/exportGrp01.png +0 -0
  53. package/build/images/exportGrp02.png +0 -0
  54. package/build/images/exportGrp03.png +0 -0
  55. package/build/images/outOfStock.png +0 -0
  56. package/build/index.js +131 -5
  57. package/build/layout/DetailDataLayout/DetailDataLayout.js +20 -0
  58. package/build/layout/DetailDataLayout/components/Form.js +22 -0
  59. package/build/layout/DetailDataLayout/components/Header.js +32 -0
  60. package/build/layout/DetailDataLayout/style.css +9 -0
  61. package/build/layout/DetailDataLayout/styles.js +12 -0
  62. package/build/layout/EntityOverviewLayout/EntityOverviewLayout.js +403 -0
  63. package/build/layout/EntityOverviewLayout/reducer/entityOverviewLayoutReducer.js +85 -0
  64. package/build/layout/EntityOverviewLayout/styles.js +13 -0
  65. package/build/layout/GenricLayOut/GenricLayOut.js +2421 -0
  66. package/build/layout/GenricLayOut/components/AppliedFilters.js +90 -0
  67. package/build/layout/GenricLayOut/components/CardList.js +34 -0
  68. package/build/layout/GenricLayOut/components/DropdownSearch.js +48 -0
  69. package/build/layout/GenricLayOut/components/Header.js +74 -0
  70. package/build/layout/GenricLayOut/components/Modal.js +96 -0
  71. package/build/layout/GenricLayOut/components/ProfileSection.js +219 -0
  72. package/build/layout/GenricLayOut/components/Search.js +51 -0
  73. package/build/layout/GenricLayOut/components/StaticFilter.css +73 -0
  74. package/build/layout/GenricLayOut/components/StaticFilter.js +37 -0
  75. package/build/layout/GenricLayOut/reducer/layoutReducer.js +310 -0
  76. package/build/layout/GenricLayOut/resolver/staticConfigResolver.js +98 -0
  77. package/build/layout/GenricLayOut/styles.js +42 -0
  78. package/build/utils/download-file.js +23 -0
  79. package/build/widgets/oa-form-widget/FormWidget.js +577 -0
  80. package/build/widgets/oa-form-widget/FormWidgetStyle.js +18 -0
  81. package/build/widgets/oa-widget-add-spare-part/AddSparePartCollapseWidget.js +80 -16
  82. package/build/widgets/oa-widget-add-spare-part/AddSparePartWidget.js +50 -7
  83. package/build/widgets/oa-widget-address/AddressWidget.js +12 -17
  84. package/build/widgets/oa-widget-approval/ApprovalWidget.js +19 -11
  85. package/build/widgets/oa-widget-approval/ApprovalWidgetNew.js +492 -0
  86. package/build/widgets/oa-widget-approval/styles.js +2 -2
  87. package/build/widgets/oa-widget-chat/ChatWidget.js +5 -5
  88. package/build/widgets/oa-widget-close-claim/CloseClaimWidget.js +17 -5
  89. package/build/widgets/oa-widget-collapsible-key-value/CollapsibleKeyValueWidget.js +396 -0
  90. package/build/widgets/oa-widget-collapsible-key-value/styles.js +16 -0
  91. package/build/widgets/oa-widget-content-panel/ContentPanel.js +82 -0
  92. package/build/widgets/oa-widget-content-panel/styles.js +12 -0
  93. package/build/widgets/oa-widget-customer-rating-card/CustomerRatingCard.js +5 -5
  94. package/build/widgets/oa-widget-detailcard/styles.js +1 -1
  95. package/build/widgets/oa-widget-document-upload/DocUploadWidget.js +6 -9
  96. package/build/widgets/oa-widget-dropdown-search-input/DropdownSearchInput.js +53 -19
  97. package/build/widgets/oa-widget-dropdown-search-input/styles.js +1 -1
  98. package/build/widgets/oa-widget-guide/GuideWidget.js +70 -0
  99. package/build/widgets/oa-widget-guide/GuideWidgetStyle.js +12 -0
  100. package/build/widgets/oa-widget-hub-automation-modal/HubAutomationDeleteBiker.js +24 -0
  101. package/build/widgets/oa-widget-hub-automation-modal/HubAutomationModal.js +34 -0
  102. package/build/widgets/oa-widget-hub-automation-modal/HubAutomationModalStyle.js +13 -0
  103. package/build/widgets/oa-widget-image-carousel/ImageCarouselWidget.js +74 -48
  104. package/build/widgets/oa-widget-image-carousel/styles.js +16 -5
  105. package/build/widgets/oa-widget-image-gallery/FullscreenViewer.js +169 -0
  106. package/build/widgets/oa-widget-image-gallery/ImageGallery.js +87 -0
  107. package/build/widgets/oa-widget-image-gallery/ThumbnailGrid.js +146 -0
  108. package/build/widgets/oa-widget-image-gallery/imageCache.js +15 -0
  109. package/build/widgets/oa-widget-image-gallery/imageGalleryStyle.js +16 -0
  110. package/build/widgets/oa-widget-item-info-card/InfoCardListWidget.js +60 -0
  111. package/build/widgets/oa-widget-item-info-card/ItemInfoCardWidget.js +83 -0
  112. package/build/widgets/oa-widget-item-info-card/styles.css +50 -0
  113. package/build/widgets/oa-widget-item-info-card/styles.js +14 -0
  114. package/build/widgets/oa-widget-key-value/KeyValueWidget.js +46 -12
  115. package/build/widgets/oa-widget-key-value/styles.js +1 -1
  116. package/build/widgets/oa-widget-kpi/KPICardWidget.js +86 -0
  117. package/build/widgets/oa-widget-kpi/styles.js +12 -0
  118. package/build/widgets/oa-widget-map-base-location/AddressDetails.js +21 -7
  119. package/build/widgets/oa-widget-map-base-location/AddressForm.js +32 -5
  120. package/build/widgets/oa-widget-map-base-location/MapBaseLocation.js +9 -3
  121. package/build/widgets/oa-widget-map-base-location/MapComponent.js +17 -2
  122. package/build/widgets/oa-widget-membershipcard/MembershipCard.js +14 -3
  123. package/build/widgets/oa-widget-membershipcard/styles.js +1 -1
  124. package/build/widgets/oa-widget-notes/NotesWidget.js +32 -30
  125. package/build/widgets/oa-widget-notes/styles.js +4 -3
  126. package/build/widgets/oa-widget-profile-data/ProfileDataWidget.js +165 -0
  127. package/build/widgets/oa-widget-profile-data/styles.js +13 -0
  128. package/build/widgets/oa-widget-progressive-steps/ProgressiveStepsWidget.js +362 -0
  129. package/build/widgets/oa-widget-progressive-steps/styles.js +12 -0
  130. package/build/widgets/oa-widget-reimbursement-breakup/ReimbursementBreakupWidget.js +18 -9
  131. package/build/widgets/oa-widget-reimbursement-breakup/styles.js +1 -1
  132. package/build/widgets/oa-widget-reupload-drawer/ReUploadDrawer.js +164 -0
  133. package/build/widgets/oa-widget-select-list-item-modal/SelectListItemModal.js +91 -0
  134. package/build/widgets/oa-widget-sidebar/SidebarWidget.js +175 -0
  135. package/build/widgets/oa-widget-sidebar/components/Header.js +33 -0
  136. package/build/widgets/oa-widget-sidebar/styles.js +13 -0
  137. package/build/widgets/oa-widget-spare-part/SparePartsWidget.js +63 -35
  138. package/build/widgets/oa-widget-track-shipment/TrackShipmentWidget.js +28 -6
  139. package/build/widgets/oa-widget-track-shipment-list/TrackShipmentWidgetList.js +103 -0
  140. package/build/widgets/oa-widget-track-shipment-list/fn.js +81 -0
  141. package/build/widgets/oa-widget-user-management/UserManagementWidget.js +407 -0
  142. package/build/widgets/oa-widget-user-management/styles.js +15 -0
  143. package/package.json +3 -1
  144. package/build/components/oa-component-textarea/TextArea.js +0 -74
  145. package/build/dev/oa-widget-track-shipment/TrackShipmentWidget.js +0 -195
  146. /package/build/{dev/oa-widget-track-shipment → widgets/oa-widget-track-shipment-list}/styles.js +0 -0
@@ -0,0 +1,469 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.description.js");
4
+ require("core-js/modules/es.object.assign.js");
5
+ require("core-js/modules/es.weak-map.js");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+ require("core-js/modules/es.json.stringify.js");
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _Search = _interopRequireDefault(require("@material-ui/icons/Search"));
14
+ var _FilterList = _interopRequireDefault(require("@material-ui/icons/FilterList"));
15
+ var _propTypes = _interopRequireDefault(require("prop-types"));
16
+ var _CustomTable = _interopRequireDefault(require("../oa-component-table/CustomTable"));
17
+ var _CustomPagination = _interopRequireDefault(require("../oa-component-pagination/CustomPagination"));
18
+ var _MaterialIcon = _interopRequireDefault(require("../oa-component-icons/MaterialIcon"));
19
+ var _CustomDrawer = _interopRequireDefault(require("../oa-component-drawer/CustomDrawer"));
20
+ var _CustomButton = _interopRequireDefault(require("../oa-component-button/CustomButton"));
21
+ var _CustomInput = _interopRequireDefault(require("../oa-component-input/CustomInput"));
22
+ var _CustomSelect = _interopRequireDefault(require("../oa-component-select/CustomSelect"));
23
+ var _CustomRadio = _interopRequireDefault(require("../oa-component-radio/CustomRadio"));
24
+ var _CustomDatePicker = _interopRequireDefault(require("../oa-component-datepicker/CustomDatePicker"));
25
+ var _styles = require("./styles");
26
+ const _excluded = ["dataSource", "columns", "rowKey", "emptyText"];
27
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+ 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); }
29
+ 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; }
30
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
31
+ 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; }
32
+ 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; }
33
+ 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; }
34
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
35
+ 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); }
36
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
37
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
38
+ /**
39
+ * TableWithSearchAndFilter - A complete table component with search, filters and pagination
40
+ *
41
+ * @param {Object} tableProps - Table configuration
42
+ * @param {Object} searchProps - Search configuration
43
+ * @param {Object} filterProps - Filter configuration
44
+ * @param {boolean} filterProps.show - Show/hide filters
45
+ * @param {Array} filterProps.config - Filter field configurations
46
+ * @param {Function} filterProps.onApply - Callback when filters are applied
47
+ * @param {Function} filterProps.onClear - Callback when filters are cleared
48
+ * @param {Function} filterProps.onChange - Callback when any filter value changes (key, value, allFilters, action)
49
+ * - action can be: 'search', 'select', 'clear', or 'change'
50
+ * @param {boolean} filterProps.loading - Global loading state for all filter selects
51
+ * @param {string} filterProps.buttonLabel - Custom filter button label
52
+ * @param {string} filterProps.drawerTitle - Custom filter drawer title
53
+ * @param {Object} paginationProps - Pagination configuration
54
+ * @param {string} className - Additional CSS class
55
+ *
56
+ * Filter Config Options:
57
+ * - type: 'select' - Supports `loading`, `showSearch`, `filterOption`, `disabled` properties
58
+ * - type: 'radio' - Radio button group
59
+ * - type: 'date' - Single date picker
60
+ * - type: 'dateRange' - Two date pickers with fields array
61
+ * - type: 'group' - Group of fields, each supporting `loading`, `showSearch`, `filterOption`, `disabled` (for select type)
62
+ */
63
+ function TableWithSearchAndFilter(_ref) {
64
+ let {
65
+ tableProps = {},
66
+ searchProps = {},
67
+ filterProps = {},
68
+ paginationProps = {},
69
+ className = ''
70
+ } = _ref;
71
+ // Destructure tableProps with defaults
72
+ const {
73
+ dataSource = [],
74
+ columns = [],
75
+ rowKey = 'id',
76
+ emptyText = 'No data found'
77
+ } = tableProps,
78
+ restTableProps = _objectWithoutProperties(tableProps, _excluded);
79
+
80
+ // Destructure searchProps with defaults
81
+ const {
82
+ show: showSearch = true,
83
+ placeholder: searchPlaceholder = 'Search...',
84
+ onSearch
85
+ } = searchProps;
86
+
87
+ // Destructure filterProps with defaults
88
+ const {
89
+ show: showFilters = true,
90
+ config: filterConfig = [],
91
+ onApply: onFiltersApply,
92
+ onClear: onFiltersClear,
93
+ onChange: onFilterChange,
94
+ loading: filtersLoading = false,
95
+ buttonLabel: filterButtonLabel = 'Filters',
96
+ drawerTitle: filterDrawerTitle = 'FILTERS'
97
+ } = filterProps;
98
+
99
+ // Destructure paginationProps with defaults
100
+ const {
101
+ show: showPagination = true,
102
+ current = 1,
103
+ pageSize = 10,
104
+ total,
105
+ pageSizeOptions = [10, 20, 50, 100],
106
+ onChange: onPaginationChange,
107
+ onShowSizeChange
108
+ } = paginationProps;
109
+
110
+ // Constants
111
+ const SEARCH_INPUT_WIDTH = '350px';
112
+
113
+ // Search state
114
+ const [searchValue, setSearchValue] = (0, _react.useState)('');
115
+
116
+ // Filter drawer state
117
+ const [isFilterDrawerVisible, setIsFilterDrawerVisible] = (0, _react.useState)(false);
118
+ const [filterValues, setFilterValues] = (0, _react.useState)({});
119
+
120
+ // Search handlers
121
+ const handleSearchChange = e => {
122
+ const {
123
+ value
124
+ } = e.target;
125
+ setSearchValue(value);
126
+ if (onSearch) {
127
+ onSearch(value);
128
+ }
129
+ };
130
+ const handleSearchPressEnter = () => {
131
+ if (onSearch) {
132
+ onSearch(searchValue);
133
+ }
134
+ };
135
+
136
+ // Filter handlers
137
+ const handleOpenFilterDrawer = () => setIsFilterDrawerVisible(true);
138
+ const handleCloseFilterDrawer = () => setIsFilterDrawerVisible(false);
139
+ const handleFilterChange = function handleFilterChange(key, value) {
140
+ let action = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'change';
141
+ // Normalize empty values: convert empty string to null for consistency
142
+ const normalizedValue = value === '' ? null : value;
143
+ const updatedFilters = _objectSpread(_objectSpread({}, filterValues), {}, {
144
+ [key]: normalizedValue
145
+ });
146
+ setFilterValues(updatedFilters);
147
+
148
+ // Call onChange callback if provided for real-time filter changes
149
+ if (onFilterChange) {
150
+ onFilterChange(key, normalizedValue, updatedFilters, action);
151
+ }
152
+ };
153
+ const handleApplyFilters = () => {
154
+ setIsFilterDrawerVisible(false);
155
+ if (onFiltersApply) {
156
+ onFiltersApply(filterValues);
157
+ }
158
+ };
159
+ const handleClearFilters = () => {
160
+ setFilterValues({});
161
+ if (onFiltersClear) {
162
+ onFiltersClear();
163
+ }
164
+ };
165
+
166
+ // Memoized required keys calculation for better performance
167
+ const requiredKeys = (0, _react.useMemo)(() => {
168
+ const keys = [];
169
+ filterConfig.forEach(filter => {
170
+ const {
171
+ type,
172
+ key,
173
+ required,
174
+ fields = []
175
+ } = filter;
176
+ if (required) {
177
+ if (type === 'dateRange' || type === 'group') {
178
+ fields.forEach(field => {
179
+ keys.push(field.key);
180
+ });
181
+ } else {
182
+ keys.push(key);
183
+ }
184
+ }
185
+ });
186
+ return keys;
187
+ }, [filterConfig]);
188
+
189
+ // Create a stable string representation of filterValues for required keys
190
+ // This ensures reliable dependency tracking in production builds
191
+ const requiredFieldsSignature = (0, _react.useMemo)(() => requiredKeys.map(key => {
192
+ const value = filterValues[key];
193
+ // Create a stable string representation that changes when value changes
194
+ if (value === undefined || value === null) return "".concat(key, ":null");
195
+ if (value instanceof Date) return "".concat(key, ":").concat(value.getTime());
196
+ return "".concat(key, ":").concat(JSON.stringify(value));
197
+ }).join('|'), [requiredKeys, filterValues]);
198
+
199
+ // Memoized check if all required fields are filled
200
+ const areAllRequiredFieldsFilled = (0, _react.useMemo)(() => {
201
+ // If no required fields, button should be enabled
202
+ if (requiredKeys.length === 0) {
203
+ return true;
204
+ }
205
+
206
+ // Check each required field has a valid value
207
+ return requiredKeys.every(requiredKey => {
208
+ const value = filterValues[requiredKey];
209
+
210
+ // Check if value exists and is not empty/null/undefined
211
+ // Also handle edge cases: empty arrays, empty objects, etc.
212
+ if (value === undefined || value === null || value === '') {
213
+ return false;
214
+ }
215
+
216
+ // Handle arrays
217
+ if (Array.isArray(value)) {
218
+ return value.length > 0;
219
+ }
220
+
221
+ // Handle objects (but allow Date objects and other valid objects)
222
+ if (typeof value === 'object' && !(value instanceof Date)) {
223
+ return Object.keys(value).length > 0;
224
+ }
225
+ return true;
226
+ });
227
+ }, [requiredKeys, requiredFieldsSignature, filterValues]);
228
+
229
+ // Helper function to determine notFoundContent message
230
+ const getNotFoundContent = (isApiCallInProgress, query) => {
231
+ if (!isApiCallInProgress && (query === null || query === void 0 ? void 0 : query.length) < 3) {
232
+ return 'Start Typing atleast 3 characters';
233
+ }
234
+ if (isApiCallInProgress && (query === null || query === void 0 ? void 0 : query.length) > 0) {
235
+ return 'Loading...';
236
+ }
237
+ return 'No data found';
238
+ };
239
+
240
+ // Helper function to render CustomSelect (DRY principle)
241
+ const renderSelect = (fieldKey, fieldConfig) => {
242
+ const {
243
+ placeholder,
244
+ options = [],
245
+ loading = false,
246
+ isApiCallInProgress = false,
247
+ searchValue: query = '',
248
+ showSearch: fieldShowSearch = false,
249
+ filterOption,
250
+ disabled = false
251
+ } = fieldConfig;
252
+ const fieldValue = filterValues[fieldKey];
253
+ const isLoading = filtersLoading || loading || isApiCallInProgress;
254
+ const notFoundContent = getNotFoundContent(isApiCallInProgress, query);
255
+ return /*#__PURE__*/_react.default.createElement(_CustomSelect.default, {
256
+ placeholder: placeholder || 'Select an option',
257
+ value: fieldValue || undefined,
258
+ options: options,
259
+ onSelectionChange: val => {
260
+ // Normalize: null/undefined means clear action
261
+ const action = val === null || val === undefined ? 'clear' : 'select';
262
+ handleFilterChange(fieldKey, val, action);
263
+ },
264
+ onSearch: searchText => {
265
+ // For search, pass the search text as-is (don't normalize to null)
266
+ handleFilterChange(fieldKey, searchText || null, 'search');
267
+ },
268
+ onChange: val => {
269
+ // Catch clear from Ant Design's onChange (passes through {...props})
270
+ if (val === undefined || val === null) {
271
+ handleFilterChange(fieldKey, null, 'clear');
272
+ }
273
+ },
274
+ allowClear: true,
275
+ loading: isLoading,
276
+ showSearch: fieldShowSearch,
277
+ filterOption: filterOption,
278
+ disabled: disabled,
279
+ notFoundContent: notFoundContent
280
+ });
281
+ };
282
+
283
+ // Helper function to render CustomDatePicker (DRY principle)
284
+ const renderDatePicker = (fieldKey, fieldConfig) => {
285
+ const {
286
+ placeholder
287
+ } = fieldConfig;
288
+ const fieldValue = filterValues[fieldKey];
289
+ return /*#__PURE__*/_react.default.createElement(_CustomDatePicker.default, {
290
+ placeholder: placeholder || 'Select date',
291
+ value: fieldValue,
292
+ containerSize: "small",
293
+ onChange: date => handleFilterChange(fieldKey, date, 'change')
294
+ });
295
+ };
296
+
297
+ // Helper function to render CustomRadio.Group (DRY principle)
298
+ const renderRadioGroup = (fieldKey, fieldConfig) => {
299
+ const {
300
+ options = []
301
+ } = fieldConfig;
302
+ const fieldValue = filterValues[fieldKey];
303
+ return /*#__PURE__*/_react.default.createElement(_CustomRadio.default.Group, {
304
+ value: fieldValue,
305
+ onChange: e => handleFilterChange(fieldKey, e.target.value, 'change')
306
+ }, options.map(option => /*#__PURE__*/_react.default.createElement(_CustomRadio.default, {
307
+ key: option.value,
308
+ value: option.value,
309
+ label: option.label
310
+ })));
311
+ };
312
+
313
+ // Render filter input based on type
314
+ const renderFilterInput = filter => {
315
+ const {
316
+ type,
317
+ key,
318
+ fields = []
319
+ } = filter;
320
+ switch (type) {
321
+ case 'radio':
322
+ return renderRadioGroup(key, filter);
323
+ case 'select':
324
+ return renderSelect(key, filter);
325
+ case 'date':
326
+ return renderDatePicker(key, filter);
327
+ case 'dateRange':
328
+ return /*#__PURE__*/_react.default.createElement(_styles.DateRangeContainer, null, fields.map(field => /*#__PURE__*/_react.default.createElement(_styles.FilterSubField, {
329
+ key: field.key
330
+ }, /*#__PURE__*/_react.default.createElement(_styles.FilterSubLabel, null, field.label), renderDatePicker(field.key, field))));
331
+ case 'group':
332
+ return /*#__PURE__*/_react.default.createElement(_styles.FilterGroup, null, fields.map(field => /*#__PURE__*/_react.default.createElement(_styles.FilterSubField, {
333
+ key: field.key
334
+ }, /*#__PURE__*/_react.default.createElement(_styles.FilterSubLabel, null, field.label), field.type === 'select' && renderSelect(field.key, field), field.type === 'date' && renderDatePicker(field.key, field), field.type === 'radio' && renderRadioGroup(field.key, field))));
335
+ default:
336
+ return null;
337
+ }
338
+ };
339
+ const displayData = dataSource;
340
+ const totalRecords = total !== null && total !== void 0 ? total : displayData.length;
341
+
342
+ // Button configuration for filter drawer footer
343
+ const filterDrawerButtonConfig = [{
344
+ callback: handleClearFilters,
345
+ label: 'Clear All',
346
+ type: 'secondary'
347
+ }, {
348
+ callback: handleApplyFilters,
349
+ label: 'Apply Filter',
350
+ type: 'primary',
351
+ disabled: !areAllRequiredFieldsFilled
352
+ }];
353
+ return /*#__PURE__*/_react.default.createElement(_styles.TableWithSearchAndFilterContainer, {
354
+ className: className
355
+ }, (showSearch || showFilters) && /*#__PURE__*/_react.default.createElement(_styles.Toolbar, null, showSearch && /*#__PURE__*/_react.default.createElement(_CustomInput.default, {
356
+ prefix: /*#__PURE__*/_react.default.createElement(_MaterialIcon.default, {
357
+ icon: _Search.default,
358
+ size: 20,
359
+ style: {
360
+ color: '#8c8c8c'
361
+ }
362
+ }),
363
+ placeholder: searchPlaceholder,
364
+ value: searchValue,
365
+ onChange: handleSearchChange,
366
+ onPressEnter: handleSearchPressEnter,
367
+ allowClear: true,
368
+ style: {
369
+ width: SEARCH_INPUT_WIDTH,
370
+ flexShrink: 0
371
+ }
372
+ }), showFilters && /*#__PURE__*/_react.default.createElement(_CustomButton.default, {
373
+ label: filterButtonLabel,
374
+ onClick: handleOpenFilterDrawer,
375
+ type: "secondary",
376
+ size: "medium",
377
+ iconConfig: {
378
+ icon: /*#__PURE__*/_react.default.createElement(_MaterialIcon.default, {
379
+ icon: _FilterList.default
380
+ }),
381
+ position: 'left'
382
+ }
383
+ })), showFilters && /*#__PURE__*/_react.default.createElement(_CustomDrawer.default, {
384
+ title: filterDrawerTitle,
385
+ placement: "right",
386
+ isBaseDrawer: true,
387
+ onClose: handleCloseFilterDrawer,
388
+ open: isFilterDrawerVisible,
389
+ visible: isFilterDrawerVisible,
390
+ closable: false,
391
+ width: 400,
392
+ buttonConfig: filterDrawerButtonConfig
393
+ }, /*#__PURE__*/_react.default.createElement(_styles.FilterDrawerContent, null, /*#__PURE__*/_react.default.createElement(_styles.FilterDrawerBody, null, filterConfig.length > 0 ? filterConfig.map(filter => /*#__PURE__*/_react.default.createElement(_styles.FilterSection, {
394
+ key: filter.key
395
+ }, /*#__PURE__*/_react.default.createElement(_styles.FilterLabel, null, filter.label, filter.required && /*#__PURE__*/_react.default.createElement(_styles.RequiredMark, null, "*")), renderFilterInput(filter))) : /*#__PURE__*/_react.default.createElement(_styles.FilterSection, null, /*#__PURE__*/_react.default.createElement(_styles.FilterLabel, null, "No filters configured"))))), /*#__PURE__*/_react.default.createElement(_CustomTable.default, _extends({
396
+ rowKey: rowKey,
397
+ dataSource: displayData,
398
+ columns: columns,
399
+ pagination: false,
400
+ emptyText: emptyText
401
+ }, restTableProps)), showPagination && totalRecords > pageSize && /*#__PURE__*/_react.default.createElement(_styles.PaginationContainer, null, /*#__PURE__*/_react.default.createElement(_CustomPagination.default, {
402
+ current: current,
403
+ pageSize: pageSize,
404
+ total: totalRecords,
405
+ onChange: onPaginationChange,
406
+ onShowSizeChange: onShowSizeChange,
407
+ pageSizeOptions: pageSizeOptions,
408
+ showSizeChanger: true,
409
+ showTotal: true
410
+ })));
411
+ }
412
+ TableWithSearchAndFilter.propTypes = {
413
+ tableProps: _propTypes.default.shape({
414
+ dataSource: _propTypes.default.array,
415
+ columns: _propTypes.default.array.isRequired,
416
+ rowKey: _propTypes.default.string,
417
+ emptyText: _propTypes.default.string
418
+ }),
419
+ searchProps: _propTypes.default.shape({
420
+ show: _propTypes.default.bool,
421
+ placeholder: _propTypes.default.string,
422
+ onSearch: _propTypes.default.func
423
+ }),
424
+ filterProps: _propTypes.default.shape({
425
+ show: _propTypes.default.bool,
426
+ config: _propTypes.default.array,
427
+ onApply: _propTypes.default.func,
428
+ onClear: _propTypes.default.func,
429
+ onChange: _propTypes.default.func,
430
+ loading: _propTypes.default.bool,
431
+ buttonLabel: _propTypes.default.string,
432
+ drawerTitle: _propTypes.default.string
433
+ }),
434
+ paginationProps: _propTypes.default.shape({
435
+ show: _propTypes.default.bool,
436
+ current: _propTypes.default.number,
437
+ pageSize: _propTypes.default.number,
438
+ total: _propTypes.default.number,
439
+ pageSizeOptions: _propTypes.default.array,
440
+ onChange: _propTypes.default.func,
441
+ onShowSizeChange: _propTypes.default.func
442
+ }),
443
+ className: _propTypes.default.string
444
+ };
445
+ TableWithSearchAndFilter.defaultProps = {
446
+ tableProps: {
447
+ dataSource: [],
448
+ rowKey: 'id',
449
+ emptyText: 'No data found'
450
+ },
451
+ searchProps: {
452
+ show: true,
453
+ placeholder: 'Search...'
454
+ },
455
+ filterProps: {
456
+ show: true,
457
+ config: [],
458
+ buttonLabel: 'Filters',
459
+ drawerTitle: 'FILTERS'
460
+ },
461
+ paginationProps: {
462
+ show: true,
463
+ current: 1,
464
+ pageSize: 10,
465
+ pageSizeOptions: [10, 20, 50, 100]
466
+ },
467
+ className: ''
468
+ };
469
+ var _default = exports.default = TableWithSearchAndFilter;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Toolbar = exports.TableWithSearchAndFilterContainer = exports.RequiredMark = exports.PaginationContainer = exports.FilterSubLabelText = exports.FilterSubLabel = exports.FilterSubField = exports.FilterSection = exports.FilterLabel = exports.FilterGroup = exports.FilterDrawerContent = exports.FilterDrawerBody = exports.DateRangeContainer = void 0;
7
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
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 TableWithSearchAndFilterContainer = exports.TableWithSearchAndFilterContainer = _styledComponents.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 100%;\n"])));
12
+ const Toolbar = exports.Toolbar = _styledComponents.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n gap: 16px;\n\n @media screen and (max-width: 768px) {\n flex-direction: column;\n align-items: stretch;\n }\n"])));
13
+ const FilterSection = exports.FilterSection = _styledComponents.default.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n margin-bottom: 24px;\n"])));
14
+ const FilterLabel = exports.FilterLabel = _styledComponents.default.label(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n font-weight: 600;\n font-size: 14px;\n color: var(--color-primary-content, #212121);\n margin-bottom: 12px;\n"])));
15
+ const RequiredMark = exports.RequiredMark = _styledComponents.default.span(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n color: #ff4d4f;\n margin-left: 2px;\n font-weight: 400;\n"])));
16
+ const PaginationContainer = exports.PaginationContainer = _styledComponents.default.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n margin-top: 16px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n"])));
17
+ const FilterDrawerContent = exports.FilterDrawerContent = _styledComponents.default.div(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n min-height: calc(100vh - 150px);\n"])));
18
+ const FilterDrawerBody = exports.FilterDrawerBody = _styledComponents.default.div(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n flex: 1;\n overflow-y: auto;\n \n /* Make radio buttons horizontal */\n .ant-radio-group {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 16px;\n }\n \n /* Ensure radio wrapper is visible - override line-height: 0 */\n .ant-radio-wrapper {\n display: inline-flex !important;\n align-items: center !important;\n margin-right: 0 !important;\n line-height: 1.5 !important;\n }\n \n /* Ensure radio label text is visible */\n .ant-radio-wrapper span:not(.ant-radio) {\n line-height: 1.5 !important;\n }\n \n .ant-radio-wrapper p {\n margin: 0;\n line-height: 1.5 !important;\n }\n"])));
19
+ const FilterGroup = exports.FilterGroup = _styledComponents.default.div(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n gap: 16px;\n"])));
20
+ const FilterSubField = exports.FilterSubField = _styledComponents.default.div(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n gap: 8px;\n"])));
21
+ const FilterSubLabel = exports.FilterSubLabel = _styledComponents.default.label(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n font-weight: 400;\n font-size: 14px;\n color: var(--color-primary-content, #212121);\n"])));
22
+ const FilterSubLabelText = exports.FilterSubLabelText = _styledComponents.default.span(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n color: var(--color-primary-content, #212121);\n"])));
23
+ const DateRangeContainer = exports.DateRangeContainer = _styledComponents.default.div(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n gap: 16px;\n"])));
@@ -46,7 +46,7 @@ function CustomTabs(_ref) {
46
46
  type
47
47
  } = _ref,
48
48
  antDesignProps = _objectWithoutProperties(_ref, _excluded);
49
- const items = data.tabs.map(_ref2 => {
49
+ const items = data.tabs && data.tabs.map(_ref2 => {
50
50
  let {
51
51
  body,
52
52
  disabled: isTabDisabed,
@@ -4,11 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ require("core-js/modules/es.object.assign.js");
7
8
  var _react = _interopRequireDefault(require("react"));
8
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
10
  var _Typography = _interopRequireDefault(require("../oa-component-typography/Typography"));
10
11
  var _styles = require("./styles");
11
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /* eslint-disable */
12
14
  /**
13
15
  * A simple tag component that displays a label.
14
16
  *
@@ -21,28 +23,44 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
21
23
  */
22
24
  function CustomTag(_ref) {
23
25
  let {
24
- 'data-test': dataTest,
26
+ "data-test": dataTest,
25
27
  label,
26
28
  type,
27
- visible
29
+ visible,
30
+ bgColor,
31
+ borderColor,
32
+ textColor,
33
+ style
28
34
  } = _ref;
29
- return /*#__PURE__*/_react.default.createElement(_styles.StyledTag, {
35
+ return /*#__PURE__*/_react.default.createElement(_styles.StyledTag, _extends({
30
36
  "data-test": dataTest,
31
37
  type: type,
32
- visible: visible
33
- }, /*#__PURE__*/_react.default.createElement(_styles.CenteredTextContainer, null, /*#__PURE__*/_react.default.createElement(_Typography.default, {
38
+ visible: visible,
39
+ bgColor: bgColor,
40
+ borderColor: borderColor,
41
+ textColor: textColor
42
+ }, style && {
43
+ style
44
+ }), /*#__PURE__*/_react.default.createElement(_styles.CenteredTextContainer, null, /*#__PURE__*/_react.default.createElement(_Typography.default, {
34
45
  typography: "type-button-500"
35
46
  }, label)));
36
47
  }
37
48
  CustomTag.propTypes = {
38
- 'data-test': _propTypes.default.string,
49
+ "data-test": _propTypes.default.string,
39
50
  label: _propTypes.default.string.isRequired,
40
- type: _propTypes.default.oneOf(['success', 'pending', 'failed', 'recommended']),
41
- visible: _propTypes.default.bool
51
+ type: _propTypes.default.oneOf(["success", "pending", "failed", "recommended", "primary", "blue", "custom"]),
52
+ visible: _propTypes.default.bool,
53
+ bgColor: _propTypes.default.string,
54
+ borderColor: _propTypes.default.string,
55
+ textColor: _propTypes.default.string,
56
+ style: _propTypes.default.object
42
57
  };
43
58
  CustomTag.defaultProps = {
44
- 'data-test': null,
45
- type: '',
46
- visible: true
59
+ "data-test": null,
60
+ type: "",
61
+ visible: true,
62
+ bgColor: "",
63
+ borderColor: "",
64
+ textColor: ""
47
65
  };
48
66
  var _default = exports.default = CustomTag;
@@ -8,7 +8,13 @@ var _styledComponents = _interopRequireDefault(require("styled-components"));
8
8
  var _templateObject, _templateObject2;
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
10
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
11
- const getColorStyles = type => {
11
+ const getColorStyles = props => {
12
+ const {
13
+ type,
14
+ bgColor,
15
+ borderColor,
16
+ textColor
17
+ } = props;
12
18
  if (type === 'success') {
13
19
  return {
14
20
  backgroundColor: 'var(--color-background-positive)',
@@ -16,6 +22,13 @@ const getColorStyles = type => {
16
22
  textColor: 'var(--color-positive)'
17
23
  };
18
24
  }
25
+ if (type === 'primary') {
26
+ return {
27
+ backgroundColor: 'var(--color-divider)',
28
+ borderColor: 'var(--color-placeholder-text)',
29
+ textColor: 'var(--color-primary-content)'
30
+ };
31
+ }
19
32
  if (type === 'pending') {
20
33
  return {
21
34
  backgroundColor: 'var(--color-background-warning)',
@@ -37,6 +50,20 @@ const getColorStyles = type => {
37
50
  textColor: 'var(--color-negative)'
38
51
  };
39
52
  }
53
+ if (type === 'blue') {
54
+ return {
55
+ backgroundColor: 'var(--color-background-info)',
56
+ borderColor: 'var(--color-primary)',
57
+ textColor: 'var(--color-primary)'
58
+ };
59
+ }
60
+ if (type === 'custom') {
61
+ return {
62
+ backgroundColor: bgColor,
63
+ borderColor,
64
+ textColor
65
+ };
66
+ }
40
67
  return {
41
68
  backgroundColor: '#CCCCCC',
42
69
  borderColor: 'var(--color-primary-content)',
@@ -44,5 +71,5 @@ const getColorStyles = type => {
44
71
  };
45
72
  };
46
73
  var _default = exports.default = {};
47
- const StyledTag = exports.StyledTag = _styledComponents.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: inline-block;\n padding: 1px 12px;\n \n color: ", ";\n \n background-color: ", ";\n\n border: 1px solid ", ";\n border-radius: 4px;\n \n visibility: ", ";\n"])), props => getColorStyles(props.type).textColor, props => getColorStyles(props.type).backgroundColor, props => getColorStyles(props.type).borderColor, props => props.visible ? 'visible' : 'hidden');
48
- const CenteredTextContainer = exports.CenteredTextContainer = _styledComponents.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n"])));
74
+ const StyledTag = exports.StyledTag = _styledComponents.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: inline-block;\n padding: 1px 12px;\n\n color: ", ";\n\n background-color: ", ";\n\n border: 1px solid ", ";\n border-radius: 4px;\n\n visibility: ", ";\n"])), props => getColorStyles(props).textColor, props => getColorStyles(props).backgroundColor, props => getColorStyles(props).borderColor, props => props.visible ? 'visible' : 'hidden');
75
+ const CenteredTextContainer = exports.CenteredTextContainer = _styledComponents.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex; white-space: nowrap;\n"])));