in packages/roosterjs-react-command-bar/lib/components/RoosterCommandBar.tsx [107:155]
private _initButtons(props: RoosterCommandBarProps): void {
const { buttonOverrides = [], emojiPlugin } = props;
const buttonMap = { ...OutOfBoxCommandBarButtonMap };
const visibleButtonKeys = OutOfBoxCommandBarButtons.map(item => item.key);
for (const button of buttonOverrides) {
if (!button) {
continue;
}
const currentButton = buttonMap[button.key];
if (currentButton) {
buttonMap[button.key] = { ...currentButton, ...button };
const currentSubMenuProps = currentButton.subMenuProps;
const subMenuPropsOverride = button.subMenuPropsOverride;
if (currentSubMenuProps && subMenuPropsOverride) {
buttonMap[button.key].subMenuProps = {
...currentSubMenuProps,
...subMenuPropsOverride,
className: css(currentSubMenuProps.className, subMenuPropsOverride.className)
};
}
} else {
buttonMap[button.key] = button;
}
if (visibleButtonKeys.indexOf(button.key) === -1) {
visibleButtonKeys.push(button.key);
}
}
if (!emojiPlugin) {
const emojiIndex = visibleButtonKeys.indexOf(ButtonKeys.Emoji);
if (emojiIndex > -1) {
visibleButtonKeys.splice(emojiIndex, 1);
}
}
this._buttons = visibleButtonKeys.map(key => this._createButton(buttonMap[key])).filter(b => !!b && !b.exclude);
this._buttons.sort((l: RoosterCommandBarButtonInternal, r: RoosterCommandBarButtonInternal) => {
if (l.order !== r.order) {
const leftOrder = l.order == null ? Number.MAX_VALUE : l.order;
const rightOrder = r.order == null ? Number.MAX_VALUE : r.order;
return leftOrder - rightOrder;
}
return visibleButtonKeys.indexOf(l.key) - visibleButtonKeys.indexOf(r.key);
});
}