From b2f7da00d58456fe1b3ec2945fe2bcb803e94699 Mon Sep 17 00:00:00 2001 From: iamsivin Date: Fri, 23 Aug 2024 12:43:33 +0530 Subject: [PATCH] feat: Rewrite inbox view mixins to a composable --- .../dashboard/commands/useInboxHotKeys.js | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 app/javascript/dashboard/routes/dashboard/commands/useInboxHotKeys.js diff --git a/app/javascript/dashboard/routes/dashboard/commands/useInboxHotKeys.js b/app/javascript/dashboard/routes/dashboard/commands/useInboxHotKeys.js new file mode 100644 index 000000000..3dba69791 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/commands/useInboxHotKeys.js @@ -0,0 +1,88 @@ +import { computed } from 'vue'; +import { useI18n } from 'dashboard/composables/useI18n'; +import { useRoute } from 'dashboard/composables/route'; +import wootConstants from 'dashboard/constants/globals'; + +import { CMD_SNOOZE_NOTIFICATION } from './commandBarBusEvents'; +import { ICON_SNOOZE_NOTIFICATION } from './CommandBarIcons'; +import { emitter } from 'shared/helpers/mitt'; + +import { isAInboxViewRoute } from 'dashboard/helper/routeHelpers'; + +const SNOOZE_OPTIONS = wootConstants.SNOOZE_OPTIONS; + +const createSnoozeHandler = option => () => + emitter.emit(CMD_SNOOZE_NOTIFICATION, option); + +const INBOX_SNOOZE_EVENTS = [ + { + id: 'snooze_notification', + title: 'COMMAND_BAR.COMMANDS.SNOOZE_NOTIFICATION', + icon: ICON_SNOOZE_NOTIFICATION, + children: Object.values(SNOOZE_OPTIONS), + }, + { + id: SNOOZE_OPTIONS.AN_HOUR_FROM_NOW, + title: 'COMMAND_BAR.COMMANDS.AN_HOUR_FROM_NOW', + parent: 'snooze_notification', + section: 'COMMAND_BAR.SECTIONS.SNOOZE_NOTIFICATION', + icon: ICON_SNOOZE_NOTIFICATION, + handler: createSnoozeHandler(SNOOZE_OPTIONS.AN_HOUR_FROM_NOW), + }, + { + id: SNOOZE_OPTIONS.UNTIL_TOMORROW, + title: 'COMMAND_BAR.COMMANDS.UNTIL_TOMORROW', + section: 'COMMAND_BAR.SECTIONS.SNOOZE_NOTIFICATION', + parent: 'snooze_notification', + icon: ICON_SNOOZE_NOTIFICATION, + handler: createSnoozeHandler(SNOOZE_OPTIONS.UNTIL_TOMORROW), + }, + { + id: SNOOZE_OPTIONS.UNTIL_NEXT_WEEK, + title: 'COMMAND_BAR.COMMANDS.UNTIL_NEXT_WEEK', + section: 'COMMAND_BAR.SECTIONS.SNOOZE_NOTIFICATION', + parent: 'snooze_notification', + icon: ICON_SNOOZE_NOTIFICATION, + handler: createSnoozeHandler(SNOOZE_OPTIONS.UNTIL_NEXT_WEEK), + }, + { + id: SNOOZE_OPTIONS.UNTIL_NEXT_MONTH, + title: 'COMMAND_BAR.COMMANDS.UNTIL_NEXT_MONTH', + section: 'COMMAND_BAR.SECTIONS.SNOOZE_NOTIFICATION', + parent: 'snooze_notification', + icon: ICON_SNOOZE_NOTIFICATION, + handler: createSnoozeHandler(SNOOZE_OPTIONS.UNTIL_NEXT_MONTH), + }, + { + id: SNOOZE_OPTIONS.UNTIL_CUSTOM_TIME, + title: 'COMMAND_BAR.COMMANDS.UNTIL_CUSTOM_TIME', + section: 'COMMAND_BAR.SECTIONS.SNOOZE_NOTIFICATION', + parent: 'snooze_notification', + icon: ICON_SNOOZE_NOTIFICATION, + handler: createSnoozeHandler(SNOOZE_OPTIONS.UNTIL_CUSTOM_TIME), + }, +]; + +export function useInboxHotKeys() { + const { t } = useI18n(); + const route = useRoute(); + + const prepareActions = actions => { + return actions.map(action => ({ + ...action, + title: t(action.title), + section: action.section ? t(action.section) : undefined, + })); + }; + + const inboxHotKeys = computed(() => { + if (isAInboxViewRoute(route.name)) { + return prepareActions(INBOX_SNOOZE_EVENTS); + } + return []; + }); + + return { + inboxHotKeys, + }; +}