@fluentui-react-native/menu 0.14.3 → 0.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.json +16 -1
  2. package/CHANGELOG.md +10 -2
  3. package/SPEC.md +5 -6
  4. package/lib/Menu/useMenu.d.ts.map +1 -1
  5. package/lib/Menu/useMenu.js +18 -3
  6. package/lib/Menu/useMenu.js.map +1 -1
  7. package/lib/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -1
  8. package/lib/MenuItemRadio/useMenuItemRadio.js +9 -4
  9. package/lib/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  10. package/lib/MenuList/MenuList.js +1 -1
  11. package/lib/MenuList/MenuList.js.map +1 -1
  12. package/lib/MenuList/MenuList.types.d.ts +10 -5
  13. package/lib/MenuList/MenuList.types.d.ts.map +1 -1
  14. package/lib/MenuList/useMenuList.d.ts.map +1 -1
  15. package/lib/MenuList/useMenuList.js +73 -26
  16. package/lib/MenuList/useMenuList.js.map +1 -1
  17. package/lib/MenuList/useMenuListContextValue.js +1 -1
  18. package/lib/MenuList/useMenuListContextValue.js.map +1 -1
  19. package/lib/__tests__/Menu.test.js +2 -2
  20. package/lib/__tests__/Menu.test.js.map +1 -1
  21. package/lib/context/menuContext.js +2 -2
  22. package/lib/context/menuListContext.d.ts +6 -4
  23. package/lib/context/menuListContext.d.ts.map +1 -1
  24. package/lib/context/menuListContext.js +2 -1
  25. package/lib/context/menuListContext.js.map +1 -1
  26. package/lib-commonjs/Menu/useMenu.d.ts.map +1 -1
  27. package/lib-commonjs/Menu/useMenu.js +18 -3
  28. package/lib-commonjs/Menu/useMenu.js.map +1 -1
  29. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -1
  30. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js +9 -4
  31. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js.map +1 -1
  32. package/lib-commonjs/MenuList/MenuList.js +1 -1
  33. package/lib-commonjs/MenuList/MenuList.js.map +1 -1
  34. package/lib-commonjs/MenuList/MenuList.types.d.ts +10 -5
  35. package/lib-commonjs/MenuList/MenuList.types.d.ts.map +1 -1
  36. package/lib-commonjs/MenuList/useMenuList.d.ts.map +1 -1
  37. package/lib-commonjs/MenuList/useMenuList.js +74 -27
  38. package/lib-commonjs/MenuList/useMenuList.js.map +1 -1
  39. package/lib-commonjs/MenuList/useMenuListContextValue.js +1 -1
  40. package/lib-commonjs/MenuList/useMenuListContextValue.js.map +1 -1
  41. package/lib-commonjs/__tests__/Menu.test.js +2 -2
  42. package/lib-commonjs/__tests__/Menu.test.js.map +1 -1
  43. package/lib-commonjs/context/menuContext.js +2 -2
  44. package/lib-commonjs/context/menuListContext.d.ts +6 -4
  45. package/lib-commonjs/context/menuListContext.d.ts.map +1 -1
  46. package/lib-commonjs/context/menuListContext.js +2 -1
  47. package/lib-commonjs/context/menuListContext.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/Menu/useMenu.ts +28 -3
  50. package/src/MenuItemRadio/useMenuItemRadio.ts +11 -3
  51. package/src/MenuList/MenuList.tsx +1 -1
  52. package/src/MenuList/MenuList.types.ts +10 -5
  53. package/src/MenuList/useMenuList.ts +76 -37
  54. package/src/MenuList/useMenuListContextValue.ts +1 -1
  55. package/src/__tests__/Menu.test.tsx +2 -2
  56. package/src/context/menuContext.ts +2 -2
  57. package/src/context/menuListContext.ts +5 -2
@@ -7,14 +7,19 @@ export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
7
7
  gap?: number;
8
8
  }
9
9
  export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
10
- checked?: Record<string, boolean>;
11
- defaultChecked?: Record<string, boolean>;
10
+ checked?: string[];
11
+ defaultChecked?: string[];
12
12
  hasCheckmarks?: boolean;
13
- onCheckedChange?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
13
+ onCheckedChange?: (e: InteractionEvent, checked: string[]) => void;
14
14
  }
