From c52b9deba07718797f1362b9c32ffccf1a52b461 Mon Sep 17 00:00:00 2001 From: iamsivin Date: Fri, 23 Aug 2024 12:48:40 +0530 Subject: [PATCH] feat: Rewrite bulk action mixins to a composable --- .../commands/useBulkActionsHotKeys.js | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 app/javascript/dashboard/routes/dashboard/commands/useBulkActionsHotKeys.js diff --git a/app/javascript/dashboard/routes/dashboard/commands/useBulkActionsHotKeys.js b/app/javascript/dashboard/routes/dashboard/commands/useBulkActionsHotKeys.js new file mode 100644 index 000000000..c77454a78 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/commands/useBulkActionsHotKeys.js @@ -0,0 +1,90 @@ +import { computed } from 'vue'; +import { useI18n } from 'dashboard/composables/useI18n'; +import { useMapGetter } from 'dashboard/composables/store'; +import wootConstants from 'dashboard/constants/globals'; + +import { + CMD_BULK_ACTION_SNOOZE_CONVERSATION, + CMD_BULK_ACTION_REOPEN_CONVERSATION, + CMD_BULK_ACTION_RESOLVE_CONVERSATION, +} from './commandBarBusEvents'; +import { + ICON_SNOOZE_CONVERSATION, + ICON_REOPEN_CONVERSATION, + ICON_RESOLVE_CONVERSATION, +} from './CommandBarIcons'; +import { emitter } from 'shared/helpers/mitt'; + +import { createSnoozeHandlers } from './commandBarActions'; + +const SNOOZE_OPTIONS = wootConstants.SNOOZE_OPTIONS; + +const createEmitHandler = event => () => emitter.emit(event); + +const SNOOZE_CONVERSATION_BULK_ACTIONS = [ + { + id: 'bulk_action_snooze_conversation', + title: 'COMMAND_BAR.COMMANDS.SNOOZE_CONVERSATION', + section: 'COMMAND_BAR.SECTIONS.BULK_ACTIONS', + icon: ICON_SNOOZE_CONVERSATION, + children: Object.values(SNOOZE_OPTIONS), + }, + ...createSnoozeHandlers( + CMD_BULK_ACTION_SNOOZE_CONVERSATION, + 'bulk_action_snooze_conversation', + 'COMMAND_BAR.SECTIONS.BULK_ACTIONS' + ), +]; + +const RESOLVED_CONVERSATION_BULK_ACTIONS = [ + { + id: 'bulk_action_reopen_conversation', + title: 'COMMAND_BAR.COMMANDS.REOPEN_CONVERSATION', + section: 'COMMAND_BAR.SECTIONS.BULK_ACTIONS', + icon: ICON_REOPEN_CONVERSATION, + handler: createEmitHandler(CMD_BULK_ACTION_REOPEN_CONVERSATION), + }, +]; + +const OPEN_CONVERSATION_BULK_ACTIONS = [ + { + id: 'bulk_action_resolve_conversation', + title: 'COMMAND_BAR.COMMANDS.RESOLVE_CONVERSATION', + section: 'COMMAND_BAR.SECTIONS.BULK_ACTIONS', + icon: ICON_RESOLVE_CONVERSATION, + handler: createEmitHandler(CMD_BULK_ACTION_RESOLVE_CONVERSATION), + }, +]; + +export function useBulkActionsHotKeys() { + const { t } = useI18n(); + + const selectedConversations = useMapGetter( + 'bulkActions/getSelectedConversationIds' + ); + + const prepareActions = actions => { + return actions.map(action => ({ + ...action, + title: t(action.title), + section: t(action.section), + })); + }; + + const bulkActionsHotKeys = computed(() => { + let actions = []; + if (selectedConversations.value.length > 0) { + actions = [ + ...SNOOZE_CONVERSATION_BULK_ACTIONS, + ...RESOLVED_CONVERSATION_BULK_ACTIONS, + ...OPEN_CONVERSATION_BULK_ACTIONS, + ]; + } + return prepareActions(actions); + }); + + return { + selectedConversations, + bulkActionsHotKeys, + }; +}