From d2f5b5f976c568c445cd424bbf136a8f26148bfb Mon Sep 17 00:00:00 2001 From: Vishnu Narayanan Date: Thu, 25 Jan 2024 15:41:14 +0530 Subject: [PATCH] chore: refactor 2 --- app/javascript/dashboard/api/sla.js | 6 +- .../helper/AnalyticsHelper/events.js | 6 + .../dashboard/i18n/locale/en/sla.json | 2 +- app/javascript/dashboard/store/index.js | 2 + app/javascript/dashboard/store/modules/sla.js | 103 ++++++++++++++++++ .../dashboard/store/mutation-types.js | 7 ++ 6 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 app/javascript/dashboard/store/modules/sla.js diff --git a/app/javascript/dashboard/api/sla.js b/app/javascript/dashboard/api/sla.js index f1e2ae15f..7aec3cc27 100644 --- a/app/javascript/dashboard/api/sla.js +++ b/app/javascript/dashboard/api/sla.js @@ -2,9 +2,9 @@ import ApiClient from './ApiClient'; -class SLA extends ApiClient { +class SlaAPI extends ApiClient { constructor() { - super('sla', { accountScoped: true }); + super('sla_policies', { accountScoped: true }); } get({ page }) { @@ -13,4 +13,4 @@ class SLA extends ApiClient { } } -export default new SLA(); +export default new SlaAPI(); diff --git a/app/javascript/dashboard/helper/AnalyticsHelper/events.js b/app/javascript/dashboard/helper/AnalyticsHelper/events.js index 30f82d554..60f880d0e 100644 --- a/app/javascript/dashboard/helper/AnalyticsHelper/events.js +++ b/app/javascript/dashboard/helper/AnalyticsHelper/events.js @@ -102,3 +102,9 @@ export const OPEN_AI_EVENTS = Object.freeze({ export const GENERAL_EVENTS = Object.freeze({ COMMAND_BAR: 'Used commandbar', }); + +export const SLA_EVENTS = Object.freeze({ + CREATE: 'Created an SLA', + UPDATE: 'Updated an SLA', + DELETED: 'Deleted an SLA', +}); diff --git a/app/javascript/dashboard/i18n/locale/en/sla.json b/app/javascript/dashboard/i18n/locale/en/sla.json index 0ec558eed..bc068700b 100644 --- a/app/javascript/dashboard/i18n/locale/en/sla.json +++ b/app/javascript/dashboard/i18n/locale/en/sla.json @@ -1,5 +1,5 @@ { - "SLA_MGMT": { + "SLA": { "HEADER": "SLA", "HEADER_BTN_TXT": "Add sla", "LOADING": "Fetching slas", diff --git a/app/javascript/dashboard/store/index.js b/app/javascript/dashboard/store/index.js index 2d1564b79..91b84ddd1 100755 --- a/app/javascript/dashboard/store/index.js +++ b/app/javascript/dashboard/store/index.js @@ -38,6 +38,7 @@ import macros from './modules/macros'; import notifications from './modules/notifications'; import portals from './modules/helpCenterPortals'; import reports from './modules/reports'; +import sla from './modules/sla'; import teamMembers from './modules/teamMembers'; import teams from './modules/teams'; import userNotificationSettings from './modules/userNotificationSettings'; @@ -109,6 +110,7 @@ export default new Vuex.Store({ userNotificationSettings, webhooks, draftMessages, + sla, }, plugins, }); diff --git a/app/javascript/dashboard/store/modules/sla.js b/app/javascript/dashboard/store/modules/sla.js new file mode 100644 index 000000000..b633feb98 --- /dev/null +++ b/app/javascript/dashboard/store/modules/sla.js @@ -0,0 +1,103 @@ +import * as MutationHelpers from 'shared/helpers/vuex/mutationHelpers'; +import types from '../mutation-types'; +import SlaAPI from '../../api/sla'; +import AnalyticsHelper from '../../helper/AnalyticsHelper'; +import { SLA_EVENTS } from '../../helper/AnalyticsHelper/events'; + +export const state = { + records: [], + uiFlags: { + isFetching: false, + isFetchingItem: false, + isCreating: false, + isDeleting: false, + }, +}; + +export const getters = { + getSLA(_state) { + return _state.records; + }, + getUIFlags(_state) { + return _state.uiFlags; + }, +}; + +export const actions = { + get: async function getSLA({ commit }) { + commit(types.SET_SLA_UI_FLAG, { isFetching: true }); + try { + const response = await SlaAPI.get(true); + const sortedSLA = response.data.payload.sort((a, b) => + a.title.localeCompare(b.title) + ); + commit(types.SET_SLA, sortedSLA); + } catch (error) { + // Ignore error + } finally { + commit(types.SET_SLA_UI_FLAG, { isFetching: false }); + } + }, + + create: async function createSLA({ commit }, cannedObj) { + commit(types.SET_SLA_UI_FLAG, { isCreating: true }); + try { + const response = await SlaAPI.create(cannedObj); + AnalyticsHelper.track(SLA_EVENTS.CREATE); + commit(types.ADD_SLA, response.data); + } catch (error) { + const errorMessage = error?.response?.data?.message; + throw new Error(errorMessage); + } finally { + commit(types.SET_SLA_UI_FLAG, { isCreating: false }); + } + }, + + update: async function updateSLA({ commit }, { id, ...updateObj }) { + commit(types.SET_SLA_UI_FLAG, { isUpdating: true }); + try { + const response = await SlaAPI.update(id, updateObj); + AnalyticsHelper.track(SLA_EVENTS.UPDATE); + commit(types.EDIT_SLA, response.data); + } catch (error) { + throw new Error(error); + } finally { + commit(types.SET_SLA_UI_FLAG, { isUpdating: false }); + } + }, + + delete: async function deleteSLA({ commit }, id) { + commit(types.SET_SLA_UI_FLAG, { isDeleting: true }); + try { + await SlaAPI.delete(id); + AnalyticsHelper.track(SLA_EVENTS.DELETED); + commit(types.DELETE_SLA, id); + } catch (error) { + throw new Error(error); + } finally { + commit(types.SET_SLA_UI_FLAG, { isDeleting: false }); + } + }, +}; + +export const mutations = { + [types.SET_SLA_UI_FLAG](_state, data) { + _state.uiFlags = { + ..._state.uiFlags, + ...data, + }; + }, + + [types.SET_SLA]: MutationHelpers.set, + [types.ADD_SLA]: MutationHelpers.create, + [types.EDIT_SLA]: MutationHelpers.update, + [types.DELETE_SLA]: MutationHelpers.destroy, +}; + +export default { + namespaced: true, + state, + getters, + actions, + mutations, +}; diff --git a/app/javascript/dashboard/store/mutation-types.js b/app/javascript/dashboard/store/mutation-types.js index 1f7996ca7..9ed133993 100644 --- a/app/javascript/dashboard/store/mutation-types.js +++ b/app/javascript/dashboard/store/mutation-types.js @@ -296,4 +296,11 @@ export default { SET_AUDIT_LOGS_UI_FLAG: 'SET_AUDIT_LOGS_UI_FLAG', SET_AUDIT_LOGS: 'SET_AUDIT_LOGS', SET_AUDIT_LOGS_META: 'SET_AUDIT_LOGS_META', + + // SLA + SET_SLA_UI_FLAG: 'SET_SLA_UI_FLAG', + SET_SLA: 'SET_SLA', + ADD_SLA: 'ADD_SLA', + EDIT_SLA: 'EDIT_SLA', + DELETE_SLA: 'DELETE_SLA', };