@globisnv/cypress-core 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blueprints/GLO_commandlist.js +1 -1
- package/dist/blueprints/GLO_consignment.d.ts +2 -0
- package/dist/blueprints/GLO_consignment.js +13 -4
- package/dist/blueprints/GLO_quotationLine.js +5 -0
- package/dist/commands/GLO_commands.d.ts +30 -0
- package/dist/commands/GLO_commands.js +108 -2
- package/dist/commands/GLS_commands.js +7 -23
- package/dist/types.d.ts +6 -0
- package/package.json +1 -1
|
@@ -5,6 +5,6 @@ export const GLO_enterCommandlist = (obj) => {
|
|
|
5
5
|
cy.GLO_addDate(input, [formName, 'valid_from'], obj.validFrom);
|
|
6
6
|
cy.GLO_addDate(input, [formName, 'valid_till'], obj.validTo);
|
|
7
7
|
cy.GLO_checkbox([formName, 'allow_automatic_update'], obj.allowAutomaticUpdate);
|
|
8
|
-
cy.GLO_popupWindow([formName, '
|
|
8
|
+
cy.GLO_popupWindow([formName, 'relation_id'], obj.customerRelation);
|
|
9
9
|
cy.GLO_addInput([formName, 'commandlist_code'], obj.commandlistCode);
|
|
10
10
|
};
|
|
@@ -56,6 +56,8 @@ export type objConsignment = {
|
|
|
56
56
|
etd?: string;
|
|
57
57
|
eta?: string;
|
|
58
58
|
fileReference?: string;
|
|
59
|
+
loadStartRequested?: string;
|
|
60
|
+
unloadStartRequested?: string;
|
|
59
61
|
};
|
|
60
62
|
export declare const GLO_enterConsignment: (obj: objConsignment, formName?: string, formNameGeneral?: string, formNameSea?: string, formNameWarehouse?: string) => void;
|
|
61
63
|
export declare const GLO_enterConsignment$Terminal: (obj: objConsignment) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { close, equal, input, open } from '../tsHelper.js';
|
|
1
|
+
import { close, equal, equalBool, input, open, typeSearch } from '../tsHelper.js';
|
|
2
2
|
import { GLO_enterAddressPopup } from './GLO_addressPopup.js';
|
|
3
3
|
const defaultFormName = 'ng$consignment_dtl';
|
|
4
4
|
const defaultFormNameGeneral = 'ng$consignment_dtl_general';
|
|
@@ -25,7 +25,14 @@ export const GLO_enterConsignment = (obj, formName = defaultFormName, formNameGe
|
|
|
25
25
|
cy.GLO_validateCheckbox([formName, 'flag_spot'], obj.flagSpotOrder);
|
|
26
26
|
cy.GLO_addInput([formName, 'plan_bloc'], obj.planBloc);
|
|
27
27
|
cy.GLO_addInput([formName, 'file_reference_txt'], obj.fileReference);
|
|
28
|
-
if (obj.collectionAddress ||
|
|
28
|
+
if (obj.collectionAddress ||
|
|
29
|
+
obj.deliveryAddress ||
|
|
30
|
+
obj.loadStartBooked ||
|
|
31
|
+
obj.loadEndBooked ||
|
|
32
|
+
obj.loadStartBookedTime ||
|
|
33
|
+
obj.loadEndBookedTime ||
|
|
34
|
+
obj.loadStartRequested ||
|
|
35
|
+
obj.unloadStartRequested) {
|
|
29
36
|
cy.GLO_selectTab([formName, 'tabs_70'], 'General', open);
|
|
30
37
|
if (obj.collectionAddress) {
|
|
31
38
|
cy.GLO_clickButton([formNameGeneral, 'btn_select_from_address'], 'fa-search-plus');
|
|
@@ -39,6 +46,8 @@ export const GLO_enterConsignment = (obj, formName = defaultFormName, formNameGe
|
|
|
39
46
|
obj.deliveryAddress.type ??= 'search';
|
|
40
47
|
GLO_enterAddressPopup(obj.deliveryAddress);
|
|
41
48
|
}
|
|
49
|
+
cy.GLO_addDate(input, [formNameGeneral, 'load_start_requested'], obj.loadStartRequested);
|
|
50
|
+
cy.GLO_addDate(input, [formNameGeneral, 'unload_start_requested'], obj.unloadStartRequested);
|
|
42
51
|
cy.GLO_addDate(input, [formNameGeneral, 'load_start_booked'], obj.loadStartBooked);
|
|
43
52
|
cy.GLO_addDate(input, [formNameGeneral, 'load_start_booked_time'], obj.loadStartBookedTime);
|
|
44
53
|
cy.GLO_addDate(input, [formNameGeneral, 'load_end_booked'], obj.loadEndBooked);
|
|
@@ -83,8 +92,8 @@ const seaTab = (obj, formName, formNameSea) => {
|
|
|
83
92
|
cy.GLO_addInput([formNameSea, 'txt_shipper_reference'], obj.shipperRef);
|
|
84
93
|
cy.GLO_addInput([formNameSea, 'supplier_incoterm'], obj.shipperIncoTerm);
|
|
85
94
|
cy.GLO_addInput([formNameSea, 'quay_code'], obj.quayCode);
|
|
86
|
-
cy.
|
|
87
|
-
cy.
|
|
95
|
+
cy.GLO_popupWindow([formNameSea, 'from_logistic_location'], obj.POL, undefined, equalBool, typeSearch);
|
|
96
|
+
cy.GLO_popupWindow([formNameSea, 'to_logistic_location'], obj.POD, undefined, equalBool, typeSearch);
|
|
88
97
|
cy.GLO_addInput([formNameSea, 'transport_method'], obj.transportMethod);
|
|
89
98
|
cy.GLO_addDate(input, [formNameSea, 'atd'], obj.atd);
|
|
90
99
|
cy.GLO_addDate(input, [formNameSea, 'goods_closing'], obj.goodsClosing);
|
|
@@ -11,6 +11,11 @@ const enterQuotationLine = (useNew, obj) => {
|
|
|
11
11
|
const formNameInnerBreak = 'ng$quotationlines_dtl_quantity';
|
|
12
12
|
const articleSelector = useNew ? 'article_code' : 'btn_select_article';
|
|
13
13
|
cy.GLO_popupWindow([formName, articleSelector], obj.articleCode);
|
|
14
|
+
// The article selection triggers a double load, so wait until the field really holds the article
|
|
15
|
+
// A falsy article code leaves the current article untouched, so there is nothing to wait for
|
|
16
|
+
if (obj.articleCode) {
|
|
17
|
+
cy.GLO_checkField([formName, 'article_code'], obj.articleCode, undefined, 300000);
|
|
18
|
+
}
|
|
14
19
|
if (obj.quantityBreaks && obj.quantityBreaks.length > 0) {
|
|
15
20
|
cy.GLO_selectTab([formName, 'tabs_470'], 'Quantity breaks', open);
|
|
16
21
|
obj.quantityBreaks.forEach((qtyBreak, index) => {
|
|
@@ -605,6 +605,36 @@ declare global {
|
|
|
605
605
|
* @param {number} [interval] - use this TOGETHER with timeOut for slow-running updates (e.g. batch process) (default: 15s)
|
|
606
606
|
*/
|
|
607
607
|
GLO_validateGridOrFail(waitValue: string, failValue: string, rowNumber?: number, columnId?: string, timeOut?: number, interval?: number): void;
|
|
608
|
+
/**
|
|
609
|
+
* Command to wait until a field shows a value, and to fail instantly when it shows a fail value.
|
|
610
|
+
* The field counterpart of GLO_validateGridOrFail, e.g. for a status that is updated by a running process.
|
|
611
|
+
* The displayed value is checked, as in GLO_checkField (the text of a valuelist, not its stored code).
|
|
612
|
+
*
|
|
613
|
+
* @param {selectorType} selector - [formName, elementName] of the field.
|
|
614
|
+
* @param {string} waitValue - The value to wait for.
|
|
615
|
+
* @param {string | string[]} failValue - The value(s) that stop the waiting and fail instantly.
|
|
616
|
+
* @param {number} [timeOut] - how long it should wait for the field to update, default: 10m
|
|
617
|
+
* @param {number} [interval] - how often the field is checked, default: 15s
|
|
618
|
+
* @example - cy.GLO_validateFieldOrFail(['ng$billing_task_dtl', 'status'], 'Finished', ['Error', 'Finished with error'], 300000, 2000);
|
|
619
|
+
*/
|
|
620
|
+
GLO_validateFieldOrFail(selector: selectorType, waitValue: string, failValue: string | string[], timeOut?: number, interval?: number): void;
|
|
621
|
+
/**
|
|
622
|
+
* Executes a batch processing type and waits until the run it started has finished.
|
|
623
|
+
* The last run of the type is remembered before Execute, so a run that finished earlier is never taken for
|
|
624
|
+
* the new one (row 0 of the 'Batch processing' tab is still the previous run right after Execute).
|
|
625
|
+
* The command opens 'Batch processing type' itself and closes it again when the run has finished.
|
|
626
|
+
*
|
|
627
|
+
* @param {string} batchType - The value to filter the batch processing type list on.
|
|
628
|
+
* @param {string} [columnId='description'] - The column of the batch processing type list to filter on (e.g. 'description', 'transaction_type_text', 'batch_module').
|
|
629
|
+
* @param {string | null} [waitValue='Completed'] - The status the new run must end with. Use null to only wait until the run has finished, whatever its status,
|
|
630
|
+
* e.g. for a batch that processes the records of the whole environment, where one record of a parallel test can turn the run into Error.
|
|
631
|
+
* @param {string} [failValue='Error'] - The status that stops the waiting and fails instantly (not used when waitValue is null).
|
|
632
|
+
* @param {number} [timeOut] - how long it should wait for the run to finish, default: 20m
|
|
633
|
+
* @param {number} [interval] - how often the 'Batch processing' tab is checked, default: 15s
|
|
634
|
+
* @returns {Chainable<batchRunType>} - Yields the new run (submitted, completed, status, error message).
|
|
635
|
+
* @example - cy.GLO_executeBatchProcess('Batch processor accountancy SALES', 'batch_module', null);
|
|
636
|
+
*/
|
|
637
|
+
GLO_executeBatchProcess(batchType: string, columnId?: string, waitValue?: string | null, failValue?: string, timeOut?: number, interval?: number): Chainable<batchRunType>;
|
|
608
638
|
/**
|
|
609
639
|
* Store the value(s) of one or more fields into the nested '@saveData' alias:
|
|
610
640
|
* saveData[formName][elementName] = value
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bottom, buttonSearch, check, contains, cypressWebsocketLoader, defaultTimeout, enabled, equal, greaterEqual, gridDropDown, gridInput, gridInputWithoutEnter, gridSelect, hideInCommandLog, input, isInvalid, noEqualBool, noSkipCheck, notEqual, parseLocalizedNumber, row, select, skipCheck, span, top, unCheck } from '../tsHelper.js';
|
|
1
|
+
import { bottom, buttonSearch, check, contains, cypressWebsocketLoader, defaultTimeout, enabled, equal, greaterEqual, gridDropDown, gridInput, gridInputWithoutEnter, gridSelect, hideInCommandLog, input, isInvalid, noEqualBool, noSkipCheck, notEqual, open, parseLocalizedNumber, row, select, skipCheck, span, top, unCheck } from '../tsHelper.js';
|
|
2
2
|
import { attachWebSocketSpy } from '../websocketDetector.js';
|
|
3
3
|
//! File-specific helpers
|
|
4
4
|
const monthNames = ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'];
|
|
@@ -1336,7 +1336,8 @@ Cypress.Commands.add('GLO_popupWindow', (selector, value, columnId, equals = noE
|
|
|
1336
1336
|
selectFromPopupWindow(value, columnId, equals);
|
|
1337
1337
|
}
|
|
1338
1338
|
else {
|
|
1339
|
-
|
|
1339
|
+
// Type search with an exact match must stay exact: a contains check would accept LOC1 for LOC10.
|
|
1340
|
+
cy.GLO_checkField(selector, value, equals ? (useMagnifierFlag ? contains : equal) : undefined);
|
|
1340
1341
|
}
|
|
1341
1342
|
});
|
|
1342
1343
|
});
|
|
@@ -2007,6 +2008,111 @@ Cypress.Commands.add('GLO_getAllRowsInGrid', (selector, timeOut = defaultTimeout
|
|
|
2007
2008
|
Cypress.Commands.add('GLO_validateGridOrFail', (waitValue, failValue, rowNumber, columnId, timeOut = 600000, interval = 15000) => {
|
|
2008
2009
|
validateGridValue(waitValue, failValue, rowNumber, columnId, timeOut, interval);
|
|
2009
2010
|
});
|
|
2011
|
+
Cypress.Commands.add('GLO_validateFieldOrFail', (selector, waitValue, failValue, timeOut = 600000, interval = 15000) => {
|
|
2012
|
+
const failValues = Array.isArray(failValue) ? failValue : [failValue];
|
|
2013
|
+
const maxAttempts = Math.max(1, Math.ceil(timeOut / interval));
|
|
2014
|
+
const fieldName = selector.join('.');
|
|
2015
|
+
const checkField = (attempt = 1) => {
|
|
2016
|
+
// Same value as GLO_checkField reads: the displayed text, with html and other unicode spaces normalized
|
|
2017
|
+
cy.GLO_getElement(selector).then(($field) => {
|
|
2018
|
+
const fieldValue = String($field.find('.dx-texteditor-input').val()).replace(/\s+/g, ' ').trim();
|
|
2019
|
+
if (fieldValue === waitValue) {
|
|
2020
|
+
cy.log(`${fieldName} is "${waitValue}"`);
|
|
2021
|
+
return;
|
|
2022
|
+
}
|
|
2023
|
+
if (failValues.includes(fieldValue)) {
|
|
2024
|
+
throw new Error(`${fieldName} is "${fieldValue}" (waited for "${waitValue}")`);
|
|
2025
|
+
}
|
|
2026
|
+
if (attempt >= maxAttempts) {
|
|
2027
|
+
throw new Error(`${fieldName} is still "${fieldValue}" after ${timeOut / 1000}s (waited for "${waitValue}")`);
|
|
2028
|
+
}
|
|
2029
|
+
// biome-ignore lint/plugin/noUnnecessaryWaiting: wait for next poll interval before checking again
|
|
2030
|
+
cy.wait(interval, { log: false }).then(() => {
|
|
2031
|
+
checkField(attempt + 1);
|
|
2032
|
+
});
|
|
2033
|
+
});
|
|
2034
|
+
};
|
|
2035
|
+
checkField();
|
|
2036
|
+
});
|
|
2037
|
+
Cypress.Commands.add('GLO_executeBatchProcess', (batchType, columnId = 'description', waitValue = 'Completed', failValue = 'Error', timeOut = 1200000, interval = 15000) => {
|
|
2038
|
+
const formNameTypeList = 'ng$batch_execution_type_lst';
|
|
2039
|
+
const formNameTypeTab = 'ng$batch_execution_type_tab';
|
|
2040
|
+
const formNameRunList = 'ng$batch_execution_lst';
|
|
2041
|
+
const maxAttempts = Math.max(1, Math.ceil(timeOut / interval));
|
|
2042
|
+
// Row 0 of the run list is the most recent run (sorted on process_submitted desc); an empty list has no run yet.
|
|
2043
|
+
// Without these columns (hidden in a custom view) a new run can never be recognised, so that fails at once.
|
|
2044
|
+
const requiredColumns = ['process_submitted', 'process_completed', 'process_status'];
|
|
2045
|
+
const readLastRun = () => {
|
|
2046
|
+
const noRun = { submitted: '', completed: '', status: '', errorMessage: '' };
|
|
2047
|
+
return cy.GLO_getElement([formNameRunList, 'grid']).then(($grid) => {
|
|
2048
|
+
if ($grid.find('.ag-center-cols-container [row-index]').length === 0) {
|
|
2049
|
+
return cy.wrap(noRun, { log: false });
|
|
2050
|
+
}
|
|
2051
|
+
return cy
|
|
2052
|
+
.wrap($grid, { log: false })
|
|
2053
|
+
.within(() => {
|
|
2054
|
+
cy.GLO_getRowInGrid(0).then(($row) => {
|
|
2055
|
+
const missingColumns = requiredColumns.filter((requiredColumnId) => $row.find(`[col-id="${requiredColumnId}"]`).length === 0);
|
|
2056
|
+
if (missingColumns.length) {
|
|
2057
|
+
throw new Error(`The 'Batch processing' tab of ${batchType} does not show the column(s) ${missingColumns.join(', ')}`);
|
|
2058
|
+
}
|
|
2059
|
+
const cellText = (cellColumnId) => $row.find(`[col-id="${cellColumnId}"]`).text().trim();
|
|
2060
|
+
cy.wrap({
|
|
2061
|
+
submitted: cellText('process_submitted'),
|
|
2062
|
+
completed: cellText('process_completed'),
|
|
2063
|
+
status: cellText('process_status'),
|
|
2064
|
+
errorMessage: cellText('last_error_message')
|
|
2065
|
+
}, { log: false }).as('COM_batchRun');
|
|
2066
|
+
});
|
|
2067
|
+
})
|
|
2068
|
+
.then(() => cy.get('@COM_batchRun', { log: false }));
|
|
2069
|
+
});
|
|
2070
|
+
};
|
|
2071
|
+
// The completion time (process_completed) is stamped for every final status, Completed as well as Error
|
|
2072
|
+
const waitForNewRun = (previousSubmitted, attempt = 1) => {
|
|
2073
|
+
cy.GLO_checkAGLoader();
|
|
2074
|
+
return readLastRun().then((run) => {
|
|
2075
|
+
const isNewRun = run.submitted !== '' && run.submitted !== previousSubmitted;
|
|
2076
|
+
const hasFailed = waitValue !== null && run.status === failValue;
|
|
2077
|
+
if (isNewRun && (run.completed !== '' || hasFailed)) {
|
|
2078
|
+
cy.GLO_log(`Batch run of ${run.submitted} (${batchType}) finished with status "${run.status}" ${run.errorMessage}`);
|
|
2079
|
+
if (hasFailed) {
|
|
2080
|
+
throw new Error(`Batch run of ${run.submitted} (${batchType}) ended with status "${run.status}": ${run.errorMessage}`);
|
|
2081
|
+
}
|
|
2082
|
+
if (waitValue !== null) {
|
|
2083
|
+
expect(run.status, `status of the batch run of ${run.submitted} (${batchType})`).to.equal(waitValue);
|
|
2084
|
+
}
|
|
2085
|
+
return cy.wrap(run, { log: false });
|
|
2086
|
+
}
|
|
2087
|
+
if (attempt >= maxAttempts) {
|
|
2088
|
+
throw new Error(`No finished run of ${batchType} after ${timeOut / 1000}s (last run submitted: ${run.submitted})`);
|
|
2089
|
+
}
|
|
2090
|
+
// biome-ignore lint/plugin/noUnnecessaryWaiting: wait for next poll interval before checking again
|
|
2091
|
+
return cy.wait(interval, { log: false }).then(() => waitForNewRun(previousSubmitted, attempt + 1));
|
|
2092
|
+
});
|
|
2093
|
+
};
|
|
2094
|
+
cy.GLO_searchHeader('Batch processes', 'Batch processes', 'Batch processing type');
|
|
2095
|
+
cy.GLO_clickDatacontrolBrowserButton('btnAll');
|
|
2096
|
+
// A filter typed while the list is still loading is lost
|
|
2097
|
+
cy.GLO_checkAGLoader();
|
|
2098
|
+
// Equals, not contains: 'CALCULATE INVOICE' must not select 'CALCULATE INVOICE RETOUR'
|
|
2099
|
+
cy.GLO_filterGrid(columnId, [formNameTypeList, 'grid'], batchType, undefined, 'Equals');
|
|
2100
|
+
cy.GLO_getElement([formNameTypeList, 'grid']).within(() => {
|
|
2101
|
+
cy.GLO_checkValueGrid(batchType, 0, columnId, undefined, undefined, equal);
|
|
2102
|
+
});
|
|
2103
|
+
cy.GLO_selectTab([formNameTypeTab, 'tabs'], 'Batch processing', open);
|
|
2104
|
+
cy.GLO_checkAGLoader();
|
|
2105
|
+
return readLastRun().then((previousRun) => {
|
|
2106
|
+
cy.GLO_selectMenuButton('Execute');
|
|
2107
|
+
cy.GLO_log(`Executed batch processing type ${batchType}`);
|
|
2108
|
+
return waitForNewRun(previousRun.submitted).then((run) => {
|
|
2109
|
+
// Every call opens the program, so it is closed again: a second instance would keep a hidden run list in
|
|
2110
|
+
// the page, and the caller gets back the programs it had open
|
|
2111
|
+
cy.GLO_closeProgram(top, 'Batch processing type');
|
|
2112
|
+
return cy.wrap(run, { log: false });
|
|
2113
|
+
});
|
|
2114
|
+
});
|
|
2115
|
+
});
|
|
2010
2116
|
const validateGridValue = (value, failValue, rowFilter, columnId, timeOut = 10000, interval, operator = contains) => {
|
|
2011
2117
|
const assertOrCheckCellValue = ($cells, toCheck, doAssert) => {
|
|
2012
2118
|
const compare = (cellText) => {
|
|
@@ -14,29 +14,13 @@ Cypress.Commands.add('GLS_login', (username = 'PR001', company) => {
|
|
|
14
14
|
cy.GLO_checkLoadingIndicator();
|
|
15
15
|
});
|
|
16
16
|
Cypress.Commands.add('GLS_mainNavigation', (value) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
.then(($viewport) => {
|
|
25
|
-
const $label = $viewport.find('label').filter((_i, el) => el.innerText.trim() === value);
|
|
26
|
-
if ($label.length > 0 && $label.is(':visible')) {
|
|
27
|
-
return cy.contains('.ag-body-viewport label', value).click();
|
|
28
|
-
}
|
|
29
|
-
return cy
|
|
30
|
-
.get('.ag-center-cols-container [role="row"][tabindex="0"]')
|
|
31
|
-
.first()
|
|
32
|
-
.focus()
|
|
33
|
-
.realPress('ArrowDown')
|
|
34
|
-
.then(() => scrollAndSearch(attempts + 1));
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
scrollAndSearch().then(() => {
|
|
38
|
-
cy.GLO_checkLoadingIndicator();
|
|
39
|
-
});
|
|
17
|
+
// Exact match, so 'Wegzetten' does not open 'Wegzetten drager'. A menu level that is still mounted but hidden is skipped
|
|
18
|
+
// through its [hidden] container instead of :visible, which also drops items scrolled out of the list (see isInOpenContainer)
|
|
19
|
+
const exactText = new RegExp(`^\\s*${Cypress._.escapeRegExp(value)}\\s*$`);
|
|
20
|
+
cy.get('.svy-listformcomponent label.clickable')
|
|
21
|
+
.filter((_i, el) => !el.closest('[hidden]') && exactText.test(el.innerText))
|
|
22
|
+
.click();
|
|
23
|
+
cy.GLO_checkLoadingIndicator();
|
|
40
24
|
});
|
|
41
25
|
Cypress.Commands.add('GLS_selectStock', (formName, elementName, index) => {
|
|
42
26
|
cy.GLO_getElement([formName, elementName]).find(`.item-container#${index}`).click();
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ type deleteRecordsType = 'DELETE_CYPRESS_RECORDS' | 'DELETE_LEAPWORK_RECORDS';
|
|
|
12
12
|
type viewModeButtonType = 'btnList' | 'btnDetail';
|
|
13
13
|
type datacontrolbuttonType = baseDatacontrolViewerButtonType | viewModeButtonType | 'btnPrev' | 'btnNext' | 'btnAll' | 'btnPivot' | 'btnAttachment' | 'btnAddMode' | 'btnEditMode' | 'btnDeleteMode' | 'btnDeeplink' | 'btnExtendedSearch' | 'btnCustomViews' | 'btnFilter' | 'btnClearAllFilters';
|
|
14
14
|
type checkValueInGridType = string | string[] | number;
|
|
15
|
+
type batchRunType = {
|
|
16
|
+
submitted: string;
|
|
17
|
+
completed: string;
|
|
18
|
+
status: string;
|
|
19
|
+
errorMessage: string;
|
|
20
|
+
};
|
|
15
21
|
type selectMenuButtonLeftType = 'home' | 'settings' | 'help' | 'support' | 'excel' | 'info' | 'refresh' | 'query' | 'clients' | 'users' | 'theme';
|
|
16
22
|
type urlTypeType = 'online' | 'pos' | 'globgate' | 'globjob' | 'globscan' | 'portal' | 'carrier' | 'globtrace' | 'external_portal' | 'globtake' | 'globis_external_portal';
|
|
17
23
|
type customValueType = JQuery | string | number;
|