@workday/canvas-kit-react 12.1.0-937-next.0 → 12.1.0-945-next.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/collection/lib/useOverflowListItemMeasure.tsx +6 -2
- package/collection/lib/useOverflowListMeasure.ts +19 -5
- package/collection/lib/useOverflowListModel.tsx +114 -47
- package/collection/lib/useOverflowListTarget.tsx +5 -1
- package/dist/commonjs/action-bar/lib/ActionBar.d.ts +580 -0
- package/dist/commonjs/action-bar/lib/ActionBar.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts +44 -0
- package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/ActionBarList.d.ts +45 -1
- package/dist/commonjs/action-bar/lib/ActionBarList.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts +44 -0
- package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts +558 -0
- package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts.map +1 -1
- package/dist/commonjs/avatar/lib/Avatar.js +21 -21
- package/dist/commonjs/badge/lib/CountBadge.js +3 -3
- package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts +602 -0
- package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +44 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts +44 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts +22 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +44 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +558 -0
- package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
- package/dist/commonjs/button/lib/BaseButton.js +21 -21
- package/dist/commonjs/button/lib/DeleteButton.js +1 -1
- package/dist/commonjs/button/lib/PrimaryButton.js +2 -2
- package/dist/commonjs/button/lib/SecondaryButton.js +2 -2
- package/dist/commonjs/button/lib/TertiaryButton.js +18 -18
- package/dist/commonjs/card/lib/Card.js +1 -1
- package/dist/commonjs/card/lib/CardBody.js +1 -1
- package/dist/commonjs/card/lib/CardHeading.js +1 -1
- package/dist/commonjs/checkbox/lib/CheckBackground.js +3 -3
- package/dist/commonjs/checkbox/lib/CheckboxCheck.js +5 -5
- package/dist/commonjs/checkbox/lib/CheckboxContainer.js +1 -1
- package/dist/commonjs/checkbox/lib/CheckboxInput.js +5 -5
- package/dist/commonjs/checkbox/lib/CheckboxRipple.js +1 -1
- package/dist/commonjs/collection/lib/ListBox.js +3 -3
- package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts +22 -0
- package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListItemMeasure.js +5 -2
- package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts +23 -1
- package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListMeasure.js +12 -28
- package/dist/commonjs/collection/lib/useOverflowListModel.d.ts +970 -1
- package/dist/commonjs/collection/lib/useOverflowListModel.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListModel.js +84 -37
- package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts +22 -0
- package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListTarget.js +4 -1
- package/dist/commonjs/combobox/lib/ComboboxMenuList.js +1 -1
- package/dist/commonjs/common/lib/AccessibleHide.js +1 -1
- package/dist/commonjs/common/lib/CanvasProvider.js +1 -1
- package/dist/commonjs/form-field/lib/FormFieldContainer.js +1 -1
- package/dist/commonjs/form-field/lib/FormFieldField.js +1 -1
- package/dist/commonjs/form-field/lib/FormFieldGroupLabel.js +5 -5
- package/dist/commonjs/form-field/lib/FormFieldGroupList.js +3 -3
- package/dist/commonjs/form-field/lib/FormFieldHint.js +3 -3
- package/dist/commonjs/form-field/lib/FormFieldLabel.js +6 -6
- package/dist/commonjs/form-field/lib/formFieldStencil.js +8 -8
- package/dist/commonjs/icon/lib/AccentIcon.js +2 -2
- package/dist/commonjs/icon/lib/AppletIcon.js +1 -1
- package/dist/commonjs/icon/lib/Graphic.js +2 -2
- package/dist/commonjs/icon/lib/Svg.js +2 -2
- package/dist/commonjs/icon/lib/SystemIcon.js +1 -1
- package/dist/commonjs/icon/lib/SystemIconCircle.js +1 -1
- package/dist/commonjs/loading-dots/lib/LoadingDots.js +2 -2
- package/dist/commonjs/menu/lib/MenuCard.js +1 -1
- package/dist/commonjs/menu/lib/MenuItem.js +1 -1
- package/dist/commonjs/menu/lib/MenuList.js +3 -3
- package/dist/commonjs/menu/lib/MenuOption.js +1 -1
- package/dist/commonjs/modal/lib/ModalBody.js +1 -1
- package/dist/commonjs/modal/lib/ModalCard.js +1 -1
- package/dist/commonjs/modal/lib/ModalHeading.js +1 -1
- package/dist/commonjs/modal/lib/ModalOverflowOverlay.js +1 -1
- package/dist/commonjs/modal/lib/ModalOverlay.js +2 -2
- package/dist/commonjs/popup/lib/PopupBody.js +1 -1
- package/dist/commonjs/popup/lib/PopupCard.js +2 -2
- package/dist/commonjs/popup/lib/PopupCloseIcon.js +1 -1
- package/dist/commonjs/popup/lib/PopupHeading.js +1 -1
- package/dist/commonjs/select/lib/SelectCard.js +1 -1
- package/dist/commonjs/select/lib/SelectInput.js +3 -3
- package/dist/commonjs/switch/lib/Switch.js +7 -7
- package/dist/commonjs/table/lib/Table.js +1 -1
- package/dist/commonjs/table/lib/TableBody.js +1 -1
- package/dist/commonjs/table/lib/TableCaption.js +1 -1
- package/dist/commonjs/table/lib/TableCell.js +1 -1
- package/dist/commonjs/table/lib/TableFooter.js +1 -1
- package/dist/commonjs/table/lib/TableHead.js +1 -1
- package/dist/commonjs/table/lib/TableHeader.js +1 -1
- package/dist/commonjs/table/lib/TableRow.js +1 -1
- package/dist/commonjs/tabs/lib/Tabs.d.ts +666 -0
- package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsItem.d.ts +44 -0
- package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsList.d.ts +45 -1
- package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +44 -0
- package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsPanel.d.ts +44 -0
- package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsPanels.d.ts +22 -0
- package/dist/commonjs/tabs/lib/TabsPanels.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/useTabsModel.d.ts +680 -0
- package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
- package/dist/commonjs/text/lib/LabelText.js +6 -6
- package/dist/commonjs/text/lib/Text.js +16 -16
- package/dist/commonjs/text/lib/TypeLevelComponents.js +4 -4
- package/dist/commonjs/text-area/lib/TextArea.js +5 -5
- package/dist/commonjs/text-input/lib/InputGroup.js +6 -6
- package/dist/commonjs/text-input/lib/TextInput.js +5 -5
- package/dist/commonjs/toast/lib/Toast.js +1 -1
- package/dist/commonjs/toast/lib/ToastBody.js +1 -1
- package/dist/commonjs/toast/lib/ToastCloseIcon.js +1 -1
- package/dist/commonjs/toast/lib/ToastIcon.js +1 -1
- package/dist/commonjs/toast/lib/ToastMessage.js +1 -1
- package/dist/es6/action-bar/lib/ActionBar.d.ts +580 -0
- package/dist/es6/action-bar/lib/ActionBar.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/ActionBarItem.d.ts +44 -0
- package/dist/es6/action-bar/lib/ActionBarItem.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/ActionBarList.d.ts +45 -1
- package/dist/es6/action-bar/lib/ActionBarList.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts +44 -0
- package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/useActionBarModel.d.ts +558 -0
- package/dist/es6/action-bar/lib/useActionBarModel.d.ts.map +1 -1
- package/dist/es6/avatar/lib/Avatar.js +21 -21
- package/dist/es6/badge/lib/CountBadge.js +3 -3
- package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts +602 -0
- package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +44 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts +44 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts +22 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +44 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +558 -0
- package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
- package/dist/es6/button/lib/BaseButton.js +21 -21
- package/dist/es6/button/lib/DeleteButton.js +1 -1
- package/dist/es6/button/lib/PrimaryButton.js +2 -2
- package/dist/es6/button/lib/SecondaryButton.js +2 -2
- package/dist/es6/button/lib/TertiaryButton.js +18 -18
- package/dist/es6/card/lib/Card.js +1 -1
- package/dist/es6/card/lib/CardBody.js +1 -1
- package/dist/es6/card/lib/CardHeading.js +1 -1
- package/dist/es6/checkbox/lib/CheckBackground.js +3 -3
- package/dist/es6/checkbox/lib/CheckboxCheck.js +5 -5
- package/dist/es6/checkbox/lib/CheckboxContainer.js +1 -1
- package/dist/es6/checkbox/lib/CheckboxInput.js +5 -5
- package/dist/es6/checkbox/lib/CheckboxRipple.js +1 -1
- package/dist/es6/collection/lib/ListBox.js +3 -3
- package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts +22 -0
- package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListItemMeasure.js +5 -2
- package/dist/es6/collection/lib/useOverflowListMeasure.d.ts +23 -1
- package/dist/es6/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListMeasure.js +13 -6
- package/dist/es6/collection/lib/useOverflowListModel.d.ts +970 -1
- package/dist/es6/collection/lib/useOverflowListModel.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListModel.js +84 -37
- package/dist/es6/collection/lib/useOverflowListTarget.d.ts +22 -0
- package/dist/es6/collection/lib/useOverflowListTarget.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListTarget.js +4 -1
- package/dist/es6/combobox/lib/ComboboxMenuList.js +1 -1
- package/dist/es6/common/lib/AccessibleHide.js +1 -1
- package/dist/es6/common/lib/CanvasProvider.js +1 -1
- package/dist/es6/form-field/lib/FormFieldContainer.js +1 -1
- package/dist/es6/form-field/lib/FormFieldField.js +1 -1
- package/dist/es6/form-field/lib/FormFieldGroupLabel.js +5 -5
- package/dist/es6/form-field/lib/FormFieldGroupList.js +3 -3
- package/dist/es6/form-field/lib/FormFieldHint.js +3 -3
- package/dist/es6/form-field/lib/FormFieldLabel.js +6 -6
- package/dist/es6/form-field/lib/formFieldStencil.js +8 -8
- package/dist/es6/icon/lib/AccentIcon.js +2 -2
- package/dist/es6/icon/lib/AppletIcon.js +1 -1
- package/dist/es6/icon/lib/Graphic.js +2 -2
- package/dist/es6/icon/lib/Svg.js +2 -2
- package/dist/es6/icon/lib/SystemIcon.js +1 -1
- package/dist/es6/icon/lib/SystemIconCircle.js +1 -1
- package/dist/es6/loading-dots/lib/LoadingDots.js +2 -2
- package/dist/es6/menu/lib/MenuCard.js +1 -1
- package/dist/es6/menu/lib/MenuItem.js +1 -1
- package/dist/es6/menu/lib/MenuList.js +3 -3
- package/dist/es6/menu/lib/MenuOption.js +1 -1
- package/dist/es6/modal/lib/ModalBody.js +1 -1
- package/dist/es6/modal/lib/ModalCard.js +1 -1
- package/dist/es6/modal/lib/ModalHeading.js +1 -1
- package/dist/es6/modal/lib/ModalOverflowOverlay.js +1 -1
- package/dist/es6/modal/lib/ModalOverlay.js +2 -2
- package/dist/es6/popup/lib/PopupBody.js +1 -1
- package/dist/es6/popup/lib/PopupCard.js +2 -2
- package/dist/es6/popup/lib/PopupCloseIcon.js +1 -1
- package/dist/es6/popup/lib/PopupHeading.js +1 -1
- package/dist/es6/select/lib/SelectCard.js +1 -1
- package/dist/es6/select/lib/SelectInput.js +3 -3
- package/dist/es6/switch/lib/Switch.js +7 -7
- package/dist/es6/table/lib/Table.js +1 -1
- package/dist/es6/table/lib/TableBody.js +1 -1
- package/dist/es6/table/lib/TableCaption.js +1 -1
- package/dist/es6/table/lib/TableCell.js +1 -1
- package/dist/es6/table/lib/TableFooter.js +1 -1
- package/dist/es6/table/lib/TableHead.js +1 -1
- package/dist/es6/table/lib/TableHeader.js +1 -1
- package/dist/es6/table/lib/TableRow.js +1 -1
- package/dist/es6/tabs/lib/Tabs.d.ts +666 -0
- package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsItem.d.ts +44 -0
- package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsList.d.ts +45 -1
- package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsOverflowButton.d.ts +44 -0
- package/dist/es6/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsPanel.d.ts +44 -0
- package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsPanels.d.ts +22 -0
- package/dist/es6/tabs/lib/TabsPanels.d.ts.map +1 -1
- package/dist/es6/tabs/lib/useTabsModel.d.ts +680 -0
- package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
- package/dist/es6/text/lib/LabelText.js +6 -6
- package/dist/es6/text/lib/Text.js +16 -16
- package/dist/es6/text/lib/TypeLevelComponents.js +4 -4
- package/dist/es6/text-area/lib/TextArea.js +5 -5
- package/dist/es6/text-input/lib/InputGroup.js +6 -6
- package/dist/es6/text-input/lib/TextInput.js +5 -5
- package/dist/es6/toast/lib/Toast.js +1 -1
- package/dist/es6/toast/lib/ToastBody.js +1 -1
- package/dist/es6/toast/lib/ToastCloseIcon.js +1 -1
- package/dist/es6/toast/lib/ToastIcon.js +1 -1
- package/dist/es6/toast/lib/ToastMessage.js +1 -1
- package/package.json +4 -4
|
@@ -26,17 +26,21 @@ export const useOverflowListItemMeasure = createElemPropsHook(useOverflowListMod
|
|
|
26
26
|
useMountLayout(() => {
|
|
27
27
|
if (localRef.current) {
|
|
28
28
|
const styles = getComputedStyle(localRef.current);
|
|
29
|
-
model.events.
|
|
29
|
+
model.events.addItemSize({
|
|
30
30
|
id: name,
|
|
31
31
|
width:
|
|
32
32
|
localRef.current.offsetWidth +
|
|
33
33
|
parseFloat(styles.marginLeft) +
|
|
34
34
|
parseFloat(styles.marginRight),
|
|
35
|
+
height:
|
|
36
|
+
localRef.current.offsetHeight +
|
|
37
|
+
parseFloat(styles.marginTop) +
|
|
38
|
+
parseFloat(styles.marginBottom),
|
|
35
39
|
});
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
return () => {
|
|
39
|
-
model.events.
|
|
43
|
+
model.events.removeItemSize({id: name});
|
|
40
44
|
};
|
|
41
45
|
});
|
|
42
46
|
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
createElemPropsHook,
|
|
5
|
+
useMountLayout,
|
|
6
|
+
useResizeObserver,
|
|
7
|
+
useLocalRef,
|
|
8
|
+
} from '@workday/canvas-kit-react/common';
|
|
4
9
|
|
|
5
10
|
import {useOverflowListModel} from './useOverflowListModel';
|
|
6
11
|
|
|
@@ -9,12 +14,21 @@ import {useOverflowListModel} from './useOverflowListModel';
|
|
|
9
14
|
* overflow detection.
|
|
10
15
|
*/
|
|
11
16
|
export const useOverflowListMeasure = createElemPropsHook(useOverflowListModel)((model, ref) => {
|
|
12
|
-
const localRef = React.
|
|
13
|
-
const
|
|
17
|
+
const {elementRef, localRef} = useLocalRef(ref as React.Ref<HTMLElement>);
|
|
18
|
+
const gapProperty = model.state.orientation === 'horizontal' ? 'columnGap' : 'rowGap';
|
|
19
|
+
|
|
20
|
+
useResizeObserver({
|
|
14
21
|
ref: localRef,
|
|
15
|
-
onResize: model.events.
|
|
22
|
+
onResize: model.events.setContainerSize,
|
|
23
|
+
});
|
|
24
|
+
useMountLayout(() => {
|
|
25
|
+
if (localRef.current) {
|
|
26
|
+
const styles = getComputedStyle(localRef.current);
|
|
27
|
+
model.events.setContainerGap({
|
|
28
|
+
size: styles.gap === 'normal' ? 0 : Number(styles[gapProperty].replace('px', '')),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
16
31
|
});
|
|
17
|
-
const elementRef = useForkRef(ref, resizeRef);
|
|
18
32
|
|
|
19
33
|
return {
|
|
20
34
|
ref: elementRef,
|
|
@@ -5,49 +5,57 @@ import {useSelectionListModel} from './useSelectionListModel';
|
|
|
5
5
|
import {Item} from './useBaseListModel';
|
|
6
6
|
|
|
7
7
|
export function getHiddenIds(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
containerSize: number,
|
|
9
|
+
containerGap: number,
|
|
10
|
+
overflowTargetSize: number,
|
|
11
|
+
itemSizeCache: Record<string, number>,
|
|
11
12
|
selectedIds: string[] | 'all',
|
|
12
|
-
items
|
|
13
|
+
items: Item<any>[]
|
|
13
14
|
): string[] {
|
|
14
15
|
/** Allows us to prioritize showing the selected item */
|
|
15
16
|
let selectedKey: undefined | string;
|
|
16
17
|
/** Tally of combined item widths. We'll add items that fit until the container is full */
|
|
17
|
-
let
|
|
18
|
+
let itemSize = 0;
|
|
18
19
|
/** Tally ids that won't fit inside the container. These will be used by components to hide
|
|
19
20
|
* elements that won't fit in the container */
|
|
20
21
|
const hiddenIds: string[] = [];
|
|
22
|
+
/** Track if gap should be calculated since gap doesn't apply to the width of the first item, only
|
|
23
|
+
* consecutive items */
|
|
24
|
+
let shouldAddGap = false;
|
|
25
|
+
|
|
21
26
|
if (selectedIds !== 'all' && selectedIds.length) {
|
|
22
|
-
if (items
|
|
27
|
+
if (items.length) {
|
|
23
28
|
// If selectedIds[0] is not in items, use the first id from items
|
|
24
29
|
selectedKey = items.find(item => item.id === selectedIds[0]) ? selectedIds[0] : items[0].id;
|
|
25
|
-
} else {
|
|
26
|
-
selectedKey = selectedIds[0];
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
if (
|
|
31
|
-
Object.keys(
|
|
34
|
+
Object.keys(itemSizeCache).reduce(
|
|
35
|
+
(sum, key, index) => sum + itemSizeCache[key] + (index > 0 ? containerGap : 0),
|
|
36
|
+
0
|
|
37
|
+
) <= containerSize
|
|
32
38
|
) {
|
|
33
39
|
// All items fit, return empty array
|
|
34
40
|
return [];
|
|
35
41
|
} else if (selectedKey) {
|
|
36
|
-
if (
|
|
42
|
+
if (itemSizeCache[selectedKey] + overflowTargetSize > containerSize) {
|
|
37
43
|
// If the selected item doesn't fit, only show overflow (all items hidden)
|
|
38
|
-
return Object.keys(
|
|
44
|
+
return Object.keys(itemSizeCache);
|
|
39
45
|
} else {
|
|
40
46
|
// at least the selected item and overflow target fit. Update our itemWidth with the sum
|
|
41
|
-
|
|
47
|
+
itemSize += itemSizeCache[selectedKey] + overflowTargetSize;
|
|
48
|
+
shouldAddGap = true;
|
|
42
49
|
}
|
|
43
50
|
} else {
|
|
44
|
-
|
|
51
|
+
itemSize += overflowTargetSize;
|
|
45
52
|
}
|
|
46
53
|
|
|
47
|
-
for (const key in
|
|
54
|
+
for (const key in itemSizeCache) {
|
|
48
55
|
if (key !== selectedKey) {
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
itemSize += itemSizeCache[key] + (shouldAddGap ? containerGap : 0);
|
|
57
|
+
shouldAddGap = true;
|
|
58
|
+
if (itemSize > containerSize) {
|
|
51
59
|
hiddenIds.push(key);
|
|
52
60
|
}
|
|
53
61
|
}
|
|
@@ -73,12 +81,13 @@ export const useOverflowListModel = createModelHook({
|
|
|
73
81
|
const shouldCalculateOverflow =
|
|
74
82
|
config.shouldCalculateOverflow === undefined ? true : config.shouldCalculateOverflow;
|
|
75
83
|
const [hiddenIds, setHiddenIds] = React.useState(config.initialHiddenIds);
|
|
76
|
-
const [
|
|
77
|
-
const [
|
|
78
|
-
const
|
|
79
|
-
const
|
|
84
|
+
const [itemSizeCache, setItemSizeCache] = React.useState<Record<string, number>>({});
|
|
85
|
+
const [containerSize, setContainerSize] = React.useState(0);
|
|
86
|
+
const [containerGap, setContainerGap] = React.useState(0);
|
|
87
|
+
const containerSizeRef = React.useRef(0);
|
|
88
|
+
const itemSizeCacheRef = React.useRef(itemSizeCache);
|
|
80
89
|
const [overflowTargetWidth, setOverflowTargetWidth] = React.useState(0);
|
|
81
|
-
const
|
|
90
|
+
const overflowTargetSizeRef = React.useRef(0);
|
|
82
91
|
|
|
83
92
|
const internalHiddenIds = shouldCalculateOverflow ? hiddenIds : [];
|
|
84
93
|
|
|
@@ -94,8 +103,17 @@ export const useOverflowListModel = createModelHook({
|
|
|
94
103
|
const state = {
|
|
95
104
|
...model.state,
|
|
96
105
|
hiddenIds: internalHiddenIds,
|
|
97
|
-
|
|
98
|
-
|
|
106
|
+
itemSizeCache,
|
|
107
|
+
/**
|
|
108
|
+
* @deprecated Use `itemSizeCache` instead
|
|
109
|
+
*/
|
|
110
|
+
itemWidthCache: itemSizeCache,
|
|
111
|
+
containerSize,
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated Use `containerSize` instead
|
|
114
|
+
*/
|
|
115
|
+
containerWidth: containerSize,
|
|
116
|
+
containerGap,
|
|
99
117
|
overflowTargetWidth,
|
|
100
118
|
};
|
|
101
119
|
|
|
@@ -104,9 +122,10 @@ export const useOverflowListModel = createModelHook({
|
|
|
104
122
|
select(data: Parameters<typeof model.events.select>[0]) {
|
|
105
123
|
const {selectedIds} = model.selection.select(data.id, state);
|
|
106
124
|
const ids = getHiddenIds(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
125
|
+
containerSizeRef.current,
|
|
126
|
+
containerGap,
|
|
127
|
+
overflowTargetSizeRef.current,
|
|
128
|
+
itemSizeCacheRef.current,
|
|
110
129
|
selectedIds,
|
|
111
130
|
config.items
|
|
112
131
|
);
|
|
@@ -114,52 +133,93 @@ export const useOverflowListModel = createModelHook({
|
|
|
114
133
|
|
|
115
134
|
setHiddenIds(ids);
|
|
116
135
|
},
|
|
136
|
+
setContainerSize(data: {width?: number; height?: number}) {
|
|
137
|
+
containerSizeRef.current =
|
|
138
|
+
model.state.orientation === 'horizontal' ? data.width || 0 : data.height || 0;
|
|
139
|
+
setContainerSize(containerSizeRef.current);
|
|
140
|
+
const ids = getHiddenIds(
|
|
141
|
+
containerSizeRef.current,
|
|
142
|
+
containerGap,
|
|
143
|
+
overflowTargetSizeRef.current,
|
|
144
|
+
itemSizeCacheRef.current,
|
|
145
|
+
state.selectedIds,
|
|
146
|
+
config.items
|
|
147
|
+
);
|
|
148
|
+
setHiddenIds(ids);
|
|
149
|
+
},
|
|
150
|
+
/**
|
|
151
|
+
* @deprecated Use `setContainerSize` instead and pass both `width` and `height`
|
|
152
|
+
*/
|
|
117
153
|
setContainerWidth(data: {width?: number}) {
|
|
118
|
-
|
|
119
|
-
|
|
154
|
+
events.setContainerSize({width: data.width, height: 0});
|
|
155
|
+
},
|
|
156
|
+
setContainerGap(data: {size: number}) {
|
|
157
|
+
setContainerGap(data.size);
|
|
120
158
|
|
|
121
159
|
const ids = getHiddenIds(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
160
|
+
containerSizeRef.current,
|
|
161
|
+
data.size,
|
|
162
|
+
overflowTargetSizeRef.current,
|
|
163
|
+
itemSizeCacheRef.current,
|
|
125
164
|
state.selectedIds,
|
|
126
165
|
config.items
|
|
127
166
|
);
|
|
128
167
|
|
|
129
168
|
setHiddenIds(ids);
|
|
130
169
|
},
|
|
170
|
+
setOverflowTargetSize(data: {width: number; height: number}) {
|
|
171
|
+
overflowTargetSizeRef.current =
|
|
172
|
+
model.state.orientation === 'horizontal' ? data.width || 0 : data.height || 0;
|
|
173
|
+
setOverflowTargetWidth(overflowTargetSizeRef.current);
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
*
|
|
178
|
+
* @deprecated `setOverflowTargetWidth` is deprecated. Please use `setOverflowTargetSize` and pass in the `width` and set `height` to `0`.
|
|
179
|
+
*/
|
|
131
180
|
setOverflowTargetWidth(data: {width: number}) {
|
|
132
|
-
|
|
133
|
-
|
|
181
|
+
overflowTargetSizeRef.current = data.width;
|
|
182
|
+
events.setOverflowTargetSize({width: overflowTargetSizeRef.current, height: 0});
|
|
134
183
|
},
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
*
|
|
187
|
+
* @deprecated `addItemWidth` is deprecated. Please use `addItemSize` and set the `width`
|
|
188
|
+
*/
|
|
135
189
|
addItemWidth(data: {id: string; width: number}) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
190
|
+
events.addItemSize({id: data.id, width: data.width, height: 0});
|
|
191
|
+
},
|
|
192
|
+
addItemSize(data: {id: string; width: number; height: number}) {
|
|
193
|
+
itemSizeCacheRef.current = {
|
|
194
|
+
...itemSizeCacheRef.current,
|
|
195
|
+
[data.id]: model.state.orientation === 'horizontal' ? data.width : data.height,
|
|
139
196
|
};
|
|
140
197
|
|
|
141
|
-
|
|
198
|
+
|
|
199
|
+
setItemSizeCache(itemSizeCacheRef.current);
|
|
142
200
|
|
|
143
201
|
const ids = getHiddenIds(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
202
|
+
containerSizeRef.current,
|
|
203
|
+
containerGap,
|
|
204
|
+
overflowTargetSizeRef.current,
|
|
205
|
+
itemSizeCacheRef.current,
|
|
147
206
|
state.selectedIds,
|
|
148
207
|
config.items
|
|
149
208
|
);
|
|
150
209
|
|
|
151
210
|
setHiddenIds(ids);
|
|
152
211
|
},
|
|
153
|
-
|
|
154
|
-
const newCache = {...
|
|
212
|
+
removeItemSize(data: {id: string}) {
|
|
213
|
+
const newCache = {...itemSizeCacheRef.current};
|
|
155
214
|
delete newCache[data.id];
|
|
156
|
-
|
|
157
|
-
|
|
215
|
+
itemSizeCacheRef.current = newCache;
|
|
216
|
+
setItemSizeCache(itemSizeCacheRef.current);
|
|
158
217
|
|
|
159
218
|
const ids = getHiddenIds(
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
219
|
+
containerSizeRef.current,
|
|
220
|
+
containerGap,
|
|
221
|
+
overflowTargetSizeRef.current,
|
|
222
|
+
itemSizeCacheRef.current,
|
|
163
223
|
state.selectedIds !== 'all'
|
|
164
224
|
? state.selectedIds.filter(sId => data.id !== sId)
|
|
165
225
|
: state.selectedIds,
|
|
@@ -168,6 +228,13 @@ export const useOverflowListModel = createModelHook({
|
|
|
168
228
|
|
|
169
229
|
setHiddenIds(ids);
|
|
170
230
|
},
|
|
231
|
+
/**
|
|
232
|
+
*
|
|
233
|
+
* @deprecated `removeItemWidth` is deprecated. Please use `removeItemSize`.
|
|
234
|
+
*/
|
|
235
|
+
removeItemWidth(data: {id: string}) {
|
|
236
|
+
events.removeItemSize({id: data.id});
|
|
237
|
+
},
|
|
171
238
|
addHiddenKey(data: {id: string}) {
|
|
172
239
|
setHiddenIds(ids => ids.concat(data.id));
|
|
173
240
|
},
|
|
@@ -24,11 +24,15 @@ export const useOverflowListTarget = createElemPropsHook(useOverflowListModel)((
|
|
|
24
24
|
if (localRef.current) {
|
|
25
25
|
const styles = getComputedStyle(localRef.current);
|
|
26
26
|
|
|
27
|
-
model.events.
|
|
27
|
+
model.events.setOverflowTargetSize({
|
|
28
28
|
width:
|
|
29
29
|
localRef.current.offsetWidth +
|
|
30
30
|
parseFloat(styles.marginLeft) +
|
|
31
31
|
parseFloat(styles.marginRight),
|
|
32
|
+
height:
|
|
33
|
+
localRef.current.offsetWidth +
|
|
34
|
+
parseFloat(styles.marginTop) +
|
|
35
|
+
parseFloat(styles.marginBottom),
|
|
32
36
|
});
|
|
33
37
|
}
|
|
34
38
|
});
|