@geotab/zenith 3.14.1 → 3.15.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -2
- package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +17 -7
- package/dist/alert/banner.d.ts +2 -3
- package/dist/alert/hooks/useAlertState.d.ts +0 -1
- package/dist/banner/bannerMultipLine.d.ts +0 -1
- package/dist/banner/bannerSingleLine.d.ts +0 -1
- package/dist/banner/utils/isSummaryErrorElement.d.ts +1 -2
- package/dist/calendar/dateUtils.js +2 -2
- package/dist/card/card.js +17 -7
- package/dist/card/components/content.d.ts +0 -1
- package/dist/cardContainer/helpers/getSizeClass.js +1 -2
- package/dist/chart/accessibleChart/accessibleChart.js +1 -1
- package/dist/chart/accessibleChart/accessibleChartNarrative.d.ts +1 -1
- package/dist/chart/accessibleChart/accessibleChartNarrative.js +11 -5
- package/dist/chart/accessibleChart/generatePieNarrative.d.ts +7 -0
- package/dist/chart/accessibleChart/generatePieNarrative.js +179 -0
- package/dist/chart/accessibleChart/interfaces.d.ts +1 -0
- package/dist/chart/barChart/getDefaultOptions.js +5 -6
- package/dist/chart/barChart.js +152 -50
- package/dist/chart/interfaces.d.ts +0 -1
- package/dist/chart/lineChart/getDefaultOptions.js +5 -6
- package/dist/chart/lineChart/useChartTicks.d.ts +0 -1
- package/dist/chart/lineChart/useSummary.d.ts +7 -8
- package/dist/chart/lineChart.js +167 -59
- package/dist/chart/pieChart.js +174 -76
- package/dist/chart/plugins/linePlugin/getInterpolatedValue.js +1 -2
- package/dist/chart/plugins/linePlugin/linePlugin.js +29 -7
- package/dist/chart/utils/convertDates.d.ts +1 -1
- package/dist/chart/utils/getFormattedLabel.js +1 -2
- package/dist/chart/utils/getNiceAxisRange.d.ts +21 -0
- package/dist/chart/utils/getNiceAxisRange.js +76 -0
- package/dist/chart/utils/getRange.js +2 -2
- package/dist/chart/utils/getYAxisMeta.d.ts +2 -5
- package/dist/chart/utils/getYAxisMeta.js +17 -2
- package/dist/chart/utils/getYAxisTickCount.d.ts +15 -0
- package/dist/chart/utils/getYAxisTickCount.js +19 -0
- package/dist/chart/utils/resampleArrayEvenly.js +1 -2
- package/dist/checkbox/checkbox.js +17 -7
- package/dist/checkboxListWithAction/checkboxListWithAction.d.ts +0 -1
- package/dist/chip/chip.d.ts +0 -1
- package/dist/chip/utils/useChip.d.ts +0 -1
- package/dist/commonHelpers/HOC/reducerLogger/reducerLogger.d.ts +1 -1
- package/dist/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.d.ts +0 -1
- package/dist/commonHelpers/arrowNavigation/hooks/useHoldOnScroll.d.ts +0 -1
- package/dist/commonHelpers/generateId.js +1 -2
- package/dist/commonHelpers/hooks/breakpoints.d.ts +4 -0
- package/dist/commonHelpers/hooks/breakpoints.js +7 -0
- package/dist/commonHelpers/hooks/fetch.reducer.d.ts +1 -1
- package/dist/commonHelpers/hooks/fetch.reducer.js +1 -2
- package/dist/commonHelpers/hooks/useDebouncedMemo.d.ts +0 -1
- package/dist/commonHelpers/hooks/useDebouncedMemo.js +1 -2
- package/dist/commonHelpers/hooks/useDeviceType.js +2 -2
- package/dist/commonHelpers/hooks/useEscape.d.ts +1 -1
- package/dist/commonHelpers/hooks/useGridSize.d.ts +0 -1
- package/dist/commonHelpers/hooks/useMobileOrTablet.d.ts +1 -0
- package/dist/commonHelpers/hooks/useMobileOrTablet.js +21 -0
- package/dist/commonHelpers/hooks/usePillSize.d.ts +0 -1
- package/dist/{gridLayout → commonHelpers}/hooks/useTablet.js +8 -11
- package/dist/commonHelpers/utils.js +3 -3
- package/dist/commonStyles/colors/colors.less +1 -0
- package/dist/dataFeed/dataFeed.d.ts +1 -1
- package/dist/dataFeed/dataFeed.js +2 -2
- package/dist/dataFeed/dataFeedCell/dataFeedCell.d.ts +3 -1
- package/dist/dataFeed/dataFeedColumnsItems.d.ts +2 -2
- package/dist/dataGrid/cell/cell.d.ts +3 -1
- package/dist/dataGrid/columns/actionsColumn/actionsButton.js +1 -2
- package/dist/dataGrid/columns/actionsColumn/actionsColumn.d.ts +3 -3
- package/dist/dataGrid/dataGrid.d.ts +13 -1
- package/dist/dataGrid/dataGrid.js +48 -3
- package/dist/dataGrid/emptySearchList/emptySearchList.d.ts +0 -1
- package/dist/dataGrid/row/row.d.ts +3 -1
- package/dist/dataGrid/withActions/withActions.d.ts +1 -1
- package/dist/dataGrid/withFlexibleColumns/components/columnSettingsList.js +1 -2
- package/dist/dataGrid/withFlexibleColumns/withFlexibleColumns.d.ts +1 -1
- package/dist/dataGrid/withLoading/withLoading.d.ts +1 -1
- package/dist/dataGrid/withSelectableRows/withLimitedSelectableRows.d.ts +1 -1
- package/dist/dataGrid/withSelectableRows/withSelectableRows.d.ts +1 -1
- package/dist/dataGrid/withSortableColumns/withSortableColumns.d.ts +1 -1
- package/dist/dateInputInner/dateInputInnerReducer.js +2 -2
- package/dist/dateRangeRaw/utils/areMapsEqual.js +1 -2
- package/dist/dialog/dialog.d.ts +0 -1
- package/dist/dropdown/dropdown.js +1 -1
- package/dist/dropdown/useDropdownState.d.ts +0 -1
- package/dist/dropdownRaw/dropdownHelper.js +2 -2
- package/dist/dropdownRaw/dropdownList.d.ts +3 -2
- package/dist/dropdownRaw/dropdownList.js +31 -49
- package/dist/dropdownRaw/dropdownRaw.js +34 -13
- package/dist/dropdownRaw/stateReducer/stateReducer.d.ts +4 -1
- package/dist/dropdownRaw/stateReducer/stateReducer.js +33 -23
- package/dist/dropdownRaw/stateReducer/stateReducerHelper.d.ts +1 -2
- package/dist/dropdownRaw/stateReducer/stateReducerHelper.js +8 -13
- package/dist/dropdownRaw/types.d.ts +20 -0
- package/dist/feedbackContainer/feedbackContainer.js +17 -7
- package/dist/feedbackContainer/hooks/useFeedbackAlert.d.ts +0 -1
- package/dist/feedbackContainer/hooks/useFeedbackToast.d.ts +0 -1
- package/dist/filters/components/filtersDropdown.js +2 -2
- package/dist/filters/components/filtersItem.d.ts +2 -2
- package/dist/filters/components/filtersSearchList.d.ts +0 -1
- package/dist/filters/components/filtersSelect.d.ts +0 -1
- package/dist/filters/components/filtersSelectCompact.d.ts +0 -1
- package/dist/filters/components/filtersSelectListItem.d.ts +0 -1
- package/dist/filters/components/filtersSelectUnfoldingPill.d.ts +0 -1
- package/dist/filters/components/filtersSidePanelItem.js +17 -7
- package/dist/filters/filtersHelper.d.ts +1 -1
- package/dist/filters/filtersHelper.js +5 -5
- package/dist/filters/filtersHooks.d.ts +0 -1
- package/dist/filtersBar/components/filtersBarDropdownWithCheckbox/filtersBarDropdownWithCheckbox.js +1 -1
- package/dist/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +2 -2
- package/dist/filtersBar/filtersBar.js +2 -2
- package/dist/filtersBar/filtersBarActions/filtersBarActions.d.ts +0 -1
- package/dist/filtersBar/filtersBarInterfaces.d.ts +0 -1
- package/dist/filtersBar/filtersBarReducer.js +2 -2
- package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelDropdownWithCheckbox/filtersBarSidePanelDropdownWithCheckbox.d.ts +4 -10
- package/dist/filtersBar/filtersBarSidePanel/sidePanelReducer.js +2 -2
- package/dist/filtersBar/utils/getNumberOfChangedFilters.js +1 -2
- package/dist/footerButtons/footerButtons.js +17 -7
- package/dist/formField/components/formFieldAdditionalInfo.d.ts +0 -1
- package/dist/formField/components/formFieldCounter.d.ts +0 -1
- package/dist/formField/components/formFieldLoading.d.ts +0 -1
- package/dist/formField/components/formFieldSkeleton.d.ts +0 -1
- package/dist/formField/components/formFieldWithLabel.d.ts +0 -1
- package/dist/formField/components/formFieldWithoutLabel.d.ts +0 -1
- package/dist/formField/formField.d.ts +1 -1
- package/dist/formField/hooks/useBanner.d.ts +0 -1
- package/dist/formField/hooks/useDisabled.d.ts +1 -1
- package/dist/formGroup/components/customRow/customRow.d.ts +0 -1
- package/dist/formGroup/formGroup.js +17 -7
- package/dist/formGroup/hooks/listHooks/useStateToElements.d.ts +0 -1
- package/dist/formGroup/hooks/listHooks/useStateToElements.js +1 -1
- package/dist/formGroup/utils/formGroupProvider.d.ts +0 -1
- package/dist/formGroup/utils/isFormLabel.d.ts +1 -1
- package/dist/formGroupItem/formGroupItem.d.ts +0 -1
- package/dist/formLayout/components/layoutColumn/layoutColum.d.ts +0 -1
- package/dist/formLayout/hooks/useFormButtons.d.ts +1 -1
- package/dist/formLayout/types.d.ts +0 -1
- package/dist/formLayout/utils/attachHeadings.d.ts +1 -1
- package/dist/formLayout/utils/attachSeparators.d.ts +0 -1
- package/dist/formLayout/utils/getChildrenWithCustomColumns.d.ts +1 -2
- package/dist/formLayout/utils/getChildrenWithCustomColumns.js +2 -2
- package/dist/formLayout/utils/getFieldLabel.js +5 -5
- package/dist/formSection/components/actions.d.ts +0 -1
- package/dist/formSection/components/additional.d.ts +0 -1
- package/dist/formSection/utils/isFormSection.d.ts +2 -4
- package/dist/formStepper/components/formStepRaw.d.ts +0 -1
- package/dist/formStepper/formStepper.d.ts +0 -1
- package/dist/formStepper/formStepper.js +5 -5
- package/dist/formStepperButtons/formStepperButtons.js +3 -3
- package/dist/gridLayout/hooks/useStretch.js +1 -1
- package/dist/gridLayout/utils/convertStateToClasses.js +1 -2
- package/dist/gridLayout/utils/gridLayoutProvider.d.ts +0 -1
- package/dist/gridLayout/utils/gridLayoutProvider.js +1 -1
- package/dist/gridLayout/utils/isGridItem.d.ts +1 -1
- package/dist/groupsFilter/groupsHelper.d.ts +5 -5
- package/dist/groupsFilterRaw/groupsFilterHelper.js +16 -16
- package/dist/groupsFilterRaw/groupsHelper.d.ts +1 -1
- package/dist/groupsFilterRaw/groupsHelper.js +4 -4
- package/dist/groupsFilterRaw/stateReducer/stateReducer.d.ts +1 -1
- package/dist/groupsFilterRaw/stateReducer/stateReducer.js +2 -2
- package/dist/groupsFilterRaw/testData.js +3 -4
- package/dist/groupsFilterRaw/uiStateReducer/uiStateReducer.js +2 -2
- package/dist/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +5 -0
- package/dist/header/components/mobileFilterControl/mobileFilterControl.d.ts +0 -1
- package/dist/header/components/mobileSearchControl/mobileSearchControl.d.ts +0 -1
- package/dist/header/header.js +17 -7
- package/dist/header/headerButton.d.ts +0 -1
- package/dist/header/headerContext.d.ts +1 -2
- package/dist/header/headerHelpers.d.ts +5 -5
- package/dist/header/headerHelpers.js +17 -7
- package/dist/header/hooks/useNonFittingElements.d.ts +3 -4
- package/dist/headerTitle/headerTitle.d.ts +0 -1
- package/dist/icons/iconAce.d.ts +3 -0
- package/dist/icons/iconAce.js +12 -0
- package/dist/icons/iconBreak.d.ts +3 -0
- package/dist/icons/iconBreak.js +12 -0
- package/dist/icons/iconChevronStepper.d.ts +3 -0
- package/dist/icons/iconChevronStepper.js +12 -0
- package/dist/icons/iconPotato.d.ts +3 -0
- package/dist/icons/iconPotato.js +12 -0
- package/dist/icons/iconToggleLarge.d.ts +3 -0
- package/dist/icons/iconToggleLarge.js +12 -0
- package/dist/icons/iconToggleSmall.d.ts +3 -0
- package/dist/icons/iconToggleSmall.js +12 -0
- package/dist/icons/iconTrendNeutral.d.ts +3 -0
- package/dist/icons/iconTrendNeutral.js +12 -0
- package/dist/icons/iconTruck.d.ts +3 -0
- package/dist/icons/iconTruck.js +12 -0
- package/dist/index.css +219 -169
- package/dist/index.d.ts +8 -0
- package/dist/index.js +30 -13
- package/dist/layout/layout.d.ts +2 -1
- package/dist/layout/layout.js +17 -7
- package/dist/layout/layoutBanner.d.ts +0 -1
- package/dist/lineChart/lineChart.d.ts +1 -0
- package/dist/lineChart/lineChart.js +135 -70
- package/dist/lineChartMini/lineChartMini.d.ts +1 -0
- package/dist/lineChartMini/lineChartMini.js +141 -73
- package/dist/list/itemData/itemData.d.ts +2 -1
- package/dist/list/itemData/itemDataInternal.d.ts +2 -1
- package/dist/list/list.d.ts +0 -1
- package/dist/list/utils/changeOrder.js +1 -2
- package/dist/list/utils/isDataListitem.d.ts +1 -1
- package/dist/list/viewportProvider/viewportContext.d.ts +0 -1
- package/dist/menu/components/controlledMenuList/controlledMenuList.d.ts +2 -4
- package/dist/menu/components/controlledMenuList/controlledMenuList.js +3 -1
- package/dist/menu/components/createControlledMenuList.js +1 -2
- package/dist/menu/components/createMenuItem.js +1 -2
- package/dist/menu/contexts/usePathContext.js +1 -2
- package/dist/menu/utils/buildMenuContent.js +1 -2
- package/dist/menu/utils/findPrevFocusable.js +1 -2
- package/dist/menu/utils/useDisplayContent.d.ts +21 -0
- package/dist/menu/utils/useDisplayContent.js +35 -0
- package/dist/menu/utils/useMenuItemKeyboardNav.js +1 -2
- package/dist/miniTabs/miniTabsHelper.js +17 -7
- package/dist/mobileSheet/components/mobileSheetTitle.d.ts +0 -1
- package/dist/modal/modal.js +17 -7
- package/dist/nav/context/nav.context.d.ts +0 -1
- package/dist/nav/navFooter/navEditFooter/navEditFooter.d.ts +0 -1
- package/dist/nav/navFooter/navFooter.d.ts +1 -1
- package/dist/nav/navFooter/navFooterAction/navFooterAction.d.ts +2 -1
- package/dist/nav/navFooter/navFooterAction/navFooterAction.js +3 -1
- package/dist/nav/navItem/navItem.d.ts +2 -0
- package/dist/nav/navItem/navItem.js +56 -47
- package/dist/nav/navItem/navItemContent.d.ts +19 -0
- package/dist/nav/navItem/navItemContent.js +21 -0
- package/dist/nav/navItem/navItemType.d.ts +7 -0
- package/dist/nav/navItem/navItemType.js +9 -0
- package/dist/nav/utils/navUtils.d.ts +2 -4
- package/dist/nav/utils/navUtils.js +2 -2
- package/dist/overview/overview.d.ts +0 -1
- package/dist/pageHeader/pageHeader.d.ts +1 -1
- package/dist/pageHeader/pageHeaderButton.d.ts +0 -1
- package/dist/pageHeader/pageHeaderHelpers.d.ts +1 -1
- package/dist/pageHeader/pageHeaderMenu.d.ts +0 -1
- package/dist/pagination/paginationArrow.d.ts +0 -1
- package/dist/pill/interfaces/pill.interface.d.ts +0 -1
- package/dist/pillBox/components/pillBoxItem.d.ts +1 -2
- package/dist/popup/popup.js +17 -7
- package/dist/progressIndicator/progressIndicator.d.ts +39 -0
- package/dist/progressIndicator/progressIndicator.js +30 -0
- package/dist/progressIndicator/progressIndicatorUtils.d.ts +12 -0
- package/dist/progressIndicator/progressIndicatorUtils.js +30 -0
- package/dist/radioGroupRaw/radioGroupRaw.js +17 -7
- package/dist/radioGroupRaw/types.d.ts +0 -1
- package/dist/react-chartjs/dateFns/dateFns.js +10 -11
- package/dist/react-chartjs/utils.d.ts +3 -3
- package/dist/react-chartjs/utils.js +8 -9
- package/dist/searchInputRaw/searchInputRaw.js +17 -7
- package/dist/searchInputRaw/types.d.ts +0 -1
- package/dist/selectField/selectField.d.ts +2 -3
- package/dist/selectList/selectList.d.ts +0 -1
- package/dist/selectRaw/hooks/usePopupWidth.js +17 -7
- package/dist/selectRaw/selectRaw.js +20 -7
- package/dist/sidePanel/sidePanelCell/sidePanelCell.d.ts +0 -1
- package/dist/summaries/utils/splitIntoPairs.js +1 -2
- package/dist/summaryTile/summaryTile.js +17 -7
- package/dist/summaryTile/summaryTileTrigger.js +17 -7
- package/dist/table/actions/actionsMenu.d.ts +0 -1
- package/dist/table/children/useTableChildren.d.ts +7 -7
- package/dist/table/detailPanel/interfaces.d.ts +0 -1
- package/dist/table/flexible/columnsList.js +1 -2
- package/dist/table/loading/useLoading.d.ts +10 -10
- package/dist/table/nested/nestedData.d.ts +3 -1
- package/dist/table/nested/useNestedRows.d.ts +2 -2
- package/dist/table/selectable/selectableHeader.d.ts +2 -1
- package/dist/table/selectable/selectableHeader.js +4 -3
- package/dist/table/selectable/useSelectableRows.d.ts +1 -1
- package/dist/table/selectable/useSelectableRows.js +7 -4
- package/dist/table/table.d.ts +16 -1
- package/dist/table/table.js +101 -5
- package/dist/tag/tag.d.ts +19 -0
- package/dist/tag/tag.js +14 -0
- package/dist/textIconButton/textIconButton.js +17 -7
- package/dist/toastRaw/toastRaw.d.ts +1 -1
- package/dist/toastRaw/toastRaw.js +3 -1
- package/dist/toggleButtonRaw/toggleButtonRaw.js +17 -7
- package/dist/toggleButtonRaw/types.d.ts +0 -1
- package/dist/tooltip/tooltip.js +17 -7
- package/dist/tooltipInfo/tooltipInfo.d.ts +0 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/utils/compareElementsUtils/isArraysEqualDeeply.js +1 -2
- package/dist/utils/compareElementsUtils/isElementsEqual.js +2 -2
- package/dist/utils/escapeHtml.js +1 -2
- package/dist/utils/localization/directionContext.d.ts +0 -1
- package/dist/utils/localization/languageContext.d.ts +0 -1
- package/dist/utils/localization/translations/en.json +12 -1
- package/dist/utils/theme/themeContext.d.ts +0 -1
- package/dist/utils/topWindow/topWindowContext.d.ts +0 -1
- package/dist/utils/useFadeComponent.d.ts +0 -1
- package/dist/utils/userFormat/userFormatContext.d.ts +0 -1
- package/dist/waiting/waiting.d.ts +2 -1
- package/dist/waiting/waiting.js +23 -6
- package/esm/alert/banner.d.ts +2 -3
- package/esm/alert/hooks/useAlertState.d.ts +0 -1
- package/esm/banner/bannerMultipLine.d.ts +0 -1
- package/esm/banner/bannerSingleLine.d.ts +0 -1
- package/esm/banner/utils/isSummaryErrorElement.d.ts +1 -2
- package/esm/card/components/content.d.ts +0 -1
- package/esm/chart/accessibleChart/accessibleChart.js +1 -1
- package/esm/chart/accessibleChart/accessibleChartNarrative.d.ts +1 -1
- package/esm/chart/accessibleChart/accessibleChartNarrative.js +8 -2
- package/esm/chart/accessibleChart/generatePieNarrative.d.ts +7 -0
- package/esm/chart/accessibleChart/generatePieNarrative.js +167 -0
- package/esm/chart/accessibleChart/interfaces.d.ts +1 -0
- package/esm/chart/barChart/getDefaultOptions.js +5 -6
- package/esm/chart/barChart.js +147 -50
- package/esm/chart/interfaces.d.ts +0 -1
- package/esm/chart/lineChart/getDefaultOptions.js +5 -6
- package/esm/chart/lineChart/useChartTicks.d.ts +0 -1
- package/esm/chart/lineChart/useSummary.d.ts +7 -8
- package/esm/chart/lineChart.js +162 -59
- package/esm/chart/pieChart.js +169 -76
- package/esm/chart/plugins/linePlugin/linePlugin.js +29 -7
- package/esm/chart/utils/convertDates.d.ts +1 -1
- package/esm/chart/utils/getNiceAxisRange.d.ts +21 -0
- package/esm/chart/utils/getNiceAxisRange.js +72 -0
- package/esm/chart/utils/getRange.js +2 -2
- package/esm/chart/utils/getYAxisMeta.d.ts +2 -5
- package/esm/chart/utils/getYAxisMeta.js +17 -2
- package/esm/chart/utils/getYAxisTickCount.d.ts +15 -0
- package/esm/chart/utils/getYAxisTickCount.js +15 -0
- package/esm/checkboxListWithAction/checkboxListWithAction.d.ts +0 -1
- package/esm/chip/chip.d.ts +0 -1
- package/esm/chip/utils/useChip.d.ts +0 -1
- package/esm/commonHelpers/HOC/reducerLogger/reducerLogger.d.ts +1 -1
- package/esm/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.d.ts +0 -1
- package/esm/commonHelpers/arrowNavigation/hooks/useHoldOnScroll.d.ts +0 -1
- package/esm/commonHelpers/hooks/breakpoints.d.ts +4 -0
- package/esm/commonHelpers/hooks/breakpoints.js +4 -0
- package/esm/commonHelpers/hooks/fetch.reducer.d.ts +1 -1
- package/esm/commonHelpers/hooks/useDebouncedMemo.d.ts +0 -1
- package/esm/commonHelpers/hooks/useDeviceType.js +2 -2
- package/esm/commonHelpers/hooks/useEscape.d.ts +1 -1
- package/esm/commonHelpers/hooks/useGridSize.d.ts +0 -1
- package/esm/commonHelpers/hooks/useMobileOrTablet.d.ts +1 -0
- package/esm/commonHelpers/hooks/useMobileOrTablet.js +17 -0
- package/esm/commonHelpers/hooks/usePillSize.d.ts +0 -1
- package/esm/commonHelpers/hooks/useTablet.js +17 -0
- package/esm/dataFeed/dataFeed.d.ts +1 -1
- package/esm/dataFeed/dataFeed.js +2 -2
- package/esm/dataFeed/dataFeedCell/dataFeedCell.d.ts +3 -1
- package/esm/dataFeed/dataFeedColumnsItems.d.ts +2 -2
- package/esm/dataGrid/cell/cell.d.ts +3 -1
- package/esm/dataGrid/columns/actionsColumn/actionsColumn.d.ts +3 -3
- package/esm/dataGrid/dataGrid.d.ts +13 -1
- package/esm/dataGrid/dataGrid.js +48 -3
- package/esm/dataGrid/emptySearchList/emptySearchList.d.ts +0 -1
- package/esm/dataGrid/row/row.d.ts +3 -1
- package/esm/dataGrid/withActions/withActions.d.ts +1 -1
- package/esm/dataGrid/withFlexibleColumns/withFlexibleColumns.d.ts +1 -1
- package/esm/dataGrid/withLoading/withLoading.d.ts +1 -1
- package/esm/dataGrid/withSelectableRows/withLimitedSelectableRows.d.ts +1 -1
- package/esm/dataGrid/withSelectableRows/withSelectableRows.d.ts +1 -1
- package/esm/dataGrid/withSortableColumns/withSortableColumns.d.ts +1 -1
- package/esm/dialog/dialog.d.ts +0 -1
- package/esm/dropdown/dropdown.js +1 -1
- package/esm/dropdown/useDropdownState.d.ts +0 -1
- package/esm/dropdownRaw/dropdownList.d.ts +3 -2
- package/esm/dropdownRaw/dropdownList.js +14 -42
- package/esm/dropdownRaw/dropdownRaw.js +35 -14
- package/esm/dropdownRaw/stateReducer/stateReducer.d.ts +4 -1
- package/esm/dropdownRaw/stateReducer/stateReducer.js +32 -22
- package/esm/dropdownRaw/stateReducer/stateReducerHelper.d.ts +1 -2
- package/esm/dropdownRaw/stateReducer/stateReducerHelper.js +5 -10
- package/esm/dropdownRaw/types.d.ts +20 -0
- package/esm/feedbackContainer/hooks/useFeedbackAlert.d.ts +0 -1
- package/esm/feedbackContainer/hooks/useFeedbackToast.d.ts +0 -1
- package/esm/filters/components/filtersItem.d.ts +2 -2
- package/esm/filters/components/filtersSearchList.d.ts +0 -1
- package/esm/filters/components/filtersSelect.d.ts +0 -1
- package/esm/filters/components/filtersSelectCompact.d.ts +0 -1
- package/esm/filters/components/filtersSelectListItem.d.ts +0 -1
- package/esm/filters/components/filtersSelectUnfoldingPill.d.ts +0 -1
- package/esm/filters/filtersHelper.d.ts +1 -1
- package/esm/filters/filtersHooks.d.ts +0 -1
- package/esm/filtersBar/components/filtersBarDropdownWithCheckbox/filtersBarDropdownWithCheckbox.js +1 -1
- package/esm/filtersBar/filtersBar.js +2 -2
- package/esm/filtersBar/filtersBarActions/filtersBarActions.d.ts +0 -1
- package/esm/filtersBar/filtersBarInterfaces.d.ts +0 -1
- package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelDropdownWithCheckbox/filtersBarSidePanelDropdownWithCheckbox.d.ts +4 -10
- package/esm/formField/components/formFieldAdditionalInfo.d.ts +0 -1
- package/esm/formField/components/formFieldCounter.d.ts +0 -1
- package/esm/formField/components/formFieldLoading.d.ts +0 -1
- package/esm/formField/components/formFieldSkeleton.d.ts +0 -1
- package/esm/formField/components/formFieldWithLabel.d.ts +0 -1
- package/esm/formField/components/formFieldWithoutLabel.d.ts +0 -1
- package/esm/formField/formField.d.ts +1 -1
- package/esm/formField/hooks/useBanner.d.ts +0 -1
- package/esm/formField/hooks/useDisabled.d.ts +1 -1
- package/esm/formGroup/components/customRow/customRow.d.ts +0 -1
- package/esm/formGroup/hooks/listHooks/useStateToElements.d.ts +0 -1
- package/esm/formGroup/hooks/listHooks/useStateToElements.js +1 -1
- package/esm/formGroup/utils/formGroupProvider.d.ts +0 -1
- package/esm/formGroup/utils/isFormLabel.d.ts +1 -1
- package/esm/formGroupItem/formGroupItem.d.ts +0 -1
- package/esm/formLayout/components/layoutColumn/layoutColum.d.ts +0 -1
- package/esm/formLayout/hooks/useFormButtons.d.ts +1 -1
- package/esm/formLayout/types.d.ts +0 -1
- package/esm/formLayout/utils/attachHeadings.d.ts +1 -1
- package/esm/formLayout/utils/attachSeparators.d.ts +0 -1
- package/esm/formLayout/utils/getChildrenWithCustomColumns.d.ts +1 -2
- package/esm/formLayout/utils/getChildrenWithCustomColumns.js +2 -2
- package/esm/formLayout/utils/getFieldLabel.js +5 -5
- package/esm/formSection/components/actions.d.ts +0 -1
- package/esm/formSection/components/additional.d.ts +0 -1
- package/esm/formSection/utils/isFormSection.d.ts +2 -4
- package/esm/formStepper/components/formStepRaw.d.ts +0 -1
- package/esm/formStepper/formStepper.d.ts +0 -1
- package/esm/formStepper/formStepper.js +5 -5
- package/esm/formStepperButtons/formStepperButtons.js +3 -3
- package/esm/gridLayout/hooks/useStretch.js +1 -1
- package/esm/gridLayout/utils/gridLayoutProvider.d.ts +0 -1
- package/esm/gridLayout/utils/gridLayoutProvider.js +1 -1
- package/esm/gridLayout/utils/isGridItem.d.ts +1 -1
- package/esm/groupsFilter/groupsHelper.d.ts +5 -5
- package/esm/groupsFilterRaw/groupsHelper.d.ts +1 -1
- package/esm/groupsFilterRaw/stateReducer/stateReducer.d.ts +1 -1
- package/esm/groupsFilterRaw/testData.js +1 -2
- package/esm/header/components/collapsedItemsControl/utils/handleCustomMenuWrapper.js +5 -0
- package/esm/header/components/mobileFilterControl/mobileFilterControl.d.ts +0 -1
- package/esm/header/components/mobileSearchControl/mobileSearchControl.d.ts +0 -1
- package/esm/header/headerButton.d.ts +0 -1
- package/esm/header/headerContext.d.ts +1 -2
- package/esm/header/headerHelpers.d.ts +5 -5
- package/esm/header/hooks/useNonFittingElements.d.ts +3 -4
- package/esm/headerTitle/headerTitle.d.ts +0 -1
- package/esm/icons/iconAce.d.ts +3 -0
- package/esm/icons/iconAce.js +8 -0
- package/esm/icons/iconBreak.d.ts +3 -0
- package/esm/icons/iconBreak.js +8 -0
- package/esm/icons/iconChevronStepper.d.ts +3 -0
- package/esm/icons/iconChevronStepper.js +8 -0
- package/esm/icons/iconPotato.d.ts +3 -0
- package/esm/icons/iconPotato.js +8 -0
- package/esm/icons/iconToggleLarge.d.ts +3 -0
- package/esm/icons/iconToggleLarge.js +8 -0
- package/esm/icons/iconToggleSmall.d.ts +3 -0
- package/esm/icons/iconToggleSmall.js +8 -0
- package/esm/icons/iconTrendNeutral.d.ts +3 -0
- package/esm/icons/iconTrendNeutral.js +8 -0
- package/esm/icons/iconTruck.d.ts +3 -0
- package/esm/icons/iconTruck.js +8 -0
- package/esm/index.d.ts +8 -0
- package/esm/index.js +8 -0
- package/esm/layout/layout.d.ts +2 -1
- package/esm/layout/layoutBanner.d.ts +0 -1
- package/esm/lineChart/lineChart.d.ts +1 -0
- package/esm/lineChart/lineChart.js +129 -69
- package/esm/lineChartMini/lineChartMini.d.ts +1 -0
- package/esm/lineChartMini/lineChartMini.js +136 -73
- package/esm/list/itemData/itemData.d.ts +2 -1
- package/esm/list/itemData/itemDataInternal.d.ts +2 -1
- package/esm/list/list.d.ts +0 -1
- package/esm/list/utils/isDataListitem.d.ts +1 -1
- package/esm/list/viewportProvider/viewportContext.d.ts +0 -1
- package/esm/menu/components/controlledMenuList/controlledMenuList.d.ts +2 -4
- package/esm/menu/components/controlledMenuList/controlledMenuList.js +3 -1
- package/esm/menu/utils/useDisplayContent.d.ts +21 -0
- package/esm/menu/utils/useDisplayContent.js +31 -0
- package/esm/mobileSheet/components/mobileSheetTitle.d.ts +0 -1
- package/esm/nav/context/nav.context.d.ts +0 -1
- package/esm/nav/navFooter/navEditFooter/navEditFooter.d.ts +0 -1
- package/esm/nav/navFooter/navFooter.d.ts +1 -1
- package/esm/nav/navFooter/navFooterAction/navFooterAction.d.ts +2 -1
- package/esm/nav/navFooter/navFooterAction/navFooterAction.js +3 -1
- package/esm/nav/navItem/navItem.d.ts +2 -0
- package/esm/nav/navItem/navItem.js +57 -48
- package/esm/nav/navItem/navItemContent.d.ts +19 -0
- package/esm/nav/navItem/navItemContent.js +17 -0
- package/esm/nav/navItem/navItemType.d.ts +7 -0
- package/esm/nav/navItem/navItemType.js +6 -0
- package/esm/nav/utils/navUtils.d.ts +2 -4
- package/esm/overview/overview.d.ts +0 -1
- package/esm/pageHeader/pageHeader.d.ts +1 -1
- package/esm/pageHeader/pageHeaderButton.d.ts +0 -1
- package/esm/pageHeader/pageHeaderHelpers.d.ts +1 -1
- package/esm/pageHeader/pageHeaderMenu.d.ts +0 -1
- package/esm/pagination/paginationArrow.d.ts +0 -1
- package/esm/pill/interfaces/pill.interface.d.ts +0 -1
- package/esm/pillBox/components/pillBoxItem.d.ts +1 -2
- package/esm/progressIndicator/progressIndicator.d.ts +39 -0
- package/esm/progressIndicator/progressIndicator.js +26 -0
- package/esm/progressIndicator/progressIndicatorUtils.d.ts +12 -0
- package/esm/progressIndicator/progressIndicatorUtils.js +25 -0
- package/esm/radioGroupRaw/types.d.ts +0 -1
- package/esm/react-chartjs/utils.d.ts +3 -3
- package/esm/searchInputRaw/types.d.ts +0 -1
- package/esm/selectField/selectField.d.ts +2 -3
- package/esm/selectList/selectList.d.ts +0 -1
- package/esm/selectRaw/selectRaw.js +3 -0
- package/esm/sidePanel/sidePanelCell/sidePanelCell.d.ts +0 -1
- package/esm/table/actions/actionsMenu.d.ts +0 -1
- package/esm/table/children/useTableChildren.d.ts +7 -7
- package/esm/table/detailPanel/interfaces.d.ts +0 -1
- package/esm/table/loading/useLoading.d.ts +10 -10
- package/esm/table/nested/nestedData.d.ts +3 -1
- package/esm/table/nested/useNestedRows.d.ts +2 -2
- package/esm/table/selectable/selectableHeader.d.ts +2 -1
- package/esm/table/selectable/selectableHeader.js +4 -3
- package/esm/table/selectable/useSelectableRows.d.ts +1 -1
- package/esm/table/selectable/useSelectableRows.js +7 -4
- package/esm/table/table.d.ts +16 -1
- package/esm/table/table.js +102 -6
- package/esm/tag/tag.d.ts +19 -0
- package/esm/tag/tag.js +10 -0
- package/esm/testHelpers/geotab-axe/index.d.ts +0 -1
- package/esm/toastRaw/toastRaw.d.ts +1 -1
- package/esm/toastRaw/toastRaw.js +3 -1
- package/esm/toggleButtonRaw/types.d.ts +0 -1
- package/esm/tooltipInfo/tooltipInfo.d.ts +0 -1
- package/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/esm/utils/localization/directionContext.d.ts +0 -1
- package/esm/utils/localization/languageContext.d.ts +0 -1
- package/esm/utils/localization/translations/en.json +12 -1
- package/esm/utils/theme/themeContext.d.ts +0 -1
- package/esm/utils/topWindow/topWindowContext.d.ts +0 -1
- package/esm/utils/useFadeComponent.d.ts +0 -1
- package/esm/utils/userFormat/userFormatContext.d.ts +0 -1
- package/esm/waiting/waiting.d.ts +2 -1
- package/esm/waiting/waiting.js +24 -7
- package/package.json +13 -6
- package/esm/gridLayout/hooks/useTablet.js +0 -20
- /package/dist/{gridLayout → commonHelpers}/hooks/useTablet.d.ts +0 -0
- /package/esm/{gridLayout → commonHelpers}/hooks/useTablet.d.ts +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useCallback, useContext, useMemo, useState } from "react";
|
|
2
|
+
import { topWindowContext } from "../../utils/topWindow/topWindowContext";
|
|
3
|
+
import { getParentWindow } from "../../utils/getParentWindow";
|
|
4
|
+
import { useResize } from "./useResize";
|
|
5
|
+
import { zen } from "../../utils/zen";
|
|
6
|
+
import { Breakpoints } from "./breakpoints";
|
|
7
|
+
const isMobileOrTabletUtil = (width) => width <= Breakpoints.TabletMaxWidth;
|
|
8
|
+
export const useMobileOrTablet = () => {
|
|
9
|
+
const { topWindow } = useContext(topWindowContext);
|
|
10
|
+
const win = useMemo(() => topWindow || getParentWindow(zen), [topWindow]);
|
|
11
|
+
const [value, setValue] = useState(isMobileOrTabletUtil(win.innerWidth));
|
|
12
|
+
const onResize = useCallback(() => {
|
|
13
|
+
setValue(isMobileOrTabletUtil(win.innerWidth));
|
|
14
|
+
}, [win]);
|
|
15
|
+
useResize(onResize, true);
|
|
16
|
+
return value;
|
|
17
|
+
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { IPill } from "../../pill/interfaces/pill.interface";
|
|
3
2
|
import { IPillNonActionable } from "../../pill/interfaces/pillNonActionable.interface";
|
|
4
3
|
interface IPillSize extends Pick<IPill, "size">, Pick<IPillNonActionable, "onClose"> {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useCallback, useContext, useMemo, useState } from "react";
|
|
2
|
+
import { topWindowContext } from "../../utils/topWindow/topWindowContext";
|
|
3
|
+
import { getParentWindow } from "../../utils/getParentWindow";
|
|
4
|
+
import { useResize } from "./useResize";
|
|
5
|
+
import { zen } from "../../utils/zen";
|
|
6
|
+
import { Breakpoints } from "./breakpoints";
|
|
7
|
+
const isTabletUtil = (width) => width > Breakpoints.MobileMaxWidth && width <= Breakpoints.TabletMaxWidth;
|
|
8
|
+
export const useTablet = () => {
|
|
9
|
+
const { topWindow } = useContext(topWindowContext);
|
|
10
|
+
const win = useMemo(() => topWindow || getParentWindow(zen), [topWindow]);
|
|
11
|
+
const [isTablet, setIsTablet] = useState(isTabletUtil(win.innerWidth));
|
|
12
|
+
const onResize = useCallback(() => {
|
|
13
|
+
setIsTablet(isTabletUtil(win.innerWidth));
|
|
14
|
+
}, [win]);
|
|
15
|
+
useResize(onResize, true);
|
|
16
|
+
return isTablet;
|
|
17
|
+
};
|
|
@@ -30,7 +30,7 @@ export interface IDataFeed<T, N = T> extends IDataGrid<T, N> {
|
|
|
30
30
|
}
|
|
31
31
|
export declare const EmptyList: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
|
|
32
32
|
export declare const Footer: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
-
declare const DataFeedInner: <T extends IRowEntity<N>, N extends IEntityWithId>({ entities, columns, feedWrappers, className, expanded, options, description, children, actions, actionsAsync, primaryActions, itemsPerPage, rowClassName, expandedRows, onExpandedChange, activePage, onClick }: IDataFeed<T, N>, ref: ForwardedRef<HTMLElement>) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
declare const DataFeedInner: <T extends IRowEntity<N>, N extends IEntityWithId>({ entities, columns, feedWrappers, className, expanded, options, description, children, actions, actionsAsync, primaryActions, itemsPerPage, rowClassName, expandedRows, onExpandedChange, activePage, onClick, isLoading }: IDataFeed<T, N>, ref: ForwardedRef<HTMLElement>) => import("react/jsx-runtime").JSX.Element;
|
|
34
34
|
export interface IDataFeedStaticProps {
|
|
35
35
|
EmptyList: typeof EmptyList;
|
|
36
36
|
Footer: typeof Footer;
|
package/esm/dataFeed/dataFeed.js
CHANGED
|
@@ -20,7 +20,7 @@ const checkCloseToTheEnd = (feedContainerElt) => {
|
|
|
20
20
|
return distanceToTheBottom < endOfFeedThreshold;
|
|
21
21
|
};
|
|
22
22
|
const FIRST_RENDERED_ROWS = 50;
|
|
23
|
-
const DataFeedInner = ({ entities, columns, feedWrappers, className, expanded, options, description, children, actions, actionsAsync, primaryActions, itemsPerPage = 1000, rowClassName, expandedRows, onExpandedChange, activePage, onClick }, ref) => {
|
|
23
|
+
const DataFeedInner = ({ entities, columns, feedWrappers, className, expanded, options, description, children, actions, actionsAsync, primaryActions, itemsPerPage = 1000, rowClassName, expandedRows, onExpandedChange, activePage, onClick, isLoading }, ref) => {
|
|
24
24
|
const [pages, setPages] = useState(1);
|
|
25
25
|
const data = useMemo(() => entities.slice(0, itemsPerPage * pages), [entities, itemsPerPage, pages]);
|
|
26
26
|
const initialVisibleRows = useMemo(() => data.slice(0, FIRST_RENDERED_ROWS).map(r => r.id), [data]);
|
|
@@ -141,7 +141,7 @@ const DataFeedInner = ({ entities, columns, feedWrappers, className, expanded, o
|
|
|
141
141
|
onExpandedChange,
|
|
142
142
|
onClick
|
|
143
143
|
]);
|
|
144
|
-
return (_jsx("div", { className: "zen-data-grid-wrapper", children: _jsxs("div", { className: classNames(["zen-data-grid", className || ""]), ref: feedRef, onScroll: handleScroll, children: [_jsx("div", { role: "feed", className: "zen-data-grid__feed zen-data-feed", "aria-label": description, "aria-busy":
|
|
144
|
+
return (_jsx("div", { className: "zen-data-grid-wrapper", children: _jsxs("div", { className: classNames(["zen-data-grid", className || ""]), ref: feedRef, onScroll: handleScroll, children: [_jsx("div", { role: "feed", className: "zen-data-grid__feed zen-data-feed", "aria-label": description, "aria-busy": !!isLoading, children: feedItems }), emptyList && data.length === 0 ? emptyList : null, footer] }) }));
|
|
145
145
|
};
|
|
146
146
|
const DataFeed = forwardRef(DataFeedInner);
|
|
147
147
|
DataFeed.EmptyList = EmptyList;
|
|
@@ -15,4 +15,6 @@ export interface IDataFeedCell<T extends object> extends IZenComponentProps {
|
|
|
15
15
|
isNested: boolean;
|
|
16
16
|
onClick?: () => void;
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
declare const FeedCell: <T extends object>({ limited, visibleOnHover, isVisible, title, render, renderWrappers, renderPlaceholder, defaultValue, entity, isNested }: IDataFeedCell<T>) => import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare const DataFeedCell: typeof FeedCell;
|
|
20
|
+
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { IActionWithId } from "../dataGrid/columns/actionsColumn/actionsColumn";
|
|
3
2
|
import { IListColumnStrict } from "../dataGrid/extensions/toBasicColumn";
|
|
4
3
|
import { IRowEntity } from "../dataGrid/row/row";
|
|
@@ -25,5 +24,6 @@ interface IFeedItem<T extends IRowEntity<N>, N extends IEntityWithId> {
|
|
|
25
24
|
primaryActions?: IActionWithId<T>[] | ((e: T, isNested: boolean) => IActionWithId<T>[]);
|
|
26
25
|
onClick?: (id: string) => void;
|
|
27
26
|
}
|
|
28
|
-
|
|
27
|
+
declare const FeedItemInner: <T extends IRowEntity<N>, N extends IEntityWithId>({ columnsList, feedWrappers, expanded, collapsedColumnsQty, visibleColumns, visibleRows, entity, index, className, isRowExpanded, onExpandedChange, actions, actionsAsync, primaryActions, onClick }: IFeedItem<T, N>) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare const FeedItem: typeof FeedItemInner;
|
|
29
29
|
export {};
|
|
@@ -18,4 +18,6 @@ export interface IDataGridCell<T extends IEntityWithId> extends IZenComponentPro
|
|
|
18
18
|
onClick?: () => void;
|
|
19
19
|
isActive?: boolean;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
declare const Cell: <T extends IEntityWithId>({ index, limited, visibleOnHover, isVisible, width, maxWidth, render, renderWrappers, renderPlaceholder, defaultValue, entity, colspan, className, onClick, isActive }: IDataGridCell<T>) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare const DataGridCell: typeof Cell;
|
|
23
|
+
export {};
|
|
@@ -46,8 +46,8 @@ export declare class ActionsColumn<T extends IRowEntity<N>, N extends IEntityWit
|
|
|
46
46
|
constructor(actionsOptions: IActionsColumnOptions<T | N>);
|
|
47
47
|
get options(): IActionsColumnOptions<T | N>;
|
|
48
48
|
set options(actionsOptions: IActionsColumnOptions<T | N>);
|
|
49
|
-
get columnActions(): IActionWithId<N | T> | ((entity: T, isNested: boolean) =>
|
|
50
|
-
get columnActionsAsync(): ((entity: T, isNested: boolean) => PromiseLike<
|
|
51
|
-
get columnPrimaryActions(): IActionWithId<N | T>[] | ((entity:
|
|
49
|
+
get columnActions(): IActionWithId<N | T> | ((entity: T, isNested: boolean) => React.JSX.Element) | undefined;
|
|
50
|
+
get columnActionsAsync(): ((entity: T, isNested: boolean) => PromiseLike<React.JSX.Element>) | undefined;
|
|
51
|
+
get columnPrimaryActions(): IActionWithId<N | T>[] | ((entity: T | N, isNested: boolean) => IAction<T>[]) | undefined;
|
|
52
52
|
}
|
|
53
53
|
export {};
|
|
@@ -17,6 +17,18 @@ export interface IDataGrid<T, N = T> extends Omit<IZenComponentProps, "children"
|
|
|
17
17
|
onExpandedChange?: (id: string, isExpanded: boolean) => void;
|
|
18
18
|
active?: string | undefined;
|
|
19
19
|
onClick?: (id: string) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Called when the user scrolls within ~100 px of the grid bottom (once per approach to the bottom).
|
|
22
|
+
* Also fires after each `entities` change while the grid is already near the bottom — this drives
|
|
23
|
+
* viewport-fill on initial load and greedy load-ahead on appends, so it can fire without new scroll
|
|
24
|
+
* input. The caller is responsible for preventing concurrent fetches (e.g. ignore it while `isLoading`).
|
|
25
|
+
*/
|
|
26
|
+
onScrollEnd?: () => void;
|
|
27
|
+
/**
|
|
28
|
+
* When true, sets `aria-busy` on the grid `<table>` for assistive technology while a fetch is in
|
|
29
|
+
* flight. Callers should also treat it as the guard signal for `onScrollEnd` (skip re-entrant fetches).
|
|
30
|
+
*/
|
|
31
|
+
isLoading?: boolean;
|
|
20
32
|
}
|
|
21
33
|
export declare const NOT_INTERACTIVE_MODIFIER = "zen-data-grid--not-interactive";
|
|
22
34
|
export declare const DRAGGING_MODIFIER = "zen-data-grid--dragging";
|
|
@@ -25,7 +37,7 @@ export declare const VERTICAL_SCROLL_MODIFIER = "zen-data-grid--vertical-scroll"
|
|
|
25
37
|
export declare const MIN_CELL_WIDTH = 100;
|
|
26
38
|
export declare const EmptyList: FC<PropsWithChildren>;
|
|
27
39
|
export declare const Footer: FC<PropsWithChildren>;
|
|
28
|
-
declare const DataGridInner: <T extends IRowEntity<N>, N extends IEntityWithId = T>({ entities, columns, className, description, emptyCellTitle, children, rowClassName, expandedRows, onExpandedChange, active, onClick }: IDataGrid<T, N>, ref: ForwardedRef<HTMLElement>) => import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
declare const DataGridInner: <T extends IRowEntity<N>, N extends IEntityWithId = T>({ entities, columns, className, description, emptyCellTitle, children, rowClassName, expandedRows, onExpandedChange, active, onClick, onScrollEnd, isLoading }: IDataGrid<T, N>, ref: ForwardedRef<HTMLElement>) => import("react/jsx-runtime").JSX.Element;
|
|
29
41
|
export interface IDataGridStaticProps {
|
|
30
42
|
EmptyList: typeof EmptyList;
|
|
31
43
|
Footer: typeof Footer;
|
package/esm/dataGrid/dataGrid.js
CHANGED
|
@@ -69,6 +69,7 @@ export const Footer = ({
|
|
|
69
69
|
children: children
|
|
70
70
|
});
|
|
71
71
|
const FIRST_RENDERED_ROWS = 100;
|
|
72
|
+
const SCROLL_END_THRESHOLD = 100;
|
|
72
73
|
const DataGridInner = ({
|
|
73
74
|
entities,
|
|
74
75
|
columns,
|
|
@@ -80,7 +81,9 @@ const DataGridInner = ({
|
|
|
80
81
|
expandedRows,
|
|
81
82
|
onExpandedChange,
|
|
82
83
|
active,
|
|
83
|
-
onClick
|
|
84
|
+
onClick,
|
|
85
|
+
onScrollEnd,
|
|
86
|
+
isLoading
|
|
84
87
|
}, ref) => {
|
|
85
88
|
const {
|
|
86
89
|
translate
|
|
@@ -96,6 +99,8 @@ const DataGridInner = ({
|
|
|
96
99
|
const gridRef = useRef(null);
|
|
97
100
|
const bodyRef = useRef(null);
|
|
98
101
|
const lazyRenderTimerRef = useRef(0);
|
|
102
|
+
const scrollEndFiredRef = useRef(false);
|
|
103
|
+
const prevEntitiesRef = useRef(entities);
|
|
99
104
|
const rowsMap = useMemo(() => new Map(entities.map(entity => [entity.id, entity])), [entities]);
|
|
100
105
|
const emptyList = useMemo(() => Children.toArray(children).find(child => child.type === EmptyList), [children]);
|
|
101
106
|
const footer = useMemo(() => Children.toArray(children).find(child => child.type === Footer), [children]);
|
|
@@ -173,10 +178,48 @@ const DataGridInner = ({
|
|
|
173
178
|
setVerticalScrollApplied(scrollTop > 0);
|
|
174
179
|
}
|
|
175
180
|
}, [horizontalScrollApplied, setHorizontalScrollApplied, verticalScrollApplied, setVerticalScrollApplied]);
|
|
181
|
+
const checkScrollEnd = useCallback(() => {
|
|
182
|
+
const grid = gridRef.current;
|
|
183
|
+
if (!grid || !onScrollEnd) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// scrollHeight is 0 before layout (or for an empty grid) — nothing to measure yet.
|
|
187
|
+
if (grid.scrollHeight === 0) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const distanceToTheBottom = grid.scrollHeight - grid.scrollTop - grid.clientHeight;
|
|
191
|
+
if (distanceToTheBottom < SCROLL_END_THRESHOLD) {
|
|
192
|
+
if (!scrollEndFiredRef.current) {
|
|
193
|
+
scrollEndFiredRef.current = true;
|
|
194
|
+
onScrollEnd();
|
|
195
|
+
}
|
|
196
|
+
} else {
|
|
197
|
+
scrollEndFiredRef.current = false;
|
|
198
|
+
}
|
|
199
|
+
}, [onScrollEnd]);
|
|
176
200
|
const handleScroll = useCallback(() => {
|
|
177
201
|
updateScroll();
|
|
178
202
|
scheduleLazyRender();
|
|
179
|
-
|
|
203
|
+
checkScrollEnd();
|
|
204
|
+
}, [updateScroll, scheduleLazyRender, checkScrollEnd]);
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
// On a data change (load-more append, or a sort/filter that replaces the list):
|
|
207
|
+
// re-arm the once-per-approach guard so a stale "already fired" flag can't suppress the
|
|
208
|
+
// next trigger, then re-check fit. The re-check covers the viewport-fit case: if the new
|
|
209
|
+
// content doesn't fill the viewport there is no scrollbar and no scroll event, so the next
|
|
210
|
+
// page must be requested here. Resize alone intentionally does not run this (see useResize).
|
|
211
|
+
if (prevEntitiesRef.current !== entities) {
|
|
212
|
+
prevEntitiesRef.current = entities;
|
|
213
|
+
scrollEndFiredRef.current = false;
|
|
214
|
+
}
|
|
215
|
+
// Intentionally unconditional: this covers BOTH viewport-fill (new content too short to
|
|
216
|
+
// scroll) AND greedy load-ahead (user parked near the bottom while a page lands, so the
|
|
217
|
+
// next page is requested without further scroll input). Consequence: onScrollEnd is NOT
|
|
218
|
+
// strictly "once per manual approach" — it keeps firing while near the bottom until
|
|
219
|
+
// hasMore is false or the user scrolls away. Callers MUST guard with their own isLoading
|
|
220
|
+
// to avoid concurrent fetches (documented on the onScrollEnd prop).
|
|
221
|
+
checkScrollEnd();
|
|
222
|
+
}, [entities, checkScrollEnd]);
|
|
180
223
|
const getCellParams = useCallback(columnIndex => {
|
|
181
224
|
const defaultWidth = listOfDefaultWidthColumns[columnIndex];
|
|
182
225
|
const minWidth = listOfMinWidthColumns[columnIndex];
|
|
@@ -239,7 +282,8 @@ const DataGridInner = ({
|
|
|
239
282
|
const body = useMemo(() => entities.map((entity, entityIndex) => renderRow(entity, entityIndex, entities.length)), [entities, renderRow]);
|
|
240
283
|
const headerContent = useMemo(() => columnsList.map((column, index) => renderHeaderCell(column, index)), [columnsList, renderHeaderCell]);
|
|
241
284
|
useResize(() => {
|
|
242
|
-
|
|
285
|
+
updateScroll();
|
|
286
|
+
scheduleLazyRender();
|
|
243
287
|
}, true);
|
|
244
288
|
const gridClasses = classNames(["zen-data-grid", className, horizontalScrollApplied ? HORIZONTAL_SCROLL_MODIFIER : "", verticalScrollApplied ? VERTICAL_SCROLL_MODIFIER : ""]);
|
|
245
289
|
return _jsx("div", {
|
|
@@ -252,6 +296,7 @@ const DataGridInner = ({
|
|
|
252
296
|
children: [_jsxs("table", {
|
|
253
297
|
className: "zen-data-grid__table",
|
|
254
298
|
"aria-label": description,
|
|
299
|
+
"aria-busy": !!isLoading,
|
|
255
300
|
role: isTreeGrid ? "treegrid" : undefined,
|
|
256
301
|
children: [_jsx("thead", {
|
|
257
302
|
className: "zen-data-grid__header",
|
|
@@ -20,4 +20,6 @@ export interface IDataGridRow<T extends IRowEntity<N>, N extends IEntityWithId>
|
|
|
20
20
|
onClick?: (id: string) => void;
|
|
21
21
|
}
|
|
22
22
|
export declare const MIN_CELL_WIDTH = 100;
|
|
23
|
-
|
|
23
|
+
declare const Row: <T extends IRowEntity<N>, N extends IEntityWithId = T>({ id, entity, columns, visibleRows, flexibleColumnWidth, isLastRow, className, expanded, onExpandedChange, isTreeGrid, ariaPosinset, ariaSetsize, onClick, isActive, active }: IDataGridRow<T, N>) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare const DataGridRow: typeof Row;
|
|
25
|
+
export {};
|
|
@@ -7,7 +7,7 @@ export interface IActionColumnsProps<T extends IEntityWithId> {
|
|
|
7
7
|
columns: IListColumn<T, T>[];
|
|
8
8
|
ref?: RefObject<HTMLElement | null>;
|
|
9
9
|
}
|
|
10
|
-
export declare const withActions: <T extends IEntityWithId, P extends IDataGrid<T
|
|
10
|
+
export declare const withActions: <T extends IEntityWithId, P extends IDataGrid<T>>(DataGridComponent: ComponentType<P>) => {
|
|
11
11
|
(props: IActionColumnsProps<T> & P): import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
displayName: string;
|
|
13
13
|
};
|
|
@@ -23,7 +23,7 @@ export interface IFlexibleColumnsListProps<T> {
|
|
|
23
23
|
ref?: RefObject<HTMLElement | null>;
|
|
24
24
|
}
|
|
25
25
|
export declare const withFlexibleColumns: {
|
|
26
|
-
<T extends IEntityWithId, P extends IDataGrid<T
|
|
26
|
+
<T extends IEntityWithId, P extends IDataGrid<T>>(DataGridComponent: ComponentType<P>): {
|
|
27
27
|
(props: IFlexibleColumnsListProps<T> & P): import("react/jsx-runtime").JSX.Element;
|
|
28
28
|
displayName: string;
|
|
29
29
|
};
|
|
@@ -19,7 +19,7 @@ export interface IWithLoadingProps<T> {
|
|
|
19
19
|
export interface ILoadingEntity extends IEntityWithId {
|
|
20
20
|
isLoading?: boolean;
|
|
21
21
|
}
|
|
22
|
-
export declare const withLoading: <T extends IEntityWithId, P extends IDataGrid<T
|
|
22
|
+
export declare const withLoading: <T extends IEntityWithId, P extends IDataGrid<T>>(DataGridComponent: ComponentType<P>) => {
|
|
23
23
|
(props: IWithLoadingProps<T> & Partial<Pick<ISelectableRowsList<T, T>, "selectMode">> & P): import("react/jsx-runtime").JSX.Element;
|
|
24
24
|
displayName: string;
|
|
25
25
|
};
|
|
@@ -12,7 +12,7 @@ export interface ILimitedSelectableRowsList<T extends IEntityWithId> extends ISe
|
|
|
12
12
|
/**
|
|
13
13
|
* @deprecated Please use withSelectableRows with options checkboxVisible/checkboxDisabled instead
|
|
14
14
|
*/
|
|
15
|
-
export declare const withLimitedSelectableRows: <T extends IEntityWithId, P extends IDataGrid<T
|
|
15
|
+
export declare const withLimitedSelectableRows: <T extends IEntityWithId, P extends IDataGrid<T>>(DataGridComponent: ComponentType<P>) => {
|
|
16
16
|
(props: ILimitedSelectableRowsList<T> & P): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
displayName: string;
|
|
18
18
|
};
|
|
@@ -33,7 +33,7 @@ export interface ISelectableRowsList<T, N = T> {
|
|
|
33
33
|
ref?: RefObject<HTMLElement | null>;
|
|
34
34
|
}
|
|
35
35
|
export declare const getSelections: (selections: ISelectableRowsListSelections | undefined) => Set<string>;
|
|
36
|
-
export declare const withSelectableRows: <T extends IEntityWithId, P extends IDataGrid<T
|
|
36
|
+
export declare const withSelectableRows: <T extends IEntityWithId, P extends IDataGrid<T>>(DataGridComponent: ComponentType<P>) => {
|
|
37
37
|
(props: ISelectableRowsList<T, T> & P): import("react/jsx-runtime").JSX.Element;
|
|
38
38
|
displayName: string;
|
|
39
39
|
translations: string[];
|
|
@@ -18,7 +18,7 @@ export interface ISortableColumnsListProps<T> {
|
|
|
18
18
|
ref?: RefObject<HTMLElement | null>;
|
|
19
19
|
}
|
|
20
20
|
export declare const withSortableColumns: {
|
|
21
|
-
<T extends IEntityWithId, P extends IDataGrid<T
|
|
21
|
+
<T extends IEntityWithId, P extends IDataGrid<T>>(DataGridComponent: ComponentType<P>): (props: ISortableColumnsListProps<T> & P) => import("react/jsx-runtime").JSX.Element;
|
|
22
22
|
translations: string[];
|
|
23
23
|
};
|
|
24
24
|
export {};
|
package/esm/dialog/dialog.d.ts
CHANGED
package/esm/dropdown/dropdown.js
CHANGED
|
@@ -20,4 +20,4 @@ export const Dropdown = (_a) => {
|
|
|
20
20
|
var props = __rest(_a, []);
|
|
21
21
|
return _jsx(DropDownFormField, Object.assign({}, props));
|
|
22
22
|
};
|
|
23
|
-
export const TRANSLATIONS = ["Filter by group", "Open filter", "Clear search", "Select all", "
|
|
23
|
+
export const TRANSLATIONS = ["Filter by group", "Open filter", "Clear search", "Select all", "Clear", "Back", "No data"];
|
|
@@ -13,7 +13,8 @@ export interface IDropdownList extends IZenComponentProps {
|
|
|
13
13
|
onSelect: (id: string) => void;
|
|
14
14
|
onSingleSelect: (reset: boolean, selected?: string) => void;
|
|
15
15
|
backButtonName?: string;
|
|
16
|
-
|
|
16
|
+
isSelectAllActive?: boolean;
|
|
17
|
+
shouldBlockItems?: boolean;
|
|
17
18
|
listData: ICheckboxListWithActionOption[] | ISelectListItem[];
|
|
18
19
|
isWithFooter: boolean;
|
|
19
20
|
width?: number;
|
|
@@ -39,6 +40,6 @@ interface IDropdownEmptyList extends Pick<IDropdownList, "className" | "width" |
|
|
|
39
40
|
hasError: boolean;
|
|
40
41
|
}
|
|
41
42
|
export declare const EmptyList: ({ className, width, onClearClick, onApplyClick, onCancelClick, hasApplyButton, isApplyDisabled, isClearButtonDisabled, isWithFooter, hasError }: IDropdownEmptyList) => import("react/jsx-runtime").JSX.Element;
|
|
42
|
-
export declare const DropdownList: ({ onBackButtonClick, onSelectAllClick, onClearClick, onApplyClick, onCancelClick, onChange, onSelect, onSingleSelect, listData,
|
|
43
|
+
export declare const DropdownList: ({ onBackButtonClick, onSelectAllClick, onClearClick, onApplyClick, onCancelClick, onChange, onSelect, onSingleSelect, listData, isSelectAllActive, shouldBlockItems, backButtonName, width, minWidth, isSelectAllButtonDisable, hasSelectAllButton, filterName, isMultiselect, hasApplyButton, isApplyDisabled, isClearButtonDisabled, activeValue, forceSelection, isWithFooter, isMobile, handleCheckboxChange, checkboxLabel, isChecked, listElementRef, listId }: IDropdownList) => import("react/jsx-runtime").JSX.Element;
|
|
43
44
|
export declare const TRANSLATIONS: string[];
|
|
44
45
|
export {};
|
|
@@ -178,39 +178,6 @@ injectString("ka-GE", "Apply", "\u10D2\u10D0\u10DB\u10DD\u10E7\u10D4\u10DC\u10D4
|
|
|
178
178
|
injectString("el-GR", "Apply", "\u0395\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE");
|
|
179
179
|
injectString("et-EE", "Apply", "Rakenda");
|
|
180
180
|
injectString("bg-BG", "Apply", "\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435");
|
|
181
|
-
injectString("cs", "Deselect all", "Zru\u0161it v\xFDb\u011Br v\u0161ech");
|
|
182
|
-
injectString("da-DK", "Deselect all", "Frav\xE6lg alle");
|
|
183
|
-
injectString("de", "Deselect all", "Auswahl f\xFCr alle aufheben");
|
|
184
|
-
injectString("en", "Deselect all", "Deselect all");
|
|
185
|
-
injectString("es", "Deselect all", "Deseleccionar todo");
|
|
186
|
-
injectString("fi-FI", "Deselect all", "Poista kaikki valinnat");
|
|
187
|
-
injectString("fr", "Deselect all", "D\xE9s\xE9lectionner tout");
|
|
188
|
-
injectString("fr-FR", "Deselect all", "D\xE9s\xE9lectionner tout");
|
|
189
|
-
injectString("hu-HU", "Deselect all", "Ne v\xE1lassz ki semmit.");
|
|
190
|
-
injectString("id", "Deselect all", "Batalkan pilih semua");
|
|
191
|
-
injectString("it", "Deselect all", "Deselezionare tutto");
|
|
192
|
-
injectString("ja", "Deselect all", "\u3059\u3079\u3066\u3092\u9078\u629E\u89E3\u9664");
|
|
193
|
-
injectString("ko-KR", "Deselect all", "\uBAA8\uB450 \uC120\uD0DD \uCDE8\uC18C");
|
|
194
|
-
injectString("ms", "Deselect all", "Nyahpilih semua");
|
|
195
|
-
injectString("nb-NO", "Deselect all", "Fjern alle valg");
|
|
196
|
-
injectString("nl", "Deselect all", "Alles deselecteren");
|
|
197
|
-
injectString("pl", "Deselect all", "Usu\u0144 wyb\xF3r wszystkich");
|
|
198
|
-
injectString("pt-BR", "Deselect all", "Desmarcar tudo");
|
|
199
|
-
injectString("pt-PT", "Deselect all", "Desmarcar tudo");
|
|
200
|
-
injectString("sk-SK", "Deselect all", "Zru\u0161 v\xFDber v\u0161etk\xFDch.");
|
|
201
|
-
injectString("sv", "Deselect all", "Avmarkera alla");
|
|
202
|
-
injectString("th", "Deselect all", "\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\u0E01\u0E32\u0E23\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E17\u0E31\u0E49\u0E07\u0E2B\u0E21\u0E14");
|
|
203
|
-
injectString("tr", "Deselect all", "T\xFCm\xFCn\xFCn se\xE7imini iptal et");
|
|
204
|
-
injectString("zh-Hans", "Deselect all", "\u53D6\u6D88\u5168\u9009");
|
|
205
|
-
injectString("zh-TW", "Deselect all", "\u53D6\u6D88\u5168\u9078");
|
|
206
|
-
injectString("ro-RO", "Deselect all", "Deselecta\u021Bi tot");
|
|
207
|
-
injectString("ar", "Deselect all", "\u0625\u0644\u063A\u0627\u0621 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644");
|
|
208
|
-
injectString("lt-LT", "Deselect all", "At\u017Eym\u0117ti visus");
|
|
209
|
-
injectString("lv-LV", "Deselect all", "Atcelt visas atlases");
|
|
210
|
-
injectString("ka-GE", "Deselect all", "\u10E7\u10D5\u10D4\u10DA\u10D0\u10E1 \u10DB\u10DD\u10EE\u10E1\u10DC\u10D0");
|
|
211
|
-
injectString("el-GR", "Deselect all", "\u039A\u03B1\u03C4\u03AC\u03C1\u03B3\u03B7\u03C3\u03B7 \u03CC\u03BB\u03C9\u03BD \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03CE\u03BD");
|
|
212
|
-
injectString("et-EE", "Deselect all", "T\xFChista k\xF5ik valikud");
|
|
213
|
-
injectString("bg-BG", "Deselect all", "\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0432\u0441\u0438\u0447\u043A\u0438 \u0438\u0437\u0431\u043E\u0440\u0438");
|
|
214
181
|
injectString("cs", "Select all", "Vybrat v\u0161e");
|
|
215
182
|
injectString("da-DK", "Select all", "V\xE6lg alle");
|
|
216
183
|
injectString("de", "Select all", "Alle ausw\xE4hlen");
|
|
@@ -373,7 +340,8 @@ export const DropdownList = ({
|
|
|
373
340
|
onSelect,
|
|
374
341
|
onSingleSelect,
|
|
375
342
|
listData,
|
|
376
|
-
|
|
343
|
+
isSelectAllActive,
|
|
344
|
+
shouldBlockItems,
|
|
377
345
|
backButtonName,
|
|
378
346
|
width,
|
|
379
347
|
minWidth,
|
|
@@ -402,7 +370,7 @@ export const DropdownList = ({
|
|
|
402
370
|
const internalListId = useId();
|
|
403
371
|
const selectListId = listId || internalListId;
|
|
404
372
|
const handleSelectAllClick = () => {
|
|
405
|
-
onSelectAllClick(
|
|
373
|
+
onSelectAllClick(!!isSelectAllActive);
|
|
406
374
|
};
|
|
407
375
|
const handleBackButtonKeyDown = useCallback(event => {
|
|
408
376
|
if (event.key === "ArrowLeft") {
|
|
@@ -430,13 +398,14 @@ export const DropdownList = ({
|
|
|
430
398
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
431
399
|
forceSelection ? onSingleSelect(false, newActiveEl || activeValue) : onSingleSelect(false, newActiveEl);
|
|
432
400
|
}, [activeValue, forceSelection, onSingleSelect]);
|
|
433
|
-
const selectButtonLabel =
|
|
434
|
-
const getActionButton = (label, title, icon, isDisabled, clickHandler, size, onKeyDown) => _jsx("button", {
|
|
401
|
+
const selectButtonLabel = translate("Select all");
|
|
402
|
+
const getActionButton = (label, title, icon, isDisabled, clickHandler, size, onKeyDown, isSelected) => _jsx("button", {
|
|
435
403
|
type: "button",
|
|
436
404
|
disabled: isDisabled,
|
|
437
405
|
onClick: clickHandler,
|
|
438
406
|
onKeyDown: onKeyDown,
|
|
439
|
-
|
|
407
|
+
"aria-pressed": isSelected,
|
|
408
|
+
className: classNames(["zen-dropdown-list__item zen-dropdown-list__item--interactive zen-dropdown-list__action-button zen-dropdown-list__action-button-back", isSelected ? "zen-dropdown-list__action-button--selected" : ""]),
|
|
440
409
|
title: title,
|
|
441
410
|
children: _jsxs(_Fragment, {
|
|
442
411
|
children: [React.createElement(icon, {
|
|
@@ -472,11 +441,14 @@ export const DropdownList = ({
|
|
|
472
441
|
});
|
|
473
442
|
return values;
|
|
474
443
|
};
|
|
444
|
+
const multiselectOptions = shouldBlockItems ? listData.map(item => Object.assign(Object.assign({}, item), {
|
|
445
|
+
blocked: true
|
|
446
|
+
})) : listData;
|
|
475
447
|
return _jsx("div", {
|
|
476
448
|
className: "zen-dropdown-list__elements",
|
|
477
449
|
ref: listElementRef,
|
|
478
450
|
children: isMultiselect ? _jsx(CheckboxListWithAction, {
|
|
479
|
-
options:
|
|
451
|
+
options: multiselectOptions,
|
|
480
452
|
label: "",
|
|
481
453
|
onChange: handleChange,
|
|
482
454
|
onClick: handleClick
|
|
@@ -492,7 +464,7 @@ export const DropdownList = ({
|
|
|
492
464
|
value: createValue(listData, activeValue)
|
|
493
465
|
})
|
|
494
466
|
});
|
|
495
|
-
}, [listElementRef, isMultiselect, listData, handleChange, handleClick, handleSingleChange, translate, selectListId, forceSelection, activeValue]);
|
|
467
|
+
}, [listElementRef, isMultiselect, shouldBlockItems, listData, handleChange, handleClick, handleSingleChange, translate, selectListId, forceSelection, activeValue]);
|
|
496
468
|
return _jsxs("div", Object.assign({
|
|
497
469
|
className: classNames(["zen-dropdown-list", driveComponentClass || ""])
|
|
498
470
|
}, styleWidth, {
|
|
@@ -510,7 +482,7 @@ export const DropdownList = ({
|
|
|
510
482
|
}) : null, backButtonName ? _jsx("div", {
|
|
511
483
|
className: "zen-dropdown-list__item-wrapper",
|
|
512
484
|
children: getActionButton(backButtonName, translate("Back"), IconBackArrow, false, onBackButtonClick, "large", handleBackButtonKeyDown)
|
|
513
|
-
}) : null, hasSelectAllButton ? getActionButton(selectButtonLabel, selectButtonLabel, IconCheckRadio, !!isSelectAllButtonDisable, handleSelectAllClick, isDrive ? "huger" : "huge") : null, listDataComponent, isWithFooter ? _jsxs("div", {
|
|
485
|
+
}) : null, hasSelectAllButton ? getActionButton(selectButtonLabel, selectButtonLabel, IconCheckRadio, !!isSelectAllButtonDisable, handleSelectAllClick, isDrive ? "huger" : "huge", undefined, isSelectAllActive) : null, listDataComponent, isWithFooter ? _jsxs("div", {
|
|
514
486
|
className: "zen-dropdown-list__footer",
|
|
515
487
|
children: [_jsx(Button, {
|
|
516
488
|
onClick: isMultiselect ? onClearClick : handleClearClick,
|
|
@@ -538,4 +510,4 @@ export const DropdownList = ({
|
|
|
538
510
|
}) : null]
|
|
539
511
|
}));
|
|
540
512
|
};
|
|
541
|
-
export const TRANSLATIONS = ["Select all", "
|
|
513
|
+
export const TRANSLATIONS = ["Select all", "Clear", "Back", "No data"];
|
|
@@ -8,7 +8,7 @@ import { getInitialState, stateReducer, ROOT_GROUP_ID } from "./stateReducer/sta
|
|
|
8
8
|
import { StateActionType } from "./stateReducer/stateActionType";
|
|
9
9
|
import { FOCUSABLE_SELECTOR } from "../utils/focusableSelector";
|
|
10
10
|
import { useEscape } from "../commonHelpers/hooks/useEscape";
|
|
11
|
-
import { checkIsDataProblem, compareObjectsArrays, compareStringsArrays, createListDataOptions, getDataForChange, getListDataWithDisabled, getSelectedCount, getStringFromAllSelected, getStringFromSelected,
|
|
11
|
+
import { checkIsDataProblem, compareObjectsArrays, compareStringsArrays, createListDataOptions, getDataForChange, getListDataWithDisabled, getSelectedCount, getStringFromAllSelected, getStringFromSelected, isAllItemsHasOneParent, isEveryItemSelected, prepareSelectedIdsToItems, sortDropdownItemArray } from "./dropdownHelper";
|
|
12
12
|
import { DropdownTrigger } from "./dropdownTrigger";
|
|
13
13
|
import { isFocusable } from "../dialog/dialogHelpers";
|
|
14
14
|
import { useLanguage } from "../utils/localization/useLanguage";
|
|
@@ -109,7 +109,10 @@ export const DropdownRaw = props => {
|
|
|
109
109
|
mobileSheetStackingClassName,
|
|
110
110
|
isError,
|
|
111
111
|
firstParentNodeIsVisible,
|
|
112
|
-
dataAnalyticsId
|
|
112
|
+
dataAnalyticsId,
|
|
113
|
+
hideSelectAllOnSearch = false,
|
|
114
|
+
blockItemsOnSelectAll = false,
|
|
115
|
+
autoPromoteSelectAll = false
|
|
113
116
|
} = props;
|
|
114
117
|
const {
|
|
115
118
|
isFormSection
|
|
@@ -147,7 +150,7 @@ export const DropdownRaw = props => {
|
|
|
147
150
|
const isQueryMode = useMemo(() => typeof getData === "undefined" && typeof dataItems === "undefined", [getData, dataItems]);
|
|
148
151
|
const isCheckboxMode = useMemo(() => checkboxLabel && typeof value === "object" && "isChecked" in value && typeof value.isChecked === "boolean" || false, [checkboxLabel, value]);
|
|
149
152
|
const [initialInChecked] = useState(isCheckboxMode ? value.isChecked : undefined);
|
|
150
|
-
const [state, dispatchState] = useReducer(stateReducer, getInitialState(isFullSelectionMode, isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : dataItems || [], isFullSelectionMode || isCheckboxMode ? value.selected : value, listLimit, defaultValue ? isFullSelectionMode || isCheckboxMode ? defaultValue.selected : defaultValue : undefined, isFullSelectionMode ? value.isAllSelected : undefined, defaultValue ? isFullSelectionMode ? defaultValue.isAllSelected : undefined : undefined, isCheckboxMode ? value.isChecked : undefined, isCheckboxMode && defaultValue ? defaultValue.isChecked : undefined, firstParentNodeIsVisible));
|
|
153
|
+
const [state, dispatchState] = useReducer(stateReducer, getInitialState(isFullSelectionMode, isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : dataItems || [], isFullSelectionMode || isCheckboxMode ? value.selected : value, listLimit, defaultValue ? isFullSelectionMode || isCheckboxMode ? defaultValue.selected : defaultValue : undefined, isFullSelectionMode ? value.isAllSelected : undefined, defaultValue ? isFullSelectionMode ? defaultValue.isAllSelected : undefined : undefined, isCheckboxMode ? value.isChecked : undefined, isCheckboxMode && defaultValue ? defaultValue.isChecked : undefined, firstParentNodeIsVisible, autoPromoteSelectAll));
|
|
151
154
|
const chipStatus = useChipStatus();
|
|
152
155
|
const isMobile = useMobile();
|
|
153
156
|
const popupId = useId();
|
|
@@ -174,6 +177,7 @@ export const DropdownRaw = props => {
|
|
|
174
177
|
const getNamedItemsHasBeenCalled = useRef(false);
|
|
175
178
|
const selectedItemsLoader = useRef(undefined);
|
|
176
179
|
const previousMapDataItems = useRef(isQueryMode ? (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [] : !getData && (dataItems === null || dataItems === void 0 ? void 0 : dataItems.length) ? dataItems : []);
|
|
180
|
+
const previousFetchStateData = useRef(isQueryMode ? fetchState === null || fetchState === void 0 ? void 0 : fetchState.data : undefined);
|
|
177
181
|
const prevIsLoading = useRef(isLoading);
|
|
178
182
|
const prevIsChecked = useRef(isCheckboxMode ? value.isChecked : undefined);
|
|
179
183
|
const currentAllSelected = useMemo(() => state.isNestedList || !multiselect || !isFullSelectionMode ? undefined : state.isAllSelected, [state.isNestedList, state.isAllSelected, multiselect, isFullSelectionMode]);
|
|
@@ -380,7 +384,9 @@ export const DropdownRaw = props => {
|
|
|
380
384
|
}, [handleClose]);
|
|
381
385
|
const memoizedAllowClosing = useMemo(() => state.currentId === undefined || state.currentId === state.rootId, [state.currentId, state.rootId]);
|
|
382
386
|
const handleSingleSelection = useCallback((reset, selected) => {
|
|
383
|
-
|
|
387
|
+
var _a, _b;
|
|
388
|
+
const isLeaf = !!selected && !((_b = (_a = state.groupsMap[selected]) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length);
|
|
389
|
+
const shouldBeClosed = !hasApplyButton && (memoizedAllowClosing || isLeaf) && (reset || !!selected);
|
|
384
390
|
dispatchState({
|
|
385
391
|
type: StateActionType.ChangeSingleSelection,
|
|
386
392
|
payload: {
|
|
@@ -393,7 +399,7 @@ export const DropdownRaw = props => {
|
|
|
393
399
|
type: StateActionType.SetInputValue,
|
|
394
400
|
payload: ""
|
|
395
401
|
});
|
|
396
|
-
}, [handleEscape, hasApplyButton, memoizedAllowClosing]);
|
|
402
|
+
}, [handleEscape, hasApplyButton, memoizedAllowClosing, state.groupsMap]);
|
|
397
403
|
const handleSelectAllClick = useCallback(isAllSelect => {
|
|
398
404
|
if (isFullSelectionMode) {
|
|
399
405
|
dispatchState({
|
|
@@ -529,8 +535,12 @@ export const DropdownRaw = props => {
|
|
|
529
535
|
payload: undefined
|
|
530
536
|
});
|
|
531
537
|
}, [errorHandler]);
|
|
532
|
-
const handleDataQuery = useCallback((dta, searchVal) => {
|
|
533
|
-
|
|
538
|
+
const handleDataQuery = useCallback((dta, searchVal, dataChanged = true) => {
|
|
539
|
+
// Only (re)build groupsMap from a genuine, freshly fetched full list. In query mode the parent's
|
|
540
|
+
// fetchState.data lags behind the typed search value, so when a search is cleared this effect can run
|
|
541
|
+
// with the previous, search-filtered data while searchVal is already empty. Rebuilding groupsMap from
|
|
542
|
+
// that stale subset shrinks it and makes the current selection look like "all selected".
|
|
543
|
+
if (dataChanged && dta.length && !searchVal && !compareObjectsArrays(dta, previousMapDataItems.current)) {
|
|
534
544
|
dispatchState({
|
|
535
545
|
type: StateActionType.CreateMap,
|
|
536
546
|
payload: dta
|
|
@@ -577,7 +587,9 @@ export const DropdownRaw = props => {
|
|
|
577
587
|
if (!isQueryMode || (fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading)) {
|
|
578
588
|
return;
|
|
579
589
|
}
|
|
580
|
-
|
|
590
|
+
const dataChanged = (fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) !== previousFetchStateData.current;
|
|
591
|
+
previousFetchStateData.current = fetchState === null || fetchState === void 0 ? void 0 : fetchState.data;
|
|
592
|
+
handleDataQuery((fetchState === null || fetchState === void 0 ? void 0 : fetchState.data) || [], state.inputValue, dataChanged);
|
|
581
593
|
});
|
|
582
594
|
return () => {
|
|
583
595
|
var _a;
|
|
@@ -876,7 +888,15 @@ export const DropdownRaw = props => {
|
|
|
876
888
|
});
|
|
877
889
|
}
|
|
878
890
|
if (state.showList) {
|
|
879
|
-
const isSearchMode = state.inputValue && !state.currentId;
|
|
891
|
+
const isSearchMode = Boolean(state.inputValue) && !state.currentId;
|
|
892
|
+
const selectAllActiveForCurrentLevel = state.selectAllActiveForId === (state.currentId || state.rootId);
|
|
893
|
+
// DESIGN INTENT: button state (isSelectAllActive) is truth-based — shows pressed whenever
|
|
894
|
+
// all items are actually selected, including after search+clear where selectAllActiveForId
|
|
895
|
+
// was cleared. shouldBlockItems is intent-based — only activates when "Select all" was
|
|
896
|
+
// explicitly clicked (selectAllActiveForCurrentLevel), never from manual individual selection.
|
|
897
|
+
// This asymmetry is intentional: the button restores its visual state post-search, but
|
|
898
|
+
// blocking does not, to avoid unexpected UX when users manually select all items.
|
|
899
|
+
const isAllCurrentLevelSelected = !isSearchMode && !isFullSelectionMode ? isEveryItemSelected(getListDataWithDisabled(state.listData, state.isNestedList), state.selectedIds) : false;
|
|
880
900
|
const currentListData = createListDataOptions(state, translate, isSearchMode ? sortDropdownItemArray(state.listData, sortFn).slice(0, listLimit).filter(el => el.id !== state.rootId) :
|
|
881
901
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
882
902
|
sortDropdownItemArray(((_b = state.groupsMap[state.currentId || state.rootId]) === null || _b === void 0 ? void 0 : _b.children) || [], sortFn).slice(0, listLimit) || [], multiselect, currentAllSelected);
|
|
@@ -892,16 +912,17 @@ export const DropdownRaw = props => {
|
|
|
892
912
|
activeValue: state.selectedIds.length ? state.selectedIds[0] : "root",
|
|
893
913
|
backButtonName: state.currentId && state.groupsMap[state.currentId] ? getGroupDescription(state.groupsMap[state.currentId], translate) : undefined,
|
|
894
914
|
filterName: isMobile ? undefined : filterName,
|
|
895
|
-
|
|
915
|
+
isSelectAllActive: isFullSelectionMode ? currentAllSelected : isSearchMode ? isEveryItemSelected(getListDataWithDisabled(state.listData, state.isNestedList), state.selectedIds) : selectAllActiveForCurrentLevel || isAllCurrentLevelSelected,
|
|
916
|
+
shouldBlockItems: blockItemsOnSelectAll && !state.inputValue && !isFullSelectionMode && selectAllActiveForCurrentLevel,
|
|
896
917
|
isMultiselect: multiselect,
|
|
897
918
|
forceSelection: forceSelection,
|
|
898
919
|
listData: currentListData,
|
|
899
920
|
width: width || currentWidth === 180 ? undefined : currentWidth,
|
|
900
921
|
minWidth: currentWidth,
|
|
901
|
-
hasSelectAllButton: selectAllButton && multiselect,
|
|
922
|
+
hasSelectAllButton: selectAllButton && multiselect && !(hideSelectAllOnSearch && state.inputValue),
|
|
902
923
|
hasApplyButton: hasApplyButton,
|
|
903
924
|
isApplyDisabled: memoizedIsApplyButtonDisabled,
|
|
904
|
-
isSelectAllButtonDisable: currentListData.length === 0 || isSearchMode
|
|
925
|
+
isSelectAllButtonDisable: currentListData.length === 0 || isSearchMode && state.isNestedList && isAllItemsHasOneParent(state.listData.filter(el => el.id !== state.rootId), (((_c = state.groupsMap[state.rootId]) === null || _c === void 0 ? void 0 : _c.children) || []).map(el => el.id)),
|
|
905
926
|
isClearButtonDisabled: memoizedIsClearButtonDisabled,
|
|
906
927
|
isWithFooter: memoizedWithFooter && !isMobile,
|
|
907
928
|
isMobile: isMobile,
|
|
@@ -913,7 +934,7 @@ export const DropdownRaw = props => {
|
|
|
913
934
|
});
|
|
914
935
|
}
|
|
915
936
|
return null;
|
|
916
|
-
}, [state, isLoading, isQueryMode, fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading, fetchState === null || fetchState === void 0 ? void 0 : fetchState.error, handleClearClick, handleCancelClick, handleApplyClick, hasApplyButton, memoizedWithFooter, translate, sortFn, listLimit, multiselect, currentAllSelected, handleBackButtonClick, handleSelectAllInSearch, handleSelectAllClick, handleSelect, handleChangeCurrentId, handleSingleSelection, isMobile, filterName, forceSelection, width, selectAllButton, memoizedIsApplyButtonDisabled, memoizedIsClearButtonDisabled, isCheckboxMode, handleCheckboxChange, checkboxLabel, selectListId]);
|
|
937
|
+
}, [state, isLoading, isQueryMode, fetchState === null || fetchState === void 0 ? void 0 : fetchState.isLoading, fetchState === null || fetchState === void 0 ? void 0 : fetchState.error, handleClearClick, handleCancelClick, handleApplyClick, hasApplyButton, memoizedWithFooter, translate, sortFn, listLimit, multiselect, currentAllSelected, handleBackButtonClick, handleSelectAllInSearch, handleSelectAllClick, handleSelect, handleChangeCurrentId, handleSingleSelection, isMobile, filterName, forceSelection, width, selectAllButton, hideSelectAllOnSearch, memoizedIsApplyButtonDisabled, memoizedIsClearButtonDisabled, isCheckboxMode, handleCheckboxChange, checkboxLabel, selectListId, isFullSelectionMode, blockItemsOnSelectAll]);
|
|
917
938
|
const currentStringFromSelected = isFullSelectionMode && hasApplyButton && state.globalIsAllSelected || isFullSelectionMode && !hasApplyButton && state.isAllSelected ? getStringFromAllSelected(state.groupsMap, translate, state.rootId) : getStringFromSelected(hasApplyButton ? state.globalSelectedIds : state.selectedIds, state.groupsMapSelected, translate, state.rootId);
|
|
918
939
|
const memoizedCurrentSelection = useMemo(() => showSelection && !state.inputValue ? currentStringFromSelected : "", [showSelection, state.inputValue, currentStringFromSelected]);
|
|
919
940
|
const parentTriggerWidth = ((_b = comboboxRef.current) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) || 420;
|
|
@@ -1011,4 +1032,4 @@ export const DropdownRaw = props => {
|
|
|
1011
1032
|
});
|
|
1012
1033
|
};
|
|
1013
1034
|
DropdownRaw.displayName = "DropdownRaw";
|
|
1014
|
-
export const TRANSLATIONS = ["Filter by group", "Open filter", "Clear search", "Select all", "
|
|
1035
|
+
export const TRANSLATIONS = ["Filter by group", "Open filter", "Clear search", "Select all", "Clear", "Back", "No data"];
|