@fluentui-react-native/menu 0.9.2 → 0.11.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/CHANGELOG.json +114 -1
- package/CHANGELOG.md +40 -2
- package/lib/Menu/useMenu.d.ts.map +1 -1
- package/lib/Menu/useMenu.js +5 -1
- package/lib/Menu/useMenu.js.map +1 -1
- package/lib/MenuItem/MenuItem.d.ts.map +1 -1
- package/lib/MenuItem/MenuItem.js +4 -2
- package/lib/MenuItem/MenuItem.js.map +1 -1
- package/lib/MenuItem/MenuItem.styling.d.ts.map +1 -1
- package/lib/MenuItem/MenuItem.styling.js +6 -0
- package/lib/MenuItem/MenuItem.styling.js.map +1 -1
- package/lib/MenuItem/MenuItem.types.d.ts +2 -0
- package/lib/MenuItem/MenuItem.types.d.ts.map +1 -1
- package/lib/MenuItem/MenuItemTokens.d.ts.map +1 -1
- package/lib/MenuItem/MenuItemTokens.js +2 -0
- package/lib/MenuItem/MenuItemTokens.js.map +1 -1
- package/lib/MenuItem/MenuItemTokens.win32.d.ts.map +1 -1
- package/lib/MenuItem/MenuItemTokens.win32.js +2 -0
- package/lib/MenuItem/MenuItemTokens.win32.js.map +1 -1
- package/lib/MenuItem/useMenuItem.d.ts.map +1 -1
- package/lib/MenuItem/useMenuItem.js +3 -1
- package/lib/MenuItem/useMenuItem.js.map +1 -1
- package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts +4 -2
- package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
- package/lib/MenuItemCheckbox/MenuItemCheckbox.js +11 -8
- package/lib/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts +10 -0
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.js +28 -14
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemRadio/MenuItemRadio.d.ts +4 -0
- package/lib/MenuItemRadio/MenuItemRadio.d.ts.map +1 -0
- package/lib/MenuItemRadio/MenuItemRadio.js +12 -0
- package/lib/MenuItemRadio/MenuItemRadio.js.map +1 -0
- package/lib/MenuItemRadio/useMenuItemRadio.d.ts +3 -0
- package/lib/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -0
- package/lib/MenuItemRadio/useMenuItemRadio.js +15 -0
- package/lib/MenuItemRadio/useMenuItemRadio.js.map +1 -0
- package/lib/MenuList/MenuList.d.ts +0 -1
- package/lib/MenuList/MenuList.d.ts.map +1 -1
- package/lib/MenuList/MenuList.js +23 -5
- package/lib/MenuList/MenuList.js.map +1 -1
- package/lib/MenuList/MenuList.styling.d.ts.map +1 -1
- package/lib/MenuList/MenuList.styling.js +2 -1
- package/lib/MenuList/MenuList.styling.js.map +1 -1
- package/lib/MenuList/MenuList.types.d.ts +5 -1
- package/lib/MenuList/MenuList.types.d.ts.map +1 -1
- package/lib/MenuList/MenuListTokens.d.ts.map +1 -1
- package/lib/MenuList/MenuListTokens.js +1 -0
- package/lib/MenuList/MenuListTokens.js.map +1 -1
- package/lib/MenuList/useMenuList.d.ts.map +1 -1
- package/lib/MenuList/useMenuList.js +13 -3
- package/lib/MenuList/useMenuList.js.map +1 -1
- package/lib/MenuList/{useMenuContextValue.d.ts → useMenuListContextValue.d.ts} +1 -1
- package/lib/MenuList/useMenuListContextValue.d.ts.map +1 -0
- package/lib/MenuList/{useMenuContextValue.js → useMenuListContextValue.js} +1 -1
- package/lib/MenuList/useMenuListContextValue.js.map +1 -0
- package/lib/MenuPopover/MenuPopover.d.ts.map +1 -1
- package/lib/MenuPopover/MenuPopover.js +1 -1
- package/lib/MenuPopover/MenuPopover.js.map +1 -1
- package/lib/MenuPopover/MenuPopover.types.d.ts +4 -1
- package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.js +16 -1
- package/lib/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.js +4 -3
- package/lib/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.types.d.ts +11 -2
- package/lib/MenuTrigger/MenuTrigger.types.d.ts.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.d.ts +2 -8
- package/lib/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.js +14 -1
- package/lib/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib/context/menuTriggerContext.d.ts +9 -0
- package/lib/context/menuTriggerContext.d.ts.map +1 -0
- package/lib/context/menuTriggerContext.js +9 -0
- package/lib/context/menuTriggerContext.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib-commonjs/Menu/useMenu.d.ts.map +1 -1
- package/lib-commonjs/Menu/useMenu.js +5 -1
- package/lib-commonjs/Menu/useMenu.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.js +3 -1
- package/lib-commonjs/MenuItem/MenuItem.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.styling.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.styling.js +6 -0
- package/lib-commonjs/MenuItem/MenuItem.styling.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.types.d.ts +2 -0
- package/lib-commonjs/MenuItem/MenuItem.types.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.js +2 -0
- package/lib-commonjs/MenuItem/MenuItemTokens.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.win32.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.win32.js +2 -0
- package/lib-commonjs/MenuItem/MenuItemTokens.win32.js.map +1 -1
- package/lib-commonjs/MenuItem/useMenuItem.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/useMenuItem.js +3 -1
- package/lib-commonjs/MenuItem/useMenuItem.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts +4 -2
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js +12 -8
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts +10 -0
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js +31 -16
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts +4 -0
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts.map +1 -0
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.js +15 -0
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.js.map +1 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts +3 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js +20 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js.map +1 -0
- package/lib-commonjs/MenuList/MenuList.d.ts +0 -1
- package/lib-commonjs/MenuList/MenuList.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuList.js +22 -4
- package/lib-commonjs/MenuList/MenuList.js.map +1 -1
- package/lib-commonjs/MenuList/MenuList.styling.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuList.styling.js +2 -1
- package/lib-commonjs/MenuList/MenuList.styling.js.map +1 -1
- package/lib-commonjs/MenuList/MenuList.types.d.ts +5 -1
- package/lib-commonjs/MenuList/MenuList.types.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuListTokens.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuListTokens.js +1 -0
- package/lib-commonjs/MenuList/MenuListTokens.js.map +1 -1
- package/lib-commonjs/MenuList/useMenuList.d.ts.map +1 -1
- package/lib-commonjs/MenuList/useMenuList.js +13 -3
- package/lib-commonjs/MenuList/useMenuList.js.map +1 -1
- package/lib-commonjs/MenuList/{useMenuContextValue.d.ts → useMenuListContextValue.d.ts} +1 -1
- package/lib-commonjs/MenuList/useMenuListContextValue.d.ts.map +1 -0
- package/lib-commonjs/MenuList/{useMenuContextValue.js → useMenuListContextValue.js} +1 -1
- package/lib-commonjs/MenuList/useMenuListContextValue.js.map +1 -0
- package/lib-commonjs/MenuPopover/MenuPopover.d.ts.map +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.js +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.js.map +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts +4 -1
- package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts.map +1 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.d.ts.map +1 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.js +16 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.js +4 -3
- package/lib-commonjs/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts +11 -2
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts +2 -8
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js +14 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib-commonjs/context/menuTriggerContext.d.ts +9 -0
- package/lib-commonjs/context/menuTriggerContext.d.ts.map +1 -0
- package/lib-commonjs/context/menuTriggerContext.js +14 -0
- package/lib-commonjs/context/menuTriggerContext.js.map +1 -0
- package/lib-commonjs/index.d.ts +1 -0
- package/lib-commonjs/index.d.ts.map +1 -1
- package/lib-commonjs/index.js +3 -1
- package/lib-commonjs/index.js.map +1 -1
- package/package.json +7 -7
- package/src/Menu/useMenu.ts +6 -0
- package/src/MenuItem/MenuItem.styling.ts +7 -0
- package/src/MenuItem/MenuItem.tsx +10 -5
- package/src/MenuItem/MenuItem.types.ts +2 -0
- package/src/MenuItem/MenuItemTokens.ts +2 -0
- package/src/MenuItem/MenuItemTokens.win32.ts +2 -0
- package/src/MenuItem/useMenuItem.ts +3 -1
- package/src/MenuItemCheckbox/MenuItemCheckbox.tsx +29 -16
- package/src/MenuItemCheckbox/useMenuItemCheckbox.ts +39 -20
- package/src/MenuItemRadio/MenuItemRadio.tsx +16 -0
- package/src/MenuItemRadio/useMenuItemRadio.ts +21 -0
- package/src/MenuList/MenuList.styling.ts +2 -1
- package/src/MenuList/MenuList.tsx +23 -5
- package/src/MenuList/MenuList.types.ts +5 -2
- package/src/MenuList/MenuListTokens.ts +1 -0
- package/src/MenuList/useMenuList.ts +22 -3
- package/src/MenuList/{useMenuContextValue.ts → useMenuListContextValue.ts} +0 -0
- package/src/MenuPopover/MenuPopover.tsx +3 -0
- package/src/MenuPopover/MenuPopover.types.ts +4 -1
- package/src/MenuPopover/useMenuPopover.ts +21 -2
- package/src/MenuTrigger/MenuTrigger.tsx +4 -3
- package/src/MenuTrigger/MenuTrigger.types.ts +14 -3
- package/src/MenuTrigger/useMenuTrigger.ts +18 -3
- package/src/context/menuTriggerContext.ts +10 -0
- package/src/index.ts +1 -0
- package/lib/MenuList/useMenuContextValue.d.ts.map +0 -1
- package/lib/MenuList/useMenuContextValue.js.map +0 -1
- package/lib-commonjs/MenuList/useMenuContextValue.d.ts.map +0 -1
- package/lib-commonjs/MenuList/useMenuContextValue.js.map +0 -1
|
@@ -4,7 +4,9 @@ import { IBackgroundColorTokens, LayoutTokens } from '@fluentui-react-native/tok
|
|
|
4
4
|
|
|
5
5
|
export const menuListName = 'MenuList';
|
|
6
6
|
|
|
7
|
-
export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
|
|
7
|
+
export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
|
|
8
|
+
gap?: number;
|
|
9
|
+
}
|
|
8
10
|
|
|
9
11
|
export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
|
|
10
12
|
checked?: Record<string, boolean>;
|
|
@@ -15,10 +17,11 @@ export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
|
|
|
15
17
|
|
|
16
18
|
export interface MenuListState extends MenuListProps {
|
|
17
19
|
isCheckedControlled: boolean;
|
|
20
|
+
selectRadio?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
export interface MenuListSlotProps {
|
|
21
|
-
root: React.PropsWithRef<IViewProps
|
|
24
|
+
root: React.PropsWithRef<IViewProps> & { gap?: number };
|
|
22
25
|
}
|
|
23
26
|
export interface MenuListType {
|
|
24
27
|
props: MenuListProps;
|
|
@@ -9,20 +9,25 @@ export const useMenuList = (_props: MenuListProps): MenuListState => {
|
|
|
9
9
|
// MenuList v2 needs to be able to be standalone, but this is not in scope for v1
|
|
10
10
|
// Assuming that checked information will come from parent Menu
|
|
11
11
|
const isCheckedControlled = typeof context.checked !== 'undefined';
|
|
12
|
-
const [checked, onCheckedChange] = useMenuCheckedState(isCheckedControlled, context);
|
|
12
|
+
const [checked, onCheckedChange, selectRadio] = useMenuCheckedState(isCheckedControlled, context);
|
|
13
13
|
|
|
14
14
|
return {
|
|
15
15
|
...context,
|
|
16
16
|
isCheckedControlled,
|
|
17
17
|
checked,
|
|
18
18
|
onCheckedChange,
|
|
19
|
+
selectRadio,
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
const useMenuCheckedState = (
|
|
23
24
|
isControlled: boolean,
|
|
24
25
|
props: MenuListProps,
|
|
25
|
-
): [
|
|
26
|
+
): [
|
|
27
|
+
Record<string, boolean>,
|
|
28
|
+
(e: InteractionEvent, name: string, isChecked: boolean) => void,
|
|
29
|
+
(e: InteractionEvent, name: string, isChecked: boolean) => void,
|
|
30
|
+
] => {
|
|
26
31
|
const { defaultChecked, onCheckedChange, checked } = props;
|
|
27
32
|
const initialState = defaultChecked ?? checked ?? {};
|
|
28
33
|
const [checkedInternal, setCheckedInternal] = React.useState<Record<string, boolean>>(initialState);
|
|
@@ -45,5 +50,19 @@ const useMenuCheckedState = (
|
|
|
45
50
|
[isControlled, state, onCheckedChange, setCheckedInternal],
|
|
46
51
|
);
|
|
47
52
|
|
|
48
|
-
|
|
53
|
+
const selectRadio = React.useCallback(
|
|
54
|
+
(e: InteractionEvent, name: string, isChecked: boolean) => {
|
|
55
|
+
if (!isControlled) {
|
|
56
|
+
const updatedChecked = { [name]: true };
|
|
57
|
+
setCheckedInternal(updatedChecked);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (onCheckedChange) {
|
|
61
|
+
onCheckedChange(e, name, isChecked);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[isControlled, onCheckedChange, setCheckedInternal],
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
return [state, setChecked, selectRadio];
|
|
49
68
|
};
|
|
File without changes
|
|
@@ -16,6 +16,9 @@ export const MenuPopover = stagedComponent((props: MenuPopoverProps) => {
|
|
|
16
16
|
target={state.triggerRef}
|
|
17
17
|
onDismiss={state.onDismiss}
|
|
18
18
|
dismissBehaviors={state.dismissBehaviors}
|
|
19
|
+
setInitialFocus={state.setInitialFocus}
|
|
20
|
+
directionalHint={state.directionalHint}
|
|
21
|
+
doNotTakePointerCapture={state.doNotTakePointerCapture}
|
|
19
22
|
>
|
|
20
23
|
{children}
|
|
21
24
|
</Callout>
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { IViewProps } from '@fluentui-react-native/adapters';
|
|
2
|
-
import { DismissBehaviors } from '@fluentui-react-native/callout';
|
|
2
|
+
import { DirectionalHint, DismissBehaviors } from '@fluentui-react-native/callout';
|
|
3
3
|
|
|
4
4
|
export const menuPopoverName = 'MenuPopover';
|
|
5
5
|
|
|
6
6
|
export interface MenuPopoverProps extends Omit<IViewProps, 'onPress'> {}
|
|
7
7
|
|
|
8
8
|
export interface MenuPopoverState {
|
|
9
|
+
directionalHint?: DirectionalHint;
|
|
9
10
|
dismissBehaviors: DismissBehaviors[];
|
|
11
|
+
doNotTakePointerCapture: boolean;
|
|
10
12
|
onDismiss: () => void;
|
|
13
|
+
setInitialFocus: boolean;
|
|
11
14
|
triggerRef: React.RefObject<React.Component>;
|
|
12
15
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { I18nManager, Platform } from 'react-native';
|
|
3
|
+
import { DirectionalHint, DismissBehaviors } from '@fluentui-react-native/callout';
|
|
3
4
|
import { useMenuContext } from '../context/menuContext';
|
|
4
5
|
import { MenuPopoverProps, MenuPopoverState } from './MenuPopover.types';
|
|
5
6
|
|
|
@@ -12,6 +13,24 @@ export const useMenuPopover = (_props: MenuPopoverProps): MenuPopoverState => {
|
|
|
12
13
|
const dismissBehaviors = context.isControlled
|
|
13
14
|
? (['preventDismissOnKeyDown', 'preventDismissOnClickOutside'] as DismissBehaviors[])
|
|
14
15
|
: undefined;
|
|
16
|
+
const directionalHint = getDirectionalHint(context.isSubmenu, I18nManager.isRTL);
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
// Initial focus behavior differs per platform, Windows platforms move focus
|
|
19
|
+
// automatically onto first element of Callout
|
|
20
|
+
const setInitialFocus = Platform.OS === ('win32' as any) || Platform.OS === 'windows';
|
|
21
|
+
const doNotTakePointerCapture = context.openOnHover;
|
|
22
|
+
|
|
23
|
+
return { triggerRef, onDismiss, directionalHint, dismissBehaviors, doNotTakePointerCapture, setInitialFocus };
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const getDirectionalHint = (isSubmenu: boolean, isRtl: boolean): DirectionalHint | undefined => {
|
|
27
|
+
if (!isSubmenu) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (isRtl) {
|
|
32
|
+
return 'leftTopEdge';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return 'rightTopEdge';
|
|
17
36
|
};
|
|
@@ -2,9 +2,10 @@ import React from 'react';
|
|
|
2
2
|
import { stagedComponent } from '@fluentui-react-native/framework';
|
|
3
3
|
import { menuTriggerName, MenuTriggerProps } from './MenuTrigger.types';
|
|
4
4
|
import { useMenuTrigger } from './useMenuTrigger';
|
|
5
|
+
import { MenuTriggerProvider } from '../context/menuTriggerContext';
|
|
5
6
|
|
|
6
7
|
export const MenuTrigger = stagedComponent((props: MenuTriggerProps) => {
|
|
7
|
-
const
|
|
8
|
+
const menuTrigger = useMenuTrigger(props);
|
|
8
9
|
|
|
9
10
|
return (_rest: MenuTriggerProps, children: React.ReactNode) => {
|
|
10
11
|
const childrenArray = React.Children.toArray(children) as React.ReactElement[];
|
|
@@ -16,9 +17,9 @@ export const MenuTrigger = stagedComponent((props: MenuTriggerProps) => {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
const child = childrenArray[0];
|
|
19
|
-
const revised = React.cloneElement(child,
|
|
20
|
+
const revised = React.cloneElement(child, menuTrigger.props);
|
|
20
21
|
|
|
21
|
-
return
|
|
22
|
+
return <MenuTriggerProvider value={menuTrigger.hasSubmenu}>{revised}</MenuTriggerProvider>;
|
|
22
23
|
};
|
|
23
24
|
});
|
|
24
25
|
MenuTrigger.displayName = menuTriggerName;
|
|
@@ -1,7 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { InteractionEvent, IWithPressableOptions } from '@fluentui-react-native/interactive-hooks';
|
|
2
|
+
import { ViewProps } from 'react-native';
|
|
2
3
|
|
|
3
4
|
export const menuTriggerName = 'MenuTrigger';
|
|
4
5
|
|
|
5
|
-
export interface MenuTriggerProps extends Omit<
|
|
6
|
+
export interface MenuTriggerProps extends Omit<IWithPressableOptions<ViewProps>, 'onPress'> {
|
|
7
|
+
/**
|
|
8
|
+
* A RefObject to refer to the trigger component.
|
|
9
|
+
*/
|
|
10
|
+
componentRef?: React.RefObject<React.Component>;
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
onClick?: (e: InteractionEvent) => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface MenuTriggerState {
|
|
16
|
+
props: MenuTriggerProps;
|
|
17
|
+
hasSubmenu: boolean;
|
|
18
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { useMenuContext } from '../context/menuContext';
|
|
2
2
|
import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
|
|
3
|
-
import { MenuTriggerProps } from './MenuTrigger.types';
|
|
3
|
+
import { MenuTriggerProps, MenuTriggerState } from './MenuTrigger.types';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
4
5
|
|
|
5
|
-
export const useMenuTrigger = (_props: MenuTriggerProps) => {
|
|
6
|
+
export const useMenuTrigger = (_props: MenuTriggerProps): MenuTriggerState => {
|
|
6
7
|
const context = useMenuContext();
|
|
7
8
|
|
|
8
9
|
const setOpen = context.setOpen;
|
|
@@ -10,15 +11,29 @@ export const useMenuTrigger = (_props: MenuTriggerProps) => {
|
|
|
10
11
|
const openOnHover = context.openOnHover;
|
|
11
12
|
const triggerRef = context.triggerRef;
|
|
12
13
|
|
|
14
|
+
const delayHover = Platform.select({
|
|
15
|
+
macos: 100,
|
|
16
|
+
default: 500, // win32
|
|
17
|
+
});
|
|
18
|
+
|
|
13
19
|
const onHoverIn = (e: InteractionEvent) => {
|
|
14
20
|
if (openOnHover) {
|
|
15
21
|
setOpen(e, true /* isOpen */);
|
|
16
22
|
}
|
|
17
23
|
};
|
|
18
24
|
|
|
25
|
+
const onHoverOut = (e: InteractionEvent) => {
|
|
26
|
+
if (openOnHover) {
|
|
27
|
+
setOpen(e, false /* isOpen */);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
19
31
|
const onClick = (e: InteractionEvent) => {
|
|
20
32
|
setOpen(e, !open);
|
|
21
33
|
};
|
|
22
34
|
|
|
23
|
-
return {
|
|
35
|
+
return {
|
|
36
|
+
props: { onClick, onHoverIn, onHoverOut, componentRef: triggerRef, delayHoverIn: delayHover, delayHoverOut: delayHover },
|
|
37
|
+
hasSubmenu: context.isSubmenu,
|
|
38
|
+
};
|
|
24
39
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This context keeps track of whether a trigger component is for a submenu.
|
|
5
|
+
* This allows the trigger to show a submenu indicator.
|
|
6
|
+
*/
|
|
7
|
+
export const MenuTriggerContext = React.createContext<boolean>(false);
|
|
8
|
+
|
|
9
|
+
export const MenuTriggerProvider = MenuTriggerContext.Provider;
|
|
10
|
+
export const useMenuTriggerContext = () => React.useContext(MenuTriggerContext);
|
package/src/index.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { MenuTrigger } from './MenuTrigger/MenuTrigger';
|
|
|
3
3
|
export { MenuPopover } from './MenuPopover/MenuPopover';
|
|
4
4
|
export { MenuItem } from './MenuItem/MenuItem';
|
|
5
5
|
export { MenuItemCheckbox } from './MenuItemCheckbox/MenuItemCheckbox';
|
|
6
|
+
export { MenuItemRadio } from './MenuItemRadio/MenuItemRadio';
|
|
6
7
|
export { MenuList } from './MenuList/MenuList';
|
|
7
8
|
export { MenuDivider } from './MenuDivider/MenuDivider';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuContextValue.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuContextValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,uBAAuB,UAAW,aAAa,KAAG,oBAE9D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuContextValue.js","sourceRoot":"","sources":["../../src/MenuList/useMenuContextValue.ts"],"names":[],"mappings":";AAGA,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,KAAoB;IAC1D,oBAAY,KAAK,EAAG;AACtB,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuContextValue.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuContextValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,uBAAuB,UAAW,aAAa,KAAG,oBAE9D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuContextValue.js","sourceRoot":"","sources":["../../src/MenuList/useMenuContextValue.ts"],"names":[],"mappings":";;;;AAGO,IAAM,uBAAuB,GAAG,UAAC,KAAoB;IAC1D,iCAAY,KAAK,EAAG;AACtB,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC"}
|