15
- export interface MenuListState extends MenuListProps {
15
+ export interface MenuListState extends Omit<MenuListProps, 'checked' | 'onCheckedChange'> {
16
+ props: MenuListProps;
17
+ checked?: Record<string, boolean>;
16
18
  isCheckedControlled: boolean;
17
- selectRadio?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
19
+ onCheckedChange?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
20
+ selectRadio?: (e: InteractionEvent, name: string) => void;
21
+ addRadioItem: (name: string) => void;
22
+ removeRadioItem: (name: string) => void;
18
23
  }
19
24
  export interface MenuListSlotProps {
20
25
  root: React.PropsWithRef<IViewProps> & {
@@ -1 +1 @@
1
- {"version":3,"file":"MenuList.types.d.ts","sourceRoot":"","sources":["../../src/MenuList/MenuList.types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAErF,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,MAAM,WAAW,cAAe,SAAQ,YAAY,EAAE,sBAAsB;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACnF;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/E;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,iBAAiB,CAAC;CAC9B"}
1
+ {"version":3,"file":"MenuList.types.d.ts","sourceRoot":"","sources":["../../src/MenuList/MenuList.types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAErF,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,MAAM,WAAW,cAAe,SAAQ,YAAY,EAAE,sBAAsB;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IAChE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,iBAAiB,CAAC;IACvF,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAClF,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,iBAAiB,CAAC;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuList.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,eAAO,MAAM,WAAW,WAAY,aAAa,KAAG,aAenD,CAAC"}
1
+ {"version":3,"file":"useMenuList.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAchE,eAAO,MAAM,WAAW,WAAY,aAAa,KAAG,aAyFnD,CAAC"}
@@ -4,42 +4,89 @@ exports.useMenuList = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var react_1 = (0, tslib_1.__importDefault)(require("react"));
6
6
  var menuContext_1 = require("../context/menuContext");
7
+ // Track the radio items so we know what to clear selection from when selectRadio is called
8
+ // Purposefully left out of the hook because
9
+ // 1. RadioItems just keeps track of information - changing this array doesn't need to force rerender
10
+ // 2. Keeping them here means these consts are not recreated on every render, which would force rerendering of all children
11
+ var radioItems = [];
12
+ var addRadioItem = function (name) {
13
+ radioItems.push(name);
14
+ };
15
+ var removeRadioItem = function (name) {
16
+ radioItems.filter(function (item) { return item !== name; });
17
+ };
7
18
  var useMenuList = function (_props) {
8
19
  var context = (0, menuContext_1.useMenuContext)();
9
20
  // MenuList v2 needs to be able to be standalone, but this is not in scope for v1
10
21
  // Assuming that checked information will come from parent Menu
11
- var isCheckedControlled = typeof context.checked !== 'undefined';
12
- var _a = useMenuCheckedState(isCheckedControlled, context), checked = _a[0], onCheckedChange = _a[1], selectRadio = _a[2];
13
- return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, context), { isCheckedControlled: isCheckedControlled, checked: checked, onCheckedChange: onCheckedChange, selectRadio: selectRadio });
14
- };
15
- exports.useMenuList = useMenuList;
16
- var useMenuCheckedState = function (isControlled, props) {
17
- var _a;
18
- var defaultChecked = props.defaultChecked, onCheckedChange = props.onCheckedChange, checked = props.checked;
19
- var initialState = (_a = defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : checked) !== null && _a !== void 0 ? _a : {};
20
- var _b = react_1.default.useState(initialState), checkedInternal = _b[0], setCheckedInternal = _b[1];
21
- var state = isControlled ? checked : checkedInternal;
22
- var setChecked = react_1.default.useCallback(function (e, name, isChecked) {
23
- if (!isControlled) {
24
- var curChecked = state;
25
- curChecked[name] = isChecked;
26
- var updatedChecked = (0, tslib_1.__assign)({}, curChecked);
22
+ var defaultChecked = context.defaultChecked, onCheckedChangeOriginal = context.onCheckedChange, checkedOriginal = context.checked;
23
+ // Convert passed in array to map so that i's easier to look up checked state
24
+ var checkedMap = react_1.default.useMemo(function () {
25
+ var state = {};
26
+ if (!checkedOriginal) {
27
+ return state;
28
+ }
29
+ for (var _i = 0, checkedOriginal_1 = checkedOriginal; _i < checkedOriginal_1.length; _i++) {
30
+ var key = checkedOriginal_1[_i];
31
+ state[key] = true;
32
+ }
33
+ return state;
34
+ }, [checkedOriginal]);
35
+ var _a = react_1.default.useState(function () {
36
+ if (checkedMap) {
37
+ return checkedMap;
38
+ }
39
+ var initialChecked = defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : [];
40
+ var state = {};
41
+ for (var _i = 0, initialChecked_1 = initialChecked; _i < initialChecked_1.length; _i++) {
42
+ var key = initialChecked_1[_i];
43
+ state[key] = true;
44
+ }
45
+ return state;
46
+ }), checkedInternal = _a[0], setCheckedInternal = _a[1];
47
+ var isCheckedControlled = typeof checkedOriginal !== 'undefined';
48
+ var checked = isCheckedControlled ? checkedMap : checkedInternal;
49
+ var onCheckedChange = react_1.default.useCallback(function (e, name, isChecked) {
50
+ var updatedChecked = (0, tslib_1.__assign)({}, checked);
51
+ if (isChecked) {
52
+ updatedChecked[name] = true;
53
+ }
54
+ else {
55
+ delete updatedChecked[name];
56
+ }
57
+ if (!isCheckedControlled) {
27
58
  setCheckedInternal(updatedChecked);
28
59
  }
29
- if (onCheckedChange) {
30
- onCheckedChange(e, name, isChecked);
60
+ if (onCheckedChangeOriginal) {
61
+ onCheckedChangeOriginal(e, Object.keys(updatedChecked));
62
+ }
63
+ }, [isCheckedControlled, checked, onCheckedChangeOriginal, setCheckedInternal]);
64
+ var selectRadio = react_1.default.useCallback(function (e, name) {
65
+ var updatedChecked = {};
66
+ for (var _i = 0, _a = Object.keys(checked); _i < _a.length; _i++) {
67
+ var checkedName = _a[_i];
68
+ if (!radioItems.includes(checkedName)) {
69
+ // Preserve checked state if non-radio items
70
+ updatedChecked[checkedName] = checked[checkedName];
71
+ }
31
72
  }
32
- }, [isControlled, state, onCheckedChange, setCheckedInternal]);
33
- var selectRadio = react_1.default.useCallback(function (e, name, isChecked) {
34
- var _a;
35
- if (!isControlled) {
36
- var updatedChecked = (_a = {}, _a[name] = true, _a);
73
+ updatedChecked[name] = true;
74
+ if (!isCheckedControlled) {
37
75
  setCheckedInternal(updatedChecked);
38
76
  }
39
- if (onCheckedChange) {
40
- onCheckedChange(e, name, isChecked);
77
+ if (onCheckedChangeOriginal) {
78
+ onCheckedChangeOriginal(e, Object.keys(updatedChecked));
41
79
  }
42
- }, [isControlled, onCheckedChange, setCheckedInternal]);
43
- return [state, setChecked, selectRadio];
80
+ }, [isCheckedControlled, onCheckedChangeOriginal, setCheckedInternal, checked]);
81
+ return {
82
+ props: (0, tslib_1.__assign)({}, context),
83
+ isCheckedControlled: isCheckedControlled,
84
+ checked: checked,
85
+ onCheckedChange: onCheckedChange,
86
+ selectRadio: selectRadio,
87
+ addRadioItem: addRadioItem,
88
+ removeRadioItem: removeRadioItem,
89
+ };
44
90
  };
91
+ exports.useMenuList = useMenuList;
45
92
  //# sourceMappingURL=useMenuList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuList.js","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":";;;;AACA,6DAA0B;AAC1B,sDAAwD;AAGjD,IAAM,WAAW,GAAG,UAAC,MAAqB;IAC/C,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IAEjC,iFAAiF;IACjF,+DAA+D;IAC/D,IAAM,mBAAmB,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC;IAC7D,IAAA,KAA0C,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAA1F,OAAO,QAAA,EAAE,eAAe,QAAA,EAAE,WAAW,QAAqD,CAAC;IAElG,uDACK,OAAO,KACV,mBAAmB,qBAAA,EACnB,OAAO,SAAA,EACP,eAAe,iBAAA,EACf,WAAW,aAAA,IACX;AACJ,CAAC,CAAC;AAfW,QAAA,WAAW,eAetB;AAEF,IAAM,mBAAmB,GAAG,UAC1B,YAAqB,EACrB,KAAoB;;IAMZ,IAAA,cAAc,GAA+B,KAAK,eAApC,EAAE,eAAe,GAAc,KAAK,gBAAnB,EAAE,OAAO,GAAK,KAAK,QAAV,CAAW;IAC3D,IAAM,YAAY,GAAG,MAAA,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,OAAO,mCAAI,EAAE,CAAC;IAC/C,IAAA,KAAwC,eAAK,CAAC,QAAQ,CAA0B,YAAY,CAAC,EAA5F,eAAe,QAAA,EAAE,kBAAkB,QAAyD,CAAC;IAEpG,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IAEvD,IAAM,UAAU,GAAG,eAAK,CAAC,WAAW,CAClC,UAAC,CAAmB,EAAE,IAAY,EAAE,SAAkB;QACpD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAM,UAAU,GAAG,KAAK,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAC7B,IAAM,cAAc,6BAAQ,UAAU,CAAE,CAAC;YACzC,kBAAkB,CAAC,cAAc,CAAC,CAAC;SACpC;QAED,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACrC;IACH,CAAC,EACD,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAC3D,CAAC;IAEF,IAAM,WAAW,GAAG,eAAK,CAAC,WAAW,CACnC,UAAC,CAAmB,EAAE,IAAY,EAAE,SAAkB;;QACpD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAM,cAAc,aAAK,GAAC,IAAI,IAAG,IAAI,KAAE,CAAC;YACxC,kBAAkB,CAAC,cAAc,CAAC,CAAC;SACpC;QAED,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACrC;IACH,CAAC,EACD,CAAC,YAAY,EAAE,eAAe,EAAE,kBAAkB,CAAC,CACpD,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC"}
1
+ {"version":3,"file":"useMenuList.js","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMenuListContextValue = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var useMenuListContextValue = function (state) {
6
- return (0, tslib_1.__assign)({}, state);
6
+ return (0, tslib_1.__assign)({ hasCheckmarks: state.props.hasCheckmarks }, state);
7
7
  };
8
8
  exports.useMenuListContextValue = useMenuListContextValue;
9
9
  //# sourceMappingURL=useMenuListContextValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuListContextValue.js","sourceRoot":"","sources":["../../src/MenuList/useMenuListContextValue.ts"],"names":[],"mappings":";;;;AAGO,IAAM,uBAAuB,GAAG,UAAC,KAAoB;IAC1D,iCAAY,KAAK,EAAG;AACtB,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC"}
1
+ {"version":3,"file":"useMenuListContextValue.js","sourceRoot":"","sources":["../../src/MenuList/useMenuListContextValue.ts"],"names":[],"mappings":";;;;AAGO,IAAM,uBAAuB,GAAG,UAAC,KAAoB;IAC1D,+BAAS,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,IAAK,KAAK,EAAG;AAChE,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC"}
@@ -75,7 +75,7 @@ describe('Checkbox component tests', function () {
75
75
  });
76
76
  it('Menu open checkbox defaultChecked', function () {
77
77
  var tree = renderer
78
- .create(React.createElement(Menu_1.Menu, { open: true, defaultChecked: { 'Option 1': true } },
78
+ .create(React.createElement(Menu_1.Menu, { open: true, defaultChecked: ['Option 1'] },
79
79
  React.createElement(MenuTrigger_1.default, null,
80
80
  React.createElement(button_1.ButtonV1, null, "Open")),
81
81
  React.createElement(MenuPopover_1.default, null,
@@ -88,7 +88,7 @@ describe('Checkbox component tests', function () {
88
88
  });
89
89
  it('Menu open checkbox checked', function () {
90
90
  var tree = renderer
91
- .create(React.createElement(Menu_1.Menu, { open: true, checked: { 'Option 1': true } },
91
+ .create(React.createElement(Menu_1.Menu, { open: true, checked: ['Option 1'] },
92
92
  React.createElement(MenuTrigger_1.default, null,
93
93
  React.createElement(button_1.ButtonV1, null, "Open")),
94
94
  React.createElement(MenuPopover_1.default, null,
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.test.js","sourceRoot":"","sources":["../../src/__tests__/Menu.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.test.js","sourceRoot":"","sources":["../../src/__tests__/Menu.test.tsx"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@ var tslib_1 = require("tslib");
5
5
  var React = (0, tslib_1.__importStar)(require("react"));
6
6
  exports.MenuContext = React.createContext({
7
7
  isControlled: false,
8
- checked: {},
9
- defaultChecked: {},
8
+ checked: [],
9
+ defaultChecked: [],
10
10
  hasCheckmarks: false,
11
11
  isSubmenu: false,
12
12
  open: false,
@@ -3,8 +3,10 @@ import type { MenuListState } from '../MenuList/MenuList.types';
3
3
  /**
4
4
  * Context shared between Menu and its child components
5
5
  */
6
- export declare type MenuListContextValue = MenuListState;
7
- export declare const MenuListContext: React.Context<MenuListState>;
8
- export declare const MenuListProvider: React.Provider<MenuListState>;
9
- export declare const useMenuListContext: () => MenuListState;
6
+ export declare type MenuListContextValue = Omit<MenuListState, 'props'> & {
7
+ hasCheckmarks: boolean;
8
+ };
9
+ export declare const MenuListContext: React.Context<MenuListContextValue>;
10
+ export declare const MenuListProvider: React.Provider<MenuListContextValue>;
11
+ export declare const useMenuListContext: () => MenuListContextValue;
10
12
  //# sourceMappingURL=menuListContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"menuListContext.d.ts","sourceRoot":"","sources":["../../src/context/menuListContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;GAEG;AACH,oBAAY,oBAAoB,GAAG,aAAa,CAAC;AAEjD,eAAO,MAAM,eAAe,8BAM1B,CAAC;AAEH,eAAO,MAAM,gBAAgB,+BAA2B,CAAC;AACzD,eAAO,MAAM,kBAAkB,qBAA0C,CAAC"}
1
+ {"version":3,"file":"menuListContext.d.ts","sourceRoot":"","sources":["../../src/context/menuListContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;GAEG;AACH,oBAAY,oBAAoB,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG;IAChE,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,eAAe,qCAO1B,CAAC;AAEH,eAAO,MAAM,gBAAgB,sCAA2B,CAAC;AACzD,eAAO,MAAM,kBAAkB,4BAA0C,CAAC"}
@@ -6,9 +6,10 @@ var React = (0, tslib_1.__importStar)(require("react"));
6
6
  exports.MenuListContext = React.createContext({
7
7
  isCheckedControlled: false,
8
8
  checked: {},
9
- defaultChecked: {},
10
9
  hasCheckmarks: false,
11
10
  onCheckedChange: function () { return false; },
11
+ addRadioItem: function () { return false; },
12
+ removeRadioItem: function () { return false; },
12
13
  });
13
14
  exports.MenuListProvider = exports.MenuListContext.Provider;
14
15
  var useMenuListContext = function () { return React.useContext(exports.MenuListContext); };
@@ -1 +1 @@
1
- {"version":3,"file":"menuListContext.js","sourceRoot":"","sources":["../../src/context/menuListContext.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAQlB,QAAA,eAAe,GAAG,KAAK,CAAC,aAAa,CAAuB;IACvE,mBAAmB,EAAE,KAAK;IAC1B,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;CAC7B,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,uBAAe,CAAC,QAAQ,CAAC;AAClD,IAAM,kBAAkB,GAAG,cAAM,OAAA,KAAK,CAAC,UAAU,CAAC,uBAAe,CAAC,EAAjC,CAAiC,CAAC;AAA7D,QAAA,kBAAkB,sBAA2C"}
1
+ {"version":3,"file":"menuListContext.js","sourceRoot":"","sources":["../../src/context/menuListContext.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAUlB,QAAA,eAAe,GAAG,KAAK,CAAC,aAAa,CAAuB;IACvE,mBAAmB,EAAE,KAAK;IAC1B,OAAO,EAAE,EAAE;IACX,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;IAC5B,YAAY,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;IACzB,eAAe,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;CAC7B,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,uBAAe,CAAC,QAAQ,CAAC;AAClD,IAAM,kBAAkB,GAAG,cAAM,OAAA,KAAK,CAAC,UAAU,CAAC,uBAAe,CAAC,EAAjC,CAAiC,CAAC;AAA7D,QAAA,kBAAkB,sBAA2C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui-react-native/menu",
3
- "version": "0.14.3",
3
+ "version": "0.14.4",
4
4
  "description": "A cross-platform Menu component using the Fluent Design System",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -14,8 +14,10 @@ export const useMenu = (props: MenuProps): MenuState => {
14
14
  const triggerRef = React.useRef();
15
15
  const context = useMenuContext();
16
16
  const isSubmenu = context.triggerRef !== null;
17
- const isControlled = typeof props.open !== 'undefined';
18
- const [open, setOpen] = useMenuOpenState(isControlled, props, context.setOpen);
17
+ const isOpenControlled = typeof props.open !== 'undefined';
18
+ const [open, setOpen] = useMenuOpenState(isOpenControlled, props, context.setOpen);
19
+
20
+ const [checked, onCheckedChange] = useMenuCheckedState(props);
19
21
 
20
22
  // Default behavior for submenu is to open on hover
21
23
  // the ...props line below will override this behavior for a submenu
@@ -33,9 +35,11 @@ export const useMenu = (props: MenuProps): MenuState => {
33
35
  ...props,
34
36
  open,
35
37
  setOpen,
38
+ checked,
39
+ onCheckedChange,
36
40
  triggerRef,
37
41
  isSubmenu,
38
- isControlled,
42
+ isControlled: isOpenControlled,
39
43
  parentPopoverHoverOutTimer,
40
44
  };
41
45
  };
@@ -76,3 +80,24 @@ const useMenuOpenState = (
76
80
 
77
81
  return [state, setOpen];
78
82
  };
83
+
84
+ const useMenuCheckedState = (props: MenuProps): [string[], (e: InteractionEvent, checked: string[]) => void] => {
85
+ const { checked, defaultChecked, onCheckedChange: onCheckedChangeOriginal } = props;
86
+ const [checkedInternal, setCheckedInternal] = React.useState(defaultChecked ?? checked ?? []);
87
+
88
+ const isControlled = typeof checked !== 'undefined';
89
+ const state = isControlled ? checked : checkedInternal;
90
+
91
+ const onCheckedChange = React.useCallback(
92
+ (e: InteractionEvent, checked: string[]) => {
93
+ if (!isControlled) {
94
+ setCheckedInternal(checked);
95
+ }
96
+
97
+ onCheckedChangeOriginal?.(e, checked);
98
+ },
99
+ [isControlled, setCheckedInternal, onCheckedChangeOriginal],
100
+ );
101
+
102
+ return [state, onCheckedChange];
103
+ };
@@ -7,17 +7,25 @@ import { useMenuCheckboxInteraction } from '../MenuItemCheckbox/useMenuItemCheck
7
7
  export const useMenuItemRadio = (props: MenuItemCheckboxProps): MenuItemCheckboxState => {
8
8
  const { disabled, name } = props;
9
9
  const context = useMenuListContext();
10
- const checked = context.checked?.[name];
11
10
  const selectRadio = context.selectRadio;
12
11
 
13
12
  const toggleChecked = React.useCallback(
14
13
  (e: InteractionEvent) => {
15
14
  if (!disabled) {
16
- selectRadio(e, name, !checked);
15
+ selectRadio(e, name);
17
16
  }
18
17
  },
19
- [checked, disabled, name, selectRadio],
18
+ [disabled, name, selectRadio],
20
19
  );
21
20
 
21
+ // Explicitly only run on mount and unmount
22
+ React.useEffect(() => {
23
+ context.addRadioItem(name);
24
+
25
+ return () => {
26
+ context.removeRadioItem(name);
27
+ };
28
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
29
+
22
30
  return useMenuCheckboxInteraction(props, toggleChecked);
23
31
  };
@@ -37,7 +37,7 @@ export const MenuList = compose<MenuListType>({
37
37
  useRender: (userProps: MenuListProps, useSlots: UseSlots<MenuListType>) => {
38
38
  const menuList = useMenuList(userProps);
39
39
  const contextValue = useMenuListContextValue(menuList);
40
- const Slots = useSlots(menuList);
40
+ const Slots = useSlots(menuList.props);
41
41
 
42
42
  return (_final: MenuListProps, children: React.ReactNode) => {
43
43
  return (
@@ -9,15 +9,20 @@ export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
9
9
  }
10
10
 
11
11
  export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
12
- checked?: Record<string, boolean>;
13
- defaultChecked?: Record<string, boolean>;
12
+ checked?: string[];
13
+ defaultChecked?: string[];
14
14
  hasCheckmarks?: boolean;
15
- onCheckedChange?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
15
+ onCheckedChange?: (e: InteractionEvent, checked: string[]) => void;
16
16
  }
17
17
 
18
- export interface MenuListState extends MenuListProps {
18
+ export interface MenuListState extends Omit<MenuListProps, 'checked' | 'onCheckedChange'> {
19
+ props: MenuListProps;
20
+ checked?: Record<string, boolean>;
19
21
  isCheckedControlled: boolean;
20
- selectRadio?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
22
+ onCheckedChange?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
23
+ selectRadio?: (e: InteractionEvent, name: string) => void;
24
+ addRadioItem: (name: string) => void;
25
+ removeRadioItem: (name: string) => void;
21
26
  }
22
27
 
23
28
  export interface MenuListSlotProps {
@@ -3,66 +3,105 @@ import React from 'react';
3
3
  import { useMenuContext } from '../context/menuContext';
4
4
  import { MenuListProps, MenuListState } from './MenuList.types';
5
5
 
6
+ // Track the radio items so we know what to clear selection from when selectRadio is called
7
+ // Purposefully left out of the hook because
8
+ // 1. RadioItems just keeps track of information - changing this array doesn't need to force rerender
9
+ // 2. Keeping them here means these consts are not recreated on every render, which would force rerendering of all children
10
+ const radioItems = [];
11
+ const addRadioItem = (name: string) => {
12
+ radioItems.push(name);
13
+ };
14
+ const removeRadioItem = (name: string) => {
15
+ radioItems.filter((item) => item !== name);
16
+ };
17
+
6
18
  export const useMenuList = (_props: MenuListProps): MenuListState => {
7
19
  const context = useMenuContext();
8
20
 
9
21
  // MenuList v2 needs to be able to be standalone, but this is not in scope for v1
10
22
  // Assuming that checked information will come from parent Menu
11
- const isCheckedControlled = typeof context.checked !== 'undefined';
12
- const [checked, onCheckedChange, selectRadio] = useMenuCheckedState(isCheckedControlled, context);
23
+ const { defaultChecked, onCheckedChange: onCheckedChangeOriginal, checked: checkedOriginal } = context;
13
24
 
14
- return {
15
- ...context,
16
- isCheckedControlled,
17
- checked,
18
- onCheckedChange,
19
- selectRadio,
20
- };
21
- };
25
+ // Convert passed in array to map so that i's easier to look up checked state
26
+ const checkedMap = React.useMemo(() => {
27
+ const state = {};
28
+ if (!checkedOriginal) {
29
+ return state;
30
+ }
31
+
32
+ for (const key of checkedOriginal) {
33
+ state[key] = true;
34
+ }
35
+ return state;
36
+ }, [checkedOriginal]);
37
+
38
+ const [checkedInternal, setCheckedInternal] = React.useState<Record<string, boolean>>(() => {
39
+ if (checkedMap) {
40
+ return checkedMap;
41
+ }
22
42
 
23
- const useMenuCheckedState = (
24
- isControlled: boolean,
25
- props: MenuListProps,
26
- ): [
27
- Record<string, boolean>,
28
- (e: InteractionEvent, name: string, isChecked: boolean) => void,
29
- (e: InteractionEvent, name: string, isChecked: boolean) => void,
30
- ] => {
31
- const { defaultChecked, onCheckedChange, checked } = props;
32
- const initialState = defaultChecked ?? checked ?? {};
33
- const [checkedInternal, setCheckedInternal] = React.useState<Record<string, boolean>>(initialState);
43
+ const initialChecked = defaultChecked ?? [];
44
+ const state = {};
45
+ for (const key of initialChecked) {
46
+ state[key] = true;
47
+ }
48
+ return state;
49
+ });
34
50
 
35
- const state = isControlled ? checked : checkedInternal;
51
+ const isCheckedControlled = typeof checkedOriginal !== 'undefined';
52
+ const checked = isCheckedControlled ? checkedMap : checkedInternal;
36
53
 
37
- const setChecked = React.useCallback(
54
+ const onCheckedChange = React.useCallback(
38
55
  (e: InteractionEvent, name: string, isChecked: boolean) => {
39
- if (!isControlled) {
40
- const curChecked = state;
41
- curChecked[name] = isChecked;
42
- const updatedChecked = { ...curChecked };
56
+ const updatedChecked = { ...checked };
57
+ if (isChecked) {
58
+ updatedChecked[name] = true;
59
+ } else {
60
+ delete updatedChecked[name];
61
+ }
62
+
63
+ if (!isCheckedControlled) {
43
64
  setCheckedInternal(updatedChecked);
44
65
  }
45
66
 
46
- if (onCheckedChange) {
47
- onCheckedChange(e, name, isChecked);
67
+ if (onCheckedChangeOriginal) {
68
+ onCheckedChangeOriginal(e, Object.keys(updatedChecked));
48
69
  }
49
70
  },
50
- [isControlled, state, onCheckedChange, setCheckedInternal],
71
+ [isCheckedControlled, checked, onCheckedChangeOriginal, setCheckedInternal],
51
72
  );
52
73
 
53
74
  const selectRadio = React.useCallback(
54
- (e: InteractionEvent, name: string, isChecked: boolean) => {
55
- if (!isControlled) {
56
- const updatedChecked = { [name]: true };
75
+ (e: InteractionEvent, name: string) => {
76
+ const updatedChecked = {};
77
+ for (const checkedName of Object.keys(checked)) {
78
+ if (!radioItems.includes(checkedName)) {
79
+ // Preserve checked state if non-radio items
80
+ updatedChecked[checkedName] = checked[checkedName];
81
+ }
82
+ }
83
+ updatedChecked[name] = true;
84
+
85
+ if (!isCheckedControlled) {
57
86
  setCheckedInternal(updatedChecked);
58
87
  }
59
88
 
60
- if (onCheckedChange) {
61
- onCheckedChange(e, name, isChecked);
89
+ if (onCheckedChangeOriginal) {
90
+ onCheckedChangeOriginal(e, Object.keys(updatedChecked));
62
91
  }
63
92
  },
64
- [isControlled, onCheckedChange, setCheckedInternal],
93
+ [isCheckedControlled, onCheckedChangeOriginal, setCheckedInternal, checked],
65
94
  );
66
95
 
67
- return [state, setChecked, selectRadio];
96
+ return {
97
+ props: {
98
+ ...context,
99
+ },
100
+ isCheckedControlled,
101
+ checked,
102
+ onCheckedChange,
103
+ selectRadio,
104
+ addRadioItem,
105
+ removeRadioItem,
106
+ };
68
107
  };
@@ -2,5 +2,5 @@ import { MenuListContextValue } from '../context/menuListContext';
2
2
  import { MenuListState } from './MenuList.types';
3
3
 
4
4
  export const useMenuListContextValue = (state: MenuListState): MenuListContextValue => {
5
- return { ...state };
5
+ return { hasCheckmarks: state.props.hasCheckmarks, ...state };
6
6
  };
@@ -110,7 +110,7 @@ describe('Checkbox component tests', () => {
110
110
  it('Menu open checkbox defaultChecked', () => {
111
111
  const tree = renderer
112
112
  .create(
113
- <Menu open defaultChecked={{ 'Option 1': true }}>
113
+ <Menu open defaultChecked={['Option 1']}>
114
114
  <MenuTrigger>
115
115
  <Button>Open</Button>
116
116
  </MenuTrigger>
@@ -130,7 +130,7 @@ describe('Checkbox component tests', () => {
130
130
  it('Menu open checkbox checked', () => {
131
131
  const tree = renderer
132
132
  .create(
133
- <Menu open checked={{ 'Option 1': true }}>
133
+ <Menu open checked={['Option 1']}>
134
134
  <MenuTrigger>
135
135
  <Button>Open</Button>
136
136
  </MenuTrigger>
@@ -13,8 +13,8 @@ export interface MenuContextValue extends MenuState {
13
13
 
14
14
  export const MenuContext = React.createContext<MenuContextValue>({
15
15
  isControlled: false,
16
- checked: {},
17
- defaultChecked: {},
16
+ checked: [],
17
+ defaultChecked: [],
18
18
  hasCheckmarks: false,
19
19
  isSubmenu: false,
20
20
  open: false,
@@ -4,14 +4,17 @@ import type { MenuListState } from '../MenuList/MenuList.types';
4
4
  /**
5
5
  * Context shared between Menu and its child components
6
6
  */
7
- export type MenuListContextValue = MenuListState;
7
+ export type MenuListContextValue = Omit<MenuListState, 'props'> & {
8
+ hasCheckmarks: boolean;
9
+ };
8
10
 
9
11
  export const MenuListContext = React.createContext<MenuListContextValue>({
10
12
  isCheckedControlled: false,
11
13
  checked: {},
12
- defaultChecked: {},
13
14
  hasCheckmarks: false,
14
15
  onCheckedChange: () => false,
16
+ addRadioItem: () => false,
17
+ removeRadioItem: () => false,
15
18
  });
16
19
 
17
20
  export const MenuListProvider = MenuListContext.Provider;