This commit is contained in:
@@ -2,13 +2,18 @@
|
||||
@@@@@@@@@@@@@@@ ROADMAP STAGE 4 - REPORTING / DASHBOARD / KPI
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
todo: deploy and ui test login page for build 71, send to joyce, ask about fixup shirt logo if possible
|
||||
todo: deploy and ui test login page for build 71,
|
||||
|
||||
todo: known issues has some efficiency settings for themes and good stuff to know, check it: https://github.com/vuetifyjs/vuetify/releases/tag/v2.3.0#user-content-known-issues
|
||||
|
||||
todo: is notifynewcount request double sending? It seems like it appears twice at the same moment in the log
|
||||
|
||||
todo: lodash, according to lighthouse it's vulnerable version and needs update
|
||||
can I just remove it and replace the functionality with built in javascript methods now?
|
||||
window.$gz._
|
||||
pick-list.vue uses the debounce function which can be replicated with this code here:
|
||||
https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_debounce
|
||||
|
||||
todo: libs outside of package.json, check if they are outdated or need updating or can be replaced / removed
|
||||
|
||||
|
||||
@@ -444,6 +449,8 @@ https://www.youtube.com/watch?v=zZVoo5AbANI
|
||||
Nothing to do here, it's an obvious one, just delete this later, it's to percolate in brain a bit
|
||||
maybe under license
|
||||
|
||||
PLAIN TEXT EMAILS / ONBOARDING
|
||||
https://blog.palabra.io/great-onboarding-plain-text
|
||||
|
||||
MARKETING
|
||||
Analytics alternatives to Google:
|
||||
|
||||
668
ayanova/package-lock.json
generated
668
ayanova/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -13,9 +13,9 @@
|
||||
"myLint": "npm run lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^1.2.31",
|
||||
"@fortawesome/free-regular-svg-icons": "^5.15.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.0",
|
||||
"@fortawesome/fontawesome-svg-core": "^1.2.32",
|
||||
"@fortawesome/free-regular-svg-icons": "^5.15.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.1",
|
||||
"@fortawesome/vue-fontawesome": "^2.0.0",
|
||||
"chart.js": "^2.9.3",
|
||||
"chartjs-adapter-luxon": "^0.2.2",
|
||||
@@ -33,21 +33,21 @@
|
||||
"vue": "^2.6.12",
|
||||
"vue-chartjs": "^3.5.1",
|
||||
"vue-currency-input": "1.20.3",
|
||||
"vue-router": "^3.4.5",
|
||||
"vuetify": "^2.3.12",
|
||||
"vue-router": "^3.4.6",
|
||||
"vuetify": "^2.3.13",
|
||||
"vuex": "^3.5.1",
|
||||
"vuex-persistedstate": "^2.7.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cypress/webpack-preprocessor": "^4.1.5",
|
||||
"@vue/cli-plugin-babel": "^4.5.6",
|
||||
"@vue/cli-plugin-e2e-cypress": "^4.5.6",
|
||||
"@vue/cli-plugin-eslint": "^4.5.6",
|
||||
"@vue/cli-plugin-pwa": "^4.5.6",
|
||||
"@vue/cli-plugin-router": "^4.5.6",
|
||||
"@vue/cli-plugin-unit-jest": "^4.5.6",
|
||||
"@vue/cli-plugin-vuex": "^4.5.6",
|
||||
"@vue/cli-service": "^4.5.6",
|
||||
"@vue/cli-plugin-babel": "^4.5.7",
|
||||
"@vue/cli-plugin-e2e-cypress": "^4.5.7",
|
||||
"@vue/cli-plugin-eslint": "^4.5.7",
|
||||
"@vue/cli-plugin-pwa": "^4.5.7",
|
||||
"@vue/cli-plugin-router": "^4.5.7",
|
||||
"@vue/cli-plugin-unit-jest": "^4.5.7",
|
||||
"@vue/cli-plugin-vuex": "^4.5.7",
|
||||
"@vue/cli-service": "^4.5.7",
|
||||
"@vue/eslint-config-prettier": "^6.0.0",
|
||||
"@vue/test-utils": "^1.1.0",
|
||||
"babel-core": "6.26.3",
|
||||
@@ -59,7 +59,7 @@
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"fibers": "^4.0.3",
|
||||
"prettier": "^1.19.1",
|
||||
"sass": "^1.26.11",
|
||||
"sass": "^1.26.12",
|
||||
"sass-loader": "^8.0.2",
|
||||
"vue-cli-plugin-vuetify": "^2.0.7",
|
||||
"vue-template-compiler": "^2.6.12",
|
||||
|
||||
@@ -51,7 +51,7 @@ export default {
|
||||
return false;
|
||||
}
|
||||
//array form?
|
||||
if (window.$gz._.isArray(desiredRole)) {
|
||||
if (Array.isArray(desiredRole)) {
|
||||
//it's an array of roles, iterate and if any are present then return true
|
||||
for (let i = 0; i < desiredRole.length; i++) {
|
||||
if ((window.$gz.store.state.roles & desiredRole[i]) != 0) {
|
||||
@@ -101,9 +101,19 @@ export default {
|
||||
let ret = this.defaultRightsObject();
|
||||
|
||||
//Get the type name from the type enum value
|
||||
let typeName = window.$gz._.findKey(window.$gz.type, function(o) {
|
||||
return o == oType;
|
||||
});
|
||||
//de-lodash
|
||||
// let typeName = window.$gz. _.findKey(window.$gz.type, function(o) {
|
||||
// return o == oType;
|
||||
// });
|
||||
|
||||
//my _.findKey replacement:
|
||||
let typeName = undefined;
|
||||
for (const [key, value] of Object.entries(window.$gz.type)) {
|
||||
if (value == oType) {
|
||||
typeName = key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Get the AyaNova stock REQUIRED role rights for that object
|
||||
let objectRoleRights = this.ROLE_RIGHTS[typeName];
|
||||
|
||||
@@ -30,7 +30,7 @@ export default {
|
||||
// Used by forms to fetch selection list data
|
||||
// Sorts alphabetically by default but can be turned off with do not sort
|
||||
//
|
||||
getSelectionList(enumKey, doNotSort) {
|
||||
getSelectionList(enumKey) {
|
||||
enumKey = enumKey.toLowerCase();
|
||||
let e = window.$gz.store.state.enums[enumKey];
|
||||
if (!e) {
|
||||
@@ -41,16 +41,24 @@ export default {
|
||||
);
|
||||
}
|
||||
let ret = [];
|
||||
//turn it into an array suitable for selection lists
|
||||
window.$gz._.forOwn(e, function(value, key) {
|
||||
ret.push({ id: Number(key), name: value });
|
||||
});
|
||||
|
||||
if (doNotSort == true) {
|
||||
return ret;
|
||||
} else {
|
||||
return window.$gz._.sortBy(ret, "name");
|
||||
//de-lodash
|
||||
// //turn it into an array suitable for selection lists
|
||||
// window.$gz._.forOwn(e, function(value, key) {
|
||||
// ret.push({ id: Number(key), name: value });
|
||||
// });
|
||||
|
||||
//turn it into an array suitable for selection lists
|
||||
for (const [key, value] of Object.entries(e)) {
|
||||
ret.push({ id: Number(key), name: value });
|
||||
}
|
||||
|
||||
//e is an object with keys of id values i.e. {1:"display1",2:"display 2"}
|
||||
//what needs to be returned is an array of objects like: [{id:1,name:"display1"},{id:2,name:"display2"}]
|
||||
|
||||
console.log("enum::getSelectionList, e is: ", e);
|
||||
console.log("ret is", ret);
|
||||
return window.$gz._.sortBy(ret, "name");
|
||||
},
|
||||
///////////////////////////////////
|
||||
//
|
||||
|
||||
@@ -130,8 +130,8 @@ export default new Vuex.Store({
|
||||
msg = Date.now() + "|" + msg;
|
||||
state.logArray.push(msg);
|
||||
if (state.logArray.length > MaxLogLength) {
|
||||
state.logArray = window.$gz._.drop(
|
||||
state.logArray,
|
||||
//remove beginning elements
|
||||
state.logArray = state.logArray.slice(
|
||||
state.logArray.length - MaxLogLength
|
||||
);
|
||||
}
|
||||
|
||||
@@ -329,11 +329,6 @@ async function populateSelectionLists(vm) {
|
||||
"NotifyEventType"
|
||||
);
|
||||
|
||||
// await window.$gz.enums.fetchEnumList("NotifyDeliveryMethod");
|
||||
// vm.selectLists.deliveryMethods = window.$gz.enums.getSelectionList(
|
||||
// "NotifyDeliveryMethod"
|
||||
// );
|
||||
|
||||
await window.$gz.enums.fetchEnumList("ayatype");
|
||||
vm.selectLists.ayaTypes = window.$gz.enums.getSelectionList("ayatype");
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ describe("SEARCH", () => {
|
||||
|
||||
cy.get("[data-cy=btnopenitem1] > .v-list-item__title")
|
||||
.invoke("text")
|
||||
.then((t) => {
|
||||
.then(t => {
|
||||
sub = t;
|
||||
//nave to first result form
|
||||
cy.get("[data-cy=btnopenitem1]").click();
|
||||
|
||||
@@ -12,7 +12,7 @@ describe("PICK LIST TEMPLATE", () => {
|
||||
cy.get("input[name=password]")
|
||||
.clear()
|
||||
.type(`${Cypress.env("adminpassword")}{enter}`);
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
|
||||
cy.visit("/adm-global-settings");
|
||||
cy.url().should("include", "/adm-global-settings");
|
||||
|
||||
@@ -96,7 +96,6 @@ describe("SMOKE", () => {
|
||||
cy.url().should("include", "/adm-attachments");
|
||||
cy.visit("/adm-history");
|
||||
cy.url().should("include", "/adm-history");
|
||||
|
||||
|
||||
cy.visit("/ops-backup");
|
||||
cy.url().should("include", "/ops-backup");
|
||||
|
||||
@@ -15,7 +15,7 @@ describe("TRANSLATION", () => {
|
||||
.type("fr{enter}");
|
||||
|
||||
// we should be redirected to /dashboard
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
|
||||
//nav to about form
|
||||
cy.get("[data-cy=contextmenu]").click();
|
||||
@@ -49,7 +49,7 @@ describe("TRANSLATION", () => {
|
||||
.type("es{enter}");
|
||||
|
||||
// we should be redirected to /dashboard
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
|
||||
//nav to about form
|
||||
cy.get("[data-cy=contextmenu]").click();
|
||||
@@ -79,7 +79,7 @@ describe("TRANSLATION", () => {
|
||||
.type("de{enter}");
|
||||
|
||||
// we should be redirected to /dashboard
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
// cy.url().should("include", "/home-dashboard");
|
||||
|
||||
//nav to about form
|
||||
cy.get("[data-cy=contextmenu]").click();
|
||||
|
||||
@@ -26,7 +26,7 @@ describe("WIDGET FORM", () => {
|
||||
//save the start url for later
|
||||
let startUrl = null;
|
||||
//funcs are async so need to get result via then
|
||||
cy.url().then((url) => {
|
||||
cy.url().then(url => {
|
||||
startUrl = url;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user