import { CONTACT_PROMPT_MODAL_KEY, CREDENTIAL_EDIT_MODAL_KEY, DUPLICATE_MODAL_KEY, PERSONALIZATION_MODAL_KEY, TAGS_MANAGER_MODAL_KEY, VERSIONS_MODAL_KEY, WORKFLOW_OPEN_MODAL_KEY, CREDENTIAL_SELECT_MODAL_KEY, WORKFLOW_SETTINGS_MODAL_KEY, CREDENTIAL_LIST_MODAL_KEY, VALUE_SURVEY_MODAL_KEY, EXECUTIONS_MODAL_KEY, WORKFLOW_ACTIVE_MODAL_KEY } from '@/constants'; import Vue from 'vue'; import { ActionContext, Module } from 'vuex'; import { IRootState, IUiState, } from '../Interface'; const module: Module = { namespaced: true, state: { modals: { [CONTACT_PROMPT_MODAL_KEY]: { open: false, }, [CREDENTIAL_EDIT_MODAL_KEY]: { open: false, mode: '', activeId: null, }, [CREDENTIAL_LIST_MODAL_KEY]: { open: false, }, [CREDENTIAL_SELECT_MODAL_KEY]: { open: false, }, [DUPLICATE_MODAL_KEY]: { open: false, }, [PERSONALIZATION_MODAL_KEY]: { open: false, }, [TAGS_MANAGER_MODAL_KEY]: { open: false, }, [WORKFLOW_OPEN_MODAL_KEY]: { open: false, }, [VALUE_SURVEY_MODAL_KEY]: { open: false, }, [VERSIONS_MODAL_KEY]: { open: false, }, [WORKFLOW_SETTINGS_MODAL_KEY]: { open: false, }, [EXECUTIONS_MODAL_KEY]: { open: false, }, [WORKFLOW_ACTIVE_MODAL_KEY]: { open: false, }, }, modalStack: [], sidebarMenuCollapsed: true, isPageLoading: true, }, getters: { isVersionsOpen: (state: IUiState) => { return state.modals[VERSIONS_MODAL_KEY].open; }, isModalOpen: (state: IUiState) => { return (name: string) => state.modals[name].open; }, isModalActive: (state: IUiState) => { return (name: string) => state.modalStack.length > 0 && name === state.modalStack[0]; }, getModalActiveId: (state: IUiState) => { return (name: string) => state.modals[name].activeId; }, getModalMode: (state: IUiState) => { return (name: string) => state.modals[name].mode; }, sidebarMenuCollapsed: (state: IUiState): boolean => state.sidebarMenuCollapsed, }, mutations: { setMode: (state: IUiState, params: {name: string, mode: string}) => { const { name, mode } = params; Vue.set(state.modals[name], 'mode', mode); }, setActiveId: (state: IUiState, params: {name: string, id: string}) => { const { name, id } = params; Vue.set(state.modals[name], 'activeId', id); }, openModal: (state: IUiState, name: string) => { Vue.set(state.modals[name], 'open', true); state.modalStack = [name].concat(state.modalStack); }, closeModal: (state: IUiState, name: string) => { Vue.set(state.modals[name], 'open', false); state.modalStack = state.modalStack.filter((openModalName: string) => { return name !== openModalName; }); }, closeAllModals: (state: IUiState) => { Object.keys(state.modals).forEach((name: string) => { if (state.modals[name].open) { Vue.set(state.modals[name], 'open', false); } }); state.modalStack = []; }, toggleSidebarMenuCollapse: (state: IUiState) => { state.sidebarMenuCollapsed = !state.sidebarMenuCollapsed; }, }, actions: { openModal: async (context: ActionContext, modalKey: string) => { context.commit('openModal', modalKey); }, openExisitngCredential: async (context: ActionContext, { id }: {id: string}) => { context.commit('setActiveId', {name: CREDENTIAL_EDIT_MODAL_KEY, id}); context.commit('setMode', {name: CREDENTIAL_EDIT_MODAL_KEY, mode: 'edit'}); context.commit('openModal', CREDENTIAL_EDIT_MODAL_KEY); }, openNewCredential: async (context: ActionContext, { type }: {type: string}) => { context.commit('setActiveId', {name: CREDENTIAL_EDIT_MODAL_KEY, id: type}); context.commit('setMode', {name: CREDENTIAL_EDIT_MODAL_KEY, mode: 'new'}); context.commit('openModal', CREDENTIAL_EDIT_MODAL_KEY); }, }, }; export default module;