154 lines
5.2 KiB
JavaScript
154 lines
5.2 KiB
JavaScript
import { config, configRoutes } from './StaticData.js';
|
|
import routeOptions from './routeOptions.json'
|
|
import Services from '@helpers/Services/Services.js';
|
|
import {addedSite, updatedSite, removedNewSite, deletedSite, addedNewRoute, updatedRoute, sortedRoutes, deletedRoute} from './helpers.js';
|
|
import {isEmpty, dissoc} from 'ramda';
|
|
import RoutesClass from "@helpers/server-routes/Routes.js";
|
|
|
|
const routerManager = new RoutesClass(import.meta.env.VITE_API_ADDR, configRoutes)
|
|
const services = new Services(import.meta.env.VITE_API_ADDR, config)
|
|
|
|
const initState = {
|
|
sites: [],
|
|
sitesState: "loading",
|
|
isSaveData: false,
|
|
selectedSite: null,
|
|
|
|
routes: [],
|
|
routesState: "await",
|
|
routesLib: {},
|
|
};
|
|
|
|
const state = {
|
|
...initState
|
|
};
|
|
|
|
const getters = {
|
|
isSaveData: (state) => state.isSaveData,
|
|
sites: (state) => state.sites,
|
|
routes: (state) => state.routes.filter(({action}) => !["remove", "delete"].includes(action)),
|
|
routesLib: (state) => state.routes.reduce((acc, cur) => ({
|
|
...acc,
|
|
[cur.id]: cur
|
|
}), {}),
|
|
routesState: (state) => state.routesState,
|
|
sitesState: (state) => state.sitesState,
|
|
routeOptions: () => routeOptions,
|
|
selectedSite: (state) => state.selectedSite,
|
|
};
|
|
|
|
const mutations = {
|
|
setIsSaveData: (state, payload) => state.isSaveData = payload,
|
|
setSites: (state, payload) => state.sites = payload,
|
|
setSitesState: (state, payload) => state.sitesState = payload,
|
|
setSelectedSite: (state, payload) => state.selectedSite = payload,
|
|
setRoutes: (state, payload) => state.routes = payload,
|
|
setRoutesState: (state, payload) => state.routesState = payload,
|
|
};
|
|
|
|
const actions = {
|
|
addNewSiteLayout: ({commit, getters}) => {
|
|
const newSite = {"port": "", "name": "", id: -1}
|
|
commit('setSites', [newSite,...getters.sites])
|
|
commit('setSelectedSite', newSite)
|
|
commit('setRoutes', [])
|
|
commit('setRoutesState', "active")
|
|
},
|
|
createNewSite: async ({dispatch, commit, getters, state}, payload) => {
|
|
commit('setIsSaveData', false)
|
|
commit('setSelectedSite', null)
|
|
const newSite = await services.createService(payload)
|
|
const updatedSites = addedSite(newSite, getters.sites)
|
|
if (!isEmpty(updatedSites)) {
|
|
const newSite = updatedSites[0]
|
|
const updatedRoutes = addedNewRoute(newSite, state.routes)
|
|
commit('setRoutes', updatedRoutes)
|
|
dispatch('updateRoutesWithApi', newSite)
|
|
return commit('setSites', updatedSites)
|
|
}
|
|
},
|
|
breakeAddingSite: ({commit}) => {
|
|
commit('setSelectedSite', null)
|
|
},
|
|
uploadSites: async ({commit}) => {
|
|
const sites = await services.getServices()
|
|
commit('setSites', sites)
|
|
commit('setSitesState', 'active')
|
|
},
|
|
editSelectedSite: async ({commit, getters}, payload) => {
|
|
const selectedSite = getters.selectedSite
|
|
selectedSite[payload.key] = payload.value
|
|
commit('setSelectedSite', selectedSite)
|
|
},
|
|
saveSite: async ({commit, getters}, payload) => {
|
|
commit('setIsSaveData', false)
|
|
commit('setSelectedSite', null)
|
|
const editedSite = await services.updateService(payload)
|
|
const updatedSites = !isEmpty(editedSite) ? updatedSite(editedSite, getters.sites) : getters.sites
|
|
commit('setSites', updatedSites)
|
|
},
|
|
breakSavingSite: ({commit}) => {
|
|
commit('setSelectedSite', null)
|
|
commit('setRoutesState', "await")
|
|
},
|
|
removeSite: async ({commit, getters}, id) => {
|
|
const deletedSiteId = await services.deleteService(id)
|
|
const updatedSites = deletedSite(deletedSiteId, getters.sites)
|
|
if (!isEmpty(updatedSites)) return commit('setSites', updatedSites)
|
|
},
|
|
uploadSiteRoutes: async ({commit, getters}, siteProps) => {
|
|
const sites = removedNewSite(getters.sites)
|
|
commit('setSites', sites)
|
|
commit('setSelectedSite', siteProps)
|
|
commit('setRoutesState', "loading")
|
|
let routes = await routerManager.getRouterById(siteProps.id)
|
|
routes = sortedRoutes(routes)
|
|
commit('setRoutes', routes)
|
|
commit('setRoutesState', "active")
|
|
},
|
|
addNewRouteLayout: ({commit, getters}) => {
|
|
const newRoute = {
|
|
"path": null,
|
|
"role": null,
|
|
id: Math.random().toString(36).slice(4),
|
|
action: "create",
|
|
server_id: getters.selectedSite.id
|
|
}
|
|
commit('setRoutes', [newRoute, ...state.routes])
|
|
},
|
|
updateRouteRow: ({commit, state}, editRoute) => {
|
|
const updatedRoutes = updatedRoute(editRoute, state.routes)
|
|
commit('setRoutes', updatedRoutes)
|
|
},
|
|
updateRoutesWithApi: async ({commit, state}, payload) => {
|
|
commit('setRoutesState', "loading")
|
|
let updatedRoutes = state.routes.filter(({action}) => action)
|
|
updatedRoutes = updatedRoutes.map((el) => {
|
|
if (el.action === "create") return dissoc('id', el)
|
|
return el
|
|
})
|
|
await routerManager.updateGroupRoutes(updatedRoutes)
|
|
let routes = await routerManager.getRouterById(payload.id)
|
|
routes = sortedRoutes(routes)
|
|
commit('setRoutes', routes)
|
|
commit('setRoutesState', "await")
|
|
},
|
|
removeRoute: ({commit, state}, {id}) => {
|
|
const updatedRoutes = deletedRoute(id, state.routes)
|
|
commit('setRoutes', updatedRoutes)
|
|
},
|
|
resetStore: ({state}) => {
|
|
Object.entries(initState).forEach(([k,v]) => {
|
|
state[k] = v
|
|
})
|
|
},
|
|
};
|
|
|
|
export const store = {
|
|
namespaced: true,
|
|
state,
|
|
getters,
|
|
mutations,
|
|
actions,
|
|
};
|