This commit is contained in:
584
client/src/api/initialize.js
Normal file
584
client/src/api/initialize.js
Normal file
@@ -0,0 +1,584 @@
|
||||
function addNavItem(title, icon, route, navItems, key, testid, color = null) {
|
||||
if (!testid) {
|
||||
testid = route;
|
||||
}
|
||||
|
||||
const o = {
|
||||
title,
|
||||
icon,
|
||||
route,
|
||||
navItems,
|
||||
key: key,
|
||||
testid: testid
|
||||
};
|
||||
if (color != null) {
|
||||
o["color"] = color;
|
||||
}
|
||||
o.navItems.forEach(z => {
|
||||
if (z.testid == null) {
|
||||
z.testid = z.route;
|
||||
}
|
||||
});
|
||||
|
||||
window.$gz.store.commit("addNavItem", o);
|
||||
}
|
||||
|
||||
function initNavPanel() {
|
||||
let key = 0;
|
||||
let sub = [];
|
||||
|
||||
/*Service = 1,
|
||||
NotService = 2,
|
||||
Customer = 3,
|
||||
HeadOffice = 4,
|
||||
ServiceContractor = 5 */
|
||||
|
||||
//########## OUTSIDE USERS GROUP (CUSTOMER / HEADOFFICE) ###
|
||||
if (window.$gz.store.getters.isCustomerUser == true) {
|
||||
//clear sublevel array
|
||||
sub = [];
|
||||
|
||||
//Set homePage in store to customer csr for this user type
|
||||
let CustomerHomePageSet = false;
|
||||
|
||||
//USER SETTINGS
|
||||
if (window.$gz.store.state.customerRights.userSettings == true) {
|
||||
sub.push({
|
||||
title: "UserSettings",
|
||||
icon: "$sockiUserCog",
|
||||
route: "/home-user-settings",
|
||||
key: key++
|
||||
});
|
||||
|
||||
window.$gz.store.commit("setHomePage", "/home-user-settings");
|
||||
CustomerHomePageSet = true;
|
||||
}
|
||||
|
||||
if (window.$gz.store.getters.canSubscribeToNotifications) {
|
||||
sub.push({
|
||||
title: "NotifySubscriptionList",
|
||||
icon: "$sockiBullhorn",
|
||||
route: "/home-notify-subscriptions",
|
||||
key: key++
|
||||
});
|
||||
|
||||
window.$gz.store.commit("setHomePage", "/home-notify-subscriptions");
|
||||
CustomerHomePageSet = true;
|
||||
}
|
||||
|
||||
//** CUSTOMER LOGIN HOME (TOP)
|
||||
addNavItem("Home", "$sockiHome", undefined, sub, key++, "homecustomer");
|
||||
|
||||
//last resort home page if nothing else kicked in
|
||||
if (!CustomerHomePageSet) {
|
||||
window.$gz.store.commit("setHomePage", "/no-features-available");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//###### ALL INSIDE USERS FROM HERE DOWN ###############
|
||||
|
||||
//####### HOME GROUP
|
||||
|
||||
//DASHBOARD
|
||||
|
||||
sub.push({
|
||||
title: "Dashboard",
|
||||
icon: "$sockiTachometer",
|
||||
route: "/home-dashboard",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//SEARCH
|
||||
sub.push({
|
||||
title: "Search",
|
||||
icon: "$sockiSearch",
|
||||
route: "/home-search",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//SCHEDULE (personal)
|
||||
sub.push({
|
||||
title: "Schedule",
|
||||
icon: "$sockiCalendarDay",
|
||||
route: "/home-schedule",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//MEMOS
|
||||
sub.push({
|
||||
title: "MemoList",
|
||||
icon: "$sockiInbox",
|
||||
route: "/home-memos",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//REMINDERS
|
||||
sub.push({
|
||||
title: "ReminderList",
|
||||
icon: "$sockiStickyNote",
|
||||
route: "/home-reminders",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//REVIEWS
|
||||
sub.push({
|
||||
title: "ReviewList",
|
||||
icon: "$sockiCalendarCheck",
|
||||
route: "/home-reviews",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//USER SETTINGS
|
||||
sub.push({
|
||||
title: "UserSettings",
|
||||
icon: "$sockiUserCog",
|
||||
route: "/home-user-settings",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//USER NOTIFICATION SUBSCRIPTIONS
|
||||
sub.push({
|
||||
title: "NotifySubscriptionList",
|
||||
icon: "$sockiBullhorn",
|
||||
route: "/home-notify-subscriptions",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//HISTORY / MRU / ACTIVITY (personal)
|
||||
sub.push({
|
||||
title: "History",
|
||||
icon: "$sockiHistory",
|
||||
route: `/history/3/${window.$gz.store.state.userId}/true`,
|
||||
key: key++,
|
||||
testid: "/home-history"
|
||||
});
|
||||
|
||||
//HOME
|
||||
if (sub.length > 0) {
|
||||
//Set homePage in store to dashboard
|
||||
window.$gz.store.commit("setHomePage", "/home-dashboard");
|
||||
addNavItem("Home", "$sockiHome", undefined, sub, key++, "home");
|
||||
}
|
||||
|
||||
//######### CUSTOMER GROUP
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Customer)) {
|
||||
//these all require Customer rights so all in the same block
|
||||
|
||||
//clear sublevel array
|
||||
sub = [];
|
||||
|
||||
//CUSTOMERS subitem
|
||||
sub.push({
|
||||
title: "CustomerList",
|
||||
icon: "$sockiAddressCard",
|
||||
route: "/cust-customers",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//HEAD OFFICES subitem
|
||||
sub.push({
|
||||
title: "HeadOfficeList",
|
||||
icon: "$sockiSitemap",
|
||||
route: "/cust-head-offices",
|
||||
key: key++
|
||||
});
|
||||
|
||||
//Customer / Headoffice Users subitem
|
||||
sub.push({
|
||||
title: "Contacts",
|
||||
icon: "$sockiUsers",
|
||||
route: "/cust-users",
|
||||
key: key++
|
||||
});
|
||||
|
||||
sub.push({
|
||||
title: "CustomerNotifySubscriptionList",
|
||||
icon: "$sockiBullhorn",
|
||||
route: "/cust-notify-subscriptions",
|
||||
key: key++
|
||||
});
|
||||
|
||||
// ** CUSTOMER (TOP)
|
||||
addNavItem(
|
||||
"CustomerList",
|
||||
"$sockiAddressBook",
|
||||
undefined,
|
||||
sub,
|
||||
key++,
|
||||
"customer"
|
||||
);
|
||||
}
|
||||
|
||||
//####### SERVICE GROUP
|
||||
|
||||
sub = [];
|
||||
|
||||
//SCHEDULE (service)
|
||||
if (
|
||||
window.$gz.role.canOpen(window.$gz.type.WorkOrder) ||
|
||||
window.$gz.role.canOpen(window.$gz.type.Quote) ||
|
||||
window.$gz.role.canOpen(window.$gz.type.PM)
|
||||
) {
|
||||
sub.push({
|
||||
title: "Schedule",
|
||||
icon: "$sockiCalendarAlt",
|
||||
route: "/svc-schedule",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//**** Service (TOP GROUP)
|
||||
if (
|
||||
sub.length > 0 &&
|
||||
!window.$gz.role.hasRole([
|
||||
window.$gz.role.AUTHORIZATION_ROLES.TechRestricted
|
||||
])
|
||||
) {
|
||||
addNavItem("Service", "$sockiToolbox", undefined, sub, key++, "service");
|
||||
}
|
||||
|
||||
//######### INVENTORY GROUP
|
||||
|
||||
//clear sublevel array
|
||||
sub = [];
|
||||
|
||||
//PARTS (part list)
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Part)) {
|
||||
sub.push({
|
||||
title: "PartList",
|
||||
icon: "$sockiBoxes",
|
||||
route: "/inv-parts",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//PURCHASE ORDERS / PART REQUESTS
|
||||
if (window.$gz.role.canOpen(window.$gz.type.PurchaseOrder)) {
|
||||
sub.push({
|
||||
title: "InventoryPurchaseOrders",
|
||||
icon: "$sockiTruckLoading",
|
||||
route: "/inv-purchase-orders",
|
||||
key: key++
|
||||
});
|
||||
|
||||
sub.push({
|
||||
title: "WorkOrderItemPartRequestList",
|
||||
icon: "$sockiParachuteBox",
|
||||
route: "/inv-part-requests",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//****************** ACCOUNTING
|
||||
|
||||
//SOCKEYE Keeping this for very likely future accounting functionality
|
||||
sub = [];
|
||||
|
||||
// ** ACCOUNTING (TOP)
|
||||
if (sub.length > 0) {
|
||||
addNavItem(
|
||||
"Accounting",
|
||||
"$sockiCoins",
|
||||
undefined,
|
||||
sub,
|
||||
key++,
|
||||
"accounting"
|
||||
);
|
||||
}
|
||||
|
||||
//############# ADMINISTRATION
|
||||
|
||||
//clear sublevel array
|
||||
sub = [];
|
||||
|
||||
// GLOBAL SETTINGS
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Global)) {
|
||||
sub.push({
|
||||
title: "AdministrationGlobalSettings",
|
||||
icon: "$sockiCogs",
|
||||
route: "/adm-global-settings",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// USERS
|
||||
if (window.$gz.role.canOpen(window.$gz.type.User)) {
|
||||
sub.push({
|
||||
title: "UserList",
|
||||
icon: "$sockiUsers",
|
||||
route: "/adm-users",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//TRANSLATION
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Translation)) {
|
||||
sub.push({
|
||||
title: "TranslationList",
|
||||
icon: "$sockiLanguage",
|
||||
route: "/adm-translations",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//REPORT TEMPLATES
|
||||
if (window.$gz.role.canChange(window.$gz.type.Report)) {
|
||||
sub.push({
|
||||
title: "ReportList",
|
||||
icon: "$sockiThList",
|
||||
route: "/adm-report-templates",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//FILES IN DATABASE
|
||||
if (window.$gz.role.canOpen(window.$gz.type.FileAttachment)) {
|
||||
sub.push({
|
||||
title: "Attachments",
|
||||
icon: "$sockiPaperclip",
|
||||
route: "/adm-attachments",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//EVENT LOG / HISTORY
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Global)) {
|
||||
//not really an appropriate object here just guessing
|
||||
sub.push({
|
||||
title: "History",
|
||||
icon: "$sockiHistory",
|
||||
route: "/adm-history",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//IMPORT
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Global)) {
|
||||
//again, not really an appropriate object type
|
||||
sub.push({
|
||||
title: "Import",
|
||||
icon: "$sockiFileImport",
|
||||
route: "/adm-import",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//INTEGRATION
|
||||
//decision here is that only teh biz admin can *control* or remove an integration
|
||||
//even though all full role inside users can create or edit integrations (just not through the Sockeye user interface)
|
||||
//this is required to support integrations made for various roles like inventory accounting etc
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Global)) {
|
||||
sub.push({
|
||||
title: "IntegrationList",
|
||||
icon: "$sockiCampground",
|
||||
route: "/adm-integrations",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// ** ADMINISTRATION (TOP)
|
||||
if (sub.length > 0) {
|
||||
addNavItem(
|
||||
"Administration",
|
||||
"$sockiUserTie",
|
||||
undefined,
|
||||
sub,
|
||||
key++,
|
||||
"administration"
|
||||
);
|
||||
}
|
||||
|
||||
//############ OPERATIONS
|
||||
|
||||
//clear sublevel array
|
||||
sub = [];
|
||||
|
||||
// BACKUP
|
||||
if (window.$gz.role.canOpen(window.$gz.type.Backup)) {
|
||||
sub.push({
|
||||
title: "Backup",
|
||||
icon: "$sockiFileArchive",
|
||||
route: "/ops-backup",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// SERVER STATE
|
||||
if (window.$gz.role.canChange(window.$gz.type.ServerState)) {
|
||||
sub.push({
|
||||
title: "ServerState",
|
||||
icon: "$sockiDoorOpen",
|
||||
route: "/ops-server-state",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// JOBS
|
||||
if (window.$gz.role.canOpen(window.$gz.type.ServerJob)) {
|
||||
sub.push({
|
||||
title: "ServerJobs",
|
||||
icon: "$sockiRobot",
|
||||
route: "/ops-jobs",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// LOGS
|
||||
if (window.$gz.role.canOpen(window.$gz.type.LogFile)) {
|
||||
sub.push({
|
||||
title: "ServerLog",
|
||||
icon: "$sockiHistory",
|
||||
route: "/ops-log",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
//METRICS
|
||||
if (window.$gz.role.canOpen(window.$gz.type.ServerMetrics)) {
|
||||
sub.push({
|
||||
title: "ServerMetrics",
|
||||
icon: "$sockiFileMedicalAlt",
|
||||
route: "/ops-metrics",
|
||||
key: key++
|
||||
});
|
||||
|
||||
// //PROFILE
|
||||
// //metrics rights
|
||||
// sub.push({
|
||||
// title: "ServerProfiler",
|
||||
// icon: "$sockiBinoculars",
|
||||
// route: "/ops-profile",
|
||||
// key: key++
|
||||
// });
|
||||
}
|
||||
|
||||
//NOTIFICATION CONFIG AND HISTORY
|
||||
if (window.$gz.role.canOpen(window.$gz.type.OpsNotificationSettings)) {
|
||||
sub.push({
|
||||
title: "OpsNotificationSettings",
|
||||
icon: "$sockiBullhorn",
|
||||
route: "/ops-notification-settings",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
if (window.$gz.role.canOpen(window.$gz.type.OpsNotificationSettings)) {
|
||||
sub.push({
|
||||
title: "NotificationDeliveryLog",
|
||||
icon: "$sockiHistory",
|
||||
route: "/ops-notify-log",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
if (window.$gz.role.canOpen(window.$gz.type.OpsNotificationSettings)) {
|
||||
sub.push({
|
||||
title: "NotificationCustomerDeliveryLog",
|
||||
icon: "$sockiHistory",
|
||||
route: "/ops-customer-notify-log",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// OPS VIEW SERVER CONFIGURATION
|
||||
if (window.$gz.role.canOpen(window.$gz.type.GlobalOps)) {
|
||||
sub.push({
|
||||
title: "ViewServerConfiguration",
|
||||
icon: "$sockiInfoCircle",
|
||||
route: "/ops-view-configuration",
|
||||
key: key++
|
||||
});
|
||||
}
|
||||
|
||||
// ** OPERATIONS (TOP)
|
||||
if (sub.length > 0) {
|
||||
addNavItem(
|
||||
"Operations",
|
||||
"$sockiServer",
|
||||
undefined,
|
||||
sub,
|
||||
key++,
|
||||
"operations"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function getUserOptions() {
|
||||
try {
|
||||
const res = await window.$gz.api.get(
|
||||
"user-option/" + window.$gz.store.state.userId
|
||||
);
|
||||
|
||||
if (res.error) {
|
||||
//In a form this would trigger a bunch of validation or error display code but for here and now:
|
||||
//convert error to human readable string for display and popup a notification to user
|
||||
const msg = window.$gz.api.apiErrorToHumanString(res.error);
|
||||
window.$gz.store.commit(
|
||||
"logItem",
|
||||
"Initialize::() fetch useroptions -> error" + msg
|
||||
);
|
||||
window.$gz.eventBus.$emit("notify-error", msg);
|
||||
} else {
|
||||
//Check if overrides and use them here
|
||||
//or else use browser defaults
|
||||
|
||||
const l = {
|
||||
languageOverride: null,
|
||||
timeZoneOverride: null,
|
||||
currencyName: null,
|
||||
hour12: true,
|
||||
//uiColor: "#000000ff",
|
||||
emailAddress: null,
|
||||
mapUrlTemplate: null
|
||||
};
|
||||
|
||||
l.languageOverride = res.data.languageOverride;
|
||||
l.timeZoneOverride = res.data.timeZoneOverride;
|
||||
|
||||
//No browser setting for this so meh
|
||||
l.currencyName = res.data.currencyName;
|
||||
|
||||
if (res.data.hour12 != null) {
|
||||
l.hour12 = res.data.hour12;
|
||||
}
|
||||
|
||||
// l.uiColor = res.data.uiColor || "#000000ff";
|
||||
l.emailAddress = res.data.emailAddress || null;
|
||||
|
||||
l.mapUrlTemplate = res.data.mapUrlTemplate || null;
|
||||
|
||||
window.$gz.store.commit("setUserOptions", l);
|
||||
}
|
||||
} catch (error) {
|
||||
window.$gz.store.commit(
|
||||
"logItem",
|
||||
"Initialize::() fetch useroptions -> error" + error
|
||||
);
|
||||
throw new Error(window.$gz.errorHandler.errorToString(error));
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////
|
||||
// Initialize the app
|
||||
// on change of authentication status
|
||||
export default function initialize() {
|
||||
// eslint-disable-next-line no-async-promise-executor
|
||||
return new Promise(async function(resolve, reject) {
|
||||
if (!window.$gz.store.state.authenticated) {
|
||||
throw new Error("initialize: Error, called but user not authenticated!");
|
||||
}
|
||||
try {
|
||||
await window.$gz.translation.cacheTranslations(
|
||||
window.$gz.translation.coreKeys
|
||||
);
|
||||
initNavPanel();
|
||||
await getUserOptions();
|
||||
|
||||
resolve();
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user