mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-09 00:19:13 +08:00
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import type { API } from '@storybook/api';
|
|
import { ADDON_ID } from './constants';
|
|
|
|
const getCurrentViewportIndex = (viewportsKeys: string[], current: string): number =>
|
|
viewportsKeys.indexOf(current);
|
|
|
|
const getNextViewport = (viewportsKeys: string[], current: string): string => {
|
|
const currentViewportIndex = getCurrentViewportIndex(viewportsKeys, current);
|
|
return currentViewportIndex === viewportsKeys.length - 1
|
|
? viewportsKeys[0]
|
|
: viewportsKeys[currentViewportIndex + 1];
|
|
};
|
|
|
|
const getPreviousViewport = (viewportsKeys: string[], current: string): string => {
|
|
const currentViewportIndex = getCurrentViewportIndex(viewportsKeys, current);
|
|
return currentViewportIndex < 1
|
|
? viewportsKeys[viewportsKeys.length - 1]
|
|
: viewportsKeys[currentViewportIndex - 1];
|
|
};
|
|
|
|
export const registerShortcuts = async (api: API, setState: any, viewportsKeys: string[]) => {
|
|
await api.setAddonShortcut(ADDON_ID, {
|
|
label: 'Previous viewport',
|
|
defaultShortcut: ['shift', 'V'],
|
|
actionName: 'previous',
|
|
action: () => {
|
|
const { selected, isRotated } = api.getAddonState(ADDON_ID);
|
|
setState({
|
|
selected: getPreviousViewport(viewportsKeys, selected),
|
|
isRotated,
|
|
});
|
|
},
|
|
});
|
|
|
|
await api.setAddonShortcut(ADDON_ID, {
|
|
label: 'Next viewport',
|
|
defaultShortcut: ['V'],
|
|
actionName: 'next',
|
|
action: () => {
|
|
const { selected, isRotated } = api.getAddonState(ADDON_ID);
|
|
setState({
|
|
selected: getNextViewport(viewportsKeys, selected),
|
|
isRotated,
|
|
});
|
|
},
|
|
});
|
|
|
|
await api.setAddonShortcut(ADDON_ID, {
|
|
label: 'Reset viewport',
|
|
defaultShortcut: ['alt', 'V'],
|
|
actionName: 'reset',
|
|
action: () => {
|
|
const { isRotated } = api.getAddonState(ADDON_ID);
|
|
setState({
|
|
selected: 'reset',
|
|
isRotated,
|
|
});
|
|
},
|
|
});
|
|
};
|