Skip to content

Commit 6948cc4

Browse files
authored
feat(SelectionContext): support for hiding menu items when action in selection menu is disabled (#283)
1 parent 8a17db8 commit 6948cc4

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

src/extensions/behavior/SelectionContext/tooltip.tsx

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ import {ActionStorage} from '../../../core';
88
import {isFunction} from '../../../lodash';
99
import {logger} from '../../../logger';
1010
import {ErrorLoggerBoundary} from '../../../react-utils/ErrorBoundary';
11-
import {Toolbar, ToolbarGroupItemData, ToolbarProps} from '../../../toolbar';
11+
import {
12+
Toolbar,
13+
ToolbarButtonPopupData,
14+
ToolbarGroupItemData,
15+
ToolbarProps,
16+
ToolbarSingleItemData,
17+
} from '../../../toolbar';
1218
import {RendererItem, getReactRendererFromState} from '../ReactRenderer';
1319

1420
type SelectionTooltipBaseProps = {
@@ -30,9 +36,14 @@ const SelectionTooltip: React.FC<SelectionTooltipProps> = ({
3036
);
3137
};
3238

33-
export type ContextGroupItemData = ToolbarGroupItemData<ActionStorage> & {
34-
condition?: (state: EditorState) => void;
35-
};
39+
export type ContextGroupItemData =
40+
| (ToolbarGroupItemData<ActionStorage> & {
41+
condition?: (state: EditorState) => void;
42+
})
43+
| ((ToolbarSingleItemData<ActionStorage> | ToolbarButtonPopupData<ActionStorage>) & {
44+
condition?: 'enabled';
45+
});
46+
3647
export type ContextGroupData = ContextGroupItemData[];
3748
export type ContextConfig = ContextGroupData[];
3849

@@ -94,9 +105,16 @@ export class TooltipView {
94105
return this.baseProps.show
95106
? this.menuConfig
96107
.map((groupData) =>
97-
groupData.filter(({condition}) =>
98-
isFunction(condition) ? condition(this.view.state) : true,
99-
),
108+
groupData.filter((item) => {
109+
const {condition} = item;
110+
if (condition === 'enabled') {
111+
return item.isEnable(this.actions);
112+
}
113+
if (isFunction(condition)) {
114+
return condition(this.view.state);
115+
}
116+
return true;
117+
}),
100118
)
101119
.filter((groupData) => Boolean(groupData.length))
102120
: [];

0 commit comments

Comments
 (0)