92 lines
2.6 KiB
JavaScript
92 lines
2.6 KiB
JavaScript
import routes from 'src/router/routes';
|
|
import { ref } from 'vue';
|
|
import axios from 'axios';
|
|
|
|
const favorites = ref([]);
|
|
const modules = ref([]);
|
|
|
|
const mainRoute = routes.find((route) => route.path === '/');
|
|
const moduleRoutes = (mainRoute && mainRoute.children) || [];
|
|
|
|
for (const route of moduleRoutes) {
|
|
const module = {
|
|
stateName: route.name,
|
|
name: route.name.toLowerCase(),
|
|
roles: [],
|
|
};
|
|
|
|
if (route.meta) {
|
|
Object.assign(module, route.meta);
|
|
}
|
|
|
|
if (route.children && route.children.length) {
|
|
const [moduleMain] = route.children;
|
|
const routes = moduleMain.children;
|
|
|
|
module.children = routes.map((route) => {
|
|
const submodule = {
|
|
stateName: route.name,
|
|
name: route.name,
|
|
};
|
|
|
|
Object.assign(submodule, route.meta);
|
|
|
|
return submodule;
|
|
});
|
|
}
|
|
modules.value.push(module);
|
|
}
|
|
|
|
export function useNavigation() {
|
|
const salixModules = {
|
|
customer: 'Clients',
|
|
claim: 'Claims',
|
|
entry: 'Entries',
|
|
invoiceIn: 'Invoices In',
|
|
invoiceOut: 'Invoices Out',
|
|
item: 'Items',
|
|
monitor: 'Monitors',
|
|
order: 'Orders',
|
|
route: 'Routes',
|
|
supplier: 'Suppliers',
|
|
ticket: 'Tickets',
|
|
travel: 'Travels',
|
|
user: 'Users',
|
|
worker: 'Workers',
|
|
zone: 'Zones',
|
|
};
|
|
|
|
async function fetchFavorites() {
|
|
const response = await axios.get('StarredModules/getStarredModules');
|
|
|
|
const filteredModules = modules.value.filter((module) => {
|
|
return response.data.find((element) => element.moduleFk == salixModules[module.name]);
|
|
});
|
|
|
|
return (favorites.value = filteredModules);
|
|
}
|
|
|
|
async function toggleFavorite(moduleName, event) {
|
|
if (event.defaultPrevented) return;
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
const params = { moduleName: salixModules[moduleName] };
|
|
const query = 'api/starredModules/toggleStarredModule';
|
|
await axios.post(query, params);
|
|
|
|
updateFavorites(moduleName);
|
|
}
|
|
|
|
function updateFavorites(name) {
|
|
if (!favorites.value.find((module) => module.name == name)) {
|
|
const newStarreModule = modules.value.find((module) => module.name == name);
|
|
favorites.value.push(newStarreModule);
|
|
} else {
|
|
const moduleToRemove = favorites.value.find((module) => module.name == name);
|
|
favorites.value.splice(favorites.value.indexOf(moduleToRemove), 1);
|
|
}
|
|
}
|
|
|
|
return { modules, favorites, toggleFavorite, fetchFavorites, updateFavorites };
|
|
} |