69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
const addedSite = (addedSite, sites) => {
|
|
const sitesWithoutNewSite = removedNewSite(sites)
|
|
return [addedSite,...sitesWithoutNewSite]
|
|
}
|
|
|
|
const updatedSite = (updatedSite, sites) => {
|
|
if (updatedSite.id) {
|
|
const editIdx = sites.findIndex(service => service.id === updatedSite.id)
|
|
const beforeEdit = sites.slice(0, editIdx)
|
|
const afterEdit = sites.slice(editIdx + 1)
|
|
const withEdit = [...beforeEdit, updatedSite]
|
|
return [...withEdit, ...afterEdit]
|
|
}
|
|
}
|
|
|
|
const removedNewSite = (sites) => {
|
|
if (sites.length > 0) {
|
|
const firstSite = sites[0]
|
|
const isNewSite = firstSite.id === -1
|
|
sites = isNewSite ? sites.slice(1) : sites
|
|
return sites
|
|
}
|
|
}
|
|
|
|
const deletedSite = (deletedSiteId, sites) => {
|
|
if (deletedSiteId) {
|
|
const deleteIdx = sites.findIndex(service => service.id === deletedSiteId)
|
|
return sites.slice(0, deleteIdx).concat(sites.slice(deleteIdx + 1))
|
|
}
|
|
}
|
|
|
|
const addedNewRoute = (selectedSite, routes) => {
|
|
let newRoute = routes.find((route) => route.action === 'create')
|
|
if (newRoute) {
|
|
newRoute = {...newRoute, server_id: selectedSite.id}
|
|
const withoutNewRoute = routes.filter(route => route.action !== 'create')
|
|
return [newRoute, ...withoutNewRoute]
|
|
}
|
|
}
|
|
|
|
const updatedRoute = (updatedRoute, routes) => {
|
|
return routes.reduce((acc, cur) => {
|
|
if (cur.id === updatedRoute.id) {
|
|
return [...acc, {
|
|
...cur,
|
|
...updatedRoute,
|
|
action: updatedRoute.action === "create" ? "create" : "update"
|
|
}]
|
|
}
|
|
return [...acc, cur]
|
|
}, [])
|
|
}
|
|
|
|
const deletedRoute = (deletedRouteId, routes) => {
|
|
return routes.reduce((acc, cur) => {
|
|
if (cur.id !== deletedRouteId) return [...acc, cur]
|
|
if (cur.action === "create") return acc
|
|
return [...acc, {
|
|
...cur,
|
|
action: "remove"
|
|
}]
|
|
}, [])
|
|
}
|
|
|
|
const sortedRoutes = (routes) => {
|
|
return routes.sort(({updated_at: a}, {updated_at: b}) => new Date(b).valueOf() - new Date(a).valueOf())
|
|
}
|
|
|
|
export { addedSite, updatedSite, removedNewSite, deletedSite, addedNewRoute, updatedRoute, sortedRoutes, deletedRoute } |