PromucFlow_constructor/app/client/src/pages/common/CustomizedDropdown/dropdownHelpers.tsx
2020-01-27 08:24:58 +00:00

65 lines
1.8 KiB
TypeScript

import store from "store";
import { IconNames } from "@blueprintjs/icons";
import { Direction, Directions } from "utils/helpers";
import { PopoverPosition } from "@blueprintjs/core";
import history from "utils/history";
export const DropdownOnSelectActions: { [id: string]: string } = {
REDIRECT: "redirect",
DISPATCH: "dispatch",
};
type DropdownOnSelectActionType = typeof DropdownOnSelectActions[keyof typeof DropdownOnSelectActions];
// TODO(abhinav): Figure out how to enforce payload type.
export const getOnSelectAction = (
type: DropdownOnSelectActionType,
payload: any,
) => {
switch (type) {
case DropdownOnSelectActions.DISPATCH:
store.dispatch(payload);
break;
case DropdownOnSelectActions.REDIRECT:
if (history.location.pathname !== payload.path) {
history.push(payload.path);
}
break;
default:
console.log("No such action registered", type);
}
};
export const getDirectionBased: {
[id: string]: (direction: Direction) => string;
} = {
ICON_NAME: (direction: Direction) => {
switch (direction) {
case Directions.UP:
return IconNames.CHEVRON_UP;
case Directions.DOWN:
return IconNames.CHEVRON_DOWN;
case Directions.LEFT:
return IconNames.CHEVRON_LEFT;
case Directions.RIGHT:
return IconNames.CHEVRON_RIGHT;
default:
return IconNames.CHEVRON_DOWN;
}
},
POPPER_POSITION: (direction: Direction) => {
switch (direction) {
case Directions.UP:
return PopoverPosition.TOP;
case Directions.DOWN:
return PopoverPosition.BOTTOM;
case Directions.LEFT:
return PopoverPosition.LEFT_BOTTOM;
case Directions.RIGHT:
return PopoverPosition.RIGHT_TOP;
default:
return PopoverPosition.BOTTOM_RIGHT;
}
},
};