private _initButtons()

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);
        });
    }