@wavemaker/react-runtime 11.14.1-rc.236
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/actions/base-action.js +32 -0
- package/actions/login-action.js +53 -0
- package/actions/logout-action.js +41 -0
- package/actions/navigation-action.js +145 -0
- package/actions/notification-action.js +147 -0
- package/actions/timer-action.js +164 -0
- package/actions/toast-provider.js +111 -0
- package/actions/toast.js +115 -0
- package/actions/toast.service.js +94 -0
- package/actions/types/index.js +11 -0
- package/components/advanced/carousel/index.js +456 -0
- package/components/advanced/carousel/props.js +5 -0
- package/components/advanced/carousel/template.js +72 -0
- package/components/advanced/login/index.js +307 -0
- package/components/advanced/login/props.js +5 -0
- package/components/advanced/marquee/index.js +158 -0
- package/components/advanced/marquee/props.js +5 -0
- package/components/basic/anchor/index.js +239 -0
- package/components/basic/anchor/props.js +5 -0
- package/components/basic/audio/index.js +61 -0
- package/components/basic/html/index.js +158 -0
- package/components/basic/icon/index.js +85 -0
- package/components/basic/iframe/iframe.utils.js +10 -0
- package/components/basic/iframe/index.js +95 -0
- package/components/basic/label/index.js +139 -0
- package/components/basic/message/index.js +120 -0
- package/components/basic/message/props.js +5 -0
- package/components/basic/picture/index.js +117 -0
- package/components/basic/picture/props.js +5 -0
- package/components/basic/progress-bar/index.js +168 -0
- package/components/basic/progress-bar/props.js +18 -0
- package/components/basic/progress-circle/index.js +196 -0
- package/components/basic/progress-circle/props.js +16 -0
- package/components/basic/richtexteditor/index.js +533 -0
- package/components/basic/richtexteditor/props.js +5 -0
- package/components/basic/search/index.js +1023 -0
- package/components/basic/search/props.js +5 -0
- package/components/basic/search/providers.js +350 -0
- package/components/basic/spinner/index.js +202 -0
- package/components/basic/spinner/props.js +12 -0
- package/components/basic/tile/index.js +91 -0
- package/components/basic/tree/Components/TreeNodeComponent.js +142 -0
- package/components/basic/tree/index.js +503 -0
- package/components/basic/tree/props.js +5 -0
- package/components/basic/tree/utils.js +154 -0
- package/components/basic/video/index.js +85 -0
- package/components/basic/video/props.js +5 -0
- package/components/chart/components/barColumnChart/index.js +132 -0
- package/components/chart/components/barColumnChart/props.js +5 -0
- package/components/chart/components/bubbleChart/index.js +176 -0
- package/components/chart/components/bubbleChart/props.js +5 -0
- package/components/chart/components/chartLegend/components/ClassicLegendItem.js +39 -0
- package/components/chart/components/chartLegend/components/FuriousLegendItem.js +81 -0
- package/components/chart/components/chartLegend/index.js +69 -0
- package/components/chart/components/chartLegend/props.js +5 -0
- package/components/chart/components/chartLegend/utils.js +31 -0
- package/components/chart/components/chartTooltip/index.js +53 -0
- package/components/chart/components/chartTooltip/styles.js +37 -0
- package/components/chart/components/chartTooltip/utils.js +23 -0
- package/components/chart/components/cumulativeLineChart/index.js +113 -0
- package/components/chart/components/cumulativeLineChart/props.js +5 -0
- package/components/chart/components/cumulativeLineChart/utils.js +34 -0
- package/components/chart/components/index.js +40 -0
- package/components/chart/components/lineAreaChart/index.js +140 -0
- package/components/chart/components/lineAreaChart/props.js +5 -0
- package/components/chart/components/noDataMessage/index.js +27 -0
- package/components/chart/components/pieDonutChart/index.js +171 -0
- package/components/chart/components/pieDonutChart/props.js +5 -0
- package/components/chart/constant.js +72 -0
- package/components/chart/index.js +930 -0
- package/components/chart/props.js +5 -0
- package/components/chart/utils.js +691 -0
- package/components/common/AppSpinner.js +36 -0
- package/components/common/app-spinner.js +26 -0
- package/components/common/index.js +12 -0
- package/components/constants.js +1208 -0
- package/components/container/accordion/accordion-pane/index.js +108 -0
- package/components/container/accordion/accordion-pane/props.js +11 -0
- package/components/container/accordion/index.js +232 -0
- package/components/container/accordion/props.js +13 -0
- package/components/container/alignment-utils.js +183 -0
- package/components/container/index.js +188 -0
- package/components/container/layout-grid/grid-column/index.js +34 -0
- package/components/container/layout-grid/grid-row/index.js +24 -0
- package/components/container/layout-grid/index.js +33 -0
- package/components/container/linear-layout/index.js +72 -0
- package/components/container/linear-layout/linear-layout-item/index.js +43 -0
- package/components/container/panel/components/panel-header/index.js +144 -0
- package/components/container/panel/components/panel-header/props.js +5 -0
- package/components/container/panel/hooks.js +144 -0
- package/components/container/panel/index.js +286 -0
- package/components/container/panel/props.js +5 -0
- package/components/container/props.js +5 -0
- package/components/container/tabs/index.js +379 -0
- package/components/container/tabs/props.js +20 -0
- package/components/container/tabs/tab-pane/index.js +42 -0
- package/components/container/tabs/tab-pane/props.js +5 -0
- package/components/container/wizard/WizardContext.js +16 -0
- package/components/container/wizard/components/StepComponents.js +100 -0
- package/components/container/wizard/components/WizardStep.js +89 -0
- package/components/container/wizard/index.js +710 -0
- package/components/container/wizard/props.js +5 -0
- package/components/container/wizard/utils.js +133 -0
- package/components/container/wizard/wizard-action/index.js +22 -0
- package/components/container/wizard/wizard-step/index.js +94 -0
- package/components/data/card/card-actions/index.js +24 -0
- package/components/data/card/card-content/index.js +38 -0
- package/components/data/card/card-footer/index.js +24 -0
- package/components/data/card/index.js +246 -0
- package/components/data/card/props.js +5 -0
- package/components/data/form/base-form/constant.js +39 -0
- package/components/data/form/base-form/index.js +460 -0
- package/components/data/form/base-form/props.js +29 -0
- package/components/data/form/base-form/utils.js +42 -0
- package/components/data/form/dynamic-fields/index.js +196 -0
- package/components/data/form/dynamic-fields/props.js +5 -0
- package/components/data/form/dynamic-fields/utils.js +237 -0
- package/components/data/form/form-action/index.js +71 -0
- package/components/data/form/form-body/index.js +26 -0
- package/components/data/form/form-context.js +34 -0
- package/components/data/form/form-controller/props.js +19 -0
- package/components/data/form/form-controller/validation-contrustor.js +313 -0
- package/components/data/form/form-controller/withFormController.js +320 -0
- package/components/data/form/form-field/base-field.js +138 -0
- package/components/data/form/form-field/index.js +36 -0
- package/components/data/form/form-field/props.js +5 -0
- package/components/data/form/form-footer/index.js +26 -0
- package/components/data/form/form-header/index.js +56 -0
- package/components/data/form/index.js +39 -0
- package/components/data/form/props.js +5 -0
- package/components/data/list/components/GroupHeader.js +35 -0
- package/components/data/list/components/GroupedListItems.js +98 -0
- package/components/data/list/components/ListContainer.js +27 -0
- package/components/data/list/components/ListDND.js +241 -0
- package/components/data/list/components/ListHeader.js +59 -0
- package/components/data/list/components/ListItem.js +148 -0
- package/components/data/list/components/ListItemWithTemplate.js +59 -0
- package/components/data/list/components/ListItems.js +231 -0
- package/components/data/list/components/ListPagination.js +165 -0
- package/components/data/list/components/LoadMoreButton.js +39 -0
- package/components/data/list/components/NoDataMessage.js +22 -0
- package/components/data/list/components/StandardListItems.js +84 -0
- package/components/data/list/components/index.js +119 -0
- package/components/data/list/components/props.js +5 -0
- package/components/data/list/hooks/index.js +75 -0
- package/components/data/list/hooks/props.js +5 -0
- package/components/data/list/hooks/useCurrentPageItems.js +48 -0
- package/components/data/list/hooks/useGroupedData.js +37 -0
- package/components/data/list/hooks/useListData.js +60 -0
- package/components/data/list/hooks/useListEffects.js +285 -0
- package/components/data/list/hooks/useListEventHandlers.js +291 -0
- package/components/data/list/hooks/useListPagination.js +168 -0
- package/components/data/list/hooks/useListState.js +98 -0
- package/components/data/list/hooks/useListStateManager.js +195 -0
- package/components/data/list/hooks/usePaginatedGroupedData.js +121 -0
- package/components/data/list/index.js +611 -0
- package/components/data/list/props.js +5 -0
- package/components/data/list/templates/media-template.js +53 -0
- package/components/data/list/utils/constants.js +81 -0
- package/components/data/list/utils/list-helpers.js +173 -0
- package/components/data/list/utils/list-widget-methods.js +114 -0
- package/components/data/live-filter/index.js +279 -0
- package/components/data/live-filter/props.js +12 -0
- package/components/data/live-form/index.js +93 -0
- package/components/data/live-form/props.js +16 -0
- package/components/data/pagination/components/BasicPagination.js +77 -0
- package/components/data/pagination/components/ClassicPagination.js +191 -0
- package/components/data/pagination/components/InlinePagination.js +99 -0
- package/components/data/pagination/components/LoadingComponent.js +31 -0
- package/components/data/pagination/components/PageSizeSelector.js +175 -0
- package/components/data/pagination/components/PagerNavigation.js +105 -0
- package/components/data/pagination/components/TotalRecords.js +52 -0
- package/components/data/pagination/components/index.js +47 -0
- package/components/data/pagination/components/props.js +5 -0
- package/components/data/pagination/hooks/index.js +19 -0
- package/components/data/pagination/hooks/props.js +5 -0
- package/components/data/pagination/hooks/useNavigationSize.js +44 -0
- package/components/data/pagination/hooks/usePagination.js +796 -0
- package/components/data/pagination/index.js +322 -0
- package/components/data/table/components/AddNewRow.js +190 -0
- package/components/data/table/components/EditableCell.js +91 -0
- package/components/data/table/components/FieldValidationError.js +24 -0
- package/components/data/table/components/RowExpansionButton.js +74 -0
- package/components/data/table/components/TableBody.js +279 -0
- package/components/data/table/components/TableFilters.js +325 -0
- package/components/data/table/components/TableFooterActions.js +48 -0
- package/components/data/table/components/TableHeader.js +174 -0
- package/components/data/table/components/TablePanelHeading.js +68 -0
- package/components/data/table/components/index.js +74 -0
- package/components/data/table/hooks/index.js +219 -0
- package/components/data/table/hooks/useCellState.js +117 -0
- package/components/data/table/hooks/useDynamicColumns.js +85 -0
- package/components/data/table/hooks/useEditingState.js +47 -0
- package/components/data/table/hooks/useFormWidget.js +184 -0
- package/components/data/table/hooks/usePaginationState.js +60 -0
- package/components/data/table/hooks/usePanelStructure.js +40 -0
- package/components/data/table/hooks/useResponsiveColumns.js +34 -0
- package/components/data/table/hooks/useRowExpansion.js +110 -0
- package/components/data/table/hooks/useRowHandlers.js +38 -0
- package/components/data/table/hooks/useRowSelection.js +213 -0
- package/components/data/table/hooks/useServerSideSorting.js +165 -0
- package/components/data/table/hooks/useTableColumns.js +263 -0
- package/components/data/table/hooks/useTableData.js +154 -0
- package/components/data/table/hooks/useTableEdit.js +467 -0
- package/components/data/table/hooks/useTableEffects.js +139 -0
- package/components/data/table/hooks/useTableFilter.js +389 -0
- package/components/data/table/hooks/useTableInitialization.js +103 -0
- package/components/data/table/hooks/useTableState.js +69 -0
- package/components/data/table/hooks/useTableStateManager.js +558 -0
- package/components/data/table/index.js +1295 -0
- package/components/data/table/live-table/index.js +232 -0
- package/components/data/table/props.js +5 -0
- package/components/data/table/table-action/index.js +78 -0
- package/components/data/table/table-column/index.js +35 -0
- package/components/data/table/table-row/index.js +49 -0
- package/components/data/table/table-row-action/index.js +74 -0
- package/components/data/table/utils/buildSelectionColumns.js +173 -0
- package/components/data/table/utils/columnBuilder.js +209 -0
- package/components/data/table/utils/columnProxy.js +48 -0
- package/components/data/table/utils/columnWidthDistribution.js +98 -0
- package/components/data/table/utils/constants.js +80 -0
- package/components/data/table/utils/crud-handlers.js +518 -0
- package/components/data/table/utils/dynamic-columns.js +118 -0
- package/components/data/table/utils/index.js +607 -0
- package/components/data/table/utils/renderDisplayCell.js +183 -0
- package/components/data/table/utils/selectionUtils.js +166 -0
- package/components/data/table/utils/table-helpers.js +100 -0
- package/components/data/table/utils/validation.js +124 -0
- package/components/data/types.js +113 -0
- package/components/data/utils/field-data-utils.js +66 -0
- package/components/data/utils/filter-field-util.js +81 -0
- package/components/data/utils/index.js +216 -0
- package/components/dialogs/alert-dialog/index.js +80 -0
- package/components/dialogs/confirm-dialog/index.js +105 -0
- package/components/dialogs/dialog/index.js +56 -0
- package/components/dialogs/dialog-actions/index.js +18 -0
- package/components/dialogs/dialog-body/index.js +21 -0
- package/components/dialogs/dialog-content/index.js +30 -0
- package/components/dialogs/dialog-header/index.js +93 -0
- package/components/dialogs/iframe-dialog/index.js +114 -0
- package/components/dialogs/index.js +129 -0
- package/components/dialogs/login-dialog/index.js +369 -0
- package/components/dialogs/login-dialog/props.js +5 -0
- package/components/dialogs/page-dialog/index.js +96 -0
- package/components/dialogs/withDialogWrapper.js +108 -0
- package/components/form/button/index.js +216 -0
- package/components/form/button-group/index.js +60 -0
- package/components/input/calendar/index.js +546 -0
- package/components/input/calendar/props.js +5 -0
- package/components/input/calendar/utils.js +340 -0
- package/components/input/chips/SortableChip/index.js +115 -0
- package/components/input/chips/SortableChip/props.js +5 -0
- package/components/input/chips/index.js +488 -0
- package/components/input/chips/props.js +5 -0
- package/components/input/chips/utils.js +259 -0
- package/components/input/color-picker/index.js +678 -0
- package/components/input/color-picker/props.js +5 -0
- package/components/input/composite/index.js +137 -0
- package/components/input/currency/index.js +263 -0
- package/components/input/currency/props.js +5 -0
- package/components/input/default/checkbox/index.js +230 -0
- package/components/input/default/checkbox/props.js +5 -0
- package/components/input/default/checkboxset/index.js +476 -0
- package/components/input/default/checkboxset/props.js +5 -0
- package/components/input/default/radioset/index.js +379 -0
- package/components/input/default/radioset/props.js +5 -0
- package/components/input/default/switch/index.js +490 -0
- package/components/input/default/switch/prop.js +5 -0
- package/components/input/epoch/date/components/DatePickerPopover.js +220 -0
- package/components/input/epoch/date/index.js +520 -0
- package/components/input/epoch/date/props.js +5 -0
- package/components/input/epoch/date/styled.js +70 -0
- package/components/input/epoch/date/utils.js +108 -0
- package/components/input/epoch/datetime/index.js +656 -0
- package/components/input/epoch/datetime/props.js +5 -0
- package/components/input/epoch/datetime/styled.js +90 -0
- package/components/input/epoch/datetime/utils.js +244 -0
- package/components/input/epoch/time/index.js +412 -0
- package/components/input/epoch/time/props.js +5 -0
- package/components/input/epoch/time/utils.js +209 -0
- package/components/input/fileupload/Utils.js +134 -0
- package/components/input/fileupload/components/ListItems.js +140 -0
- package/components/input/fileupload/components/MultiUpload.js +85 -0
- package/components/input/fileupload/components/SingleUpload.js +65 -0
- package/components/input/fileupload/index.js +170 -0
- package/components/input/fileupload/props.js +5 -0
- package/components/input/fileupload/useFileUpload.js +400 -0
- package/components/input/number/index.js +295 -0
- package/components/input/number/props.js +5 -0
- package/components/input/rating/index.js +368 -0
- package/components/input/rating/props.js +5 -0
- package/components/input/select/index.js +344 -0
- package/components/input/select/props.js +5 -0
- package/components/input/slider/index.js +167 -0
- package/components/input/slider/props.js +5 -0
- package/components/input/text/index.js +434 -0
- package/components/input/text/props.js +5 -0
- package/components/input/text/util.js +179 -0
- package/components/input/textarea/index.js +347 -0
- package/components/input/textarea/props.js +5 -0
- package/components/layout/footer/index.js +30 -0
- package/components/layout/header/index.js +30 -0
- package/components/layout/leftnav/index.js +44 -0
- package/components/layout/rightnav/index.js +32 -0
- package/components/layout/topnav/index.js +34 -0
- package/components/navbar/index.js +41 -0
- package/components/navbar/nav/index.js +102 -0
- package/components/navbar/nav/props.js +5 -0
- package/components/navbar/nav-item/index.js +44 -0
- package/components/navigation/breadcrumb/index.js +56 -0
- package/components/navigation/breadcrumb/props.js +5 -0
- package/components/navigation/menu/components/ListItems.js +66 -0
- package/components/navigation/menu/constants.js +101 -0
- package/components/navigation/menu/index.js +807 -0
- package/components/navigation/menu/props.js +5 -0
- package/components/navigation/popover/index.js +209 -0
- package/components/navigation/popover/props.js +15 -0
- package/components/page/content/index.js +28 -0
- package/components/page/error-boundary/index.js +108 -0
- package/components/page/index.js +137 -0
- package/components/page/page-content/index.js +23 -0
- package/components/page/partial/index.js +36 -0
- package/components/page/partial-container/index.js +48 -0
- package/components/page/props.js +5 -0
- package/components/page/toast-container/index.js +33 -0
- package/components/prefab/container/index.js +46 -0
- package/components/prefab/index.js +67 -0
- package/context/AppContext.js +25 -0
- package/context/AppSpinnerProvider.js +43 -0
- package/context/LocalizationProvider.js +79 -0
- package/context/PrefabContext.js +66 -0
- package/context/WidgetProvider.js +187 -0
- package/core/app-config.js +1 -0
- package/core/app.service.js +357 -0
- package/core/appVariablesStore.js +20 -0
- package/core/appstore.js +88 -0
- package/core/constants/currency-constant.js +1071 -0
- package/core/constants/events.js +34 -0
- package/core/constants/index.js +27 -0
- package/core/dialog.service.js +76 -0
- package/core/event-notifier.js +151 -0
- package/core/formatter/date-formatters.js +222 -0
- package/core/formatter/index.js +131 -0
- package/core/formatter/number-formatters.js +142 -0
- package/core/formatter/security-formatters.js +323 -0
- package/core/formatter/string-formatters.js +52 -0
- package/core/formatter/types.js +18 -0
- package/core/formatters.js +24 -0
- package/core/proxy-service.js +412 -0
- package/core/script-registry.js +63 -0
- package/core/security.service.js +11 -0
- package/core/util/common.js +33 -0
- package/core/util/dom.js +107 -0
- package/core/util/index.js +136 -0
- package/core/util/security.js +184 -0
- package/core/util/utils.js +189 -0
- package/core/widget-observer.js +98 -0
- package/higherOrder/BaseApp.js +430 -0
- package/higherOrder/BaseAppProps.js +5 -0
- package/higherOrder/BaseDateTime.js +251 -0
- package/higherOrder/BasePage.js +715 -0
- package/higherOrder/BasePartial.js +124 -0
- package/higherOrder/BasePrefab.js +145 -0
- package/higherOrder/DataNav.js +377 -0
- package/higherOrder/helper.js +43 -0
- package/higherOrder/props.js +5 -0
- package/higherOrder/withBaseWrapper.js +183 -0
- package/hooks/useAccess.js +308 -0
- package/hooks/useAppConfig.js +42 -0
- package/hooks/useAuth.js +562 -0
- package/hooks/useDataSourceSubscription.js +125 -0
- package/hooks/useDebounce.js +76 -0
- package/hooks/useDeviceVisibility.js +49 -0
- package/hooks/useHttp.js +338 -0
- package/libs/index.js +20 -0
- package/mui-config/theme-provider.js +17 -0
- package/mui-config/theme.js +371 -0
- package/package-lock.json +10183 -0
- package/package.json +95 -0
- package/store/index.js +33 -0
- package/store/middleware/navigationMiddleware.js +48 -0
- package/store/slices/appConfigSlice.js +103 -0
- package/store/slices/authSlice.js +508 -0
- package/store/slices/i18nSlice.js +206 -0
- package/types/index.js +15 -0
- package/utils/dataset-util.js +174 -0
- package/utils/eval-expression.js +32 -0
- package/utils/form-state.util.js +140 -0
- package/utils/form-utils.js +187 -0
- package/utils/format-util.js +260 -0
- package/utils/page-params-util.js +24 -0
- package/utils/resource-url.js +27 -0
- package/utils/state-persistance.js +343 -0
- package/utils/style-utils.js +73 -0
- package/utils/transformedDataset-utils.js +633 -0
- package/utils/widget-cleanup-util.js +84 -0
- package/utils/widgets.js +99 -0
- package/variables/base-variable.js +173 -0
- package/variables/constants.js +27 -0
- package/variables/live-variable.js +166 -0
- package/variables/model-variable.js +77 -0
- package/variables/service-variable.js +307 -0
|
@@ -0,0 +1,1023 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
17
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
18
|
+
var _clsx = _interopRequireDefault(require("clsx"));
|
|
19
|
+
var _image = _interopRequireDefault(require("next/image"));
|
|
20
|
+
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
21
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
22
|
+
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
23
|
+
var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
|
|
24
|
+
var _ClickAwayListener = _interopRequireDefault(require("@mui/material/ClickAwayListener"));
|
|
25
|
+
var _Paper = _interopRequireDefault(require("@mui/material/Paper"));
|
|
26
|
+
var _Popper = _interopRequireDefault(require("@mui/material/Popper"));
|
|
27
|
+
var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
|
|
28
|
+
var _dompurify = _interopRequireDefault(require("dompurify"));
|
|
29
|
+
var _material = require("@mui/material");
|
|
30
|
+
var _withBaseWrapper = _interopRequireDefault(require("@wavemaker/react-runtime/higherOrder/withBaseWrapper"));
|
|
31
|
+
var _lodash = require("lodash");
|
|
32
|
+
var _transformedDatasetUtils = require("@wavemaker/react-runtime/utils/transformedDataset-utils");
|
|
33
|
+
var _providers = require("./providers");
|
|
34
|
+
var _excluded = ["showclear", "debouncetime", "searchkey", "searchon", "matchmode", "minchars", "limit", "tabindex", "placeholder", "dropup", "readonly", "datavalue", "dataset", "datafield", "displayfield", "disabled", "autofocus", "type", "showsearchicon", "showbackbutton", "imagewidth", "width", "displaylabel", "displayimagesrc", "displayexpression", "datacompletemsg", "loadingdatamsg", "clearsearchiconclass", "backsearchiconclass", "searchiconclass", "navsearchbar", "class", "shortcutkey", "required", "hint", "arialabel", "onBeforeservicecall", "onBlur", "onChange", "onFocus", "onSelect", "onSubmit", "onClear", "onSearch", "onDatasetready", "conditionalstyles", "styles", "name", "listener", "value", "datasetItems", "selectedItems", "displayValue", "groupedData", "handleHeaderClick", "toggleAllHeaders", "isDestroyed", "validation", "casesensitive", "isUpdateRequired", "onQuerySearch"];
|
|
35
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
36
|
+
var __jsx = _react["default"].createElement;
|
|
37
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
38
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
39
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
40
|
+
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; }
|
|
41
|
+
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) { (0, _defineProperty2["default"])(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; }
|
|
42
|
+
var DEFAULT_CLASS = "app-search input-group";
|
|
43
|
+
var Search = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
|
|
44
|
+
var _props$showclear = props.showclear,
|
|
45
|
+
showclear = _props$showclear === void 0 ? false : _props$showclear,
|
|
46
|
+
_props$debouncetime = props.debouncetime,
|
|
47
|
+
debouncetime = _props$debouncetime === void 0 ? 250 : _props$debouncetime,
|
|
48
|
+
searchkey = props.searchkey,
|
|
49
|
+
_props$searchon = props.searchon,
|
|
50
|
+
searchon = _props$searchon === void 0 ? "typing" : _props$searchon,
|
|
51
|
+
_props$matchmode = props.matchmode,
|
|
52
|
+
matchmode = _props$matchmode === void 0 ? "contains" : _props$matchmode,
|
|
53
|
+
_props$minchars = props.minchars,
|
|
54
|
+
minchars = _props$minchars === void 0 ? 1 : _props$minchars,
|
|
55
|
+
_props$limit = props.limit,
|
|
56
|
+
limit = _props$limit === void 0 ? 10 : _props$limit,
|
|
57
|
+
_props$tabindex = props.tabindex,
|
|
58
|
+
tabindex = _props$tabindex === void 0 ? 0 : _props$tabindex,
|
|
59
|
+
_props$placeholder = props.placeholder,
|
|
60
|
+
placeholder = _props$placeholder === void 0 ? "Search" : _props$placeholder,
|
|
61
|
+
_props$dropup = props.dropup,
|
|
62
|
+
dropup = _props$dropup === void 0 ? false : _props$dropup,
|
|
63
|
+
_props$readonly = props.readonly,
|
|
64
|
+
readonly = _props$readonly === void 0 ? false : _props$readonly,
|
|
65
|
+
datavalue = props.datavalue,
|
|
66
|
+
_props$dataset = props.dataset,
|
|
67
|
+
dataset = _props$dataset === void 0 ? [] : _props$dataset,
|
|
68
|
+
_props$datafield = props.datafield,
|
|
69
|
+
datafield = _props$datafield === void 0 ? "All Fields" : _props$datafield,
|
|
70
|
+
displayfield = props.displayfield,
|
|
71
|
+
_props$disabled = props.disabled,
|
|
72
|
+
disabled = _props$disabled === void 0 ? false : _props$disabled,
|
|
73
|
+
_props$autofocus = props.autofocus,
|
|
74
|
+
autofocus = _props$autofocus === void 0 ? false : _props$autofocus,
|
|
75
|
+
_props$type = props.type,
|
|
76
|
+
type = _props$type === void 0 ? "search" : _props$type,
|
|
77
|
+
_props$showsearchicon = props.showsearchicon,
|
|
78
|
+
showsearchicon = _props$showsearchicon === void 0 ? true : _props$showsearchicon,
|
|
79
|
+
_props$showbackbutton = props.showbackbutton,
|
|
80
|
+
showbackbutton = _props$showbackbutton === void 0 ? false : _props$showbackbutton,
|
|
81
|
+
_props$imagewidth = props.imagewidth,
|
|
82
|
+
imagewidth = _props$imagewidth === void 0 ? "16px" : _props$imagewidth,
|
|
83
|
+
width = props.width,
|
|
84
|
+
displaylabel = props.displaylabel,
|
|
85
|
+
displayimagesrc = props.displayimagesrc,
|
|
86
|
+
displayexpression = props.displayexpression,
|
|
87
|
+
_props$datacompletems = props.datacompletemsg,
|
|
88
|
+
datacompletemsg = _props$datacompletems === void 0 ? "No more data to load" : _props$datacompletems,
|
|
89
|
+
_props$loadingdatamsg = props.loadingdatamsg,
|
|
90
|
+
loadingdatamsg = _props$loadingdatamsg === void 0 ? "Loading items..." : _props$loadingdatamsg,
|
|
91
|
+
_props$clearsearchico = props.clearsearchiconclass,
|
|
92
|
+
clearsearchiconclass = _props$clearsearchico === void 0 ? "wi wi-close" : _props$clearsearchico,
|
|
93
|
+
_props$backsearchicon = props.backsearchiconclass,
|
|
94
|
+
backsearchiconclass = _props$backsearchicon === void 0 ? "wi wi-arrow-left" : _props$backsearchicon,
|
|
95
|
+
_props$searchiconclas = props.searchiconclass,
|
|
96
|
+
searchiconclass = _props$searchiconclas === void 0 ? "sl-search wm-sl-l" : _props$searchiconclas,
|
|
97
|
+
_props$navsearchbar = props.navsearchbar,
|
|
98
|
+
navsearchbar = _props$navsearchbar === void 0 ? false : _props$navsearchbar,
|
|
99
|
+
className = props["class"],
|
|
100
|
+
shortcutkey = props.shortcutkey,
|
|
101
|
+
required = props.required,
|
|
102
|
+
hint = props.hint,
|
|
103
|
+
_props$arialabel = props.arialabel,
|
|
104
|
+
arialabel = _props$arialabel === void 0 ? "Search field" : _props$arialabel,
|
|
105
|
+
onBeforeservicecall = props.onBeforeservicecall,
|
|
106
|
+
onBlur = props.onBlur,
|
|
107
|
+
onChange = props.onChange,
|
|
108
|
+
onFocus = props.onFocus,
|
|
109
|
+
onSelect = props.onSelect,
|
|
110
|
+
onSubmit = props.onSubmit,
|
|
111
|
+
onClear = props.onClear,
|
|
112
|
+
onSearch = props.onSearch,
|
|
113
|
+
onDatasetready = props.onDatasetready,
|
|
114
|
+
_props$conditionalsty = props.conditionalstyles,
|
|
115
|
+
conditionalstyles = _props$conditionalsty === void 0 ? {} : _props$conditionalsty,
|
|
116
|
+
_props$styles = props.styles,
|
|
117
|
+
styles = _props$styles === void 0 ? {} : _props$styles,
|
|
118
|
+
name = props.name,
|
|
119
|
+
listener = props.listener,
|
|
120
|
+
value = props.value,
|
|
121
|
+
datasetItems = props.datasetItems,
|
|
122
|
+
selectedItems = props.selectedItems,
|
|
123
|
+
displayValue = props.displayValue,
|
|
124
|
+
initialGroupedData = props.groupedData,
|
|
125
|
+
handleHeaderClick = props.handleHeaderClick,
|
|
126
|
+
toggleAllHeaders = props.toggleAllHeaders,
|
|
127
|
+
isDestroyed = props.isDestroyed,
|
|
128
|
+
validation = props.validation,
|
|
129
|
+
_props$casesensitive = props.casesensitive,
|
|
130
|
+
casesensitive = _props$casesensitive === void 0 ? false : _props$casesensitive,
|
|
131
|
+
isUpdateRequired = props.isUpdateRequired,
|
|
132
|
+
onQuerySearch = props.onQuerySearch,
|
|
133
|
+
restProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
134
|
+
var searchRef = (0, _react.useRef)(null);
|
|
135
|
+
var inputRef = (0, _react.useRef)(null);
|
|
136
|
+
var dropdownRef = (0, _react.useRef)(null);
|
|
137
|
+
var _useState = (0, _react.useState)(typeof datavalue === "string" ? datavalue : ""),
|
|
138
|
+
query = _useState[0],
|
|
139
|
+
setQuery = _useState[1];
|
|
140
|
+
var _useState2 = (0, _react.useState)(false),
|
|
141
|
+
isOpen = _useState2[0],
|
|
142
|
+
setIsOpen = _useState2[1];
|
|
143
|
+
var _useState3 = (0, _react.useState)(false),
|
|
144
|
+
loadingItems = _useState3[0],
|
|
145
|
+
setLoadingItems = _useState3[1];
|
|
146
|
+
var _useState4 = (0, _react.useState)(false),
|
|
147
|
+
isScrolled = _useState4[0],
|
|
148
|
+
setIsScrolled = _useState4[1];
|
|
149
|
+
var _useState5 = (0, _react.useState)(1),
|
|
150
|
+
page = _useState5[0],
|
|
151
|
+
setPage = _useState5[1];
|
|
152
|
+
var _useState6 = (0, _react.useState)([]),
|
|
153
|
+
formattedDataset = _useState6[0],
|
|
154
|
+
setFormattedDataset = _useState6[1];
|
|
155
|
+
var _useState7 = (0, _react.useState)({}),
|
|
156
|
+
groupedData = _useState7[0],
|
|
157
|
+
setGroupedData = _useState7[1];
|
|
158
|
+
var _useState8 = (0, _react.useState)(type === "autocomplete"),
|
|
159
|
+
listenQuery = _useState8[0],
|
|
160
|
+
setListenQuery = _useState8[1]; // Only listen for autocomplete type
|
|
161
|
+
var _useState9 = (0, _react.useState)(false),
|
|
162
|
+
menuOpen = _useState9[0],
|
|
163
|
+
setMenuOpen = _useState9[1]; // Track menu open state separately
|
|
164
|
+
var _useState0 = (0, _react.useState)(true),
|
|
165
|
+
hasMoreData = _useState0[0],
|
|
166
|
+
setHasMoreData = _useState0[1]; // Track if there's more data to load
|
|
167
|
+
var _useState1 = (0, _react.useState)(null),
|
|
168
|
+
selectedItem = _useState1[0],
|
|
169
|
+
setSelectedItem = _useState1[1]; // Track the selected item
|
|
170
|
+
var _useState10 = (0, _react.useState)(undefined),
|
|
171
|
+
updateRequired = _useState10[0],
|
|
172
|
+
setUpdateRequired = _useState10[1];
|
|
173
|
+
(0, _react.useEffect)(function () {
|
|
174
|
+
// do not remove this code specifically handled for chips component for clearing the query.
|
|
175
|
+
if (datavalue == "") {
|
|
176
|
+
setQuery("");
|
|
177
|
+
}
|
|
178
|
+
}, [datavalue]);
|
|
179
|
+
|
|
180
|
+
// Combine width with other styles
|
|
181
|
+
var searchStyle = _objectSpread(_objectSpread({
|
|
182
|
+
width: width
|
|
183
|
+
}, styles), conditionalstyles);
|
|
184
|
+
|
|
185
|
+
// Create dataProvider instance
|
|
186
|
+
var dataProvider = (0, _react.useMemo)(function () {
|
|
187
|
+
return new _providers.DataProvider();
|
|
188
|
+
}, []);
|
|
189
|
+
|
|
190
|
+
// Focus input on mount
|
|
191
|
+
(0, _react.useEffect)(function () {
|
|
192
|
+
if (autofocus) {
|
|
193
|
+
var _inputRef$current;
|
|
194
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
|
|
195
|
+
}
|
|
196
|
+
}, []);
|
|
197
|
+
|
|
198
|
+
// Handle shortcut key
|
|
199
|
+
(0, _react.useEffect)(function () {
|
|
200
|
+
var handleShortcutKey = function handleShortcutKey(event) {
|
|
201
|
+
if (shortcutkey && event.key.toLowerCase() === shortcutkey.toLowerCase()) {
|
|
202
|
+
var _inputRef$current2;
|
|
203
|
+
event.preventDefault();
|
|
204
|
+
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.focus();
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
window.addEventListener("keydown", handleShortcutKey);
|
|
208
|
+
return function () {
|
|
209
|
+
return window.removeEventListener("keydown", handleShortcutKey);
|
|
210
|
+
};
|
|
211
|
+
}, [shortcutkey]);
|
|
212
|
+
|
|
213
|
+
// Process and prepare dataset for autocomplete type since it list should be loaded immediately when the component is mounted
|
|
214
|
+
(0, _react.useEffect)(function () {
|
|
215
|
+
// For autocomplete type load data immediately
|
|
216
|
+
if (type === "autocomplete") {
|
|
217
|
+
getDataSource("");
|
|
218
|
+
}
|
|
219
|
+
}, [dataset, type]);
|
|
220
|
+
|
|
221
|
+
// Update listen query state when type changes
|
|
222
|
+
(0, _react.useEffect)(function () {
|
|
223
|
+
setListenQuery(type === "autocomplete");
|
|
224
|
+
}, [type]);
|
|
225
|
+
var getGroupedData = (0, _react.useCallback)(function (data) {
|
|
226
|
+
if (props !== null && props !== void 0 && props.groupby && data !== null && data !== void 0 && data.length) {
|
|
227
|
+
var result = {};
|
|
228
|
+
data.forEach(function (item) {
|
|
229
|
+
if (!(props !== null && props !== void 0 && props.groupby)) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
var groupKey = item[props === null || props === void 0 ? void 0 : props.groupby] || "ungrouped";
|
|
233
|
+
if (!result[groupKey]) {
|
|
234
|
+
result[groupKey] = [];
|
|
235
|
+
}
|
|
236
|
+
result[groupKey].push(item);
|
|
237
|
+
});
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
ungrouped: data
|
|
242
|
+
};
|
|
243
|
+
}, [props === null || props === void 0 ? void 0 : props.groupby]);
|
|
244
|
+
var getDataSource = (0, _react.useCallback)(/*#__PURE__*/function () {
|
|
245
|
+
var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(query, nextPage) {
|
|
246
|
+
var normalizedData, dataConfig, _isUpdateRequired, _response, dataSet, localDataProvider, response, data, isLastPage;
|
|
247
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
248
|
+
while (1) switch (_context.prev = _context.next) {
|
|
249
|
+
case 0:
|
|
250
|
+
if (!(!query && (type === "search" || type === "autocomplete" && !nextPage))) {
|
|
251
|
+
_context.next = 5;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
setFormattedDataset([]);
|
|
255
|
+
setIsOpen(false);
|
|
256
|
+
setMenuOpen(false);
|
|
257
|
+
return _context.abrupt("return", []);
|
|
258
|
+
case 5:
|
|
259
|
+
normalizedData = (0, _transformedDatasetUtils.transformDataset)(dataset, datafield, displayfield, displaylabel, displayexpression, props.orderby, props.groupby, props.dataPath);
|
|
260
|
+
dataConfig = {
|
|
261
|
+
dataset: normalizedData,
|
|
262
|
+
datafield: datafield || "All Fields",
|
|
263
|
+
query: query,
|
|
264
|
+
matchMode: matchmode,
|
|
265
|
+
casesensitive: false,
|
|
266
|
+
searchKey: searchkey,
|
|
267
|
+
isformfield: false,
|
|
268
|
+
limit: limit,
|
|
269
|
+
page: nextPage ? page + 1 : 1,
|
|
270
|
+
isLocalFilter: true,
|
|
271
|
+
onBeforeservicecall: onBeforeservicecall
|
|
272
|
+
};
|
|
273
|
+
_context.prev = 7;
|
|
274
|
+
setLoadingItems(true);
|
|
275
|
+
_isUpdateRequired = updateRequired;
|
|
276
|
+
if (searchkey && updateRequired === undefined) {
|
|
277
|
+
_isUpdateRequired = dataProvider.init(props);
|
|
278
|
+
setUpdateRequired(_isUpdateRequired);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Handle remote search if required
|
|
282
|
+
if (!(searchkey && _isUpdateRequired)) {
|
|
283
|
+
_context.next = 31;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
_context.prev = 12;
|
|
287
|
+
_context.next = 15;
|
|
288
|
+
return dataProvider === null || dataProvider === void 0 ? void 0 : dataProvider.invokeVariable(props, query);
|
|
289
|
+
case 15:
|
|
290
|
+
_response = _context.sent;
|
|
291
|
+
setLoadingItems(false);
|
|
292
|
+
if (!_response) {
|
|
293
|
+
_context.next = 23;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
dataSet = Array.isArray(_response) ? _response : [_response];
|
|
297
|
+
setFormattedDataset(dataSet);
|
|
298
|
+
|
|
299
|
+
// Group data if grouping is enabled
|
|
300
|
+
if (props !== null && props !== void 0 && props.groupby) {
|
|
301
|
+
setGroupedData(getGroupedData(dataSet));
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Update UI state based on results
|
|
305
|
+
if (dataSet.length > 0) {
|
|
306
|
+
setIsOpen(true);
|
|
307
|
+
setMenuOpen(true);
|
|
308
|
+
} else {
|
|
309
|
+
setIsOpen(false);
|
|
310
|
+
setMenuOpen(false);
|
|
311
|
+
}
|
|
312
|
+
return _context.abrupt("return", dataSet);
|
|
313
|
+
case 23:
|
|
314
|
+
_context.next = 30;
|
|
315
|
+
break;
|
|
316
|
+
case 25:
|
|
317
|
+
_context.prev = 25;
|
|
318
|
+
_context.t0 = _context["catch"](12);
|
|
319
|
+
setLoadingItems(false);
|
|
320
|
+
setIsOpen(false);
|
|
321
|
+
setMenuOpen(false);
|
|
322
|
+
// TODO: call a toast here
|
|
323
|
+
case 30:
|
|
324
|
+
return _context.abrupt("return", []);
|
|
325
|
+
case 31:
|
|
326
|
+
if (!(!normalizedData || normalizedData.length === 0)) {
|
|
327
|
+
_context.next = 33;
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
return _context.abrupt("return", []);
|
|
331
|
+
case 33:
|
|
332
|
+
localDataProvider = new _providers.LocalDataProvider();
|
|
333
|
+
_context.next = 36;
|
|
334
|
+
return localDataProvider.filter(dataConfig);
|
|
335
|
+
case 36:
|
|
336
|
+
response = _context.sent;
|
|
337
|
+
data = response.data, isLastPage = response.isLastPage; // Update hasMoreData state based on results
|
|
338
|
+
setHasMoreData(data.length > 0 && !isLastPage);
|
|
339
|
+
if (!nextPage) {
|
|
340
|
+
setFormattedDataset(data);
|
|
341
|
+
setGroupedData(getGroupedData(data));
|
|
342
|
+
} else {
|
|
343
|
+
setFormattedDataset(function (prev) {
|
|
344
|
+
return [].concat((0, _toConsumableArray2["default"])(prev), (0, _toConsumableArray2["default"])(data));
|
|
345
|
+
});
|
|
346
|
+
setGroupedData(getGroupedData([].concat((0, _toConsumableArray2["default"])(formattedDataset), (0, _toConsumableArray2["default"])(data))));
|
|
347
|
+
}
|
|
348
|
+
setPage(function (prev) {
|
|
349
|
+
return nextPage ? prev + 1 : 1;
|
|
350
|
+
});
|
|
351
|
+
setIsScrolled(false);
|
|
352
|
+
|
|
353
|
+
// Show dropdown if we have results
|
|
354
|
+
if (data.length > 0) {
|
|
355
|
+
setIsOpen(true);
|
|
356
|
+
setMenuOpen(true);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// Call onDatasetready callback if provided
|
|
360
|
+
if (onDatasetready && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
361
|
+
onDatasetready(listener.Widgets[name], data);
|
|
362
|
+
}
|
|
363
|
+
return _context.abrupt("return", data);
|
|
364
|
+
case 47:
|
|
365
|
+
_context.prev = 47;
|
|
366
|
+
_context.t1 = _context["catch"](7);
|
|
367
|
+
console.error("Error fetching data:", _context.t1);
|
|
368
|
+
return _context.abrupt("return", []);
|
|
369
|
+
case 51:
|
|
370
|
+
_context.prev = 51;
|
|
371
|
+
setLoadingItems(false);
|
|
372
|
+
return _context.finish(51);
|
|
373
|
+
case 54:
|
|
374
|
+
case "end":
|
|
375
|
+
return _context.stop();
|
|
376
|
+
}
|
|
377
|
+
}, _callee, null, [[7, 47, 51, 54], [12, 25]]);
|
|
378
|
+
}));
|
|
379
|
+
return function (_x, _x2) {
|
|
380
|
+
return _ref.apply(this, arguments);
|
|
381
|
+
};
|
|
382
|
+
}(), [dataset, datafield, matchmode, searchkey, limit, onBeforeservicecall, page, formattedDataset, getGroupedData, type, onDatasetready, listener === null || listener === void 0 ? void 0 : listener.Widgets, name]);
|
|
383
|
+
|
|
384
|
+
// First, modify getDataSourceAsObservable to handle the state updates properly
|
|
385
|
+
var getDataSourceDebounced = (0, _react.useMemo)(function () {
|
|
386
|
+
return (0, _lodash.debounce)(/*#__PURE__*/function () {
|
|
387
|
+
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(query) {
|
|
388
|
+
var data;
|
|
389
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
390
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
391
|
+
case 0:
|
|
392
|
+
if (query) {
|
|
393
|
+
_context2.next = 5;
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
setFormattedDataset([]);
|
|
397
|
+
setIsOpen(false);
|
|
398
|
+
setMenuOpen(false);
|
|
399
|
+
return _context2.abrupt("return");
|
|
400
|
+
case 5:
|
|
401
|
+
if (!(query.length >= minchars)) {
|
|
402
|
+
_context2.next = 22;
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
_context2.prev = 6;
|
|
406
|
+
setLoadingItems(true);
|
|
407
|
+
_context2.next = 10;
|
|
408
|
+
return getDataSource(query);
|
|
409
|
+
case 10:
|
|
410
|
+
data = _context2.sent;
|
|
411
|
+
setLoadingItems(false);
|
|
412
|
+
|
|
413
|
+
// Update the formatted dataset first
|
|
414
|
+
setFormattedDataset(data);
|
|
415
|
+
|
|
416
|
+
// Then update visibility based on results
|
|
417
|
+
if (data && data.length > 0) {
|
|
418
|
+
setIsOpen(true);
|
|
419
|
+
setMenuOpen(true);
|
|
420
|
+
} else {
|
|
421
|
+
setIsOpen(false);
|
|
422
|
+
setMenuOpen(false);
|
|
423
|
+
}
|
|
424
|
+
_context2.next = 22;
|
|
425
|
+
break;
|
|
426
|
+
case 16:
|
|
427
|
+
_context2.prev = 16;
|
|
428
|
+
_context2.t0 = _context2["catch"](6);
|
|
429
|
+
console.error("Error in search:", _context2.t0);
|
|
430
|
+
setLoadingItems(false);
|
|
431
|
+
setIsOpen(false);
|
|
432
|
+
setMenuOpen(false);
|
|
433
|
+
case 22:
|
|
434
|
+
case "end":
|
|
435
|
+
return _context2.stop();
|
|
436
|
+
}
|
|
437
|
+
}, _callee2, null, [[6, 16]]);
|
|
438
|
+
}));
|
|
439
|
+
return function (_x3) {
|
|
440
|
+
return _ref2.apply(this, arguments);
|
|
441
|
+
};
|
|
442
|
+
}(), debouncetime);
|
|
443
|
+
}, [getDataSource, minchars, debouncetime]);
|
|
444
|
+
|
|
445
|
+
// listen to query change and trigger debounced search
|
|
446
|
+
(0, _react.useEffect)(function () {
|
|
447
|
+
if (query && (type === "autocomplete" && listenQuery || type === "search" && searchon === "typing")) {
|
|
448
|
+
getDataSourceDebounced(query);
|
|
449
|
+
}
|
|
450
|
+
}, [query]);
|
|
451
|
+
|
|
452
|
+
// Simplify handleInputChange to only update query
|
|
453
|
+
var handleInputChange = function handleInputChange(event) {
|
|
454
|
+
var _event$target;
|
|
455
|
+
var queryValue = (event === null || event === void 0 || (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value) || "";
|
|
456
|
+
setQuery(queryValue);
|
|
457
|
+
|
|
458
|
+
// Call onChange handlers
|
|
459
|
+
if (onChange && listener !== null && listener !== void 0 && listener.Widgets && name && name in (listener === null || listener === void 0 ? void 0 : listener.Widgets)) {
|
|
460
|
+
onChange(event, listener.Widgets[name], queryValue, queryValue);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// Clear results and close dropdown if query is empty
|
|
464
|
+
if (!queryValue) {
|
|
465
|
+
setFormattedDataset([]);
|
|
466
|
+
setSelectedItem(null);
|
|
467
|
+
setIsOpen(false);
|
|
468
|
+
setMenuOpen(false);
|
|
469
|
+
if (onClear && listener !== null && listener !== void 0 && listener.Widgets && name && name in (listener === null || listener === void 0 ? void 0 : listener.Widgets)) {
|
|
470
|
+
onClear(event, listener.Widgets[name]);
|
|
471
|
+
}
|
|
472
|
+
if (listener !== null && listener !== void 0 && listener.onChange) {
|
|
473
|
+
listener.onChange(name, {
|
|
474
|
+
datavalue: {}
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// For autocomplete type, only show dropdown if we meet minimum chars
|
|
481
|
+
if (type === "autocomplete" && queryValue.length < minchars) {
|
|
482
|
+
setFormattedDataset([]);
|
|
483
|
+
setIsOpen(false);
|
|
484
|
+
setMenuOpen(false);
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
var handleKeyDown = function handleKeyDown(event) {
|
|
489
|
+
if (event.key === "Enter") {
|
|
490
|
+
// If dropdown is open and we have items
|
|
491
|
+
if (menuOpen && formattedDataset.length > 0) {
|
|
492
|
+
var _dropdownRef$current;
|
|
493
|
+
var matches = ((_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.querySelectorAll("li")) || [];
|
|
494
|
+
if (matches.length > 0) {
|
|
495
|
+
var firstMatch = matches[0];
|
|
496
|
+
handleMatchSelect(firstMatch);
|
|
497
|
+
}
|
|
498
|
+
} else {
|
|
499
|
+
// For search type with searchon=iconclick or no searchon specified
|
|
500
|
+
if (type === "search" && (!searchon || searchon === "onsearchiconclick")) {
|
|
501
|
+
handleSearchClick(event);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// Fire onSubmit if provided
|
|
505
|
+
if (onSubmit && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
506
|
+
onSubmit(event, listener.Widgets[name]);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
} else if (event.key === "ArrowDown") {
|
|
510
|
+
event.preventDefault();
|
|
511
|
+
handleFocusNextItem();
|
|
512
|
+
} else if (event.key === "Escape") {
|
|
513
|
+
setIsOpen(false);
|
|
514
|
+
setMenuOpen(false);
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
var handleClearSearch = function handleClearSearch(event) {
|
|
518
|
+
var _inputRef$current3;
|
|
519
|
+
setQuery("");
|
|
520
|
+
setIsOpen(false);
|
|
521
|
+
setMenuOpen(false);
|
|
522
|
+
setSelectedItem(null);
|
|
523
|
+
setFormattedDataset([]);
|
|
524
|
+
if (onClear && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
525
|
+
onClear(event, listener.Widgets[name]);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
// Focus back on input
|
|
529
|
+
(_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.focus();
|
|
530
|
+
};
|
|
531
|
+
var handleClickAway = function handleClickAway(e) {
|
|
532
|
+
setIsOpen(false);
|
|
533
|
+
setMenuOpen(false);
|
|
534
|
+
handleBlur(e);
|
|
535
|
+
};
|
|
536
|
+
var handleFocus = function handleFocus(event) {
|
|
537
|
+
// For autocomplete type
|
|
538
|
+
if (type === "autocomplete") {
|
|
539
|
+
// If we already have results, show them
|
|
540
|
+
if (formattedDataset.length > 0) {
|
|
541
|
+
setIsOpen(true);
|
|
542
|
+
setMenuOpen(true);
|
|
543
|
+
}
|
|
544
|
+
// If we have a query that meets minimum length, search with it
|
|
545
|
+
else {
|
|
546
|
+
setLoadingItems(true);
|
|
547
|
+
var normalizedData = (0, _transformedDatasetUtils.transformDataset)(dataset, datafield, displayfield, displaylabel, displayexpression, props.orderby, props.groupby);
|
|
548
|
+
setFormattedDataset(normalizedData);
|
|
549
|
+
setIsOpen(true);
|
|
550
|
+
setMenuOpen(true);
|
|
551
|
+
setLoadingItems(false);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
// Call onFocus handler if provided
|
|
556
|
+
if (onFocus && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
557
|
+
onFocus(event, listener.Widgets[name]);
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
var handleBlur = function handleBlur(event) {
|
|
561
|
+
// Don't close dropdown immediately to allow click events on menu items
|
|
562
|
+
setTimeout(function () {
|
|
563
|
+
var _dropdownRef$current2;
|
|
564
|
+
if (document.activeElement !== dropdownRef.current && !((_dropdownRef$current2 = dropdownRef.current) !== null && _dropdownRef$current2 !== void 0 && _dropdownRef$current2.contains(document.activeElement))) {
|
|
565
|
+
setIsOpen(false);
|
|
566
|
+
setMenuOpen(false);
|
|
567
|
+
}
|
|
568
|
+
}, 200);
|
|
569
|
+
if (onBlur && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
570
|
+
onBlur(event, listener.Widgets[name]);
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
var handleSearchClick = function handleSearchClick(event) {
|
|
574
|
+
// Reset hasMoreData state before new search
|
|
575
|
+
setHasMoreData(true);
|
|
576
|
+
|
|
577
|
+
// For search type with searchon=iconclick or no searchon specified
|
|
578
|
+
if (type === "search" && (!searchon || searchon === "onsearchiconclick")) {
|
|
579
|
+
// First set loading state
|
|
580
|
+
setLoadingItems(true);
|
|
581
|
+
getDataSource(query);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// Call the onSearch handler if provided
|
|
585
|
+
if (onSearch && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
586
|
+
onSearch(event, listener.Widgets[name]);
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
var handleFocusNextItem = function handleFocusNextItem() {
|
|
590
|
+
var _dropdownRef$current3;
|
|
591
|
+
// For autocomplete type, open dropdown if closed and no item is selected
|
|
592
|
+
if (type === "autocomplete" && !menuOpen && query.length >= minchars && !selectedItem) {
|
|
593
|
+
setIsOpen(true);
|
|
594
|
+
setMenuOpen(true);
|
|
595
|
+
|
|
596
|
+
// Load data if not loaded
|
|
597
|
+
if (formattedDataset.length === 0) {
|
|
598
|
+
getDataSource(query);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// Focus on first menu item
|
|
603
|
+
var matches = ((_dropdownRef$current3 = dropdownRef.current) === null || _dropdownRef$current3 === void 0 ? void 0 : _dropdownRef$current3.querySelectorAll("li")) || [];
|
|
604
|
+
if (matches.length > 0) {
|
|
605
|
+
var firstMatch = matches[0];
|
|
606
|
+
firstMatch.focus();
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
var handleMatchSelect = function handleMatchSelect(match) {
|
|
610
|
+
var itemData = match.getAttribute("data-item");
|
|
611
|
+
if (!itemData) return;
|
|
612
|
+
try {
|
|
613
|
+
var item = JSON.parse(itemData);
|
|
614
|
+
|
|
615
|
+
// Set display value in input
|
|
616
|
+
var displayVal = item.displayValue || item.label;
|
|
617
|
+
setQuery(displayVal);
|
|
618
|
+
setIsOpen(false);
|
|
619
|
+
setMenuOpen(false);
|
|
620
|
+
setSelectedItem(item); // Set the selected item
|
|
621
|
+
setFormattedDataset([]); // Clear the dropdown dataset
|
|
622
|
+
|
|
623
|
+
if (listener !== null && listener !== void 0 && listener.onChange) {
|
|
624
|
+
listener.onChange(name, {
|
|
625
|
+
datavalue: item.dataObject.value
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// Trigger onSelect callback if provided
|
|
630
|
+
if (onSelect && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
|
|
631
|
+
onSelect(new MouseEvent("click"), listener.Widgets[name], item);
|
|
632
|
+
}
|
|
633
|
+
} catch (error) {
|
|
634
|
+
console.error("Error parsing item data:", error);
|
|
635
|
+
}
|
|
636
|
+
};
|
|
637
|
+
var handleMenuItemClick = function handleMenuItemClick(event) {
|
|
638
|
+
handleMatchSelect(event.currentTarget);
|
|
639
|
+
};
|
|
640
|
+
var handleScroll = function handleScroll(event) {
|
|
641
|
+
if (!loadingItems && !isScrolled && hasMoreData && !selectedItem) {
|
|
642
|
+
var target = event.target;
|
|
643
|
+
if (target.scrollHeight - target.scrollTop <= target.clientHeight + 50) {
|
|
644
|
+
setIsScrolled(true);
|
|
645
|
+
getDataSource(query, true);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
};
|
|
649
|
+
var renderGroupDivider = function renderGroupDivider(groupKey) {
|
|
650
|
+
if (props.groupby && groupKey !== "ungrouped") {
|
|
651
|
+
return __jsx(_MenuItem["default"], {
|
|
652
|
+
key: "header-".concat(groupKey),
|
|
653
|
+
onClick: handleMenuItemClick,
|
|
654
|
+
dense: true,
|
|
655
|
+
className: "list-group-header"
|
|
656
|
+
}, __jsx(_Typography["default"], {
|
|
657
|
+
variant: "h4",
|
|
658
|
+
className: "group-title",
|
|
659
|
+
style: {
|
|
660
|
+
padding: "10px 16px"
|
|
661
|
+
}
|
|
662
|
+
}, groupKey));
|
|
663
|
+
}
|
|
664
|
+
return null;
|
|
665
|
+
};
|
|
666
|
+
var prepareDataItem = function prepareDataItem(item, index) {
|
|
667
|
+
// Handle primitive values
|
|
668
|
+
if ((0, _typeof2["default"])(item) !== "object" || item === null) {
|
|
669
|
+
var stringValue = String(item);
|
|
670
|
+
return {
|
|
671
|
+
key: index,
|
|
672
|
+
value: item,
|
|
673
|
+
label: stringValue,
|
|
674
|
+
displayValue: stringValue,
|
|
675
|
+
displayImage: null,
|
|
676
|
+
dataObject: item
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// Return if already normalized
|
|
681
|
+
var isNormalized = ["key", "value", "label", "displayValue"].every(function (prop) {
|
|
682
|
+
return item.hasOwnProperty(prop);
|
|
683
|
+
});
|
|
684
|
+
if (isNormalized) return item;
|
|
685
|
+
|
|
686
|
+
// Helper to find first valid field value
|
|
687
|
+
var findFieldValue = function findFieldValue(fields, fallback) {
|
|
688
|
+
var _iterator = _createForOfIteratorHelper(fields.filter(Boolean)),
|
|
689
|
+
_step;
|
|
690
|
+
try {
|
|
691
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
692
|
+
var field = _step.value;
|
|
693
|
+
if (field && item.hasOwnProperty(field) && item[field] != null && item[field] !== "") {
|
|
694
|
+
return item[field];
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
} catch (err) {
|
|
698
|
+
_iterator.e(err);
|
|
699
|
+
} finally {
|
|
700
|
+
_iterator.f();
|
|
701
|
+
}
|
|
702
|
+
return fallback;
|
|
703
|
+
};
|
|
704
|
+
|
|
705
|
+
// Get display value with priority: displayexpression > field names > first object value
|
|
706
|
+
var getDisplayValue = function getDisplayValue() {
|
|
707
|
+
// Try displayexpression first
|
|
708
|
+
if (displayexpression && typeof displayexpression === "function") {
|
|
709
|
+
try {
|
|
710
|
+
return displayexpression(item.dataObject ? item.dataObject : item);
|
|
711
|
+
} catch (e) {
|
|
712
|
+
console.warn("Error executing displayexpression:", e);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// Try predefined field names
|
|
717
|
+
var displayFields = [displaylabel, displayfield, "label", "name", "title", "text", "displayValue", "display"];
|
|
718
|
+
var fieldValue = findFieldValue(displayFields);
|
|
719
|
+
if (fieldValue != null) return String(fieldValue);
|
|
720
|
+
|
|
721
|
+
// Fallback to first object value
|
|
722
|
+
var firstValue = Object.values(item).find(function (val) {
|
|
723
|
+
return val != null;
|
|
724
|
+
});
|
|
725
|
+
return firstValue ? String(firstValue) : "";
|
|
726
|
+
};
|
|
727
|
+
var displayValue = getDisplayValue();
|
|
728
|
+
var keyFields = [datafield && datafield !== "All Fields" ? datafield : null, "id", "key", "value"];
|
|
729
|
+
var keyValue = findFieldValue(keyFields, index);
|
|
730
|
+
var displayImage = displayimagesrc && item[displayimagesrc] ? item[displayimagesrc] : null;
|
|
731
|
+
return {
|
|
732
|
+
key: keyValue,
|
|
733
|
+
value: item,
|
|
734
|
+
label: displayValue,
|
|
735
|
+
displayValue: displayValue,
|
|
736
|
+
displayImage: displayImage,
|
|
737
|
+
dataObject: item
|
|
738
|
+
};
|
|
739
|
+
};
|
|
740
|
+
|
|
741
|
+
// Add this helper function to highlight matching text
|
|
742
|
+
var highlightMatch = function highlightMatch(text, query) {
|
|
743
|
+
if (!query || !text) return text;
|
|
744
|
+
try {
|
|
745
|
+
var parts = text.split(new RegExp("(".concat(query, ")"), "gi"));
|
|
746
|
+
return parts.map(function (part, index) {
|
|
747
|
+
if (part.toLowerCase() === query.toLowerCase()) {
|
|
748
|
+
return __jsx("strong", {
|
|
749
|
+
key: index,
|
|
750
|
+
style: {
|
|
751
|
+
color: "var(--wm-search-dropdown-menu-item-color-matched)"
|
|
752
|
+
}
|
|
753
|
+
}, part);
|
|
754
|
+
}
|
|
755
|
+
return part;
|
|
756
|
+
});
|
|
757
|
+
} catch (e) {
|
|
758
|
+
// If there's any error in regex, return original text
|
|
759
|
+
return text;
|
|
760
|
+
}
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
// Update the renderItem function to use highlighting
|
|
764
|
+
var renderItem = function renderItem(item, query, index) {
|
|
765
|
+
// Convert raw data item to our format
|
|
766
|
+
var dataItem = prepareDataItem(item, index);
|
|
767
|
+
|
|
768
|
+
// Get the display text
|
|
769
|
+
var displayText = typeof dataItem.displayValue === "string" ? _dompurify["default"].sanitize(dataItem.displayValue) : String(dataItem.label);
|
|
770
|
+
return __jsx(_MenuItem["default"], {
|
|
771
|
+
key: "item-".concat(index, "-").concat(dataItem.key),
|
|
772
|
+
onClick: handleMenuItemClick,
|
|
773
|
+
"data-item": JSON.stringify(dataItem),
|
|
774
|
+
dense: true,
|
|
775
|
+
className: "search-dropdown-item",
|
|
776
|
+
style: {
|
|
777
|
+
padding: "10px 16px"
|
|
778
|
+
}
|
|
779
|
+
}, __jsx(_material.Box, {
|
|
780
|
+
component: "a",
|
|
781
|
+
style: {
|
|
782
|
+
textDecoration: "none",
|
|
783
|
+
color: "inherit"
|
|
784
|
+
}
|
|
785
|
+
}, dataItem.displayImage && __jsx(_image["default"], {
|
|
786
|
+
src: dataItem.displayImage,
|
|
787
|
+
alt: "",
|
|
788
|
+
width: parseInt(imagewidth) || 16,
|
|
789
|
+
height: parseInt(imagewidth) || 16,
|
|
790
|
+
style: {
|
|
791
|
+
marginRight: "8px"
|
|
792
|
+
}
|
|
793
|
+
}), __jsx(_material.Box, {
|
|
794
|
+
component: "span",
|
|
795
|
+
className: "",
|
|
796
|
+
title: displayText
|
|
797
|
+
}, highlightMatch(displayText, query))));
|
|
798
|
+
};
|
|
799
|
+
|
|
800
|
+
// Update renderItems to handle non-array cases
|
|
801
|
+
var renderItems = function renderItems() {
|
|
802
|
+
var itemCount = 0;
|
|
803
|
+
|
|
804
|
+
// If we have grouped data, render by groups
|
|
805
|
+
if (props.groupby) {
|
|
806
|
+
var groupKeys = Object.keys(groupedData || {});
|
|
807
|
+
if (groupKeys.length === 0) {
|
|
808
|
+
return null;
|
|
809
|
+
}
|
|
810
|
+
var renderedItems = [];
|
|
811
|
+
groupKeys.forEach(function (groupKey) {
|
|
812
|
+
// Add group divider if needed
|
|
813
|
+
var divider = renderGroupDivider(groupKey);
|
|
814
|
+
if (divider) {
|
|
815
|
+
renderedItems.push(divider);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
// Add items for this group
|
|
819
|
+
var groupItems = (groupedData === null || groupedData === void 0 ? void 0 : groupedData[groupKey]) || [];
|
|
820
|
+
groupItems.forEach(function (item) {
|
|
821
|
+
if (itemCount < limit) {
|
|
822
|
+
renderedItems.push(renderItem(item, query, itemCount));
|
|
823
|
+
itemCount++;
|
|
824
|
+
}
|
|
825
|
+
});
|
|
826
|
+
});
|
|
827
|
+
return renderedItems;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
// Ensure formattedDataset is an array before mapping
|
|
831
|
+
var formattedArray = Array.isArray(formattedDataset) ? formattedDataset : [];
|
|
832
|
+
return formattedArray.map(function (item, index) {
|
|
833
|
+
if (index < limit) {
|
|
834
|
+
return renderItem(item, query, index);
|
|
835
|
+
}
|
|
836
|
+
return null;
|
|
837
|
+
}).filter(Boolean); // Remove null values
|
|
838
|
+
};
|
|
839
|
+
var renderClearButton = function renderClearButton() {
|
|
840
|
+
if (showclear && query !== "") {
|
|
841
|
+
return __jsx(_material.Button, {
|
|
842
|
+
className: (0, _clsx["default"])("btn btn-icon form-control-feedback clear-btn show-btn clear-btn", {
|
|
843
|
+
"show-btn": !!query
|
|
844
|
+
}),
|
|
845
|
+
"aria-label": "Clear",
|
|
846
|
+
onClick: handleClearSearch,
|
|
847
|
+
size: "small"
|
|
848
|
+
}, __jsx(_material.Box, {
|
|
849
|
+
component: "i",
|
|
850
|
+
className: "app-icon ".concat(clearsearchiconclass)
|
|
851
|
+
}));
|
|
852
|
+
}
|
|
853
|
+
return null;
|
|
854
|
+
};
|
|
855
|
+
var renderSearchIcon = function renderSearchIcon() {
|
|
856
|
+
if (showsearchicon) {
|
|
857
|
+
return __jsx(_material.Button, {
|
|
858
|
+
className: "app-search-button btn btn-icon",
|
|
859
|
+
title: "search",
|
|
860
|
+
type: "submit",
|
|
861
|
+
onClick: handleSearchClick,
|
|
862
|
+
disabled: disabled,
|
|
863
|
+
size: "small"
|
|
864
|
+
}, __jsx(_material.Box, {
|
|
865
|
+
component: "i",
|
|
866
|
+
className: "app-icon ".concat(searchiconclass)
|
|
867
|
+
}));
|
|
868
|
+
}
|
|
869
|
+
return null;
|
|
870
|
+
};
|
|
871
|
+
var renderBackButton = function renderBackButton() {
|
|
872
|
+
if (showbackbutton && backsearchiconclass) {
|
|
873
|
+
return __jsx(_IconButton["default"], {
|
|
874
|
+
className: "back-btn",
|
|
875
|
+
"aria-label": "Back",
|
|
876
|
+
onClick: handleClearSearch,
|
|
877
|
+
size: "small"
|
|
878
|
+
}, __jsx(_material.Box, {
|
|
879
|
+
component: "span",
|
|
880
|
+
className: "app-icon ".concat(backsearchiconclass)
|
|
881
|
+
}), __jsx(_material.Box, {
|
|
882
|
+
component: "span",
|
|
883
|
+
className: "sr-only"
|
|
884
|
+
}, "Back button"));
|
|
885
|
+
}
|
|
886
|
+
return null;
|
|
887
|
+
};
|
|
888
|
+
var renderLoadingIndicator = function renderLoadingIndicator() {
|
|
889
|
+
if (loadingItems) {
|
|
890
|
+
return __jsx(_Typography["default"], {
|
|
891
|
+
variant: "body2",
|
|
892
|
+
className: "dropdown-status"
|
|
893
|
+
}, __jsx(_CircularProgress["default"], {
|
|
894
|
+
size: 20,
|
|
895
|
+
color: "primary",
|
|
896
|
+
style: {
|
|
897
|
+
marginRight: "8px"
|
|
898
|
+
}
|
|
899
|
+
}), loadingdatamsg);
|
|
900
|
+
}
|
|
901
|
+
return null;
|
|
902
|
+
};
|
|
903
|
+
var renderNoResultsMessage = function renderNoResultsMessage() {
|
|
904
|
+
if (!loadingItems && formattedDataset.length === 0 && query !== "" && !selectedItem) {
|
|
905
|
+
return __jsx(_Typography["default"], {
|
|
906
|
+
variant: "body2",
|
|
907
|
+
className: "dropdown-status",
|
|
908
|
+
style: {
|
|
909
|
+
padding: "8px 16px"
|
|
910
|
+
}
|
|
911
|
+
}, "No results found");
|
|
912
|
+
}
|
|
913
|
+
return null;
|
|
914
|
+
};
|
|
915
|
+
var renderCompletionMessage = function renderCompletionMessage() {
|
|
916
|
+
// Show "No more data to load" message when there are results but no more data to load
|
|
917
|
+
if (!loadingItems && formattedDataset.length > 0 && !selectedItem) {
|
|
918
|
+
return __jsx(_Typography["default"], {
|
|
919
|
+
variant: "body2",
|
|
920
|
+
className: "dropdown-status",
|
|
921
|
+
style: {
|
|
922
|
+
padding: "8px 16px",
|
|
923
|
+
textAlign: "center"
|
|
924
|
+
}
|
|
925
|
+
}, datacompletemsg);
|
|
926
|
+
}
|
|
927
|
+
return null;
|
|
928
|
+
};
|
|
929
|
+
var renderDropdown = function renderDropdown() {
|
|
930
|
+
var _searchRef$current;
|
|
931
|
+
// Don't show dropdown if an item is selected or if menu is not open
|
|
932
|
+
if (!isOpen || !menuOpen || selectedItem) return null;
|
|
933
|
+
return __jsx(_Popper["default"], {
|
|
934
|
+
open: isOpen && menuOpen,
|
|
935
|
+
anchorEl: inputRef.current,
|
|
936
|
+
placement: dropup ? "top-start" : "bottom-start",
|
|
937
|
+
style: {
|
|
938
|
+
zIndex: 1300,
|
|
939
|
+
width: (_searchRef$current = searchRef.current) === null || _searchRef$current === void 0 ? void 0 : _searchRef$current.clientWidth
|
|
940
|
+
}
|
|
941
|
+
}, __jsx(_Paper["default"], {
|
|
942
|
+
elevation: 3,
|
|
943
|
+
className: "search-dropdown-paper"
|
|
944
|
+
}, __jsx(_material.Box, {
|
|
945
|
+
component: "div",
|
|
946
|
+
ref: dropdownRef,
|
|
947
|
+
onScroll: handleScroll,
|
|
948
|
+
style: {
|
|
949
|
+
maxHeight: "300px",
|
|
950
|
+
overflow: "auto",
|
|
951
|
+
boxShadow: "0 2px 10px rgba(0, 0, 0, 0.1)"
|
|
952
|
+
},
|
|
953
|
+
className: "search-dropdown-container"
|
|
954
|
+
}, __jsx(_MenuList["default"], {
|
|
955
|
+
className: "search-menu-list app-search dropdown-menu"
|
|
956
|
+
}, renderItems(), renderNoResultsMessage(), renderLoadingIndicator(), renderCompletionMessage()))));
|
|
957
|
+
};
|
|
958
|
+
|
|
959
|
+
// Only include safe props in restProps to avoid React warnings
|
|
960
|
+
var safeRestProps = Object.entries(restProps).reduce(function (acc, _ref3) {
|
|
961
|
+
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
|
962
|
+
key = _ref4[0],
|
|
963
|
+
value = _ref4[1];
|
|
964
|
+
// Filter out any props that might cause DOM warnings
|
|
965
|
+
var invalidProps = ["validation", "datasetItems", "selectedItems", "displayValue", "onchange", "onblur", "groupedData", "handleHeaderClick", "toggleAllHeaders", "isDestroyed"];
|
|
966
|
+
if (!invalidProps.includes(key)) {
|
|
967
|
+
acc[key] = value;
|
|
968
|
+
}
|
|
969
|
+
return acc;
|
|
970
|
+
}, {});
|
|
971
|
+
return __jsx(_ClickAwayListener["default"], {
|
|
972
|
+
onClickAway: handleClickAway
|
|
973
|
+
}, __jsx(_material.Box, (0, _extends2["default"])({
|
|
974
|
+
component: "div",
|
|
975
|
+
ref: searchRef,
|
|
976
|
+
style: searchStyle
|
|
977
|
+
// Don't pass tabIndex to div when it contains focusable elements
|
|
978
|
+
}, safeRestProps, {
|
|
979
|
+
className: (0, _clsx["default"])(DEFAULT_CLASS, className),
|
|
980
|
+
"data-search-type": type,
|
|
981
|
+
type: type
|
|
982
|
+
}), renderBackButton(), __jsx(_material.Box, {
|
|
983
|
+
component: "span",
|
|
984
|
+
className: "sr-only"
|
|
985
|
+
}, "Back button"), __jsx(_material.Box, {
|
|
986
|
+
component: "input",
|
|
987
|
+
name: name,
|
|
988
|
+
className: (0, _clsx["default"])("app-textbox form-control list-of-objs app-search-input"),
|
|
989
|
+
type: "text",
|
|
990
|
+
"focus-target": "true",
|
|
991
|
+
value: query,
|
|
992
|
+
onChange: handleInputChange,
|
|
993
|
+
disabled: disabled,
|
|
994
|
+
tabIndex: tabindex,
|
|
995
|
+
ref: inputRef,
|
|
996
|
+
"aria-label": arialabel,
|
|
997
|
+
autoComplete: "off",
|
|
998
|
+
title: query,
|
|
999
|
+
placeholder: placeholder,
|
|
1000
|
+
readOnly: readonly,
|
|
1001
|
+
onBlur: function onBlur(e) {
|
|
1002
|
+
return handleBlur(e);
|
|
1003
|
+
},
|
|
1004
|
+
onFocus: function onFocus(e) {
|
|
1005
|
+
return handleFocus(e);
|
|
1006
|
+
},
|
|
1007
|
+
onKeyDown: function onKeyDown(e) {
|
|
1008
|
+
return handleKeyDown(e);
|
|
1009
|
+
}
|
|
1010
|
+
}), type === "autocomplete" ? null : __jsx(_material.Box, {
|
|
1011
|
+
component: "span",
|
|
1012
|
+
className: "input-group-addon"
|
|
1013
|
+
}, __jsx(_material.Box, {
|
|
1014
|
+
component: "form",
|
|
1015
|
+
noValidate: true,
|
|
1016
|
+
autoComplete: "off"
|
|
1017
|
+
}, renderSearchIcon())), __jsx(_material.Box, {
|
|
1018
|
+
component: "span",
|
|
1019
|
+
className: "sr-only"
|
|
1020
|
+
}, "Clear button"), showclear && showclear !== "false" ? renderClearButton() : null, renderDropdown()));
|
|
1021
|
+
});
|
|
1022
|
+
Search.displayName = "WmSearch";
|
|
1023
|
+
var _default = exports["default"] = (0, _withBaseWrapper["default"])(Search);
|