HUGE REFACTOR / CLEANUP
if there is a issue it's probably something in here that was changed
This commit is contained in:
@@ -1,5 +1,3 @@
|
||||
/* xeslint-disable */
|
||||
|
||||
import bizrolerights from "./biz-role-rights";
|
||||
|
||||
export default {
|
||||
@@ -118,15 +116,9 @@ export default {
|
||||
//DELETE = SAME AS CHANGE FOR NOW (There is no specific delete right for now though it's checked for by routes in Authorized.cs in case we want to add it in future as a separate right from create.)
|
||||
//NOTE: biz rules can supersede this, this is just for general rights purposes, if an object has restrictive business rules they will take precedence every time.
|
||||
|
||||
let ret = this.defaultRightsObject();
|
||||
const ret = this.defaultRightsObject();
|
||||
|
||||
//Get the type name from the type enum value
|
||||
//de-lodash
|
||||
// let typeName = window.$gz. _.findKey(window.$gz.type, function(o) {
|
||||
// return o == aType;
|
||||
// });
|
||||
|
||||
//my _.findKey replacement:
|
||||
let typeName = undefined;
|
||||
for (const [key, value] of Object.entries(window.$gz.type)) {
|
||||
if (value == aType) {
|
||||
@@ -136,7 +128,7 @@ export default {
|
||||
}
|
||||
|
||||
//Get the AyaNova stock REQUIRED role rights for that object
|
||||
let objectRoleRights = this.ROLE_RIGHTS[typeName];
|
||||
const objectRoleRights = this.ROLE_RIGHTS[typeName];
|
||||
if (!objectRoleRights) {
|
||||
throw new Error(
|
||||
`authorizationroles::getRights type ${aType} not found in roles collection`
|
||||
@@ -144,11 +136,11 @@ export default {
|
||||
}
|
||||
|
||||
//get the logged in user's role
|
||||
let userRole = window.$gz.store.state.roles;
|
||||
const userRole = window.$gz.store.state.roles;
|
||||
//calculate the effective rights
|
||||
//a non zero result of the bitwise calculation means true and zero means false so using !! to force it into a boolean value
|
||||
//(contrary to some style guides that say !! is obscure but I say it saves a lot of typing)
|
||||
let canChange = !!(userRole & objectRoleRights.Change);
|
||||
const canChange = !!(userRole & objectRoleRights.Change);
|
||||
//sometimes rights to read are false if change is true since change trumps read anyway so accordingly:
|
||||
let canReadFullRecord = canChange;
|
||||
if (!canReadFullRecord) {
|
||||
@@ -167,7 +159,7 @@ export default {
|
||||
// (i.e. grids, history etc, initialization of main menu etc)
|
||||
//
|
||||
canOpen(aType) {
|
||||
let r = this.getRights(aType);
|
||||
const r = this.getRights(aType);
|
||||
//convention is change might be defined but not read so canOpen is true eitehr way
|
||||
return r.change == true || r.read == true;
|
||||
},
|
||||
@@ -176,46 +168,7 @@ export default {
|
||||
// (i.e. grids, history etc, initialization of main menu etc)
|
||||
//
|
||||
canChange(aType) {
|
||||
let r = this.getRights(aType);
|
||||
const r = this.getRights(aType);
|
||||
return r.change == true;
|
||||
}
|
||||
};
|
||||
/*
|
||||
USING BITWISE OPERATORS CHEAT SHEET
|
||||
//https://codeburst.io/using-javascript-bitwise-operators-in-real-life-f551a731ff5
|
||||
// Test whether your bit number has a single attribute. '&' ensures
|
||||
// an intersection between them.
|
||||
if (myBitNumber & HAS_FOO1) {
|
||||
// False, in this example
|
||||
}
|
||||
if (myBitNumber & HAS_FOO2) {
|
||||
// True!
|
||||
}
|
||||
|
||||
// Test whether your bit number has ANY of the specified attributes
|
||||
if (myBitNumber & (HAS_FOO1 | HAS_FOO2)) {
|
||||
// True!
|
||||
}
|
||||
if (myBitNumber & (HAS_FOO1 | HAS_FOO3)) {
|
||||
// False
|
||||
}
|
||||
|
||||
// Test whether your bit number contains ONLY the specified attributes
|
||||
if (myBitNumber == (HAS_FOO2 | HAS_FOO4)) {
|
||||
// True
|
||||
}
|
||||
if (myBitNumber == (HAS_FOO2 | HAS_FOO3 | HAS_FOO4)) {
|
||||
// False
|
||||
}
|
||||
|
||||
// Test whether your bit number contains ALL of the given
|
||||
// attributes. This is slightly tricky: the union of ATTRIBUTES
|
||||
// can't supersede `myBitNumber` alone, otherwise it contains a bit
|
||||
// that `myBitNumber` doesn't.
|
||||
if (myBitNumber == (myBitNumber | (HAS_FOO2 | HAS_FOO4))) {
|
||||
// True
|
||||
}
|
||||
if (myBitNumber == (myBitNumber | (HAS_FOO2 | HAS_FOO3 | HAS_FOO4))) {
|
||||
// False
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* xeslint-disable */
|
||||
//import decode from "jwt-decode";
|
||||
import jwt_decode from "jwt-decode";
|
||||
import initialize from "./initialize";
|
||||
import notifypoll from "./notifypoll";
|
||||
@@ -69,11 +67,11 @@ export function processLogin(authResponse, loggedInWithKnownPassword) {
|
||||
// );
|
||||
|
||||
//Get global settings
|
||||
let gsets = await window.$gz.api.get("global-biz-setting/client");
|
||||
const gsets = await window.$gz.api.get("global-biz-setting/client");
|
||||
if (gsets.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
|
||||
let msg = window.$gz.api.apiErrorToHumanString(gsets.error);
|
||||
const msg = window.$gz.api.apiErrorToHumanString(gsets.error);
|
||||
window.$gz.eventBus.$emit("notify-error", msg);
|
||||
} else {
|
||||
//Check if overrides and use them here
|
||||
@@ -99,7 +97,6 @@ export function processLogout() {
|
||||
}
|
||||
|
||||
export function isLoggedIn() {
|
||||
//const token = getToken();
|
||||
return (
|
||||
!!window.$gz.store.state.apiToken &&
|
||||
!isTokenExpired(window.$gz.store.state.apiToken)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import authorizationroles from "./authorizationroles";
|
||||
let role = authorizationroles.AUTHORIZATION_ROLES;
|
||||
const role = authorizationroles.AUTHORIZATION_ROLES;
|
||||
export default {
|
||||
registry: [
|
||||
{
|
||||
@@ -48,9 +48,9 @@ export default {
|
||||
}
|
||||
],
|
||||
availableItems() {
|
||||
let ret = [];
|
||||
const ret = [];
|
||||
for (let i = 0; i < this.registry.length; i++) {
|
||||
let item = this.registry[i];
|
||||
const item = this.registry[i];
|
||||
if (authorizationroles.hasRole(item.roles)) {
|
||||
ret.push({ id: item.id, title: item.title, type: item.type });
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* ZZeslint-disable */
|
||||
|
||||
export default {
|
||||
get(enumKey, enumValue) {
|
||||
enumKey = enumKey.toLowerCase();
|
||||
@@ -11,13 +9,13 @@ export default {
|
||||
}
|
||||
return window.$gz.store.state.enums[enumKey][enumValue];
|
||||
} else {
|
||||
let ret = [];
|
||||
const ret = [];
|
||||
if (enumValue == null || enumValue == 0) {
|
||||
return "";
|
||||
}
|
||||
let availableRoles = this.getSelectionList("AuthorizationRoles");
|
||||
const availableRoles = this.getSelectionList("AuthorizationRoles");
|
||||
for (let i = 0; i < availableRoles.length; i++) {
|
||||
let role = availableRoles[i];
|
||||
const role = availableRoles[i];
|
||||
if (!!(enumValue & role.id)) {
|
||||
ret.push(role.name);
|
||||
}
|
||||
@@ -32,7 +30,7 @@ export default {
|
||||
//
|
||||
getSelectionList(enumKey, noSort) {
|
||||
enumKey = enumKey.toLowerCase();
|
||||
let e = window.$gz.store.state.enums[enumKey];
|
||||
const e = window.$gz.store.state.enums[enumKey];
|
||||
if (!e) {
|
||||
throw new Error(
|
||||
"ERROR enums::getSelectionList -> enumKey " +
|
||||
@@ -40,7 +38,7 @@ export default {
|
||||
" is missing from store"
|
||||
);
|
||||
}
|
||||
let ret = [];
|
||||
const ret = [];
|
||||
|
||||
//turn it into an array suitable for selection lists
|
||||
for (const [key, value] of Object.entries(e)) {
|
||||
@@ -65,19 +63,19 @@ export default {
|
||||
for (let i = 0; i < enumKey.length; i++) {
|
||||
//check if list
|
||||
//if not then fetch it and store it
|
||||
let k = enumKey[i].toLowerCase();
|
||||
const k = enumKey[i].toLowerCase();
|
||||
|
||||
//de-lodash
|
||||
// if (!window.$gz. _.has(window.$gz.store.state.enums, k)) {
|
||||
//enums is an object this is checking if that object has a key with the name in k
|
||||
if (!window.$gz.util.has(window.$gz.store.state.enums, k)) {
|
||||
let that = this;
|
||||
const that = this;
|
||||
// eslint-disable-next-line
|
||||
let dat = await that.fetchEnumKey(k);
|
||||
const dat = await that.fetchEnumKey(k);
|
||||
//massage the data as necessary
|
||||
let e = { enumKey: k, items: {} };
|
||||
const e = { enumKey: k, items: {} };
|
||||
for (let i = 0; i < dat.length; i++) {
|
||||
let o = dat[i];
|
||||
const o = dat[i];
|
||||
e.items[o.id] = o.name;
|
||||
}
|
||||
//stuff the data into the store
|
||||
@@ -87,7 +85,7 @@ export default {
|
||||
},
|
||||
async fetchEnumKey(enumKey) {
|
||||
// eslint-disable-next-line
|
||||
let res = await window.$gz.api.get("enum-list/list/" + enumKey);
|
||||
const res = await window.$gz.api.get("enum-list/list/" + enumKey);
|
||||
//We never expect there to be no data here
|
||||
if (!res.hasOwnProperty("data")) {
|
||||
return Promise.reject(res);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* xeslint-disable */
|
||||
let lastMessageHash = 0;
|
||||
let lastMessageTimeStamp = new Date();
|
||||
|
||||
@@ -9,9 +8,9 @@ let lastMessageTimeStamp = new Date();
|
||||
async function dealWithError(msg, vm) {
|
||||
//Check if this is the same message again as last time within a short time span to avoid endless looping errors of same message
|
||||
//but still allow for user to repeat operation that causes error so they can view it
|
||||
let newHash = window.$gz.util.quickHash(msg);
|
||||
const newHash = window.$gz.util.quickHash(msg);
|
||||
if (newHash == lastMessageHash) {
|
||||
let tsnow = new Date();
|
||||
const tsnow = new Date();
|
||||
//don't show the same exact message if it was just shown less than 1 second ago
|
||||
if (tsnow - lastMessageTimeStamp < 1000) return;
|
||||
}
|
||||
@@ -29,7 +28,7 @@ async function dealWithError(msg, vm) {
|
||||
}
|
||||
window.$gz.store.commit("logItem", msg);
|
||||
if (window.$gz.dev) {
|
||||
let errMsg = "DEV MODE errorHandler.js:: Unexpected error: \r\n" + msg;
|
||||
const errMsg = "DEV MODE errorHandler.js:: Unexpected error: \r\n" + msg;
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(errMsg);
|
||||
|
||||
@@ -41,7 +40,6 @@ async function dealWithError(msg, vm) {
|
||||
if (!vm || vm.formState == undefined) {
|
||||
//popup if no place to display it elsewise
|
||||
window.$gz.eventBus.$emit("notify-error", msg);
|
||||
//debugger;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -98,7 +96,7 @@ function decodeError(e, vm) {
|
||||
|
||||
//API error object?
|
||||
if (e.error) {
|
||||
let err = e.error;
|
||||
const err = e.error;
|
||||
// {
|
||||
// "code": "2002",
|
||||
// "message": "See server log for details",
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/*Xeslint-disable */
|
||||
|
||||
///Add data key names which make the custom fields control work more easily
|
||||
///Since the names can be inferred from the data that comes from the server it saves bandwidth to do it here at the client
|
||||
function addDataKeyNames(obj) {
|
||||
@@ -27,7 +25,7 @@ export default {
|
||||
!window.$gz.util.has(window.$gz.store.state.formCustomTemplate, formKey)
|
||||
) {
|
||||
//fetch and populate the store
|
||||
let res = await window.$gz.api.get("form-custom/" + formKey);
|
||||
const res = await window.$gz.api.get("form-custom/" + formKey);
|
||||
if (res.error) {
|
||||
throw new Error(window.$gz.errorHandler.errorToString(res, vm));
|
||||
}
|
||||
@@ -55,7 +53,7 @@ export default {
|
||||
);
|
||||
}
|
||||
|
||||
let template = window.$gz.store.state.formCustomTemplate[formKey];
|
||||
const template = window.$gz.store.state.formCustomTemplate[formKey];
|
||||
if (template === undefined) {
|
||||
throw new Error(
|
||||
"ERROR form-custom-template::getFieldTemplateValue -> Store is missing form template for [" +
|
||||
@@ -66,12 +64,10 @@ export default {
|
||||
|
||||
//Note that not every field being requested will exist so it's valid to return undefined
|
||||
//template is an array of objects that contain a key called "fld"
|
||||
//de-lodash
|
||||
//let templateItem = window.$gz. _.find(template, ["fld", fieldKey]);
|
||||
return template.find(z => z.fld == fieldKey);
|
||||
},
|
||||
getTemplateConcurrencyToken(formKey) {
|
||||
let tok =
|
||||
const tok =
|
||||
window.$gz.store.state.formCustomTemplate[formKey + "_concurrencyToken"];
|
||||
if (tok === undefined) {
|
||||
throw new Error(
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* Xeslint-disable */
|
||||
import router from "../router";
|
||||
|
||||
function stringifyPrimitive(v) {
|
||||
@@ -22,7 +21,7 @@ function stringifyPrimitive(v) {
|
||||
// return true if handled or false if not
|
||||
//
|
||||
function handleError(action, error, route) {
|
||||
let errorMessage =
|
||||
const errorMessage =
|
||||
"API error: " + action + " route =" + route + ", message =" + error.message;
|
||||
window.$gz.store.commit("logItem", errorMessage);
|
||||
|
||||
@@ -80,7 +79,6 @@ function handleError(action, error, route) {
|
||||
|
||||
//Ideally this should never get called because any issue should be addressed above
|
||||
window.$gz.errorHandler.handleFormError(error);
|
||||
// devShowUnknownError(error);
|
||||
}
|
||||
|
||||
export default {
|
||||
@@ -166,7 +164,7 @@ export default {
|
||||
//no content, nothing to process
|
||||
return response;
|
||||
}
|
||||
let contentType = response.headers.get("content-type");
|
||||
const contentType = response.headers.get("content-type");
|
||||
|
||||
if (!contentType) {
|
||||
return response;
|
||||
@@ -188,7 +186,7 @@ export default {
|
||||
//no content, nothing to process
|
||||
return response;
|
||||
}
|
||||
let contentType = response.headers.get("content-type");
|
||||
const contentType = response.headers.get("content-type");
|
||||
if (!contentType) {
|
||||
return response;
|
||||
}
|
||||
@@ -210,7 +208,6 @@ export default {
|
||||
},
|
||||
patchAuthorizedHeaders() {
|
||||
return {
|
||||
//Accept: "application/json, text/plain, */*",
|
||||
Accept: "application/json",
|
||||
"Content-Type": "application/json-patch+json",
|
||||
Authorization: "Bearer " + window.$gz.store.state.apiToken
|
||||
@@ -308,10 +305,7 @@ export default {
|
||||
//
|
||||
genericDownloadUrl(route) {
|
||||
//http://localhost:7575/api/v8/backup/download/100?t=sssss
|
||||
|
||||
let url = route + "?t=" + window.$gz.store.state.downloadToken;
|
||||
|
||||
return this.APIUrl(url);
|
||||
return this.APIUrl(route + "?t=" + window.$gz.store.state.downloadToken);
|
||||
},
|
||||
/////////////////////////////
|
||||
// report file download URL
|
||||
@@ -319,13 +313,12 @@ export default {
|
||||
reportDownloadUrl(fileName) {
|
||||
//http://localhost:7575/api/v8/report/download/filename.pdf?t=sssss
|
||||
|
||||
let url =
|
||||
return this.APIUrl(
|
||||
"report/download/" +
|
||||
fileName +
|
||||
"?t=" +
|
||||
window.$gz.store.state.downloadToken;
|
||||
|
||||
return this.APIUrl(url);
|
||||
fileName +
|
||||
"?t=" +
|
||||
window.$gz.store.state.downloadToken
|
||||
);
|
||||
},
|
||||
/////////////////////////////
|
||||
// backup file download URL
|
||||
@@ -333,13 +326,12 @@ export default {
|
||||
backupDownloadUrl(fileName) {
|
||||
//http://localhost:7575/api/v8/backup/download/100?t=sssss
|
||||
|
||||
let url =
|
||||
return this.APIUrl(
|
||||
"backup/download/" +
|
||||
fileName +
|
||||
"?t=" +
|
||||
window.$gz.store.state.downloadToken;
|
||||
|
||||
return this.APIUrl(url);
|
||||
fileName +
|
||||
"?t=" +
|
||||
window.$gz.store.state.downloadToken
|
||||
);
|
||||
},
|
||||
/////////////////////////////
|
||||
// attachment download URL
|
||||
@@ -366,9 +358,7 @@ export default {
|
||||
// (size= 'small', 'medium', 'large')
|
||||
logoUrl(size) {
|
||||
//http://localhost:7575/api/v8/logo/small
|
||||
|
||||
let url = "logo/" + size;
|
||||
return this.APIUrl(url);
|
||||
return this.APIUrl("logo/" + size);
|
||||
},
|
||||
/////////////////////////////
|
||||
// REPLACE END OF URL
|
||||
@@ -389,7 +379,7 @@ export default {
|
||||
if (typeof obj === "object") {
|
||||
return Object.keys(obj)
|
||||
.map(function(k) {
|
||||
let ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
|
||||
const ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
|
||||
if (Array.isArray(obj[k])) {
|
||||
return obj[k]
|
||||
.map(function(v) {
|
||||
@@ -416,7 +406,7 @@ export default {
|
||||
//
|
||||
async get(route) {
|
||||
try {
|
||||
let that = this;
|
||||
const that = this;
|
||||
let r = await fetch(that.APIUrl(route), that.fetchGetOptions());
|
||||
that.statusEx(r);
|
||||
r = await that.extractBodyEx(r);
|
||||
@@ -441,7 +431,7 @@ export default {
|
||||
//
|
||||
async upsert(route, data, isLogin = false) {
|
||||
try {
|
||||
let that = this;
|
||||
const that = this;
|
||||
//determine if this is a new or existing record
|
||||
let fetchOptions = undefined;
|
||||
//put?
|
||||
@@ -451,7 +441,6 @@ export default {
|
||||
//post
|
||||
//ensure the route doesn't end in /0 which will happen if it's a new record
|
||||
//since the edit forms just send the url here with the ID regardless
|
||||
//note: de-lodash was using lodash here endswith method
|
||||
if (route.endsWith("/0")) {
|
||||
route = route.slice(0, -2);
|
||||
}
|
||||
@@ -471,7 +460,6 @@ export default {
|
||||
handleError("UPSERT", error, route);
|
||||
} else {
|
||||
//specifically this is for the login page
|
||||
// throw new Error(error);
|
||||
throw new Error(window.$gz.errorHandler.errorToString(error));
|
||||
}
|
||||
}
|
||||
@@ -480,13 +468,12 @@ export default {
|
||||
// DELETE DATA FROM API SERVER
|
||||
//
|
||||
async remove(route) {
|
||||
let that = this;
|
||||
const that = this;
|
||||
try {
|
||||
let r = await fetch(that.APIUrl(route), that.fetchRemoveOptions());
|
||||
that.statusEx(r);
|
||||
//delete will return a body if there is an error of some kind with the request
|
||||
r = await that.extractBodyEx(r);
|
||||
|
||||
return r;
|
||||
} catch (error) {
|
||||
//fundamental error, can't proceed with this call
|
||||
@@ -498,7 +485,7 @@ export default {
|
||||
// (used for puts that can't have a concurrency token like above)
|
||||
async put(route, data) {
|
||||
try {
|
||||
let that = this;
|
||||
const that = this;
|
||||
let r = await fetch(that.APIUrl(route), that.fetchPutOptions(data));
|
||||
that.statusEx(r);
|
||||
r = await that.extractBodyEx(r);
|
||||
@@ -512,7 +499,7 @@ export default {
|
||||
// (used for post only routes not needing upserts)
|
||||
async post(route, data) {
|
||||
try {
|
||||
let that = this;
|
||||
const that = this;
|
||||
let r = await fetch(that.APIUrl(route), that.fetchPostOptions(data));
|
||||
that.statusEx(r);
|
||||
r = await that.extractBodyEx(r);
|
||||
@@ -526,7 +513,7 @@ export default {
|
||||
// @param {ayaId:objectid, ayaType:aType, files:[array of files]}
|
||||
//
|
||||
async uploadAttachment(at) {
|
||||
let that = this;
|
||||
const that = this;
|
||||
try {
|
||||
var files = at.files;
|
||||
var data = new FormData();
|
||||
@@ -541,7 +528,7 @@ export default {
|
||||
|
||||
//-----------------
|
||||
|
||||
let fetchOptions = {
|
||||
const fetchOptions = {
|
||||
method: "post",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
@@ -565,7 +552,7 @@ export default {
|
||||
//
|
||||
//
|
||||
async upload(route, at) {
|
||||
let that = this;
|
||||
const that = this;
|
||||
try {
|
||||
var files = at.files;
|
||||
var data = new FormData();
|
||||
@@ -585,7 +572,7 @@ export default {
|
||||
|
||||
//-----------------
|
||||
|
||||
let fetchOptions = {
|
||||
const fetchOptions = {
|
||||
method: "post",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
@@ -608,14 +595,14 @@ export default {
|
||||
//
|
||||
//
|
||||
async uploadLogo(fileData, size) {
|
||||
let that = this;
|
||||
const that = this;
|
||||
try {
|
||||
let data = new FormData();
|
||||
const data = new FormData();
|
||||
data.append(fileData.name, fileData);
|
||||
|
||||
//-----------------
|
||||
|
||||
let fetchOptions = {
|
||||
const fetchOptions = {
|
||||
method: "post",
|
||||
mode: "cors",
|
||||
headers: {
|
||||
@@ -654,13 +641,13 @@ export default {
|
||||
//
|
||||
//
|
||||
async renderReport(objectid, reportid, redirectNotPopup) {
|
||||
let reportDataOptions = {
|
||||
const reportDataOptions = {
|
||||
ReportId: reportid,
|
||||
SelectedRowIds: [objectid],
|
||||
ClientMeta: this.reportClientMetaData()
|
||||
};
|
||||
|
||||
let res = await window.$gz.api.upsert("report/render", reportDataOptions);
|
||||
const res = await window.$gz.api.upsert("report/render", reportDataOptions);
|
||||
if (res.error) {
|
||||
if (redirectNotPopup) {
|
||||
return res;
|
||||
@@ -668,7 +655,7 @@ export default {
|
||||
throw new Error(window.$gz.errorHandler.errorToString(res));
|
||||
}
|
||||
} else {
|
||||
let reportUrl = window.$gz.api.reportDownloadUrl(res.data);
|
||||
const reportUrl = window.$gz.api.reportDownloadUrl(res.data);
|
||||
if (redirectNotPopup) {
|
||||
//used for direct report open from direct report view url
|
||||
window.location.replace(reportUrl);
|
||||
@@ -686,10 +673,7 @@ export default {
|
||||
//
|
||||
//
|
||||
async fetchBizObjectName(ayaType, objectId) {
|
||||
//todo: this is a good candidate for a light weight cache
|
||||
//maybe one hour or something to invalidate and volatile on refresh
|
||||
let res = await this.get(`name/${ayaType}/${objectId}`);
|
||||
|
||||
const res = await this.get(`name/${ayaType}/${objectId}`);
|
||||
//We never expect there to be no data here
|
||||
if (!res.hasOwnProperty("data")) {
|
||||
return Promise.reject(res);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* Xeslint-disable */
|
||||
let VM_LOCAL = null;
|
||||
|
||||
//Calculate a reasonable time to show the alert based on the size of the message and some sane bounds
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* xeslint-disable */
|
||||
///////////////////////////////
|
||||
// gzform
|
||||
//
|
||||
@@ -31,7 +30,6 @@ function isInt(value) {
|
||||
return false;
|
||||
}
|
||||
x = parseFloat(value);
|
||||
// console.log("isInt:", x);
|
||||
return (x | 0) === x;
|
||||
}
|
||||
|
||||
@@ -47,27 +45,14 @@ function isNumber(n) {
|
||||
// Get control from ref
|
||||
//
|
||||
function getControl(vm, ref) {
|
||||
let ctrl = vm.$refs[ref];
|
||||
// if (vm.$ay.dev) {
|
||||
// // //NOTE: Due to automatic code formatting some refs will come here with newlines in them resulting in no matches
|
||||
// // console.log("ref before is", ref);
|
||||
// // let tref = ref.replace(/\s/g, "");
|
||||
// // console.log("gzform::getcontrol, ref is ", { tref: tref, ref: ref });
|
||||
// if (ctrl == null) {
|
||||
// console.log(`gzform::getControl ref ${ref} not found on form`);
|
||||
// } else {
|
||||
// console.log(`gzform::getControl ref ${ref} *WAS* found on form!`);
|
||||
// }
|
||||
// }
|
||||
return ctrl;
|
||||
return vm.$refs[ref];
|
||||
}
|
||||
|
||||
////////////////////////////////////
|
||||
// Get value from control
|
||||
//
|
||||
function getControlValue(ctrl) {
|
||||
let value = ctrl.value;
|
||||
return value;
|
||||
return ctrl.value;
|
||||
}
|
||||
|
||||
////////////////////////////////////
|
||||
@@ -149,23 +134,23 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (!isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// "ErrorRequiredFieldEmpty": "{0} is a required field. Please enter a value for {0}",
|
||||
let err = vm.$ay.t("ErrorRequiredFieldEmpty");
|
||||
let fieldName = getControlLabel(ctrl);
|
||||
const fieldName = getControlLabel(ctrl);
|
||||
err = err.replace("{0}", fieldName);
|
||||
//replace only replaces first instance so need to do it twice
|
||||
err = err.replace("{0}", fieldName);
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -180,12 +165,12 @@ export default {
|
||||
if (vm.formState.loading) {
|
||||
return true;
|
||||
}
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
@@ -194,10 +179,10 @@ export default {
|
||||
//get the translated rule text
|
||||
// "ErrorFieldLengthExceeded": "{0} can not exceed {1} characters.",
|
||||
let err = vm.$ay.t("ErrorFieldLengthExceeded");
|
||||
let fieldName = getControlLabel(ctrl);
|
||||
const fieldName = getControlLabel(ctrl);
|
||||
err = err.replace("{0}", fieldName);
|
||||
err = err.replace("{1}", max);
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -224,12 +209,12 @@ export default {
|
||||
if (vm.formState.loading) {
|
||||
return true;
|
||||
}
|
||||
let ctrlStart = getControl(vm, refStart);
|
||||
const ctrlStart = getControl(vm, refStart);
|
||||
if (typeof ctrlStart == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let ctrlEnd = getControl(vm, refEnd);
|
||||
const ctrlEnd = getControl(vm, refEnd);
|
||||
if (typeof ctrlEnd == "undefined") {
|
||||
return true;
|
||||
}
|
||||
@@ -255,8 +240,8 @@ export default {
|
||||
|
||||
if (valueStart > valueEnd) {
|
||||
// "ErrorStartDateAfterEndDate": "Start date must be earlier than stop / end date",
|
||||
let err = vm.$ay.t("ErrorStartDateAfterEndDate");
|
||||
//Update the form status
|
||||
const err = vm.$ay.t("ErrorStartDateAfterEndDate");
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -274,21 +259,21 @@ export default {
|
||||
if (vm.formState.loading) {
|
||||
return true;
|
||||
}
|
||||
let ctrlFirst = getControl(vm, refFirst);
|
||||
const ctrlFirst = getControl(vm, refFirst);
|
||||
if (typeof ctrlFirst == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let ctrlSecond = getControl(vm, refSecond);
|
||||
const ctrlSecond = getControl(vm, refSecond);
|
||||
if (typeof ctrlSecond == "undefined") {
|
||||
return true;
|
||||
}
|
||||
let valueFirst = getControlValue(ctrlFirst);
|
||||
let valueSecond = getControlValue(ctrlSecond);
|
||||
const valueFirst = getControlValue(ctrlFirst);
|
||||
const valueSecond = getControlValue(ctrlSecond);
|
||||
|
||||
if (valueFirst != valueSecond) {
|
||||
let err = vm.$ay.t("ErrorNoMatch");
|
||||
//Update the form status
|
||||
const err = vm.$ay.t("ErrorNoMatch");
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -305,27 +290,15 @@ export default {
|
||||
if (vm.formState.loading) {
|
||||
return true;
|
||||
}
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
|
||||
//this block doesn't work and shouldn't be here afaict
|
||||
//if you type a letter for example it presents as empty, I guess because it's set to a numeric input type
|
||||
//in any case, empty isn't a valid integer so it should show as a broken rule when a letter or empty is entered
|
||||
// if (isEmpty(value)) {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
const value = getControlValue(ctrl);
|
||||
if (isInt(value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// "ErrorFieldValueNotInteger": "Value must be an integer"
|
||||
let err = vm.$ay.t("ErrorFieldValueNotInteger");
|
||||
//Update the form status
|
||||
const err = vm.$ay.t("ErrorFieldValueNotInteger");
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -343,15 +316,12 @@ export default {
|
||||
//TODO: Handle commas and spaces in numbers
|
||||
//as per window.$gz.translation rules for numbers
|
||||
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
//DEBUG
|
||||
//logControl("decimalValid", ctrl, ref);
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
@@ -360,9 +330,7 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
// "ErrorFieldValueNotDecimal": "Value must be a number"
|
||||
let err = vm.$ay.t("ErrorFieldValueNotDecimal");
|
||||
//Update the form status
|
||||
const err = vm.$ay.t("ErrorFieldValueNotDecimal");
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -380,12 +348,12 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
@@ -399,11 +367,10 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
// "ErrorFieldValueNumberGreaterThanMax": "Value must be less than XX"
|
||||
let err = `${vm.$ay
|
||||
const err = `${vm.$ay
|
||||
.t("ErrorFieldValueNumberGreaterThanMax")
|
||||
.replace("{0}", maxValue)} ${maxValue}`;
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -421,12 +388,12 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
@@ -441,11 +408,10 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
// "ErrorFieldValueNumberLessThanMin": "Value must be more than XX"
|
||||
let err = `${vm.$ay
|
||||
const err = `${vm.$ay
|
||||
.t("ErrorFieldValueNumberLessThanMin")
|
||||
.replace("{0}", minValue)} ${minValue}`;
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -459,15 +425,12 @@ export default {
|
||||
if (vm.formState.loading) {
|
||||
return true;
|
||||
}
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
//DEBUG
|
||||
//logControl("emailValid", ctrl, ref);
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
@@ -476,8 +439,8 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
let err = vm.$ay.t("ErrorAPI2203"); //"Invalid value"
|
||||
//Update the form status
|
||||
const err = vm.$ay.t("ErrorAPI2203"); //"Invalid value"
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -492,7 +455,7 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
let template =
|
||||
const template =
|
||||
window.$gz.store.state.formCustomTemplate[vm.formCustomTemplateKey];
|
||||
if (template === undefined) {
|
||||
return true;
|
||||
@@ -500,36 +463,31 @@ export default {
|
||||
//See if control formCustomTemplateFieldName is in server required fields collection
|
||||
//this is a collection of both custom field definitions and standard form fields that are required
|
||||
//since all names are unique can just filter out the one we need by name which will inherently ignore custom fields by default
|
||||
//de-lodash
|
||||
// let templateItem = window.$gz. _.find(template, [
|
||||
// "fld",
|
||||
// formCustomTemplateFieldName
|
||||
// ]);
|
||||
|
||||
let templateItem = template.find(z => z.fld == formCustomTemplateFieldName);
|
||||
const templateItem = template.find(
|
||||
z => z.fld == formCustomTemplateFieldName
|
||||
);
|
||||
|
||||
//templateItem.required
|
||||
if (templateItem === undefined || templateItem.required !== true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
let ctrl = getControl(vm, ref);
|
||||
const ctrl = getControl(vm, ref);
|
||||
if (typeof ctrl == "undefined") {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = getControlValue(ctrl);
|
||||
const value = getControlValue(ctrl);
|
||||
if (!isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// "ErrorRequiredFieldEmpty": "{0} is a required field. Please enter a value for {0}",
|
||||
let err = vm.$ay.t("ErrorRequiredFieldEmpty");
|
||||
let fieldName = getControlLabel(ctrl);
|
||||
const fieldName = getControlLabel(ctrl);
|
||||
err = err.replace("{0}", fieldName);
|
||||
//replace only replaces first instance so need to do it twice
|
||||
err = err.replace("{0}", fieldName);
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -549,18 +507,17 @@ export default {
|
||||
return true;
|
||||
}
|
||||
|
||||
let value = subvm.GetValueForField(templateItem.dataKey);
|
||||
const value = subvm.GetValueForField(templateItem.dataKey);
|
||||
if (!isEmpty(value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
//It's empty and it's required so return error
|
||||
// "ErrorRequiredFieldEmpty": "{0} is a required field. Please enter a value for {0}",
|
||||
let err = vm.$ay.t("ErrorRequiredFieldEmpty");
|
||||
err = err.replace("{0}", fieldName);
|
||||
//replace only replaces first instance so need to do it twice
|
||||
err = err.replace("{0}", fieldName);
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -577,14 +534,12 @@ export default {
|
||||
// errors in the UI by Vuetify
|
||||
//
|
||||
serverErrors(vm, ref) {
|
||||
let ret = [];
|
||||
const ret = [];
|
||||
|
||||
//check for errors if we have any errors
|
||||
if (!window.$gz.util.objectIsEmpty(vm.formState.serverError)) {
|
||||
//de-lodash
|
||||
//First let's get the top level error code
|
||||
|
||||
let apiErrorCode = parseInt(vm.formState.serverError.code);
|
||||
const apiErrorCode = parseInt(vm.formState.serverError.code);
|
||||
//Not all server errors mean the form is invalid, exceptions here
|
||||
let formValid = false;
|
||||
|
||||
@@ -616,7 +571,6 @@ export default {
|
||||
err = err + "\r\n" + vm.formState.serverError.message;
|
||||
}
|
||||
|
||||
//Update the form status
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: formValid
|
||||
@@ -629,14 +583,14 @@ export default {
|
||||
//Specific field validation errors are in an array in "details" key
|
||||
if (!window.$gz.util.objectIsEmpty(vm.formState.serverError.details)) {
|
||||
//See if this key is in the details array
|
||||
let errorsForField = getErrorsForField(vm, ref);
|
||||
const errorsForField = getErrorsForField(vm, ref);
|
||||
if (errorsForField.length > 0) {
|
||||
//iterate the errorsForField object and add each to return array of errors
|
||||
//de-lodash
|
||||
//window.$gz. _.each(errorsForField, function(ve) {
|
||||
errorsForField.forEach(function(ve) {
|
||||
let fldErr = "";
|
||||
let fldErrorCode = parseInt(ve.error);
|
||||
const fldErrorCode = parseInt(ve.error);
|
||||
fldErr =
|
||||
vm.$ay.t("ErrorAPI" + fldErrorCode.toString()) +
|
||||
" [" +
|
||||
@@ -657,7 +611,6 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
//Update the form status
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: false
|
||||
@@ -772,7 +725,7 @@ export default {
|
||||
vm.formState.appError = null;
|
||||
//clear out actual message box display
|
||||
vm.formState.errorBoxMessage = null;
|
||||
//Update the form status
|
||||
|
||||
this.setFormState({
|
||||
vm: vm,
|
||||
valid: true
|
||||
@@ -783,8 +736,8 @@ export default {
|
||||
// Gather server errors and set the appropriate keys
|
||||
//
|
||||
setErrorBoxErrors(vm) {
|
||||
let errs = this.serverErrors(vm, "generalerror");
|
||||
let ret = getErrorBoxErrors(vm, errs);
|
||||
const errs = this.serverErrors(vm, "generalerror");
|
||||
const ret = getErrorBoxErrors(vm, errs);
|
||||
vm.formState.errorBoxMessage = ret;
|
||||
},
|
||||
///////////////////////////////
|
||||
@@ -796,7 +749,7 @@ export default {
|
||||
//
|
||||
//
|
||||
fieldValueChanged(vm, ref, formReference) {
|
||||
let that = this;
|
||||
const that = this;
|
||||
let formControl = null;
|
||||
if (formReference == undefined) {
|
||||
formControl = vm.$refs.form;
|
||||
@@ -806,9 +759,6 @@ export default {
|
||||
formControl = vm.$refs[formReference];
|
||||
}
|
||||
|
||||
//NOTE: Due to automatic code formatting some refs may come here with newlines in them resulting in no matches
|
||||
// ref = ref.replace(/\s/g, "");
|
||||
|
||||
//dev error on form?
|
||||
if (formControl == null) {
|
||||
if (vm.$ay.dev) {
|
||||
@@ -829,7 +779,7 @@ export default {
|
||||
}
|
||||
|
||||
//# REMOVE SERVER ERRORS FOR THIS FIELD REF
|
||||
let targetRef = ref.toLowerCase();
|
||||
const targetRef = ref.toLowerCase();
|
||||
|
||||
//NOTE: This block of code is meant to remove all detailed server errors where the Target matches the current referenced control
|
||||
//Then it checks to see if there is anything left in details as this might have been all there was and if so removes that whole thing
|
||||
@@ -876,7 +826,7 @@ export default {
|
||||
|
||||
if (targetFieldHasServerError) {
|
||||
triggeringChange = true;
|
||||
let val = vm.obj[ref];
|
||||
const val = vm.obj[ref];
|
||||
vm.obj[ref] = null;
|
||||
vm.obj[ref] = val;
|
||||
triggeringChange = false;
|
||||
@@ -927,12 +877,10 @@ export default {
|
||||
// and temporary ones are stored in session storage and don't persist a refresh
|
||||
//
|
||||
getFormSettings(formKey) {
|
||||
let formSettings = {
|
||||
return {
|
||||
temp: JSON.parse(sessionStorage.getItem(formKey)),
|
||||
saved: window.$gz.store.state.formSettings[formKey]
|
||||
};
|
||||
|
||||
return formSettings;
|
||||
},
|
||||
////////////////////////////////////
|
||||
// Set form settings
|
||||
@@ -940,14 +888,6 @@ export default {
|
||||
// requires object with one or both keys {temp:{...tempformsettings...},saved:{...persistedformsettings...}}
|
||||
//
|
||||
setFormSettings(formKey, formSettings) {
|
||||
// if (window.$gz.dev) {
|
||||
// if (!formSettings.saved && !formSettings.temp) {
|
||||
// throw new Error(
|
||||
// "gzform:setFormSettings - saved AND temp keys are both missing from form data!"
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
if (formSettings.saved) {
|
||||
window.$gz.store.commit("setFormSettings", {
|
||||
formKey: formKey,
|
||||
@@ -962,7 +902,7 @@ export default {
|
||||
// Get last report used from form settings
|
||||
//
|
||||
getLastReport(formKey) {
|
||||
let fs = window.$gz.store.state.formSettings[formKey];
|
||||
const fs = window.$gz.store.state.formSettings[formKey];
|
||||
if (fs == null || fs.lastReport == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -971,12 +911,7 @@ export default {
|
||||
// Set last report used in form settings
|
||||
//
|
||||
setLastReport(formKey, reportSelected) {
|
||||
// console.log("setLastReport called", {
|
||||
// formKey: formKey,
|
||||
// reportSelected: reportSelected
|
||||
// });
|
||||
let fs = window.$gz.store.state.formSettings[formKey];
|
||||
//console.log("setlast report retrieved formsettings is:",fs)
|
||||
if (fs == null) {
|
||||
fs = {};
|
||||
}
|
||||
@@ -1010,8 +945,6 @@ export default {
|
||||
// Get validity of referenced control
|
||||
//
|
||||
controlIsValid(vm, ref) {
|
||||
// //NOTE: Due to automatic code formatting some refs will come here with newlines in them resulting in no matches
|
||||
// ref = ref.replace(/\s/g, "");
|
||||
if (vm.$refs[ref]) {
|
||||
return vm.$refs[ref].valid;
|
||||
}
|
||||
@@ -1023,7 +956,7 @@ export default {
|
||||
controlsAreAllValid(vm, refs) {
|
||||
//if any are not valid return false
|
||||
for (let i = 0; i < refs.length; i++) {
|
||||
let item = refs[i];
|
||||
const item = refs[i];
|
||||
if (vm.$refs[item]) {
|
||||
if (!vm.$refs[item].valid) {
|
||||
return false;
|
||||
@@ -1037,7 +970,7 @@ export default {
|
||||
//
|
||||
handleObjectNotFound(vm) {
|
||||
window.$gz.eventBus.$emit("notify-error", vm.$ay.t("ErrorAPI2010"));
|
||||
// navigate backwards after small delay to show error
|
||||
//after small delay to show error
|
||||
//(the navigate removes the toast notification immediately)
|
||||
setTimeout(function() {
|
||||
vm.$router.go(-1);
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
/* xxxeslint-disable */
|
||||
|
||||
// import { VMain } from "vuetify/lib";
|
||||
|
||||
/////////////////////////////////
|
||||
// Menu utils and handlers
|
||||
//
|
||||
@@ -10,10 +6,10 @@ export default {
|
||||
// TECH SUPPORT / CONTACT FORUM URL
|
||||
//
|
||||
contactSupportUrl() {
|
||||
let dbId = encodeURIComponent(
|
||||
const dbId = encodeURIComponent(
|
||||
window.$gz.store.state.globalSettings.serverDbId
|
||||
);
|
||||
let company = encodeURIComponent(
|
||||
const company = encodeURIComponent(
|
||||
window.$gz.store.state.globalSettings.company
|
||||
);
|
||||
return `https://contact.ayanova.com/contact?dbid=${dbId}&company=${company}`;
|
||||
@@ -24,7 +20,7 @@ export default {
|
||||
// Deal with a menu change request
|
||||
// called from App.vue
|
||||
handleMenuChange(vm, ctx) {
|
||||
let UTILITY_TYPES = [
|
||||
const UTILITY_TYPES = [
|
||||
window.$gz.type.NoType,
|
||||
window.$gz.type.Global,
|
||||
window.$gz.type.NoType,
|
||||
@@ -62,7 +58,7 @@ export default {
|
||||
if (ctx && ctx.formData && ctx.formData.recordName) {
|
||||
recordName = ctx.formData.recordName;
|
||||
}
|
||||
let hasRecordName = recordName != "";
|
||||
const hasRecordName = recordName != "";
|
||||
if (ctx.title) {
|
||||
//it has a title translation key
|
||||
if (hasRecordName) {
|
||||
@@ -101,7 +97,7 @@ export default {
|
||||
}
|
||||
|
||||
//flag for if it's wikiable, reviewable, attachable, searchable, historical
|
||||
let isCoreBizObject = formAyaType != 0 && formRecordId != 0;
|
||||
const isCoreBizObject = formAyaType != 0 && formRecordId != 0;
|
||||
|
||||
//set the help url if presented or default to the User section intro
|
||||
vm.appBar.helpUrl = ctx.helpUrl ? ctx.helpUrl : "user-intro";
|
||||
@@ -169,15 +165,6 @@ export default {
|
||||
|
||||
//GLOBAL BOTTOM PORTION
|
||||
|
||||
//Global sub-heading
|
||||
//Likely won't want this but here anyway to see
|
||||
//that.appBar.menuItems.push({ header: "GLOBAL" });
|
||||
|
||||
//global menu items
|
||||
|
||||
//divider
|
||||
//vm.appBar.menuItems.push({ divider: true, inset: false });
|
||||
|
||||
//SEARCH
|
||||
//all forms except the search form
|
||||
if (!ctx.hideSearch && !UTILITY_TYPES.includes(formAyaType)) {
|
||||
@@ -240,7 +227,7 @@ export default {
|
||||
|
||||
//Find the menu item and set it to disabled and recolor it to disabled color and return
|
||||
for (let i = 0; i < vm.appBar.menuItems.length; i++) {
|
||||
let menuItem = vm.appBar.menuItems[i];
|
||||
const menuItem = vm.appBar.menuItems[i];
|
||||
if (menuItem.key == key) {
|
||||
vm.$set(vm.appBar.menuItems[i], "disabled", disabled);
|
||||
//menuItem.disabled = disabled;
|
||||
@@ -261,7 +248,7 @@ export default {
|
||||
|
||||
//Find the menu item and change it's icon
|
||||
for (let i = 0; i < vm.appBar.menuItems.length; i++) {
|
||||
let menuItem = vm.appBar.menuItems[i];
|
||||
const menuItem = vm.appBar.menuItems[i];
|
||||
if (menuItem.key == key) {
|
||||
vm.$set(vm.appBar.menuItems[i], "icon", newIcon);
|
||||
return;
|
||||
@@ -281,12 +268,11 @@ export default {
|
||||
//each part is separated by a colon
|
||||
|
||||
//Handle different items
|
||||
let item = this.parseMenuItem(menuItem);
|
||||
const item = this.parseMenuItem(menuItem);
|
||||
if (!item.disabled && item.owner == "app") {
|
||||
switch (item.key) {
|
||||
case "help":
|
||||
let helpurl = vm.$store.state.helpUrl + item.data;
|
||||
window.open(helpurl, "_blank");
|
||||
window.open(vm.$store.state.helpUrl + item.data, "_blank");
|
||||
break;
|
||||
case "search":
|
||||
vm.$router.push({
|
||||
@@ -294,19 +280,9 @@ export default {
|
||||
params: { ayatype: item.data }
|
||||
});
|
||||
break;
|
||||
// case "attachments":
|
||||
// vm.$router.push({
|
||||
// name: "ay-attachments",
|
||||
// params: { ayatype: item.data.ayaType, recordid: item.data.recordId }
|
||||
// });
|
||||
// break;
|
||||
// case "plugin":
|
||||
// alert("STUB: plugin / more");
|
||||
// break;
|
||||
case "review":
|
||||
//go to list
|
||||
// path: "/home-reviews/:aType?/:objectId?",
|
||||
|
||||
vm.$router.push({
|
||||
name: "home-reviews",
|
||||
params: {
|
||||
@@ -350,8 +326,8 @@ export default {
|
||||
parseMenuItem(menuItem) {
|
||||
//format is "AREA:KEY:UNIQUEID"
|
||||
//and data is in data portion
|
||||
let keyparts = menuItem.key.split(":");
|
||||
let ret = {
|
||||
const keyparts = menuItem.key.split(":");
|
||||
const ret = {
|
||||
owner: keyparts[0],
|
||||
key: keyparts[1],
|
||||
data: menuItem.data,
|
||||
@@ -369,38 +345,38 @@ export default {
|
||||
// called once from app.vue only
|
||||
//
|
||||
wireUpEventHandlers(vm) {
|
||||
let self = this;
|
||||
const that = this;
|
||||
window.$gz.eventBus.$on("menu-change", function handleMenuChange(ctx) {
|
||||
self.handleMenuChange(vm, ctx);
|
||||
that.handleMenuChange(vm, ctx);
|
||||
});
|
||||
|
||||
window.$gz.eventBus.$on("menu-replace-item", function handleReplaceMenuItem(
|
||||
newItem
|
||||
) {
|
||||
self.handleReplaceMenuItem(vm, newItem);
|
||||
that.handleReplaceMenuItem(vm, newItem);
|
||||
});
|
||||
|
||||
window.$gz.eventBus.$on("menu-disable-item", function handleDisableMenuItem(
|
||||
key
|
||||
) {
|
||||
self.handleDisableMenuItem(vm, key, true);
|
||||
that.handleDisableMenuItem(vm, key, true);
|
||||
});
|
||||
|
||||
window.$gz.eventBus.$on("menu-enable-item", function handleDisableMenuItem(
|
||||
key
|
||||
) {
|
||||
self.handleDisableMenuItem(vm, key, false);
|
||||
that.handleDisableMenuItem(vm, key, false);
|
||||
});
|
||||
|
||||
window.$gz.eventBus.$on(
|
||||
"menu-change-item-icon",
|
||||
function handleChangeMenuItemIcon(key, newIcon) {
|
||||
self.handleChangeMenuItemIcon(vm, key, newIcon);
|
||||
that.handleChangeMenuItemIcon(vm, key, newIcon);
|
||||
}
|
||||
);
|
||||
|
||||
window.$gz.eventBus.$on("menu-click", function handleMenuClick(menuitem) {
|
||||
self.handleAppClick(vm, menuitem);
|
||||
that.handleAppClick(vm, menuitem);
|
||||
});
|
||||
}
|
||||
//new functions above here
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* Xeslint-disable */
|
||||
|
||||
/////////////////////////////////
|
||||
// General utility library
|
||||
//
|
||||
@@ -206,7 +204,7 @@ export default {
|
||||
if (!number || number == 0 || number == NaN) {
|
||||
return number;
|
||||
}
|
||||
let wasNegative = number < 0;
|
||||
const wasNegative = number < 0;
|
||||
if (wasNegative) {
|
||||
number = Math.abs(number); //make sure it's positive because rounding negative numbers is weird in JS
|
||||
}
|
||||
@@ -223,29 +221,6 @@ export default {
|
||||
// Clean up a tag with same rules as server
|
||||
//
|
||||
normalizeTag: function(tagName) {
|
||||
/*
|
||||
SERVER VERSION
|
||||
public static string NormalizeTag(string inObj)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(inObj)) return null;
|
||||
//Must be lowercase per rules
|
||||
//This may be naive when we get international cust omers but for now supporting utf-8 and it appears it's safe to do this with unicode
|
||||
inObj = inObj.ToLowerInvariant();
|
||||
//No spaces in tags, replace with dashes
|
||||
inObj = inObj.Replace(" ", "-");
|
||||
//Remove multiple dash sequences
|
||||
inObj = System.Text.RegularExpressions.Regex.Replace(inObj, "-+", "-");
|
||||
//Ensure doesn't start or end with a dash
|
||||
inObj = inObj.Trim('-');
|
||||
//No longer than 255 characters
|
||||
inObj = StringUtil.MaxLength(inObj, 255);
|
||||
return inObj;
|
||||
}
|
||||
*/
|
||||
//de-lodash
|
||||
//kebab case takes care of all the things we need for tags in one go
|
||||
// tagName = window.$gz. _.kebabCase(tagName);
|
||||
|
||||
if (!tagName || tagName == "") {
|
||||
return null;
|
||||
}
|
||||
@@ -271,9 +246,9 @@ export default {
|
||||
// https://stackoverflow.com/a/7616484/8939
|
||||
//
|
||||
quickHash: function(theString) {
|
||||
let hash = 0,
|
||||
i,
|
||||
chr;
|
||||
let hash = 0;
|
||||
let i;
|
||||
let chr;
|
||||
if (theString.length === 0) return hash;
|
||||
for (i = 0; i < theString.length; i++) {
|
||||
chr = theString.charCodeAt(i);
|
||||
@@ -289,10 +264,9 @@ export default {
|
||||
// using 32 character (128 bit) as default
|
||||
//
|
||||
getRandomPassword: function() {
|
||||
let length = 32,
|
||||
wishlist = "0123456789abcdefghijkmnopqrstuvwxyz";
|
||||
const wishlist = "0123456789abcdefghijkmnopqrstuvwxyz";
|
||||
|
||||
return Array.from(crypto.getRandomValues(new Uint32Array(length)))
|
||||
return Array.from(crypto.getRandomValues(new Uint32Array(32)))
|
||||
.map(x => wishlist[x % wishlist.length])
|
||||
.join("");
|
||||
},
|
||||
@@ -337,7 +311,7 @@ export default {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let ret = parseFloat(string.replace(/[^\d.-]/g, ""));
|
||||
const ret = parseFloat(string.replace(/[^\d.-]/g, ""));
|
||||
if (ret == NaN) {
|
||||
return 0;
|
||||
}
|
||||
@@ -582,8 +556,8 @@ export default {
|
||||
}
|
||||
mimeType = mimeType.toLowerCase();
|
||||
|
||||
let iconFromExtension = extensions[extension];
|
||||
let iconFromMIME = mimeTypes[mimeType];
|
||||
const iconFromExtension = extensions[extension];
|
||||
const iconFromMIME = mimeTypes[mimeType];
|
||||
|
||||
if (iconFromMIME) {
|
||||
return iconFromMIME;
|
||||
@@ -643,8 +617,8 @@ export default {
|
||||
// https://stackoverflow.com/a/55292366/8939
|
||||
//
|
||||
trimSpecific: function trim(str, ch) {
|
||||
var start = 0,
|
||||
end = str.length;
|
||||
var start = 0;
|
||||
var end = str.length;
|
||||
while (start < end && str[start] === ch) ++start;
|
||||
while (end > start && str[end - 1] === ch) --end;
|
||||
return start > 0 || end < str.length ? str.substring(start, end) : str;
|
||||
@@ -661,23 +635,6 @@ export default {
|
||||
// is string replacement for lodash
|
||||
// https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_isString
|
||||
//
|
||||
// isString: function(str) {
|
||||
// //modified from above, due to bug (I think)
|
||||
// //posted case here: https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore/issues/304
|
||||
// if (str == null) {
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// if (str == "") {//another bug, if numeric this is true?! Using recommended method below
|
||||
// return true;
|
||||
// }
|
||||
// let temp = str.valueOf();
|
||||
// if (typeof temp === "string") {
|
||||
// return true;
|
||||
// } else {
|
||||
// return false;
|
||||
// }
|
||||
// },
|
||||
isString: function(str) {
|
||||
return str != null && typeof str.valueOf() === "string";
|
||||
},
|
||||
@@ -790,25 +747,13 @@ export default {
|
||||
//
|
||||
//
|
||||
viewGeoLocation: function(obj) {
|
||||
/*
|
||||
{
|
||||
latitude: m.vm.obj.latitude,
|
||||
longitude: m.vm.obj.longitude,
|
||||
address: m.vm.obj.address || m.vm.obj.postAddress,
|
||||
city: m.vm.obj.city || m.vm.obj.postCity,
|
||||
region: m.vm.obj.region || m.vm.obj.postRegion,
|
||||
country: m.vm.obj.country || m.vm.obj.postCountry,
|
||||
postCode: m.vm.obj.postCode
|
||||
}
|
||||
*/
|
||||
|
||||
let hasGeo =
|
||||
const hasGeo =
|
||||
obj.latitude != null &&
|
||||
obj.latitude != 0 &&
|
||||
obj.longitude != null &&
|
||||
obj.longitude != 0;
|
||||
|
||||
let hasAddress =
|
||||
const hasAddress =
|
||||
!this.stringIsNullOrEmpty(obj.address) &&
|
||||
!this.stringIsNullOrEmpty(obj.city) &&
|
||||
!this.stringIsNullOrEmpty(obj.region) &&
|
||||
@@ -857,7 +802,7 @@ export default {
|
||||
//order street to country seems to be standard
|
||||
//note, if google need plus symbol delimiter, if bing, need comma delimiter
|
||||
//but both might accept one big string space delimited and url encoded so test that on all first
|
||||
let delimiter = " ";
|
||||
const delimiter = " ";
|
||||
let q = "";
|
||||
if (obj.address) {
|
||||
q += obj.address + delimiter;
|
||||
@@ -949,15 +894,6 @@ export default {
|
||||
//
|
||||
//
|
||||
calendarViewToAyaNovaEnum: function(view) {
|
||||
/*
|
||||
public enum ScheduleView : int
|
||||
{
|
||||
Day = 1,
|
||||
Week = 2,
|
||||
Month = 3,
|
||||
Day4 = 4
|
||||
}
|
||||
*/
|
||||
switch (view) {
|
||||
case "day":
|
||||
return 1;
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/* Xeslint-disable */
|
||||
|
||||
function addNavItem(title, icon, route, navItems, key, testid, color = null) {
|
||||
if (!testid) {
|
||||
testid = route;
|
||||
}
|
||||
|
||||
let o = {
|
||||
const o = {
|
||||
title,
|
||||
icon,
|
||||
route,
|
||||
@@ -23,11 +21,8 @@ function addNavItem(title, icon, route, navItems, key, testid, color = null) {
|
||||
function initNavPanel() {
|
||||
let key = 0;
|
||||
let sub = [];
|
||||
|
||||
// let t = window.$gz.translation.get;
|
||||
// let role = window.$gz.role.AUTHORIZATION_ROLES;
|
||||
let licenseState = window.$gz.store.state.globalSettings.licenseStatus;
|
||||
let useInventory = window.$gz.store.state.globalSettings.useInventory;
|
||||
const licenseState = window.$gz.store.state.globalSettings.licenseStatus;
|
||||
const useInventory = window.$gz.store.state.globalSettings.useInventory;
|
||||
/*Service = 1,
|
||||
NotService = 2,
|
||||
Customer = 3,
|
||||
@@ -109,7 +104,6 @@ function initNavPanel() {
|
||||
}
|
||||
|
||||
//###### SUBCONTRACTORS ######
|
||||
//console.log(window.$gz.store.getters.isSubContractorUser);
|
||||
if (window.$gz.store.getters.isSubContractorUser == true) {
|
||||
//clear sublevel array
|
||||
sub = [];
|
||||
@@ -748,14 +742,14 @@ function initNavPanel() {
|
||||
|
||||
async function getUserOptions() {
|
||||
try {
|
||||
let res = await window.$gz.api.get(
|
||||
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
|
||||
let msg = window.$gz.api.apiErrorToHumanString(res.error);
|
||||
const msg = window.$gz.api.apiErrorToHumanString(res.error);
|
||||
window.$gz.store.commit(
|
||||
"logItem",
|
||||
"Initialize::() fetch useroptions -> error" + msg
|
||||
@@ -765,7 +759,7 @@ async function getUserOptions() {
|
||||
//Check if overrides and use them here
|
||||
//or else use browser defaults
|
||||
|
||||
let l = {
|
||||
const l = {
|
||||
languageOverride: null,
|
||||
timeZoneOverride: null,
|
||||
currencyName: null,
|
||||
@@ -775,16 +769,6 @@ async function getUserOptions() {
|
||||
mapUrlTemplate: null
|
||||
};
|
||||
|
||||
//removed this block, locale already attempts this fully and this should really only set the user persisted value, not guess it here
|
||||
//get language to use, try user set override first, if empty then browser set, if empty then default to en-us
|
||||
// l.languageOverride =
|
||||
// res.data.languageOverride || window.navigator.languages[0] || "en-US";
|
||||
|
||||
// l.timeZoneOverride =
|
||||
// res.data.timeZoneOverride ||
|
||||
// window.$gz.locale.getResolvedTimeZoneName() ||
|
||||
// "America/New_York";
|
||||
|
||||
l.languageOverride = res.data.languageOverride;
|
||||
l.timeZoneOverride = res.data.timeZoneOverride;
|
||||
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
/* ZZeslint-disable */
|
||||
//Browser Locale conversion utilities
|
||||
|
||||
// import { faYinYang } from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
//dates,numbers currency etc
|
||||
export default {
|
||||
////////////////////////////////////////////////////////
|
||||
@@ -62,7 +58,7 @@ export default {
|
||||
//https://en.wikipedia.org/wiki/ISO_4217
|
||||
//default to USD if nothing specified
|
||||
getCurrencyName() {
|
||||
let cur = window.$gz.store.state.userOptions.currencyName;
|
||||
const cur = window.$gz.store.state.userOptions.currencyName;
|
||||
if (!window.$gz.util.stringIsNullOrEmpty(cur)) {
|
||||
return cur;
|
||||
} else {
|
||||
@@ -165,7 +161,7 @@ export default {
|
||||
}
|
||||
|
||||
//parse the date which is identified as utc ("2020-02-06T18:18:49.148011Z")
|
||||
let parsedDate = new Date(value);
|
||||
const parsedDate = new Date(value);
|
||||
|
||||
//is it a valid date?
|
||||
if (!(parsedDate instanceof Date && !isNaN(parsedDate))) {
|
||||
@@ -194,7 +190,7 @@ export default {
|
||||
}
|
||||
|
||||
//parse the date which is identified as utc ("2020-02-06T18:18:49.148011Z")
|
||||
let parsedDate = new Date(value);
|
||||
const parsedDate = new Date(value);
|
||||
|
||||
//is it a valid date?
|
||||
if (!(parsedDate instanceof Date && !isNaN(parsedDate))) {
|
||||
@@ -225,7 +221,7 @@ export default {
|
||||
}
|
||||
|
||||
//parse the date which is identified as utc ("2020-02-06T18:18:49.148011Z")
|
||||
let parsedDate = new Date(value);
|
||||
const parsedDate = new Date(value);
|
||||
|
||||
//is it a valid date?
|
||||
if (!(parsedDate instanceof Date && !isNaN(parsedDate))) {
|
||||
@@ -252,7 +248,7 @@ export default {
|
||||
let theSeconds = 0;
|
||||
let ret = "";
|
||||
|
||||
let work = value.split(":");
|
||||
const work = value.split(":");
|
||||
//has days?
|
||||
if (work[0].includes(".")) {
|
||||
let dh = work[0].split(".");
|
||||
@@ -340,7 +336,7 @@ export default {
|
||||
if (!timeZoneName) {
|
||||
timeZoneName = this.getResolvedTimeZoneName();
|
||||
}
|
||||
let ret = window.$gz.DateTime.local()
|
||||
const ret = window.$gz.DateTime.local()
|
||||
.setZone(timeZoneName)
|
||||
.toUTC()
|
||||
.toString();
|
||||
@@ -406,7 +402,7 @@ export default {
|
||||
if (!timeZoneName) {
|
||||
timeZoneName = this.getResolvedTimeZoneName();
|
||||
}
|
||||
let ret = window.$gz.DateTime.local()
|
||||
const ret = window.$gz.DateTime.local()
|
||||
.setZone(timeZoneName)
|
||||
.toString();
|
||||
return ret;
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* xxxeslint-disable */
|
||||
import ayatype from "./ayatype";
|
||||
export default {
|
||||
///////////////////////////////
|
||||
@@ -19,7 +18,7 @@ export default {
|
||||
}
|
||||
|
||||
if (tid.type && tid.id != null) {
|
||||
let isCustomerTypeUser =
|
||||
const isCustomerTypeUser =
|
||||
window.$gz.store.state.userType == 3 ||
|
||||
window.$gz.store.state.userType == 4;
|
||||
//if these come from route parameters they may well be strings
|
||||
@@ -68,7 +67,7 @@ export default {
|
||||
case ayatype.WorkOrderItemUnit:
|
||||
(async () => {
|
||||
try {
|
||||
let res = await window.$gz.api.get(
|
||||
const res = await window.$gz.api.get(
|
||||
`search/ancestor/${tid.type}/${tid.id}`
|
||||
);
|
||||
|
||||
@@ -112,7 +111,7 @@ export default {
|
||||
case ayatype.QuoteItemUnit:
|
||||
(async () => {
|
||||
try {
|
||||
let res = await window.$gz.api.get(
|
||||
const res = await window.$gz.api.get(
|
||||
`search/ancestor/${tid.type}/${tid.id}`
|
||||
);
|
||||
|
||||
@@ -157,7 +156,7 @@ export default {
|
||||
case ayatype.PMItemUnit:
|
||||
(async () => {
|
||||
try {
|
||||
let res = await window.$gz.api.get(
|
||||
const res = await window.$gz.api.get(
|
||||
`search/ancestor/${tid.type}/${tid.id}`
|
||||
);
|
||||
|
||||
@@ -233,11 +232,10 @@ export default {
|
||||
tid.inside = true;
|
||||
}
|
||||
if (tid.inside == undefined) {
|
||||
let res = await window.$gz.api.get(
|
||||
const res = await window.$gz.api.get(
|
||||
"user/inside-type/" + tid.id
|
||||
);
|
||||
if (res.error) {
|
||||
//throw new Error(res.error);
|
||||
throw new Error(
|
||||
window.$gz.errorHandler.errorToString(res, vm)
|
||||
);
|
||||
@@ -276,7 +274,7 @@ export default {
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
let res = await window.$gz.api.get(
|
||||
const res = await window.$gz.api.get(
|
||||
"attachment/parent/" + tid.id
|
||||
);
|
||||
|
||||
@@ -326,12 +324,11 @@ export default {
|
||||
//all we have is the id, but need the formkey to open it
|
||||
(async () => {
|
||||
try {
|
||||
let res = await window.$gz.api.get(
|
||||
const res = await window.$gz.api.get(
|
||||
"form-custom/form-key/" + tid.id
|
||||
);
|
||||
|
||||
if (res.error) {
|
||||
//throw new Error(res.error);
|
||||
throw new Error(
|
||||
window.$gz.errorHandler.errorToString(res, vm)
|
||||
);
|
||||
@@ -506,12 +503,12 @@ export default {
|
||||
// called once from app.vue only
|
||||
//
|
||||
wireUpEventHandlers(vm) {
|
||||
let self = this;
|
||||
const that = this;
|
||||
//expects extra data (tid) to be { type: [AYATYPE], id: [RECORDID] }
|
||||
window.$gz.eventBus.$on("openobject", function handleOpenObjectClickHandler(
|
||||
tid
|
||||
) {
|
||||
self.handleOpenObjectClick(vm, tid);
|
||||
that.handleOpenObjectClick(vm, tid);
|
||||
});
|
||||
}
|
||||
//new functions above here
|
||||
|
||||
@@ -22,7 +22,7 @@ export default {
|
||||
soft_gray: "#d2d7db"
|
||||
},
|
||||
getBoldPaletteArray(size) {
|
||||
let palette = [
|
||||
const palette = [
|
||||
this.color.blue,
|
||||
this.color.red,
|
||||
this.color.green,
|
||||
@@ -32,15 +32,15 @@ export default {
|
||||
this.color.teal,
|
||||
this.color.black
|
||||
];
|
||||
let paletteLength = palette.length;
|
||||
let ret = [];
|
||||
const paletteLength = palette.length;
|
||||
const ret = [];
|
||||
for (let i = 0; i < size; i++) {
|
||||
ret.push(palette[i % paletteLength]);
|
||||
}
|
||||
return ret;
|
||||
},
|
||||
getSoftPaletteArray(size) {
|
||||
let palette = [
|
||||
const palette = [
|
||||
this.color.soft_sand,
|
||||
this.color.soft_pale_blue,
|
||||
this.color.soft_gray,
|
||||
@@ -50,8 +50,8 @@ export default {
|
||||
this.color.soft_sand_taupe,
|
||||
this.color.soft_brown_darker
|
||||
];
|
||||
let paletteLength = palette.length;
|
||||
let ret = [];
|
||||
const paletteLength = palette.length;
|
||||
const ret = [];
|
||||
for (let i = 0; i < size; i++) {
|
||||
ret.push(palette[i % paletteLength]);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/* Xeslint-disable */
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -24,9 +24,13 @@ export default {
|
||||
|
||||
//NOTE: it's valid for one of the two ret values might be undefined as it's valid to have a single date for
|
||||
//Past or Future
|
||||
let ret = { after: undefined, before: undefined };
|
||||
let dtNow = window.$gz.DateTime.local();
|
||||
let dtToday = window.$gz.DateTime.local(dtNow.year, dtNow.month, dtNow.day);
|
||||
const ret = { after: undefined, before: undefined };
|
||||
const dtNow = window.$gz.DateTime.local();
|
||||
const dtToday = window.$gz.DateTime.local(
|
||||
dtNow.year,
|
||||
dtNow.month,
|
||||
dtNow.day
|
||||
);
|
||||
let dtAfter = null;
|
||||
let dtBefore = null;
|
||||
|
||||
@@ -613,403 +617,4 @@ export default {
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
{ name: vm.$ay.t("DateRangeJanuary"), id: "*january*" },
|
||||
{ name: vm.$ay.t("DateRangeFebruary"), id: "*february*" },
|
||||
{ name: vm.$ay.t("DateRangeMarch"), id: "*march*" },
|
||||
{ name: vm.$ay.t("DateRangeApril"), id: "*april*" },
|
||||
{ name: vm.$ay.t("DateRangeMay"), id: "*may*" },
|
||||
{ name: vm.$ay.t("DateRangeJune"), id: "*june*" },
|
||||
{ name: vm.$ay.t("DateRangeJuly"), id: "*july*" },
|
||||
{ name: vm.$ay.t("DateRangeAugust"), id: "*august*" },
|
||||
{ name: vm.$ay.t("DateRangeSeptember"), id: "*september*" },
|
||||
{ name: vm.$ay.t("DateRangeOctober"), id: "*october*" },
|
||||
{ name: vm.$ay.t("DateRangeNovember"), id: "*november*" },
|
||||
{ name: vm.$ay.t("DateRangeDecember"), id: "*december*" },
|
||||
{
|
||||
name: vm.$ay.t("DateRangePreviousYearThisMonth"),
|
||||
id: "*lastyearthismonth*"
|
||||
},
|
||||
{
|
||||
name: vm.$ay.t("DateRangePreviousYearLastMonth"),
|
||||
id: "*lastyearlastmonth*"
|
||||
},
|
||||
{
|
||||
name: vm.$ay.t("DateRangePreviousYearNextMonth"),
|
||||
id: "*lastyearnextmonth*"
|
||||
}
|
||||
|
||||
*/
|
||||
//new functions above here
|
||||
};
|
||||
//LUXON MATH: https://moment.github.io/luxon/docs/manual/zones.html#math-across-dsts
|
||||
//https://moment.github.io/luxon/docs/manual/math.html
|
||||
//luxon api ref: https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html
|
||||
|
||||
// //############################################################### OLD SERVER FILTERING CODE ##########################
|
||||
|
||||
// //HOWEVER, if it's a relative date filter TOKEN like "nextMonth" then the users time zone offset will be taken into consideration
|
||||
|
||||
// //So this is the core date time to work off of
|
||||
// DateTime RelativeToday = DateTime.Today;
|
||||
// DateTime RelativeNow = DateTime.Now;
|
||||
// // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria");
|
||||
// // log.LogInformation("RelativeToday (before adjustment):");
|
||||
// // log.LogInformation(RelativeToday.ToString());
|
||||
// // log.LogInformation("RelativeNow (before adjustment):");
|
||||
// // log.LogInformation(RelativeNow.ToString());
|
||||
|
||||
// if (sValue.StartsWith("{[") && sValue.EndsWith("]}"))
|
||||
// {
|
||||
|
||||
// //Need to adjust RelativeToday to users time frame
|
||||
// //Fetch useroptions object and relative time offset
|
||||
// //See servers spec doc core-locale-currency-numbers-time-and-dates.txt for details about why this is necessary to be done this way
|
||||
// AyaNova.Models.AyContext ct = AyaNova.Util.ServiceProviderProvider.DBContext;
|
||||
// let u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { tz = m.UserOptions.TimeZoneOffset }).First();
|
||||
|
||||
// //Add this value to any time's hours to convert to user local time
|
||||
// Double TimeZoneAdjustment = ((double)u.tz) * -1;
|
||||
|
||||
// //Stock times used for many of the tokens:
|
||||
// RelativeToday = RelativeToday.AddHours(TimeZoneAdjustment);//flip the sign to adjust towards UTC
|
||||
// RelativeNow = RelativeNow.AddHours(TimeZoneAdjustment);//flip the sign to adjust towards UTC
|
||||
|
||||
// //TESTING:
|
||||
// //LOG THE CRIT AND QUERY
|
||||
// // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria");
|
||||
// // log.LogInformation("RelativeToday (adjusted):");
|
||||
// // log.LogInformation(RelativeToday.ToString());
|
||||
// // log.LogInformation("RelativeNow (adjusted):");
|
||||
// // log.LogInformation(RelativeNow.ToString());
|
||||
// // log.LogInformation("Offset used:");
|
||||
// // log.LogInformation(u.tz.ToString());
|
||||
|
||||
// #region Build criteria for date RANGE TOKEN specified
|
||||
// //Used as the basis point
|
||||
// System.DateTime dtAfter;
|
||||
// System.DateTime dtBefore;
|
||||
// switch (sValue)
|
||||
// {
|
||||
// //Case 402
|
||||
// case DataListFilterSpecialToken.Yesterday:
|
||||
// //Between Day before yesterday at midnight and yesterday at midnight
|
||||
// dtAfter = RelativeToday.AddDays(-1);
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
// dtBefore = RelativeToday;//.AddDays(-1);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.Today:
|
||||
// //Between yesterday at midnight and tommorow at midnight
|
||||
// dtAfter = RelativeToday.AddSeconds(-1);
|
||||
// dtBefore = RelativeToday.AddDays(1);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.Tomorrow:
|
||||
// //Between Tonight at midnight and day after tommorow at midnight
|
||||
// dtAfter = RelativeToday.AddDays(1);
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
// dtBefore = RelativeToday.AddDays(2);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// //Case 402
|
||||
// case DataListFilterSpecialToken.LastWeek:
|
||||
// //Between two Sundays ago at midnight and last sunday at midnight
|
||||
// dtAfter = RelativeToday;
|
||||
|
||||
// //go back a week
|
||||
// dtAfter = dtAfter.AddDays(-7);
|
||||
|
||||
// //go backwards to Sunday
|
||||
// while (dtAfter.DayOfWeek != DayOfWeek.Sunday)
|
||||
// dtAfter = dtAfter.AddDays(-1);
|
||||
|
||||
// //go to very start of eighth dayahead
|
||||
// dtBefore = dtAfter.AddDays(8);
|
||||
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.ThisWeek:
|
||||
// //Between Sunday at midnight and Next sunday at midnight
|
||||
// dtAfter = RelativeToday;
|
||||
// //go backwards to monday
|
||||
// while (dtAfter.DayOfWeek != DayOfWeek.Monday)
|
||||
// dtAfter = dtAfter.AddDays(-1);
|
||||
|
||||
// //Now go back to sunday last second
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
|
||||
// dtBefore = RelativeToday;
|
||||
// //go forwards to monday
|
||||
// if (RelativeToday.DayOfWeek == DayOfWeek.Monday)
|
||||
// {
|
||||
// //Monday today? then go to next monday
|
||||
// dtBefore = dtBefore.AddDays(7);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// while (dtBefore.DayOfWeek != DayOfWeek.Monday)
|
||||
// dtBefore = dtBefore.AddDays(1);
|
||||
// }
|
||||
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.NextWeek:
|
||||
// //Between Next Sunday at midnight and Next Next sunday at midnight
|
||||
// dtAfter = RelativeToday;
|
||||
|
||||
// //If today is monday skip over it first
|
||||
// if (dtAfter.DayOfWeek == DayOfWeek.Monday)
|
||||
// dtAfter = dtAfter.AddDays(1);
|
||||
|
||||
// //go forwards to next monday
|
||||
// while (dtAfter.DayOfWeek != DayOfWeek.Monday)
|
||||
// dtAfter = dtAfter.AddDays(1);
|
||||
|
||||
// //Now go back to sunday last second
|
||||
// dtAfter = dtAfter.AddDays(-1);
|
||||
|
||||
// //go seven days ahead
|
||||
// dtBefore = dtAfter.AddDays(7);
|
||||
|
||||
// //case 1155
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.LastMonth:
|
||||
// //start with the first day of this month
|
||||
// dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
|
||||
// //subtract a Month
|
||||
// dtAfter = dtAfter.AddMonths(-1);
|
||||
|
||||
// //Add one month to dtAfter to get end date
|
||||
// dtBefore = dtAfter.AddMonths(1);
|
||||
|
||||
// //case 1155
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
|
||||
// // 'yyyy-mm-ddTHH:MM:SS'
|
||||
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.ThisMonth:
|
||||
// //start with the first day of this month
|
||||
// dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
|
||||
|
||||
// //Add one month to dtAfter to get end date
|
||||
// dtBefore = dtAfter.AddMonths(1);
|
||||
|
||||
// //case 1155
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.NextMonth:
|
||||
// //start with the first day of this month
|
||||
// dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
|
||||
// //Add a Month
|
||||
// dtAfter = dtAfter.AddMonths(1);
|
||||
|
||||
// //Add one month to dtAfter to get end date
|
||||
// dtBefore = dtAfter.AddMonths(1);
|
||||
|
||||
// //case 1155
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.FourteenDayWindow:
|
||||
// //start with today zero hour
|
||||
// dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, RelativeToday.Day, RelativeToday.Hour, RelativeToday.Minute, 00);
|
||||
// dtAfter = dtAfter.AddDays(-7);
|
||||
|
||||
// //Add 15 days to get end date (zero hour so not really 15 full days)
|
||||
// dtBefore = dtAfter.AddDays(15);
|
||||
|
||||
// //case 1155
|
||||
// dtAfter = dtAfter.AddSeconds(-1);
|
||||
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// //case 2067 ADDITIONAL DATE RANGES ************
|
||||
|
||||
// case DataListFilterSpecialToken.Past:
|
||||
// //Forever up to Now
|
||||
// dtAfter = new DateTime(1753, 1, 2, 00, 00, 00);
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.Future:
|
||||
// //From Now to forever (999 years from now)
|
||||
// dtAfter = DateTime.UtcNow;
|
||||
// dtBefore = DateTime.UtcNow.AddYears(999);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.LastYear:
|
||||
// //From zero hour january 1 a year ago
|
||||
// dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 0, 0, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// //To zero hour January 1 this year
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 1, 1, 0, 0, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.ThisYear:
|
||||
// //From zero hour january 1 this year
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// //To zero hour Jan 1 next year
|
||||
// dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.InTheLast3Months:
|
||||
// //From Now minus 3 months
|
||||
// dtAfter = DateTime.UtcNow.AddMonths(-3);
|
||||
// //To Now
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.InTheLast6Months:
|
||||
// //From Now minus 6 months
|
||||
// dtAfter = DateTime.UtcNow.AddMonths(-6);
|
||||
// //To Now
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.InTheLastYear:
|
||||
// //From Now minus 365 days
|
||||
// dtAfter = DateTime.UtcNow.AddDays(-365);
|
||||
// //To Now
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// //=======================
|
||||
// //NEW ONES FOR RAVEN
|
||||
|
||||
// case DataListFilterSpecialToken.YearToDate:
|
||||
// //From zero hour january 1 this year
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ;
|
||||
// //To now
|
||||
// dtBefore = RelativeNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.Past90Days:
|
||||
// //From Now minus 90 days
|
||||
// dtAfter = DateTime.UtcNow.AddDays(-90);
|
||||
// //To Now
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.Past30Days:
|
||||
// //From Now minus 30 days
|
||||
// dtAfter = DateTime.UtcNow.AddDays(-30);
|
||||
// //To Now
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
// case DataListFilterSpecialToken.Past24Hours:
|
||||
// //From Now minus 24 hours
|
||||
// dtAfter = DateTime.UtcNow.AddHours(-24);
|
||||
// //To Now
|
||||
// dtBefore = DateTime.UtcNow;
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.January:
|
||||
// //From zero hour january 1 this year
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// //To zero hour feb 1 this year
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.February:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.March:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.April:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.May:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.June:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.July:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.August:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.September:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.October:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.November:
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// dtBefore = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
// case DataListFilterSpecialToken.December:
|
||||
// //From zero hour dec 1 this year
|
||||
// dtAfter = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
|
||||
// //To zero hour Jan 1 next year
|
||||
// dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
|
||||
// BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
|
||||
// break;
|
||||
|
||||
//
|
||||
// //-----
|
||||
// }
|
||||
|
||||
// #endregion
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* ZZeslint-disable */
|
||||
//AyaNova Translation related utilities
|
||||
export default {
|
||||
////////////////////////////////
|
||||
// Update the local cache
|
||||
@@ -12,32 +10,12 @@ export default {
|
||||
|
||||
if (editedTranslation) {
|
||||
//iterate the keys that are cached and set them from whatever is in editedTranslation for that key
|
||||
|
||||
//de-lodash
|
||||
// window.$gz. _.forOwn(window.$gz.store.state.translationText, function(
|
||||
// cacheval,
|
||||
// cachekey
|
||||
// ) {
|
||||
// //find match
|
||||
// //de-lodash
|
||||
// // let display = window.$gz. _.find(editedTranslation.translationItems, {
|
||||
// // key: cachekey
|
||||
// // }).display;
|
||||
// let display = editedTranslation.translationItems.find(
|
||||
// z => z.key == cachekey
|
||||
// ).display;
|
||||
|
||||
// window.$gz.store.commit("setTranslationText", {
|
||||
// key: cachekey,
|
||||
// value: display
|
||||
// });
|
||||
// });
|
||||
|
||||
for (const [key, value] of Object.entries(
|
||||
window.$gz.store.state.translationText
|
||||
)) {
|
||||
let display = editedTranslation.translationItems.find(z => z.key == key)
|
||||
.display;
|
||||
const display = editedTranslation.translationItems.find(
|
||||
z => z.key == key
|
||||
).display;
|
||||
|
||||
window.$gz.store.commit("setTranslationText", {
|
||||
key: key,
|
||||
@@ -46,22 +24,15 @@ export default {
|
||||
}
|
||||
} else {
|
||||
//gather up the keys that are cached and fetch the latest and then replace them
|
||||
let needIt = [];
|
||||
|
||||
//de-lodash
|
||||
// window.$gz. _.forOwn(window.$gz.store.state.translationText, function(
|
||||
// cacheval,
|
||||
// cachekey
|
||||
// ) {
|
||||
// needIt.push(cachekey);
|
||||
// });
|
||||
|
||||
const needIt = [];
|
||||
Object.keys(window.$gz.store.state.translationText).forEach(z => {
|
||||
needIt.push(z);
|
||||
});
|
||||
|
||||
//fetch these keys
|
||||
let transData = await window.$gz.api.upsert("translation/subset", needIt);
|
||||
const transData = await window.$gz.api.upsert(
|
||||
"translation/subset",
|
||||
needIt
|
||||
);
|
||||
transData.data.forEach(function commitFetchedTranslationItemToStore(
|
||||
item
|
||||
) {
|
||||
@@ -89,7 +60,7 @@ export default {
|
||||
//step 1: build an array of keys that we don't have already
|
||||
//Note: this will ensure only unique keys go into the store so it's safe to call this with dupes as can happen
|
||||
//for example datatables have dynamic column names so they need to fetch on demand
|
||||
let needIt = [];
|
||||
const needIt = [];
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
if (
|
||||
!window.$gz.util.has(window.$gz.store.state.translationText, keys[i])
|
||||
@@ -323,21 +294,19 @@ export default {
|
||||
// (fetch and cache any missing strings)
|
||||
async translateStringWithMultipleKeysAsync(s) {
|
||||
let ret = s;
|
||||
let found = s.match(/LT:[\w]*/gm);
|
||||
const found = s.match(/LT:[\w]*/gm);
|
||||
if (found == null) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
//clean up the keys for fetching
|
||||
let keysToCache = found.map(z => z.replace("LT:", ""));
|
||||
const keysToCache = found.map(z => z.replace("LT:", ""));
|
||||
//cache / fetch any that are not already present
|
||||
//(async () => {
|
||||
await this.cacheTranslations(keysToCache);
|
||||
// })();
|
||||
|
||||
//replace
|
||||
found.forEach(z => {
|
||||
let translated = this.get(z.replace("LT:", ""));
|
||||
const translated = this.get(z.replace("LT:", ""));
|
||||
//replace all
|
||||
ret = ret.split(z).join(translated);
|
||||
});
|
||||
@@ -352,13 +321,13 @@ export default {
|
||||
//this is the sync version to be used in non async capable code
|
||||
translateStringWithMultipleKeys(s) {
|
||||
let ret = s;
|
||||
let found = s.match(/LT:[\w]*/gm);
|
||||
const found = s.match(/LT:[\w]*/gm);
|
||||
if (found == null) {
|
||||
return ret;
|
||||
}
|
||||
//replace
|
||||
found.forEach(z => {
|
||||
let translated = this.get(z.replace("LT:", ""));
|
||||
const translated = this.get(z.replace("LT:", ""));
|
||||
//replace all
|
||||
ret = ret.split(z).join(translated);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user