@apia/execution 4.0.45 → 4.0.47

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/index.js CHANGED
@@ -4,8 +4,9 @@ import xml2js from 'xml2js';
4
4
  import he from 'he';
5
5
  import { parseBooleans, parseNumbers } from 'xml2js/lib/processors';
6
6
  import QueryString from 'qs';
7
- import { arrayOrArray, EventEmitter as EventEmitter$1, isTrue, toBoolean, downloadUrl, addBoundary, formatMessage, parseAsSize, shallowEqual as shallowEqual$1, Mutex, noNaN as noNaN$1, getDateFormat, decodeBase64ToUtf8 as decodeBase64ToUtf8$1, encodeStrToBase64Utf8, uniqueId, parseXMLRequestResponse, Url, postNavigation } from '@apia/util';
7
+ import { arrayOrArray, EventEmitter as EventEmitter$1, isTrue, toBoolean, downloadUrl, shallowEqual as shallowEqual$1, Mutex, noNaN as noNaN$1, getDateFormat, decodeBase64ToUtf8 as decodeBase64ToUtf8$1, encodeStrToBase64Utf8, uniqueId, parseXMLRequestResponse, Url, postNavigation } from '@apia/util';
8
8
  import { Cell, TableController, Row, FocusControllerPlugin } from '@apia/table2-controller';
9
+ import { UploaderApi as UploaderApi$1, parseFileDefinition } from '@apia/uploader-controller';
9
10
  import dayjs from 'dayjs';
10
11
  import customParseFormat from 'dayjs/plugin/customParseFormat';
11
12
  import { MobXTree } from '@apia/tree2-controller';
@@ -47,16 +48,16 @@ const deepEqual = (a, b) => {
47
48
  return a === b;
48
49
  };
49
50
 
50
- var __defProp$t = Object.defineProperty;
51
- var __defNormalProp$t = (obj, key, value) => key in obj ? __defProp$t(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
52
- var __publicField$t = (obj, key, value) => {
53
- __defNormalProp$t(obj, key + "" , value);
51
+ var __defProp$s = Object.defineProperty;
52
+ var __defNormalProp$s = (obj, key, value) => key in obj ? __defProp$s(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
53
+ var __publicField$s = (obj, key, value) => {
54
+ __defNormalProp$s(obj, key + "" , value);
54
55
  return value;
55
56
  };
56
57
  class Notification {
57
58
  constructor(props) {
58
59
  this.props = props;
59
- __publicField$t(this, "state");
60
+ __publicField$s(this, "state");
60
61
  this.state = props;
61
62
  makeObservable(this, { state: observable });
62
63
  }
@@ -478,7 +479,7 @@ var ExecutionState = /* @__PURE__ */ ((ExecutionState2) => {
478
479
 
479
480
  function dispatchMessage(execution, type, message) {
480
481
  const definedType = message.type;
481
- const actualType = [null, "success", "warning", "error"][definedType || 0];
482
+ const actualType = [null, "success", "warning", "error", "modal"][definedType || 0];
482
483
  execution.notifications.add(
483
484
  new MessageNotification({
484
485
  message: message.text,
@@ -709,20 +710,20 @@ function makeApiaUrl(execution, props) {
709
710
  return `${contextWord ? "/" : ""}${contextWord}/${actualAjaxUrl}?${timestamp}${!props?.preventAsXmlParameter ? "asXml=true&" : ""}${props?.queryString ? `${props.queryString}&` : ""}${queryString ? `${queryString}&` : ""}${tabId}`;
710
711
  }
711
712
 
712
- var __defProp$s = Object.defineProperty;
713
- var __defNormalProp$s = (obj, key, value) => key in obj ? __defProp$s(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
714
- var __publicField$s = (obj, key, value) => {
715
- __defNormalProp$s(obj, typeof key !== "symbol" ? key + "" : key, value);
713
+ var __defProp$r = Object.defineProperty;
714
+ var __defNormalProp$r = (obj, key, value) => key in obj ? __defProp$r(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
715
+ var __publicField$r = (obj, key, value) => {
716
+ __defNormalProp$r(obj, typeof key !== "symbol" ? key + "" : key, value);
716
717
  return value;
717
718
  };
718
719
  class EventEmitter {
719
720
  constructor() {
720
- __publicField$s(this, "callbacks", {
721
+ __publicField$r(this, "callbacks", {
721
722
  on: {},
722
723
  once: {}
723
724
  });
724
- __publicField$s(this, "enabled", true);
725
- __publicField$s(this, "debugMode", false);
725
+ __publicField$r(this, "enabled", true);
726
+ __publicField$r(this, "debugMode", false);
726
727
  }
727
728
  debug(enable = true) {
728
729
  this.debugMode = enable;
@@ -788,10 +789,10 @@ class EventEmitter {
788
789
  }
789
790
  }
790
791
 
791
- var __defProp$r = Object.defineProperty;
792
- var __defNormalProp$r = (obj, key, value) => key in obj ? __defProp$r(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
793
- var __publicField$r = (obj, key, value) => {
794
- __defNormalProp$r(obj, key + "" , value);
792
+ var __defProp$q = Object.defineProperty;
793
+ var __defNormalProp$q = (obj, key, value) => key in obj ? __defProp$q(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
794
+ var __publicField$q = (obj, key, value) => {
795
+ __defNormalProp$q(obj, key + "" , value);
795
796
  return value;
796
797
  };
797
798
  function isSetter(data) {
@@ -800,7 +801,7 @@ function isSetter(data) {
800
801
  class StatefulEmitter extends EventEmitter {
801
802
  constructor(initialState) {
802
803
  super();
803
- __publicField$r(this, "state", {});
804
+ __publicField$q(this, "state", {});
804
805
  this.state = Object.assign({}, initialState);
805
806
  }
806
807
  emit(event, data) {
@@ -835,18 +836,18 @@ class StatefulEmitter extends EventEmitter {
835
836
  }
836
837
  }
837
838
 
838
- var __defProp$q = Object.defineProperty;
839
- var __defNormalProp$q = (obj, key, value) => key in obj ? __defProp$q(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
840
- var __publicField$q = (obj, key, value) => {
841
- __defNormalProp$q(obj, typeof key !== "symbol" ? key + "" : key, value);
839
+ var __defProp$p = Object.defineProperty;
840
+ var __defNormalProp$p = (obj, key, value) => key in obj ? __defProp$p(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
841
+ var __publicField$p = (obj, key, value) => {
842
+ __defNormalProp$p(obj, typeof key !== "symbol" ? key + "" : key, value);
842
843
  return value;
843
844
  };
844
845
  const NullObject = Symbol("NullObject");
845
846
  class BouncingEmitter extends StatefulEmitter {
846
847
  constructor() {
847
848
  super(...arguments);
848
- __publicField$q(this, "bouncingTimeouts", {});
849
- __publicField$q(this, "defaultTiming", 100);
849
+ __publicField$p(this, "bouncingTimeouts", {});
850
+ __publicField$p(this, "defaultTiming", 100);
850
851
  /**
851
852
  * Throttles a event emit with the warranty that the data will be emitted at most every (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:
852
853
  *
@@ -858,8 +859,8 @@ class BouncingEmitter extends StatefulEmitter {
858
859
  *
859
860
  * @param configuration.emitOnStart - Emits an event on the first call to throttle when no pending throttle is stored. **If emitOnStart is true and an only call to throttle is made, it will emit an only event.**
860
861
  */
861
- __publicField$q(this, "throttleData", {});
862
- __publicField$q(this, "throttleEmittedOnInit", {});
862
+ __publicField$p(this, "throttleData", {});
863
+ __publicField$p(this, "throttleEmittedOnInit", {});
863
864
  }
864
865
  /**
865
866
  * Debounces a event emit with until there is no call to the emit methods by (timing)ms. Take the following event throttling, where each E is a call to this method and each character represents 20ms:
@@ -989,16 +990,16 @@ function parseFakeJSON$1(str) {
989
990
  return ret;
990
991
  }
991
992
 
992
- var __defProp$p = Object.defineProperty;
993
- var __defNormalProp$p = (obj, key, value) => key in obj ? __defProp$p(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
994
- var __publicField$p = (obj, key, value) => {
995
- __defNormalProp$p(obj, typeof key !== "symbol" ? key + "" : key, value);
993
+ var __defProp$o = Object.defineProperty;
994
+ var __defNormalProp$o = (obj, key, value) => key in obj ? __defProp$o(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
995
+ var __publicField$o = (obj, key, value) => {
996
+ __defNormalProp$o(obj, typeof key !== "symbol" ? key + "" : key, value);
996
997
  return value;
997
998
  };
998
999
  class WithProperties {
999
1000
  constructor(initialState) {
1000
- __publicField$p(this, "properties", {});
1001
- __publicField$p(this, "parentGrid", null);
1001
+ __publicField$o(this, "properties", {});
1002
+ __publicField$o(this, "parentGrid", null);
1002
1003
  if (initialState) {
1003
1004
  this.properties = initialState;
1004
1005
  }
@@ -1192,10 +1193,10 @@ const asyncCreateNewField = async (execution, fld) => {
1192
1193
  return creator(execution, fld);
1193
1194
  };
1194
1195
 
1195
- var __defProp$o = Object.defineProperty;
1196
- var __defNormalProp$o = (obj, key, value) => key in obj ? __defProp$o(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1197
- var __publicField$o = (obj, key, value) => {
1198
- __defNormalProp$o(obj, typeof key !== "symbol" ? key + "" : key, value);
1196
+ var __defProp$n = Object.defineProperty;
1197
+ var __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1198
+ var __publicField$n = (obj, key, value) => {
1199
+ __defNormalProp$n(obj, typeof key !== "symbol" ? key + "" : key, value);
1199
1200
  return value;
1200
1201
  };
1201
1202
  var __accessCheck$l = (obj, member, msg) => {
@@ -1229,9 +1230,9 @@ async function getApiaFunctions(execution) {
1229
1230
  class Field extends WithProperties {
1230
1231
  constructor({ properties, ...definition }) {
1231
1232
  super();
1232
- __publicField$o(this, "form", {});
1233
- __publicField$o(this, "definition");
1234
- __publicField$o(this, "state", {
1233
+ __publicField$n(this, "form", {});
1234
+ __publicField$n(this, "definition");
1235
+ __publicField$n(this, "state", {
1235
1236
  validation: { dirty: false, errorMessage: "", synchronizing: false }
1236
1237
  });
1237
1238
  __privateAdd$l(this, _hasInited$1, false);
@@ -1459,16 +1460,16 @@ class Button extends Field {
1459
1460
  }
1460
1461
  }
1461
1462
 
1462
- var __defProp$n = Object.defineProperty;
1463
- var __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1464
- var __publicField$n = (obj, key, value) => {
1465
- __defNormalProp$n(obj, typeof key !== "symbol" ? key + "" : key, value);
1463
+ var __defProp$m = Object.defineProperty;
1464
+ var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1465
+ var __publicField$m = (obj, key, value) => {
1466
+ __defNormalProp$m(obj, typeof key !== "symbol" ? key + "" : key, value);
1466
1467
  return value;
1467
1468
  };
1468
1469
  const _Captcha = class _Captcha extends Field {
1469
1470
  constructor(definition) {
1470
1471
  super(definition);
1471
- __publicField$n(this, "id", "");
1472
+ __publicField$m(this, "id", "");
1472
1473
  this.state.value = "";
1473
1474
  this.properties.name = "__captcha__";
1474
1475
  _Captcha.emitter.on("confirm", () => {
@@ -1519,8 +1520,8 @@ const _Captcha = class _Captcha extends Field {
1519
1520
  }
1520
1521
  }
1521
1522
  };
1522
- __publicField$n(_Captcha, "emitter", new EventEmitter$1());
1523
- __publicField$n(_Captcha, "confirmParams", {});
1523
+ __publicField$m(_Captcha, "emitter", new EventEmitter$1());
1524
+ __publicField$m(_Captcha, "confirmParams", {});
1524
1525
  let Captcha = _Captcha;
1525
1526
 
1526
1527
  class TooMuchRetriesException extends Error {
@@ -1593,10 +1594,10 @@ function isFieldShowAsText(f) {
1593
1594
  return isTrue(f.properties.disabled) || isTrue(f.getForm().definition.readonly) || isTrue(f.getForm().definition.readOnly) || isTrue(f.properties.inputAsText);
1594
1595
  }
1595
1596
 
1596
- var __defProp$m = Object.defineProperty;
1597
- var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1598
- var __publicField$m = (obj, key, value) => {
1599
- __defNormalProp$m(obj, typeof key !== "symbol" ? key + "" : key, value);
1597
+ var __defProp$l = Object.defineProperty;
1598
+ var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1599
+ var __publicField$l = (obj, key, value) => {
1600
+ __defNormalProp$l(obj, typeof key !== "symbol" ? key + "" : key, value);
1600
1601
  return value;
1601
1602
  };
1602
1603
  var __accessCheck$k = (obj, member, msg) => {
@@ -1637,8 +1638,8 @@ class FieldWithAttribute extends Field {
1637
1638
  }) {
1638
1639
  super(definition);
1639
1640
  __privateAdd$k(this, _lastOnChangeValue, null);
1640
- __publicField$m(this, "lastSynchronizationValue", null);
1641
- __publicField$m(this, "attribute");
1641
+ __publicField$l(this, "lastSynchronizationValue", null);
1642
+ __publicField$l(this, "attribute");
1642
1643
  this.attribute = new Attribute(attId, attName, attLabel, valueType);
1643
1644
  this.state.value = value;
1644
1645
  this.state.validation = {
@@ -1838,16 +1839,16 @@ class Checkbox extends FieldWithAttribute {
1838
1839
  }
1839
1840
  }
1840
1841
 
1841
- var __defProp$l = Object.defineProperty;
1842
- var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1843
- var __publicField$l = (obj, key, value) => {
1844
- __defNormalProp$l(obj, key + "" , value);
1842
+ var __defProp$k = Object.defineProperty;
1843
+ var __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1844
+ var __publicField$k = (obj, key, value) => {
1845
+ __defNormalProp$k(obj, key + "" , value);
1845
1846
  return value;
1846
1847
  };
1847
1848
  class Translation {
1848
1849
  constructor(execution, state) {
1849
1850
  this.execution = execution;
1850
- __publicField$l(this, "state");
1851
+ __publicField$k(this, "state");
1851
1852
  this.state = {
1852
1853
  ...state,
1853
1854
  hasChanged: false,
@@ -1912,19 +1913,19 @@ function parseFakeJSON(fakeJSON) {
1912
1913
  }));
1913
1914
  }
1914
1915
 
1915
- var __defProp$k = Object.defineProperty;
1916
- var __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1917
- var __publicField$k = (obj, key, value) => {
1918
- __defNormalProp$k(obj, typeof key !== "symbol" ? key + "" : key, value);
1916
+ var __defProp$j = Object.defineProperty;
1917
+ var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1918
+ var __publicField$j = (obj, key, value) => {
1919
+ __defNormalProp$j(obj, typeof key !== "symbol" ? key + "" : key, value);
1919
1920
  return value;
1920
1921
  };
1921
1922
  class TranslatableField extends FieldWithAttribute {
1922
1923
  constructor(props) {
1923
1924
  super(props);
1924
- __publicField$k(this, "translations", /* @__PURE__ */ new Map());
1925
- __publicField$k(this, "selectedLanguageId", this.getLanguages()[0]?.id);
1926
- __publicField$k(this, "isTradLoading", false);
1927
- __publicField$k(this, "definitionTradParsed", {});
1925
+ __publicField$j(this, "translations", /* @__PURE__ */ new Map());
1926
+ __publicField$j(this, "selectedLanguageId", this.getLanguages()[0]?.id);
1927
+ __publicField$j(this, "isTradLoading", false);
1928
+ __publicField$j(this, "definitionTradParsed", {});
1928
1929
  makeObservable(this, {
1929
1930
  translations: observable,
1930
1931
  selectedLanguageId: observable,
@@ -1945,1659 +1946,156 @@ class TranslatableField extends FieldWithAttribute {
1945
1946
  getLanguages() {
1946
1947
  return arrayOrArray(parseFakeJSON(this.getForm().definition?.langs ?? ""));
1947
1948
  }
1948
- async init(form) {
1949
- await super.init(form);
1950
- if (this.getLanguages().length > 0) {
1951
- this.extractTrad();
1952
- this.getLanguages().forEach((lang) => {
1953
- const isTranslated = this.definitionTradParsed[lang.id] ?? false;
1954
- this.translations.set(
1955
- lang.id,
1956
- new Translation(this.form.execution, {
1957
- id: lang.id,
1958
- label: lang.label,
1959
- isTranslated
1960
- })
1961
- );
1962
- });
1963
- this.selectedLanguageId = this.getLanguages()[0].id;
1964
- }
1965
- }
1966
- cancelTranslations() {
1967
- this.getTranslations().forEach((c) => {
1968
- c.reset();
1969
- });
1970
- }
1971
- deleteTranslations() {
1972
- this.getTranslations().forEach((c) => {
1973
- c.deleteTranslation();
1974
- });
1975
- }
1976
- async changeLanguage(langId) {
1977
- this.selectedLanguageId = langId;
1978
- this.syncTranslation();
1979
- }
1980
- getTranslation(id) {
1981
- return this.translations.get(id);
1982
- }
1983
- getCurrentTranslation() {
1984
- return this.translations.get(this.selectedLanguageId);
1985
- }
1986
- getTranslations() {
1987
- return this.translations;
1988
- }
1989
- submitTranslations() {
1990
- [...this.getTranslations().values()].filter((c) => c.state.hasChanged).forEach((c) => {
1991
- c.submitTranslation(
1992
- c.value,
1993
- this.getSynchronizeUrl({
1994
- react: true,
1995
- preventAsXmlParameter: true,
1996
- langId: c.langId
1997
- })
1998
- );
1999
- });
2000
- this.state.validation.errorMessage = null;
2001
- }
2002
- async syncTranslation() {
2003
- const langId = this.selectedLanguageId;
2004
- this.isTradLoading = true;
2005
- await this.getTranslation(langId)?.readTranslations(
2006
- await makeApiaUrl(this.form.execution, {
2007
- ajaxUrl: "/apia.execution.FormAction.run",
2008
- action: "getFieldTranslations",
2009
- frmId: this.getForm().definition.id,
2010
- frmParent: this.getForm().definition.frmParent,
2011
- fldId: this.definition.id,
2012
- attId: this.attribute.id,
2013
- langId,
2014
- react: true
2015
- })
2016
- );
2017
- this.isTradLoading = false;
2018
- }
2019
- async validate() {
2020
- const isSuperValid = await super.validate();
2021
- let isValid = isSuperValid;
2022
- const canValidate = isSuperValid && this.properties.reqTrad && this.hasValue() && (!this.properties.inputAsText || !this.properties.visibilityHidden || !this.properties.disabled);
2023
- if (canValidate) {
2024
- const translations = [...this.getTranslations().values()];
2025
- const tradNotValidated = translations.find((c) => !c.state.isTranslated);
2026
- if (tradNotValidated) {
2027
- this.state.validation.errorMessage = labels.errorTranslateRequired(
2028
- this.form.execution,
2029
- tradNotValidated.state.label
2030
- );
2031
- isValid = false;
2032
- } else {
2033
- this.state.validation.errorMessage = null;
2034
- }
2035
- }
2036
- return isValid;
2037
- }
2038
- setValue(newValue, options) {
2039
- if (newValue === "") {
2040
- this.deleteTranslations();
2041
- }
2042
- return super.setValue(newValue, options);
2043
- }
2044
- }
2045
-
2046
- class Editor extends TranslatableField {
2047
- fireEvent(eventName, options) {
2048
- return super.fireEvent(eventName, options);
2049
- }
2050
- isValidValue() {
2051
- return !!new DOMParser().parseFromString(this.getValue(), "text/html").documentElement.textContent;
2052
- }
2053
- getSynchronizePostConfiguration(value) {
2054
- const conf = super.getSynchronizePostConfiguration(value);
2055
- conf.postData.clearValues = "true";
2056
- return conf;
2057
- }
2058
- }
2059
-
2060
- var __defProp$j = Object.defineProperty;
2061
- var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2062
- var __publicField$j = (obj, key, value) => {
2063
- __defNormalProp$j(obj, key + "" , value);
2064
- return value;
2065
- };
2066
- function getFileExtension(fileName) {
2067
- const parts = fileName.split(".");
2068
- return parts.length > 1 ? parts.pop().toLowerCase() : "";
2069
- }
2070
- const getInitialState = (execution) => Object.freeze({
2071
- metadata: {
2072
- metadataArray: [],
2073
- freeMetadataArray: [],
2074
- isFreeMetadata: false
2075
- },
2076
- fromDirectoryFile: null,
2077
- docFolder: void 0,
2078
- docPath: void 0,
2079
- docExpDate: void 0,
2080
- description: "",
2081
- isReadonly: false,
2082
- permissions: {
2083
- pools: [],
2084
- users: getWindow(execution).DOCUMENT_OWNER_PRIVILEGES ? [
2085
- {
2086
- canUpdate: true,
2087
- userId: getWindow(execution).CURRENT_USER_LOGIN,
2088
- userLogin: getWindow(execution).CURRENT_USER_LOGIN
2089
- }
2090
- ] : [],
2091
- allowAllType: getWindow(execution).DOCUMENT_EVERYONE_PERMISSION !== false ? "M" : ""
2092
- },
2093
- fileReqError: false
2094
- });
2095
- class UploaderModalController {
2096
- constructor(api, modalConfig, conf) {
2097
- this.api = api;
2098
- this.modalConfig = modalConfig;
2099
- this.conf = conf;
2100
- __publicField$j(this, "state");
2101
- makeObservable(this, {
2102
- state: observable
2103
- });
2104
- this.state = getInitialState(api.execution);
2105
- }
2106
- get allMetadata() {
2107
- return [
2108
- ...this.state.metadata.metadataArray,
2109
- ...this.state.metadata.freeMetadataArray
2110
- ];
2111
- }
2112
- get allowAllType() {
2113
- return this.state.permissions.allowAllType;
2114
- }
2115
- get description() {
2116
- return this.state.description;
2117
- }
2118
- get docFolder() {
2119
- return this.state.docFolder;
2120
- }
2121
- get docExpDate() {
2122
- return this.state.docExpDate;
2123
- }
2124
- get docTypes() {
2125
- return this.api.getDocTypes();
2126
- }
2127
- get freeMetadata() {
2128
- return this.state.metadata.freeMetadataArray;
2129
- }
2130
- get exitingFiles() {
2131
- return this.api.getExistingFiles();
2132
- }
2133
- get inProgressFiles() {
2134
- return this.api.getInProgressFiles();
2135
- }
2136
- get hiddenFiles() {
2137
- return this.api.getHiddenFiles();
2138
- }
2139
- get progress() {
2140
- return this.api.getProgress();
2141
- }
2142
- get metadata() {
2143
- return this.state.metadata.metadataArray;
2144
- }
2145
- get selectedDocTypeId() {
2146
- return this.api.getCurrentDocTypeId();
2147
- }
2148
- get selectedDocType() {
2149
- return this.api.getCurrentDocType();
2150
- }
2151
- addMetadata() {
2152
- this.state.metadata.freeMetadataArray.push({
2153
- free: "Y",
2154
- id: String(Math.random()),
2155
- name: "",
2156
- required: "Y",
2157
- title: "",
2158
- type: "S",
2159
- value: "",
2160
- errorMessage: "",
2161
- labelErrorMessage: ""
2162
- });
2163
- }
2164
- addFiles(files) {
2165
- this.state.fileReqError = false;
2166
- this.state.isReadonly = false;
2167
- this.api.saveDroppedFiles(files, this.conf);
2168
- }
2169
- addDirectoryFile(file) {
2170
- this.state.fileReqError = false;
2171
- this.api.state.inProgressFiles = [];
2172
- this.state.fromDirectoryFile = file;
2173
- }
2174
- async changeDocType(docTypeId) {
2175
- this.resetMetadata();
2176
- this.api.setCurrentDocTypeId(docTypeId);
2177
- this.onChangeExtension();
2178
- this.api.reloadMetadata({ docTypeId });
2179
- }
2180
- clearDirectoryFile() {
2181
- this.state.fromDirectoryFile = null;
2182
- this.state.isReadonly = false;
2183
- }
2184
- clearFile(name) {
2185
- this.api.clearFile(name);
2186
- }
2187
- clearFiles() {
2188
- this.api.clearFiles();
2189
- }
2190
- clearState() {
2191
- this.state = getInitialState(this.api.execution);
2192
- this.api.clearState();
2193
- }
2194
- clearPartialState() {
2195
- if (this.api.state.inProgressFiles.length === 0) {
2196
- this.state = getInitialState(this.api.execution);
2197
- }
2198
- }
2199
- onCloseModal() {
2200
- this.clearState();
2201
- }
2202
- async confirm() {
2203
- let isValid = this.validate();
2204
- if (isValid)
2205
- isValid = await this.api.confirmDropModal(this.conf);
2206
- return isValid;
2207
- }
2208
- deleteMetadata(indices) {
2209
- const deleteSet = new Set(indices);
2210
- const offset = this.state.metadata.metadataArray.length;
2211
- this.state.metadata.freeMetadataArray = this.state.metadata.freeMetadataArray.filter(
2212
- (_, localIndex) => (
2213
- // conservamos sólo los que NO estén en deleteSet
2214
- !deleteSet.has(localIndex + offset)
2215
- )
2216
- );
2217
- }
2218
- deletePermission(item) {
2219
- if (item && "userId" in item) {
2220
- this.state.permissions.users = this.state.permissions.users.filter(
2221
- (c) => c.userId !== item.userId
2222
- );
2223
- } else {
2224
- this.state.permissions.pools = this.state.permissions.pools.filter(
2225
- (c) => c.poolId !== item.poolId
2226
- );
2227
- }
2228
- }
2229
- onChangeExtension() {
2230
- const rawDocExts = this.api.getCurrentDocType()?.docExts || "";
2231
- let hideFileNames = "";
2232
- const allowedExtensions = rawDocExts.split(";").map((ext) => ext.trim()).filter((ext) => ext !== "");
2233
- if (rawDocExts === "") {
2234
- const allFiles = [...this.inProgressFiles, ...this.hiddenFiles];
2235
- const dedupedFiles = Array.from(
2236
- new Map(allFiles.map((file) => [file.name, file])).values()
2237
- );
2238
- this.api.state.inProgressFiles = dedupedFiles;
2239
- this.api.state.hiddenFiles = [];
2240
- return;
2241
- }
2242
- const allowedInProgress = [];
2243
- const toHide = [];
2244
- this.inProgressFiles.forEach((file) => {
2245
- const ext = getFileExtension(file.name);
2246
- if (allowedExtensions.includes(ext)) {
2247
- allowedInProgress.push(file);
2248
- } else {
2249
- toHide.push(file);
2250
- hideFileNames += ` ${file.name} `;
2251
- }
2252
- });
2253
- const allowedHidden = [];
2254
- const stillHidden = [];
2255
- this.api.state.hiddenFiles.forEach((file) => {
2256
- const ext = getFileExtension(file.name);
2257
- if (allowedExtensions.includes(ext)) {
2258
- allowedHidden.push(file);
2259
- } else {
2260
- stillHidden.push(file);
2261
- }
2262
- });
2263
- const combinedInProgress = [...allowedInProgress, ...allowedHidden];
2264
- const dedupedInProgress = Array.from(
2265
- new Map(
2266
- combinedInProgress.map((file) => [file.name, file])
2267
- ).values()
2268
- );
2269
- const combinedHidden = [...toHide, ...stillHidden];
2270
- const dedupedHidden = Array.from(
2271
- new Map(combinedHidden.map((file) => [file.name, file])).values()
2272
- );
2273
- this.api.state.inProgressFiles = dedupedInProgress;
2274
- this.api.state.hiddenFiles = dedupedHidden;
2275
- if (hideFileNames)
2276
- this.api.notify({
2277
- title: getLabel(this.api.execution, "msgFileWrngExt").text,
2278
- message: hideFileNames,
2279
- type: "warning"
2280
- });
2281
- }
2282
- async openModal() {
2283
- const a = "openUploaderModal";
2284
- import(
2285
- /* webpackInclude: /\.tsx?$/ */
2286
- `/src/static/files/${a}`
2287
- ).then((r) => {
2288
- r.default(this);
2289
- });
2290
- }
2291
- setDescription(desc) {
2292
- this.state.description = desc;
2293
- }
2294
- async resetMetadata() {
2295
- this.state.metadata = {
2296
- freeMetadataArray: [],
2297
- metadataArray: [],
2298
- isFreeMetadata: false
2299
- };
2300
- }
2301
- validate() {
2302
- let isValid = true;
2303
- this.state.fileReqError = false;
2304
- if (this.api.getInProgressFiles().length === 0 && !this.state.fromDirectoryFile) {
2305
- this.state.fileReqError = true;
2306
- isValid = false;
2307
- }
2308
- this.allMetadata.forEach((c) => {
2309
- if (c.required === "Y") {
2310
- if (c.name.trim() === "" && c.free === "Y") {
2311
- c.labelErrorMessage = getLabel(
2312
- this.api.execution,
2313
- "msgReqField"
2314
- ).text;
2315
- isValid = false;
2316
- }
2317
- if (c.value.trim() === "") {
2318
- if (!c.errorMessage)
2319
- c.errorMessage = getLabel(this.api.execution, "msgReqField").text;
2320
- isValid = false;
2321
- }
2322
- }
2323
- });
2324
- return isValid;
2325
- }
2326
- }
2327
-
2328
- var __defProp$i = Object.defineProperty;
2329
- var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2330
- var __publicField$i = (obj, key, value) => {
2331
- __defNormalProp$i(obj, typeof key !== "symbol" ? key + "" : key, value);
2332
- return value;
2333
- };
2334
- function returnExactlyTheSame(defaultParameters) {
2335
- return defaultParameters;
2336
- }
2337
- function isOneClickUploadEnabled(execution, oneClickUploadProp) {
2338
- return !getWindow(execution).avoidOneClickUpload && (getWindow(execution).forceOneClickUpload || oneClickUploadProp || false);
2339
- }
2340
- const parseFileDefinition = (execution, fileDefinition, isSignRequired) => {
2341
- const { lock, isLocked, lockedBy, userLocking, ...file } = fileDefinition;
2342
- return {
2343
- ...file,
2344
- isLocked: isLocked === "true" || isLocked === true || toBoolean(lock) || file.locked === true,
2345
- isLockedByMe: (lockedBy || userLocking) === getWindow(execution).CURRENT_USER_LOGIN,
2346
- isMarkedToSign: file.markedToSign || toBoolean(file.sign) || isSignRequired,
2347
- isVirtual: file.virtualDoc ?? false,
2348
- lockingUser: lockedBy || userLocking
2349
- };
2350
- };
2351
- class UploaderApi extends EventEmitter$1 {
2352
- constructor(execution, id, type, modalConfig) {
2353
- super();
2354
- this.execution = execution;
2355
- this.id = id;
2356
- this.type = type;
2357
- this.modalConfig = modalConfig;
2358
- __publicField$i(this, "maxFiles", Infinity);
2359
- __publicField$i(this, "modalController", null);
2360
- __publicField$i(this, "allowTranslations", false);
2361
- __publicField$i(this, "langs");
2362
- __publicField$i(this, "currentConfiguration");
2363
- __publicField$i(this, "docTypePermittedObjId");
2364
- __publicField$i(this, "state", {
2365
- progress: 0,
2366
- allowedTypes: [],
2367
- selectedDocTypeId: "1",
2368
- versioningFile: null,
2369
- inProgressFiles: [],
2370
- files: {},
2371
- selectedFiles: [],
2372
- hiddenFiles: [],
2373
- translatedFiles: /* @__PURE__ */ new Map(),
2374
- hasAllDocTypes: false
2375
- });
2376
- __publicField$i(this, "getCheckSignatureParameters", returnExactlyTheSame);
2377
- __publicField$i(this, "getAjaxUploadFileStatusParameters", returnExactlyTheSame);
2378
- __publicField$i(this, "getAjaxUploadStartParameters", returnExactlyTheSame);
2379
- __publicField$i(this, "getConfirmDropModalParameters", returnExactlyTheSame);
2380
- __publicField$i(this, "getCheckLockDocumentParameters", returnExactlyTheSame);
2381
- __publicField$i(this, "getCheckWebDavLockParameters", returnExactlyTheSame);
2382
- __publicField$i(this, "getConfirmDropModalPostdata", returnExactlyTheSame);
2383
- __publicField$i(this, "getConfirmDropModalMetadataString", ({
2384
- metadata
2385
- }) => {
2386
- return metadata?.filter?.((current) => !!current.value).map((current) => `${current.id}~${current.type}~${current.value}`).join(";") ?? [];
2387
- });
2388
- __publicField$i(this, "getConfirmDropModalPermissionsString", ({
2389
- poolsPermissions,
2390
- usersPermissions
2391
- }) => {
2392
- let returnString = "";
2393
- poolsPermissions.forEach(
2394
- (current) => returnString = `${returnString}${returnString.length > 0 ? "&" : ""}docPoolId=${current.poolId}&docPoolName=${current.poolName}&docPermType${current.poolId}=${String(current.canUpdate)}`
2395
- );
2396
- usersPermissions.forEach(
2397
- (current) => returnString = `${returnString}${returnString.length > 0 ? "&" : ""}docUserId=${current.userId}&docUsrLogin=${current.userLogin}&docPermType${current.userId}=${String(current.canUpdate)}`
2398
- );
2399
- return returnString;
2400
- });
2401
- __publicField$i(this, "getConfirmDropModalAdditionalMetadataString", (additionalMetadata) => {
2402
- return Object.values(additionalMetadata).filter((current) => !!current?.value).map((current) => `${current.name}~${current.value}`).join(";");
2403
- });
2404
- __publicField$i(this, "getDeleteDocumentParameters", returnExactlyTheSame);
2405
- __publicField$i(this, "getClearTempFilesParameters", returnExactlyTheSame);
2406
- __publicField$i(this, "getDocumentInfoParameters", returnExactlyTheSame);
2407
- __publicField$i(this, "getDownloadMultipleDocumentsParameters", returnExactlyTheSame);
2408
- __publicField$i(this, "getEditDocumentParameters", returnExactlyTheSame);
2409
- __publicField$i(this, "getLockDocumentParameters", returnExactlyTheSame);
2410
- __publicField$i(this, "getMarkFileToSignParameters", returnExactlyTheSame);
2411
- __publicField$i(this, "getProcessDroppedFilesParameters", returnExactlyTheSame);
2412
- __publicField$i(this, "getProcessDroppedFilesPostdata", returnExactlyTheSame);
2413
- __publicField$i(this, "getReloadMetadataParameters", returnExactlyTheSame);
2414
- __publicField$i(this, "getSaveDroppedFilesParameters", returnExactlyTheSame);
2415
- __publicField$i(this, "parseFileDefinition", (file) => {
2416
- return {
2417
- ...parseFileDefinition(this.execution, file, false),
2418
- canEdit: file.canEdit || file.canWrite,
2419
- canRead: file.canRead
2420
- };
2421
- });
2422
- if (!getWindow(this.execution).fileApi) {
2423
- getWindow(this.execution).fileApi = {};
2424
- }
2425
- getWindow(this.execution).fileApi[this.id] = this;
2426
- makeObservable(this, {
2427
- state: observable
2428
- });
2429
- this.allowTranslations = type === "E" && !!getWindow(this.execution).DOC_LANGS;
2430
- this.langs = getWindow(this.execution).DOC_LANGS;
2431
- try {
2432
- this.docTypePermittedObjId = type === "E" ? getWindow(this.execution).docTypePerEntId : getWindow(this.execution).docTypePerProId;
2433
- } catch (e) {
2434
- console.warn(e);
2435
- }
2436
- }
2437
- get filesArray() {
2438
- return Object.values(this.state.files);
2439
- }
2440
- async init() {
2441
- await this.ajaxUploadStart();
2442
- await this.reloadMetadata({
2443
- docTypeId: this.state.selectedDocTypeId
2444
- });
2445
- await this.loadCurrentDocuments();
2446
- }
2447
- async onStartUpload(files) {
2448
- if (this.modalConfig.oneClickUpload) {
2449
- await this.saveDroppedFiles(files ?? []);
2450
- } else {
2451
- if (files) {
2452
- const result = await this.saveDroppedFiles(files ?? []);
2453
- if (!result)
2454
- return;
2455
- }
2456
- this.modalController = new UploaderModalController(
2457
- this,
2458
- this.modalConfig
2459
- );
2460
- this.modalController.openModal();
2461
- }
2462
- }
2463
- async onTranslateUpload(conf, files) {
2464
- if (this.modalConfig.oneClickUpload) {
2465
- await this.saveDroppedFiles(files ?? [], conf);
2466
- } else {
2467
- await this.init();
2468
- let mustOpen = true;
2469
- if (files) {
2470
- const res = await this.saveDroppedFiles(files ?? [], conf);
2471
- if (!res) {
2472
- mustOpen = false;
2473
- }
2474
- }
2475
- if (mustOpen) {
2476
- this.modalController = new UploaderModalController(
2477
- this,
2478
- this.modalConfig,
2479
- conf
2480
- );
2481
- this.modalController.openModal();
2482
- }
2483
- }
2484
- }
2485
- async onVersionUpload(file, conf = { newFiles: [] }) {
2486
- this.version(file, conf);
2487
- }
2488
- async autoLock() {
2489
- return new Promise((resolve) => {
2490
- resolve(false);
2491
- });
2492
- }
2493
- notify(notification) {
2494
- this.execution.notifications.add(new MessageNotification(notification));
2495
- }
2496
- getAjaxUrl() {
2497
- return getWindow(this.execution).URL_REQUEST_AJAX;
2498
- }
2499
- getDocTypes() {
2500
- return this.state.allowedTypes;
2501
- }
2502
- getCurrentDocTypeId() {
2503
- return this.state.selectedDocTypeId;
2504
- }
2505
- getCurrentDocType() {
2506
- return this.state.allowedTypes.find(
2507
- (c) => c.id === this.state.selectedDocTypeId
2508
- );
2509
- }
2510
- getInProgressFiles() {
2511
- return this.state.inProgressFiles;
2512
- }
2513
- getHiddenFiles() {
2514
- return this.state.hiddenFiles;
2515
- }
2516
- getExistingFiles() {
2517
- return this.state.files;
2518
- }
2519
- getProgress() {
2520
- return this.state.progress;
2521
- }
2522
- getHasAllDocTypes() {
2523
- return this.state.hasAllDocTypes;
2524
- }
2525
- async getDocumentInfo({
2526
- docId: apiId,
2527
- downloadDocId: docId
2528
- }, newElem) {
2529
- const id = apiId ? this.getDocument(apiId).docId : docId;
2530
- const result = await post(
2531
- this.execution,
2532
- makeApiaUrl(
2533
- this.execution,
2534
- this.getDocumentInfoParameters({
2535
- action: "getDocumentInfo",
2536
- isAjax: true,
2537
- docId: id,
2538
- newElem,
2539
- prefix: this.type,
2540
- ajaxUrl: this.getAjaxUrl()
2541
- })
2542
- )
2543
- );
2544
- if (result?.data) {
2545
- return result.data;
2546
- }
2547
- return null;
2548
- }
2549
- /**
2550
- * This method searches for the provided id in several places:
2551
- *
2552
- * If it's found in the current files, returns it.
2553
- * If not, it searches the provided docId in the translations map of each uploaded file.
2554
- */
2555
- getDocument(docId) {
2556
- if (this.state.files[docId]) {
2557
- return this.state.files[docId];
2558
- } else {
2559
- for (const map of this.state.translatedFiles.values()) {
2560
- for (const file of map.values()) {
2561
- if (file.docId === docId) {
2562
- return file;
2563
- }
2564
- }
2565
- }
2566
- }
2567
- return void 0;
2568
- }
2569
- updateDocument(docId, newValue) {
2570
- if (this.state.files[docId]) {
2571
- this.state.files[docId] = { ...this.getDocument(docId), ...newValue };
2572
- } else {
2573
- this.state.translatedFiles.forEach((innerMap) => {
2574
- innerMap.forEach((doc, langKey) => {
2575
- if (doc.docId === docId) {
2576
- innerMap.set(langKey, { ...doc, ...newValue });
2577
- }
2578
- });
2579
- });
2580
- }
2581
- }
2582
- deleteDocument(docId) {
2583
- if (this.state.files[docId]) {
2584
- delete this.state.files[docId];
2585
- } else {
2586
- this.state.translatedFiles.forEach((innerMap) => {
2587
- innerMap.forEach((doc, langKey) => {
2588
- if (doc.docId === docId) {
2589
- innerMap.delete(langKey);
2590
- }
2591
- });
2592
- });
2593
- }
2594
- }
2595
- clearFile(name) {
2596
- if (this.modalController) {
2597
- this.modalController.state.isReadonly = false;
2598
- }
2599
- this.state.inProgressFiles = this.state.inProgressFiles.filter(
2600
- (c) => c.name !== name
2601
- );
2602
- }
2603
- clearFiles() {
2604
- if (this.modalController) {
2605
- this.modalController.state.isReadonly = false;
2606
- }
2607
- this.state.inProgressFiles = [];
2608
- this.state.versioningFile = null;
2609
- this.state.hiddenFiles = [];
2610
- }
2611
- clearState() {
2612
- if (this.modalController) {
2613
- this.modalController.state.isReadonly = false;
2614
- }
2615
- this.state.selectedDocTypeId = this.getDocTypes().find(
2616
- (c) => String(c.id) === "1"
2617
- ) ? "1" : this.getDocTypes()[0]?.id;
2618
- this.state.inProgressFiles = [];
2619
- this.state.versioningFile = null;
2620
- }
2621
- async checkLockDocument(id, shouldNotifyUnlocked = true) {
2622
- if (getWindow(this.execution).IN_MONITOR) {
2623
- return false;
2624
- }
2625
- const file = this.getDocument(id);
2626
- if (Number(file.docId) < 0)
2627
- return true;
2628
- const result = await post(
2629
- this.execution,
2630
- makeApiaUrl(
2631
- this.execution,
2632
- this.getCheckLockDocumentParameters({
2633
- action: "checkLockDocument",
2634
- docId: file.docId,
2635
- ajaxUrl: this.getAjaxUrl(),
2636
- prefix: this.type
2637
- })
2638
- )
2639
- );
2640
- const isLocked = result?.data?.success === "ok";
2641
- if (!isLocked && result?.data?.usr && result.data.usr !== getWindow(this.execution).CURRENT_USER_LOGIN) {
2642
- this.notify({
2643
- message: `${getWindow(this.execution).MSG_DOC_LOCKED_BY_USR.split(".")[0]}: ${result.data.usr}.`,
2644
- type: "warning"
2645
- });
2646
- return result.data.usr;
2647
- }
2648
- if (!isLocked && shouldNotifyUnlocked && !await this.autoLock())
2649
- this.notify({
2650
- message: getWindow(this.execution).MSG_DOC_MUST_BE_LOCKED,
2651
- type: "warning"
2652
- });
2653
- return isLocked;
2654
- }
2655
- setCurrentDocTypeId(docTypeId) {
2656
- this.state.selectedDocTypeId = docTypeId;
2657
- }
2658
- async ajaxUploadStart(newFiles = []) {
2659
- if (getWindow(this.execution).IN_MONITOR) {
2660
- return;
2661
- }
2662
- const versioningFile = this.state.versioningFile;
2663
- const res = await post(
2664
- this.execution,
2665
- makeApiaUrl(
2666
- this.execution,
2667
- this.getAjaxUploadStartParameters({
2668
- action: "ajaxUploadStart",
2669
- isAjax: true,
2670
- docId: versioningFile?.docId,
2671
- prefix: this.type,
2672
- docTypeId: newFiles.length === 1 ? versioningFile?.docTypeId || "1" : "1",
2673
- newDoc: !versioningFile,
2674
- useDocTypePermitted: true,
2675
- docTypePermittedObjType: this.type,
2676
- docTypePermittedObjId: this.docTypePermittedObjId,
2677
- ajaxUrl: this.getAjaxUrl()
2678
- })
2679
- )
2680
- );
2681
- if (res?.data) {
2682
- const docTypes = arrayOrArray(res?.data?.function?.docTypes?.docType);
2683
- const hasGeneric = !!docTypes.find((c) => String(c.id) === "1");
2684
- this.state.allowedTypes = docTypes;
2685
- this.state.selectedDocTypeId = hasGeneric ? "1" : docTypes[0].id;
2686
- if (newFiles.length > 0) {
2687
- await this.saveDroppedFiles(newFiles);
2688
- }
2689
- return res?.data?.function.name === "fncDocumentLoadInformation" ? true : false;
2690
- } else {
2691
- throw new Error("No files data");
2692
- }
2693
- }
2694
- async reloadMetadata(props, additionalProps) {
2695
- if (!this.modalController)
2696
- return;
2697
- const res = await post(
2698
- this.execution,
2699
- makeApiaUrl(
2700
- this.execution,
2701
- this.getReloadMetadataParameters({
2702
- ajaxUrl: this.getAjaxUrl(),
2703
- action: "reloadMetadata",
2704
- isAjax: true,
2705
- docId: props?.docId,
2706
- docTypeId: props?.docTypeId,
2707
- metadata: this.getConfirmDropModalMetadataString({
2708
- metadata: this.modalController?.allMetadata
2709
- }),
2710
- prefix: this.type,
2711
- ...additionalProps
2712
- })
2713
- )
2714
- );
2715
- if (res?.data && props?.docTypeId) {
2716
- const isFreeMetadata = this.state.allowedTypes.find(
2717
- (current) => current.id === props.docTypeId
2718
- )?.free ?? false;
2719
- this.modalController.state.metadata.metadataArray = arrayOrArray(
2720
- res.data.metadata
2721
- );
2722
- this.modalController.state.metadata.isFreeMetadata = isFreeMetadata;
2723
- }
2724
- }
2725
- async saveDroppedFiles(unprocessedFiles, conf) {
2726
- if (getWindow(this.execution).IN_MONITOR) {
2727
- return false;
2728
- }
2729
- const {
2730
- langId,
2731
- strictMode: isConfStrictMode = false,
2732
- translatingFile
2733
- } = conf ?? {};
2734
- const isStrictMode = isConfStrictMode || !!this.state.versioningFile || !!this.modalController?.state.fromDirectoryFile;
2735
- const docType = this.getCurrentDocTypeId();
2736
- if (!isStrictMode && !docType) {
2737
- this.notify({
2738
- message: `${getWindow(this.execution).LBL_DROP_FILE_DELETED}: ${unprocessedFiles.map((current) => current.name).join(", ")}.`,
2739
- type: "warning"
2740
- });
2741
- return false;
2742
- }
2743
- const allowedFiles = this.filterAlreadyUploadedFiles(
2744
- this.filterByFilesAmountLimit(
2745
- this.filterAcceptedFiles(
2746
- this.filterExistingFiles(
2747
- this.filterVersioningFiles(unprocessedFiles, conf),
2748
- conf
2749
- ),
2750
- true,
2751
- docType
2752
- )
2753
- ),
2754
- conf
2755
- );
2756
- if (allowedFiles.length > 0) {
2757
- const formData = new FormData();
2758
- allowedFiles.forEach(
2759
- (file) => formData.append("fileRepository", file, file.name)
2760
- );
2761
- await post(
2762
- this.execution,
2763
- makeApiaUrl(
2764
- this.execution,
2765
- this.getSaveDroppedFilesParameters({
2766
- action: "saveDroppedFiles",
2767
- docId: this.state.versioningFile?.docId,
2768
- ajaxUrl: this.getAjaxUrl(),
2769
- elemType: this.type,
2770
- elemId: `prmDocumentContainter${this.type}`,
2771
- frmOut: !this.modalController,
2772
- docTypeId: this.state.selectedDocTypeId,
2773
- langId
2774
- })
2775
- ),
2776
- {
2777
- postData: formData,
2778
- axiosConfig: {
2779
- onUploadProgress: (ev) => this.state.progress = ev.loaded * 100 / ((ev.total ?? ev.loaded) * 2)
2780
- }
2781
- }
2782
- );
2783
- const ajaxUploadFileStatusParameters = this.getAjaxUploadFileStatusParameters({
2784
- action: "ajaxUploadFileStatus",
2785
- ajaxUrl: this.getAjaxUrl(),
2786
- delayForDrop: true,
2787
- isAjax: true,
2788
- prefix: this.type
2789
- });
2790
- let tries = 0;
2791
- const checkUploadResult = async () => {
2792
- return new Promise(async (resolve) => {
2793
- tries += 1;
2794
- if (tries === 10) {
2795
- this.notify({
2796
- message: "Error while checking for uploadFileStatus, too many tries",
2797
- type: "error"
2798
- });
2799
- resolve(false);
2800
- return;
2801
- }
2802
- const response = await post(
2803
- this.execution,
2804
- makeApiaUrl(this.execution, ajaxUploadFileStatusParameters)
2805
- );
2806
- if (response && response.data) {
2807
- const hasMessages = arrayOrArray(
2808
- response.data?.sysMessages?.message ?? response.data?.sysExceptions?.exception ?? response.data?.exceptions?.exception ?? response.data.function.messages?.message
2809
- ).length > 0 || !!response.data.function.dropLastMessage;
2810
- const uploadMessage = arrayOrArray(
2811
- response.data.function.messages?.message
2812
- ).find((current) => current.name === "message");
2813
- if (uploadMessage)
2814
- this.notify({ message: uploadMessage.label, type: "warning" });
2815
- const method = response.data?.function.name;
2816
- this.state.progress = 44;
2817
- if (hasMessages) {
2818
- resolve(false);
2819
- return;
2820
- }
2821
- if (method === "fncProceedDocumentProcessing") {
2822
- resolve(true);
2823
- return;
2824
- }
2825
- if (tries === 10) {
2826
- resolve(method === "fncProceedDocumentProcessing");
2827
- }
2828
- setTimeout(() => {
2829
- checkUploadResult().then(resolve).catch(() => resolve(false));
2830
- }, 100);
2831
- } else {
2832
- resolve(false);
2833
- }
2834
- });
2835
- };
2836
- const hasUploadedCorrectly = await checkUploadResult();
2837
- this.state.progress = 66;
2838
- if (hasUploadedCorrectly) {
2839
- const shown = (this.state.inProgressFiles ?? []).map(
2840
- (file) => file.name
2841
- );
2842
- const postData = QueryString.stringify(
2843
- this.getProcessDroppedFilesPostdata({
2844
- useDocTypePermitted: true,
2845
- docTypePermittedObjId: this.docTypePermittedObjId?.toString(),
2846
- docTypePermittedObjType: this.type,
2847
- dropped: allowedFiles.map((file) => file.name).concat(shown),
2848
- shown
2849
- }),
2850
- { arrayFormat: "repeat" }
2851
- );
2852
- const secondResult = await post(
2853
- this.execution,
2854
- makeApiaUrl(
2855
- this.execution,
2856
- this.getProcessDroppedFilesParameters({
2857
- action: "processDroppedFiles",
2858
- elemType: this.type,
2859
- docId: this.state.versioningFile?.docId,
2860
- frmOut: !this.modalController,
2861
- ajaxUrl: this.getAjaxUrl()
2862
- })
2863
- ),
2864
- {
2865
- postData: postData.toString()
2866
- }
2867
- );
2868
- this.state.progress = 83;
2869
- if (secondResult?.data?.function?.principal?.docInfo) {
2870
- const acceptedByServerFiles = arrayOrArray(
2871
- secondResult.data.function?.principal?.docInfo
2872
- );
2873
- this.state.inProgressFiles = [
2874
- ...this.state.inProgressFiles ?? [],
2875
- ...acceptedByServerFiles.map(
2876
- (current) => [...this.state.inProgressFiles, ...unprocessedFiles].find(
2877
- (search) => search.name === current.docInfoName
2878
- )
2879
- ).filter((current) => !!current)
2880
- ];
2881
- this.state.progress = 100;
2882
- if (this.modalController)
2883
- this.modalController.state.fromDirectoryFile = null;
2884
- this.notify({
2885
- type: "success",
2886
- message: getWindow(this.execution).FILE_UPLOADED_SUCCESSFULLY
2887
- });
2888
- if (isOneClickUploadEnabled(
2889
- this.execution,
2890
- this.modalConfig.oneClickUpload
2891
- )) {
2892
- if (langId && translatingFile)
2893
- void this.confirmDropModal({ langId, translatingFile });
2894
- else
2895
- void this.confirmDropModal();
2896
- }
2897
- }
2898
- }
2899
- this.state.progress = 100;
2900
- return true;
2901
- } else {
2902
- return false;
2903
- }
2904
- }
2905
- async checkWebDavLock(docId) {
2906
- if (getWindow(this.execution).IN_MONITOR) {
2907
- return false;
2908
- }
2909
- return new Promise((resolve) => {
2910
- let tries = 10;
2911
- const checkLockAction = async () => {
2912
- const isLocked = await post(
2913
- this.execution,
2914
- makeApiaUrl(
2915
- this.execution,
2916
- this.getCheckWebDavLockParameters({
2917
- action: "isWebDavDocumentLocked",
2918
- docId,
2919
- ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX
2920
- })
2921
- )
2922
- );
2923
- if (isLocked?.data?.locked === true || isLocked?.data?.locked === void 0) {
2924
- if (--tries > 0) {
2925
- setTimeout(() => void checkLockAction(), 1e3);
2926
- } else {
2927
- this.notify({
2928
- message: getWindow(this.execution).MSG_FAIL_SYNC_DOCUMENT
2929
- });
2930
- resolve(false);
2931
- }
2932
- } else {
2933
- resolve(true);
2934
- }
2935
- };
2936
- void checkLockAction();
2937
- });
2938
- }
2939
- async checkSignature(file) {
2940
- let res = null;
2941
- if (Number(file.docId) >= 0)
2942
- res = await get(
2943
- this.execution,
2944
- makeApiaUrl(
2945
- this.execution,
2946
- this.getCheckSignatureParameters({
2947
- action: "viewDocSigns",
2948
- docId: file.docId,
2949
- lock: false,
2950
- isAjax: true,
2951
- prefix: this.type,
2952
- react: true
2953
- })
2954
- )
2955
- );
2956
- return res;
2957
- }
2958
- async editDocument(id) {
2959
- if (getWindow(this.execution).IN_MONITOR) {
2960
- return;
2961
- }
2962
- const file = this.getDocument(id);
2963
- if (await this.checkLockDocument(file.docId) === true) {
2964
- const result = await post(
2965
- this.execution,
2966
- makeApiaUrl(
2967
- this.execution,
2968
- this.getEditDocumentParameters({
2969
- action: "updateWebDavDocument",
2970
- docId: file.docId,
2971
- prefix: this.type,
2972
- isAjax: true
2973
- })
2974
- )
2975
- );
2976
- if (result?.data?.folderId) {
2977
- const sDocumentUrl = `${getWindow(this.execution).WEBDAV_SERVER}${result?.data?.folderId}/${file.docId}/${file.name || file.docName || ""}`;
2978
- const ProtocolInstallMessage = () => {
2979
- this.notify({
2980
- type: "warning",
2981
- message: getWindow(this.execution).MSG_NO_DOC_EDIT_PROTOCOL,
2982
- title: getWindow(this.execution).LBL_EDIT
2983
- });
2984
- };
2985
- getWindow(this.execution).avoidLoadEvents = true;
2986
- getWindow(this.execution).ITHit.WebDAV.Client.DavConstants.ProtocolTimeoutMs = 1e4;
2987
- await getWindow(this.execution).ITHit.WebDAV.Client.DocManager.DavProtocolEditDocument(
2988
- sDocumentUrl,
2989
- getWindow(this.execution).WEBDAV_SERVER,
2990
- ProtocolInstallMessage,
2991
- null,
2992
- "Current",
2993
- "ApiaWebDavCookie",
2994
- // Cookie(s) to copy.
2995
- "",
2996
- // URL to navigate to if any cookie from the list is not found.
2997
- "Edit"
2998
- );
2999
- }
3000
- }
3001
- }
3002
- async downloadVersion(fileId, version) {
3003
- const file = this.getDocument(fileId);
3004
- if (!file)
3005
- return;
3006
- if (getWindow(this.execution).IN_MONITOR || await this.checkWebDavLock(file.docId))
3007
- await downloadUrl(
3008
- makeApiaUrl(this.execution, {
3009
- action: "downloadDocument",
3010
- docId: file.downloadDocId,
3011
- version
3012
- })
3013
- );
3014
- }
3015
- async downloadDocument(id, version) {
3016
- const file = this.getDocument(id);
3017
- if (getWindow(this.execution).IN_MONITOR || await this.checkWebDavLock(file.docId)) {
3018
- await downloadUrl(
3019
- makeApiaUrl(this.execution, {
3020
- action: "downloadDocument",
3021
- prefix: this.type,
3022
- docId: file.downloadDocId,
3023
- ajaxUrl: this.getAjaxUrl(),
3024
- version
3025
- })
3026
- );
3027
- }
3028
- }
3029
- async ajaxDeleteDocument(id, langId) {
3030
- const file = this.getDocument(id);
3031
- const isLocked = await this.checkLockDocument(file.docId);
3032
- if (isLocked === true) {
3033
- const result = await post(
3034
- this.execution,
3035
- makeApiaUrl(
3036
- this.execution,
3037
- this.getDeleteDocumentParameters({
3038
- action: "ajaxRemoveDocument",
3039
- docId: file.docId,
3040
- isAjax: true,
3041
- prefix: this.type,
3042
- ajaxUrl: this.getAjaxUrl(),
3043
- langId
3044
- })
3045
- )
3046
- );
3047
- if (this.evaluateDeleteDocumentResult(result?.data))
3048
- this.deleteDocument(id);
3049
- }
3050
- }
3051
- async version(file, conf = { newFiles: [] }) {
3052
- const checkLock = await this.checkLockDocument(file.docId, true);
3053
- const isLocked = await this.checkWebDavLock(file.docId);
3054
- if (!(checkLock === true && isLocked))
3055
- return;
3056
- this.state.versioningFile = file;
3057
- const openVersionModal = () => {
3058
- if (!this.modalConfig.oneClickUpload) {
3059
- this.modalController = new UploaderModalController(
3060
- this,
3061
- this.modalConfig,
3062
- {
3063
- versionFile: file
3064
- }
3065
- );
3066
- this.modalController.openModal();
3067
- }
3068
- };
3069
- if (!conf.newFiles || conf.newFiles.length === 0) {
3070
- openVersionModal();
3071
- }
3072
- await this.ajaxUploadStart();
3073
- if (file.docTypeId)
3074
- this.state.selectedDocTypeId = file.docTypeId;
3075
- await this.versionFileInfo(file);
3076
- const hasNewFiles = !!(conf.newFiles && conf.newFiles.length > 0);
3077
- if (hasNewFiles) {
3078
- const res = await this.saveDroppedFiles(conf.newFiles, {
3079
- langId: conf.langId,
3080
- translatingFile: conf.translatingFile,
3081
- shouldReset: false,
3082
- strictMode: true
3083
- });
3084
- if (res) {
3085
- openVersionModal();
3086
- }
3087
- } else {
3088
- await this.reloadMetadata({
3089
- docId: file.docId,
3090
- docTypeId: file.docTypeId
3091
- });
3092
- }
3093
- }
3094
- async versionFileInfo(file) {
3095
- const documentInfo = await this.getDocumentInfo({ docId: file.docId });
3096
- if (documentInfo?.function) {
3097
- const {
3098
- data: { general },
3099
- metadatas
3100
- } = documentInfo.function;
3101
- const isFreeMetadata = this.state.allowedTypes.find((current) => current.id === file.docTypeId)?.free ?? false;
3102
- if (this.modalController) {
3103
- this.modalController.state = {
3104
- description: general.docDesc,
3105
- docFolder: general.docFolder === "" ? void 0 : Number(general.docFolder),
3106
- docPath: general.docFolderPath,
3107
- permissions: {
3108
- allowAllType: general.docAllPoolPerm,
3109
- users: arrayOrArray(
3110
- documentInfo.function.data.permissions?.user
3111
- ).map((current) => {
3112
- const returnObject = {
3113
- canUpdate: current.permType === "M",
3114
- userId: current.id,
3115
- userLogin: current.name
3116
- };
3117
- return returnObject;
3118
- }),
3119
- pools: arrayOrArray(
3120
- documentInfo.function.data.permissions?.pool
3121
- ).map((current) => {
3122
- const returnObject = {
3123
- canUpdate: current.permType === "M",
3124
- poolId: current.id,
3125
- poolName: current.name
3126
- };
3127
- return returnObject;
3128
- })
3129
- },
3130
- docExpDate: general.docExpDate,
3131
- fileReqError: false,
3132
- fromDirectoryFile: null,
3133
- metadata: {
3134
- metadataArray: arrayOrArray(metadatas?.metadata),
3135
- freeMetadataArray: [],
3136
- isFreeMetadata
3137
- }
3138
- };
3139
- }
3140
- }
3141
- }
3142
- async pickFileById(id) {
3143
- const documentInfo = await this.getDocumentInfo(
3144
- { downloadDocId: id },
3145
- true
3146
- );
3147
- if (documentInfo) {
3148
- const document = documentInfo.function.data.general;
3149
- const { permissions } = documentInfo.function.data;
3150
- if (this.modalController) {
3151
- this.setCurrentDocTypeId(document.docTypeId);
3152
- this.modalController.addDirectoryFile(document);
3153
- this.modalController.state.description = document.docDesc;
3154
- this.modalController.state.docExpDate = document.docExpDate;
3155
- this.modalController.state.permissions = {
3156
- pools: arrayOrArray(permissions?.pool).map((c) => {
3157
- return {
3158
- poolId: c.id,
3159
- poolName: c.name,
3160
- canUpdate: c.permType === "M"
3161
- };
3162
- }),
3163
- users: [
3164
- ...arrayOrArray(permissions?.user).map((c) => {
3165
- return {
3166
- userId: c.id,
3167
- userLogin: c.name,
3168
- canUpdate: c.permType === "M"
3169
- };
3170
- })
3171
- ],
3172
- allowAllType: document.docAllPoolPerm
3173
- };
3174
- this.modalController.changeDocType(document.docTypeId);
3175
- this.modalController.state.isReadonly = !documentInfo.function.currentUsrPems.usrCanModify;
3176
- }
3177
- void this.reloadMetadata(
3178
- { docId: document.docId, docTypeId: document.docTypeId },
3179
- {
3180
- docReuse: true
3181
- }
3182
- );
3183
- }
3184
- }
3185
- async markFileToSign(id, langId) {
3186
- if (getWindow(this.execution).IN_MONITOR) {
3187
- return;
3188
- }
3189
- const file = this.getDocument(id);
3190
- if (await this.checkLockDocument(file.docId) === true) {
3191
- const marked = await post(
3192
- this.execution,
3193
- makeApiaUrl(
3194
- this.execution,
3195
- this.getMarkFileToSignParameters({
3196
- action: "markDocTosign",
3197
- docId: file.docId,
3198
- isAjax: true,
3199
- prefix: this.type,
3200
- ajaxUrl: this.getAjaxUrl(),
3201
- langId
3202
- })
3203
- )
3204
- );
3205
- if (marked?.data?.markedToSign !== void 0) {
3206
- if (this.state.files[id]) {
3207
- this.state.files[id].markedToSign = marked.data.markedToSign;
3208
- } else {
3209
- this.state.translatedFiles.forEach((innerMap) => {
3210
- innerMap.forEach((doc, langKey) => {
3211
- if (doc.docId === id) {
3212
- innerMap.set(langKey, {
3213
- ...doc,
3214
- markedToSign: marked?.data?.markedToSign ?? false
3215
- });
3216
- }
3217
- });
3218
- });
3219
- }
3220
- }
3221
- }
3222
- }
3223
- /**
3224
- * Por el momento realiza la descarga de todos los archivos
3225
- * que estén subidos.
3226
- */
3227
- downloadMultipleDocuments() {
3228
- const files = this.filesArray;
3229
- if (files.length === 0)
3230
- return;
3231
- const docIds = this.state.selectedFiles;
3232
- const selectedFiles = files.filter(
3233
- (current) => docIds.find((search) => search === current.docId)
3234
- );
3235
- const ids = (selectedFiles.length > 0 ? selectedFiles : files).map((current) => current.downloadDocId).join("-");
3236
- void downloadUrl(
3237
- makeApiaUrl(
3238
- this.execution,
3239
- this.getDownloadMultipleDocumentsParameters({
3240
- action: "multipleDownload",
3241
- docId: ids,
3242
- prefix: this.type
3243
- })
3244
- ),
3245
- "documents.zip"
3246
- );
3247
- }
3248
- async confirmDropModal(conf) {
3249
- if (getWindow(this.execution).IN_MONITOR) {
3250
- return false;
3251
- }
3252
- const { langId, translatingFile } = conf ?? {};
3253
- const cmbDocType = this.state.selectedDocTypeId;
3254
- const fromDirectoryFile = this.modalController?.state.fromDirectoryFile;
3255
- const docDesc = this.modalController?.description ?? "";
3256
- const docAllowAllType = this.modalConfig.oneClickUpload ? "M" : this.modalController?.allowAllType ?? "";
3257
- const docFolder = this.modalController?.docFolder;
3258
- const docExpDate = this.modalController?.docExpDate;
3259
- const metadata = this.modalController?.metadata ?? [];
3260
- const freeMetadata = this.modalController?.freeMetadata ?? [];
3261
- const poolsPermissions = this.modalController?.state.permissions.pools ?? [];
3262
- const usersPermissions = this.modalController?.state.permissions.users ?? [];
3263
- let postData = QueryString.stringify(
3264
- this.getConfirmDropModalPostdata({
3265
- cmbDocType,
3266
- docDesc,
3267
- docAllowAllType,
3268
- pe: this.docTypePermittedObjId?.toString(),
3269
- dropped: this.state.inProgressFiles.map((file) => file.name),
3270
- txtLangId: langId,
3271
- txtLangGroup: translatingFile?.docLangGroup,
3272
- docFolder
3273
- }),
3274
- { arrayFormat: "repeat" }
3275
- );
3276
- postData = `${postData}${postData.length > 0 ? "&" : ""}${this.getConfirmDropModalPermissionsString({
3277
- poolsPermissions,
3278
- usersPermissions
3279
- })}&txtFreeMetadata=${this.getConfirmDropModalAdditionalMetadataString(
3280
- freeMetadata
3281
- )}&txtMetadata=${this.getConfirmDropModalMetadataString({
3282
- metadata: Object.values(metadata || {})
3283
- })}&docExpDate=${docExpDate ?? ""}`;
3284
- const result = await post(
3285
- this.execution,
3286
- makeApiaUrl(
3287
- this.execution,
3288
- this.getConfirmDropModalParameters({
3289
- ajaxUrl: this.getAjaxUrl(),
3290
- docId: fromDirectoryFile ? fromDirectoryFile.docId : this.state.versioningFile?.docId,
3291
- action: fromDirectoryFile ? "associateExistingFile" : "confirmDropModal",
3292
- elemType: this.type,
3293
- fromForm: true,
3294
- ...fromDirectoryFile ? {
3295
- docId: fromDirectoryFile.docId,
3296
- fromReuse: true,
3297
- uploadDocument: false
3298
- } : null
3299
- })
3300
- ),
3301
- {
3302
- postData: postData.toString()
3303
- }
3304
- );
3305
- if (result?.data?.function) {
3306
- const currentFiles = { ...this.state.files };
3307
- const versioningFile = this.state.versioningFile;
3308
- if (versioningFile && versioningFile.name) {
3309
- delete currentFiles[versioningFile.name];
3310
- }
3311
- const newFiles = arrayOrArray(
3312
- result.data.function.general
3313
- ).map(
3314
- (current) => this.parseFileDefinition({
3315
- ...current,
3316
- canWrite: true,
3317
- canRead: true,
3318
- canEdit: true
3319
- })
3320
- ).filter((current) => !currentFiles[current.docId]).reduce((acc, current) => ({ ...acc, [current.docId]: current }), {});
3321
- if (langId && translatingFile) {
3322
- const firstFile = Object.values(newFiles)[0];
3323
- this.setTranslationFile(firstFile, translatingFile.docId, langId);
3324
- } else {
3325
- this.state.files = { ...currentFiles, ...newFiles };
3326
- }
3327
- this.clearFiles();
3328
- this.emit("fileUploaded", null);
3329
- return true;
3330
- }
3331
- return false;
3332
- }
3333
- async loadCurrentDocuments() {
3334
- const result = await post(
3335
- this.execution,
3336
- makeApiaUrl(this.execution, {
3337
- ajaxUrl: this.getAjaxUrl(),
3338
- action: "ajaxLoadCurrent",
3339
- isAjax: true,
3340
- readOnly: getWindow(this.execution).IS_READONLY,
3341
- allowLock: true,
3342
- allowSign: true,
3343
- allowMultiple: true,
3344
- prefix: this.type
3345
- }),
3346
- {}
3347
- );
3348
- if (result && result.data) {
3349
- const currentConfiguration = arrayOrArray(result.data.function.messages.message).reduce(
3350
- (prev, { name, label }) => ({ ...prev, [name]: Boolean(label) }),
3351
- {}
3352
- );
3353
- const currentFiles = result.data.function.general ? arrayOrArray(result.data.function.general).map(
3354
- this.parseFileDefinition
3355
- ) : [];
3356
- this.currentConfiguration = currentConfiguration;
3357
- const nonTranslationFiles = [];
3358
- const translationFiles = [];
3359
- currentFiles.forEach((current) => {
3360
- if (current.docLang === void 0)
3361
- nonTranslationFiles.push(current);
3362
- else
3363
- translationFiles.push(current);
3364
- });
3365
- nonTranslationFiles.forEach((c) => {
3366
- this.state.files[c.docId] = c;
3367
- });
3368
- translationFiles.forEach((current) => {
3369
- const originalFile = nonTranslationFiles.find(
3370
- (search) => search.docLangGroup === current.docLangGroup
3371
- );
3372
- if (originalFile && current.docLang !== void 0) {
3373
- this.setTranslationFile(
3374
- current,
3375
- originalFile.docId,
3376
- Number(current.docLang)
3377
- );
3378
- } else
3379
- console.warn(
3380
- `The following file is translated but has no orignal file`,
3381
- current,
3382
- nonTranslationFiles
3383
- );
3384
- });
3385
- }
3386
- }
3387
- async lockDocument(id) {
3388
- if (getWindow(this.execution).IN_MONITOR) {
3389
- return;
3390
- }
3391
- const file = this.getDocument(id);
3392
- if (file.markedToSign) {
3393
- this.notify({
3394
- message: getWindow(this.execution).CANT_UNLOCK_MARKED_TO_SIGN,
3395
- type: "warning"
3396
- });
3397
- return;
3398
- }
3399
- if (!file.isLocked || !file.isLockedByMe) {
3400
- const isLocked = await this.checkLockDocument(file.docId, false);
3401
- this.updateDocument(
3402
- id,
3403
- typeof isLocked === "string" ? this.parseFileDefinition({
3404
- ...file,
3405
- userLocking: isLocked,
3406
- lock: true,
3407
- isLocked: true,
3408
- lockedBy: isLocked
3409
- }) : { ...file, isLocked }
3410
- );
3411
- }
3412
- const result = await post(
3413
- this.execution,
3414
- makeApiaUrl(
3415
- this.execution,
3416
- this.getLockDocumentParameters({
3417
- action: "lockDocument",
3418
- ajaxUrl: this.getAjaxUrl(),
3419
- docId: file.docId,
3420
- lock: file.isLocked || file.locked,
3421
- isAjax: true,
3422
- prefix: this.type
3423
- })
3424
- )
3425
- );
3426
- if (result?.data) {
3427
- const resultFile = result.data.function?.data?.general;
3428
- if (resultFile)
3429
- this.updateDocument(
3430
- resultFile.docId,
3431
- this.parseFileDefinition({
3432
- ...file,
3433
- ...resultFile,
3434
- isLocked: resultFile.locked
1949
+ async init(form) {
1950
+ await super.init(form);
1951
+ if (this.getLanguages().length > 0) {
1952
+ this.extractTrad();
1953
+ this.getLanguages().forEach((lang) => {
1954
+ const isTranslated = this.definitionTradParsed[lang.id] ?? false;
1955
+ this.translations.set(
1956
+ lang.id,
1957
+ new Translation(this.form.execution, {
1958
+ id: lang.id,
1959
+ label: lang.label,
1960
+ isTranslated
3435
1961
  })
3436
1962
  );
1963
+ });
1964
+ this.selectedLanguageId = this.getLanguages()[0].id;
3437
1965
  }
3438
1966
  }
3439
- evaluateDeleteDocumentResult(result) {
3440
- return result?.function?.name === "fncDocumentRemove";
1967
+ cancelTranslations() {
1968
+ this.getTranslations().forEach((c) => {
1969
+ c.reset();
1970
+ });
3441
1971
  }
3442
- setTranslationFile(file, docId, langId) {
3443
- if (!this.state.translatedFiles.has(docId)) {
3444
- this.state.translatedFiles.set(docId, /* @__PURE__ */ new Map());
3445
- }
3446
- this.state.translatedFiles.get(docId)?.set(langId, file);
1972
+ deleteTranslations() {
1973
+ this.getTranslations().forEach((c) => {
1974
+ c.deleteTranslation();
1975
+ });
3447
1976
  }
3448
- filterAlreadyUploadedFiles(files, conf) {
3449
- const versioningFile = this.state.versioningFile;
3450
- if (versioningFile)
3451
- return files;
3452
- const uploadedFiles = Object.values(this.state.files).filter(
3453
- (file) => Number(file.docId) > 0
3454
- );
3455
- const existingFiles = [];
3456
- const nonExistingFiles = [];
3457
- if (conf?.langId) {
3458
- const docId = conf.translatingFile?.docId ?? Infinity;
3459
- const translationsMap = this.state.translatedFiles.get(String(docId));
3460
- const alreadyUploadedToTranslationsFile = translationsMap ? Array.from(translationsMap.values()).find(
3461
- (current) => (current.docName || current.name) === files[0]?.name
3462
- ) : void 0;
3463
- if (alreadyUploadedToTranslationsFile)
3464
- existingFiles.push(files[0]);
3465
- } else
3466
- files.forEach((file) => {
3467
- if (uploadedFiles.find((search) => search.docName === file.name)) {
3468
- existingFiles.push(file);
3469
- } else
3470
- nonExistingFiles.push(file);
3471
- });
3472
- if (existingFiles.length > 0) {
3473
- void this.notify({
3474
- message: `${getWindow(this.execution).LBL_DROP_FILE_REPEATED}: ${existingFiles.map((current) => current.name).join(", ")}`,
3475
- type: "warning"
3476
- });
3477
- return nonExistingFiles;
3478
- }
3479
- return files;
1977
+ async changeLanguage(langId) {
1978
+ this.selectedLanguageId = langId;
1979
+ this.syncTranslation();
3480
1980
  }
3481
- filterByFilesAmountLimit(files) {
3482
- return files.slice(
3483
- 0,
3484
- addBoundary(this.maxFiles - (this.state.inProgressFiles?.length ?? 0), 0)
1981
+ getTranslation(id) {
1982
+ return this.translations.get(id);
1983
+ }
1984
+ getCurrentTranslation() {
1985
+ return this.translations.get(this.selectedLanguageId);
1986
+ }
1987
+ getTranslations() {
1988
+ return this.translations;
1989
+ }
1990
+ submitTranslations() {
1991
+ [...this.getTranslations().values()].filter((c) => c.state.hasChanged).forEach((c) => {
1992
+ c.submitTranslation(
1993
+ c.value,
1994
+ this.getSynchronizeUrl({
1995
+ react: true,
1996
+ preventAsXmlParameter: true,
1997
+ langId: c.langId
1998
+ })
1999
+ );
2000
+ });
2001
+ this.state.validation.errorMessage = null;
2002
+ }
2003
+ async syncTranslation() {
2004
+ const langId = this.selectedLanguageId;
2005
+ this.isTradLoading = true;
2006
+ await this.getTranslation(langId)?.readTranslations(
2007
+ await makeApiaUrl(this.form.execution, {
2008
+ ajaxUrl: "/apia.execution.FormAction.run",
2009
+ action: "getFieldTranslations",
2010
+ frmId: this.getForm().definition.id,
2011
+ frmParent: this.getForm().definition.frmParent,
2012
+ fldId: this.definition.id,
2013
+ attId: this.attribute.id,
2014
+ langId,
2015
+ react: true
2016
+ })
3485
2017
  );
2018
+ this.isTradLoading = false;
3486
2019
  }
3487
- filterAcceptedFiles(files, shouldNotify = true, docTypeId) {
3488
- const docTypes = docTypeId !== void 0 ? this.state.allowedTypes.filter((c) => {
3489
- return typeof docTypeId === "string" ? c.id === docTypeId : c.id === docTypeId.id;
3490
- }) : this.state.allowedTypes;
3491
- if (!docTypes.find((c) => c.docExts === "")) {
3492
- const notAllowedFilesBecauseOfExtension = [];
3493
- const notAllowedFilesBecauseOfSize = [];
3494
- let maxSize = Infinity;
3495
- const allowedFiles = files.filter((currentFile) => {
3496
- const extension = (currentFile.name.match(/\.(\w+)$/) ?? [])[1];
3497
- let isAllowed = true;
3498
- if (!docTypes.find((currentDocType) => {
3499
- if (!currentDocType.docExts.split(";").map((current) => current.toLowerCase()).includes(extension.toLowerCase())) {
3500
- return false;
3501
- }
3502
- return true;
3503
- })) {
3504
- isAllowed = false;
3505
- notAllowedFilesBecauseOfExtension.push(currentFile);
3506
- }
3507
- if (isAllowed && !docTypes.find((currentDocType) => {
3508
- if (Number(currentDocType.maxSize) < currentFile.size) {
3509
- maxSize = Number(currentDocType.maxSize);
3510
- return false;
3511
- }
3512
- return true;
3513
- })) {
3514
- notAllowedFilesBecauseOfSize.push(currentFile);
3515
- isAllowed = false;
3516
- }
3517
- if (!isAllowed)
3518
- return false;
3519
- return true;
3520
- });
3521
- if (shouldNotify) {
3522
- let errorMessage = "";
3523
- if (notAllowedFilesBecauseOfExtension.length > 0) {
3524
- const filesNames = notAllowedFilesBecauseOfExtension.reduce(
3525
- (accumulated, current) => {
3526
- if (accumulated.length === 0)
3527
- return current.name;
3528
- return `${accumulated}, ${current.name}`;
3529
- },
3530
- ""
3531
- );
3532
- errorMessage = `<strong>${getWindow(this.execution).FILES_WRONG_EXT}</strong><br />${filesNames}`;
3533
- }
3534
- if (notAllowedFilesBecauseOfSize.length > 0) {
3535
- const filesNames = notAllowedFilesBecauseOfSize.reduce(
3536
- (accumulated, current) => {
3537
- if (accumulated.length === 0)
3538
- return current.name;
3539
- return `${accumulated}, ${current.name}`;
3540
- },
3541
- ""
3542
- );
3543
- if (errorMessage.length > 0)
3544
- errorMessage = `${errorMessage} <br /><br />`;
3545
- errorMessage = `${errorMessage}${formatMessage(
3546
- getWindow(this.execution).FILES_TOO_BIG,
3547
- {
3548
- TOK1: `<br />${filesNames}`,
3549
- TOK2: `${parseAsSize(maxSize)}`
3550
- }
3551
- )}`;
3552
- }
3553
- if (errorMessage.length > 0)
3554
- this.notify({
3555
- message: errorMessage,
3556
- type: "warning"
3557
- });
2020
+ async validate() {
2021
+ const isSuperValid = await super.validate();
2022
+ let isValid = isSuperValid;
2023
+ const canValidate = isSuperValid && this.properties.reqTrad && this.hasValue() && (!this.properties.inputAsText || !this.properties.visibilityHidden || !this.properties.disabled);
2024
+ if (canValidate) {
2025
+ const translations = [...this.getTranslations().values()];
2026
+ const tradNotValidated = translations.find((c) => !c.state.isTranslated);
2027
+ if (tradNotValidated) {
2028
+ this.state.validation.errorMessage = labels.errorTranslateRequired(
2029
+ this.form.execution,
2030
+ tradNotValidated.state.label
2031
+ );
2032
+ isValid = false;
2033
+ } else {
2034
+ this.state.validation.errorMessage = null;
3558
2035
  }
3559
- return allowedFiles;
3560
2036
  }
3561
- return files;
2037
+ return isValid;
3562
2038
  }
3563
- filterExistingFiles(files, conf) {
3564
- if (conf?.langId)
3565
- return files;
3566
- const currentFiles = this.state.inProgressFiles;
3567
- const alreadyUploadedFiles = Object.values(this.state.files).filter(
3568
- (current) => Number(current.docId) < 0
3569
- );
3570
- let alreadyIncludedFileNames = "";
3571
- const filteredFiles = files.filter((current) => {
3572
- const isIncluded = currentFiles.findIndex((search) => search.name === current.name) !== -1 || alreadyUploadedFiles.findIndex(
3573
- (search) => search.docName === current.name
3574
- ) !== -1;
3575
- if (isIncluded)
3576
- alreadyIncludedFileNames = `${alreadyIncludedFileNames}${alreadyIncludedFileNames.length > 0 ? ", " : ""}${current.name}`;
3577
- return !isIncluded;
3578
- });
3579
- if (alreadyIncludedFileNames.length > 0)
3580
- this.notify({
3581
- message: `${getWindow(this.execution).LBL_DROP_FILE_REPEATED}: ${alreadyIncludedFileNames}`,
3582
- type: "warning"
3583
- });
3584
- return filteredFiles;
2039
+ setValue(newValue, options) {
2040
+ if (newValue === "") {
2041
+ this.deleteTranslations();
2042
+ }
2043
+ return super.setValue(newValue, options);
3585
2044
  }
3586
- filterVersioningFiles(files, conf) {
3587
- const versioningFile = this.state.versioningFile;
3588
- if (versioningFile) {
3589
- const newFiles = files.filter(
3590
- (current) => current.name === versioningFile.docName || current.name === versioningFile.name
3591
- );
3592
- if (newFiles.length === 0) {
3593
- this.notify({
3594
- type: "warning",
3595
- message: getWindow(this.execution).LBL_DROP_FILE_NAMES_NOT_MATCH
3596
- });
2045
+ }
2046
+
2047
+ class Editor extends TranslatableField {
2048
+ fireEvent(eventName, options) {
2049
+ return super.fireEvent(eventName, options);
2050
+ }
2051
+ isValidValue() {
2052
+ return !!new DOMParser().parseFromString(this.getValue(), "text/html").documentElement.textContent;
2053
+ }
2054
+ getSynchronizePostConfiguration(value) {
2055
+ const conf = super.getSynchronizePostConfiguration(value);
2056
+ conf.postData.clearValues = "true";
2057
+ return conf;
2058
+ }
2059
+ }
2060
+
2061
+ var __defProp$i = Object.defineProperty;
2062
+ var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2063
+ var __publicField$i = (obj, key, value) => {
2064
+ __defNormalProp$i(obj, typeof key !== "symbol" ? key + "" : key, value);
2065
+ return value;
2066
+ };
2067
+ class UploaderApi extends UploaderApi$1 {
2068
+ constructor(execution, id, type, modalConfig) {
2069
+ super({
2070
+ id,
2071
+ modalConfig: { ...modalConfig, renderers: execution.renderers },
2072
+ context: {
2073
+ allowTranslation: type === "E" && !!getWindow(execution).DOC_LANGS,
2074
+ CONTEXT: getWindow(execution).CONTEXT,
2075
+ currentUserLogin: getWindow(execution).CURRENT_USER_LOGIN,
2076
+ docLangs: getWindow(execution).DOC_LANGS,
2077
+ everyoneCanUpdate: getWindow(execution).DOCUMENT_EVERYONE_PERMISSION !== false,
2078
+ IN_MONITOR: getWindow(execution).IN_MONITOR,
2079
+ ITHit: getWindow(execution).ITHit,
2080
+ killSession: () => execution.kill(),
2081
+ labels: getWindow(execution).labels,
2082
+ notify: (n) => execution.notifications.add(new MessageNotification(n)),
2083
+ openModal: () => execution.environment.openUploaderModal?.(this.modalController),
2084
+ ownerCanUpdate: getWindow(execution).DOCUMENT_OWNER_PRIVILEGES,
2085
+ readonly: false,
2086
+ TAB_ID_REQUEST: getWindow(execution).TAB_ID_REQUEST,
2087
+ URL_REQUEST_AJAX: getWindow(execution).URL_REQUEST_AJAX,
2088
+ WEBDAV_INSTALLER_URL: getWindow(execution).WEBDAV_INSTALLER_URL,
2089
+ WEBDAV_SERVER: getWindow(execution).WEBDAV_SERVER
3597
2090
  }
3598
- return newFiles;
3599
- }
3600
- return files;
2091
+ });
2092
+ this.execution = execution;
2093
+ this.type = type;
2094
+ __publicField$i(this, "docTypePermittedObjId");
2095
+ __publicField$i(this, "getCheckLockDocumentParameters", (defaultParameters) => {
2096
+ return this.addPrefix(defaultParameters);
2097
+ });
2098
+ this.docTypePermittedObjId = type === "E" ? getWindow(execution).docTypePerEntId : getWindow(execution).docTypePerProId;
3601
2099
  }
3602
2100
  getLoadFileSystemStructureTree() {
3603
2101
  return {
@@ -3613,6 +2111,70 @@ class UploaderApi extends EventEmitter$1 {
3613
2111
  docTypePermittedObjType: this.type
3614
2112
  };
3615
2113
  }
2114
+ getAjaxUploadStartParameters(defaultParameters) {
2115
+ return {
2116
+ ...defaultParameters,
2117
+ prefix: this.type,
2118
+ useDocTypePermitted: true,
2119
+ docTypePermittedObjType: this.type,
2120
+ docTypePermittedObjId: this.docTypePermittedObjId
2121
+ };
2122
+ }
2123
+ addPrefix(defaultParameters) {
2124
+ return { ...defaultParameters, prefix: this.type };
2125
+ }
2126
+ getDocumentInfoParameters(defaultParameters) {
2127
+ return this.addPrefix(defaultParameters);
2128
+ }
2129
+ getReloadMetadataParameters(defaultParameters) {
2130
+ return this.addPrefix(defaultParameters);
2131
+ }
2132
+ getSaveDroppedFilesParameters(defaultParameters) {
2133
+ return {
2134
+ ...defaultParameters,
2135
+ elemType: this.type,
2136
+ elemId: `prmDocumentContainter${this.type}`
2137
+ };
2138
+ }
2139
+ getAjaxUploadFileStatusParameters(defaultParameters) {
2140
+ return this.addPrefix(defaultParameters);
2141
+ }
2142
+ getMarkFileToSignParameters(defaultParameters) {
2143
+ return this.addPrefix(defaultParameters);
2144
+ }
2145
+ getProcessDroppedFilesPostdata(defaultParameters) {
2146
+ return {
2147
+ ...defaultParameters,
2148
+ useDocTypePermitted: true,
2149
+ docTypePermittedObjId: this.docTypePermittedObjId?.toString(),
2150
+ docTypePermittedObjType: this.type
2151
+ };
2152
+ }
2153
+ getProcessDroppedFilesParameters(defaultParameters) {
2154
+ return { ...defaultParameters, elemType: this.type };
2155
+ }
2156
+ getConfirmDropModalParameters(defaultParameters) {
2157
+ return { ...defaultParameters, elemType: this.type };
2158
+ }
2159
+ getConfirmDropModalPostdata(defaultParameters) {
2160
+ return {
2161
+ ...defaultParameters,
2162
+ elemType: this.type,
2163
+ pe: this.docTypePermittedObjId?.toString()
2164
+ };
2165
+ }
2166
+ getCheckWebDavLockParameters(defaultParameters) {
2167
+ return this.addPrefix(defaultParameters);
2168
+ }
2169
+ getDownloadMultipleDocumentsParameters(defaultParameters) {
2170
+ return this.addPrefix(defaultParameters);
2171
+ }
2172
+ getLoadCurrentDocumentsParameters(defaultParameters) {
2173
+ return this.addPrefix(defaultParameters);
2174
+ }
2175
+ getDeleteDocumentParameters(defaultParameters) {
2176
+ return this.addPrefix(defaultParameters);
2177
+ }
3616
2178
  }
3617
2179
 
3618
2180
  var __defProp$h = Object.defineProperty;
@@ -3631,28 +2193,8 @@ class FormsUploader extends UploaderApi {
3631
2193
  );
3632
2194
  this.execution = execution;
3633
2195
  this.type = type;
3634
- this.modalConfig = modalConfig;
3635
2196
  this.field = field;
3636
2197
  __publicField$h(this, "isEditionMode");
3637
- __publicField$h(this, "getAjaxUploadFileStatusParameters", (defaultParameters) => {
3638
- return {
3639
- ...defaultParameters,
3640
- forceDocTypeId: this.field.properties.docType,
3641
- ...this.getFormParameters()
3642
- };
3643
- });
3644
- __publicField$h(this, "getAjaxUploadStartParameters", ({
3645
- useDocTypePermitted,
3646
- docTypePermittedObjType,
3647
- docTypePermittedObjId,
3648
- ...defaultParameters
3649
- }) => {
3650
- return {
3651
- ...defaultParameters,
3652
- forceDocTypeId: this.field.properties.docType,
3653
- ...this.getFormParameters()
3654
- };
3655
- });
3656
2198
  __publicField$h(this, "getCheckLockDocumentParameters", ({
3657
2199
  prefix,
3658
2200
  ...parameters
@@ -3683,15 +2225,6 @@ class FormsUploader extends UploaderApi {
3683
2225
  index
3684
2226
  };
3685
2227
  });
3686
- __publicField$h(this, "getConfirmDropModalParameters", (defaultParameters) => {
3687
- const { frmParent } = this.getFormParameters();
3688
- return {
3689
- ...defaultParameters,
3690
- elemType: frmParent,
3691
- forceDocTypeId: this.field.properties.docType,
3692
- ...this.getFormParameters()
3693
- };
3694
- });
3695
2228
  __publicField$h(this, "getConfirmDropModalPostdata", ({
3696
2229
  pe,
3697
2230
  ...parameters
@@ -3713,12 +2246,6 @@ class FormsUploader extends UploaderApi {
3713
2246
  ...rest
3714
2247
  };
3715
2248
  });
3716
- __publicField$h(this, "getDocumentInfoParameters", (parameters) => {
3717
- return {
3718
- ...parameters,
3719
- ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX
3720
- };
3721
- });
3722
2249
  __publicField$h(this, "getEditDocumentParameters", ({ action, docId }) => {
3723
2250
  const { prefix, editionMode, ...rest } = this.getFormParameters();
3724
2251
  return {
@@ -3757,7 +2284,7 @@ class FormsUploader extends UploaderApi {
3757
2284
  ...defaultParameters
3758
2285
  }) => {
3759
2286
  return {
3760
- ...defaultParameters,
2287
+ ...super.getMarkFileToSignParameters(defaultParameters),
3761
2288
  action: "sign",
3762
2289
  fldId: this.field.definition.id,
3763
2290
  ...this.getFormParameters()
@@ -3778,30 +2305,15 @@ class FormsUploader extends UploaderApi {
3778
2305
  docTypePermittedObjType,
3779
2306
  ...parameters
3780
2307
  }) => {
3781
- return { ...parameters, editionMode: this.getFormParameters().editionMode };
3782
- });
3783
- __publicField$h(this, "getReloadMetadataParameters", (defaultParameters) => {
3784
- return {
3785
- ...defaultParameters,
3786
- ...getWindow(this.execution).IS_EDIT_GRID ? { editionMode: true } : null,
3787
- ...this.getFormParameters()
3788
- };
3789
- });
3790
- __publicField$h(this, "getSaveDroppedFilesParameters", (defaultParameters) => {
3791
- const elemId = this.elemId();
3792
- const { prefix, ...rest } = this.getFormParameters();
3793
2308
  return {
3794
- ...defaultParameters,
3795
- fromFormElem: true,
3796
- elemType: elemId,
3797
- elemId,
3798
- ...rest
2309
+ ...super.getProcessDroppedFilesParameters(parameters),
2310
+ editionMode: this.getFormParameters().editionMode
3799
2311
  };
3800
2312
  });
3801
2313
  __publicField$h(this, "parseFileDefinition", (file) => {
3802
2314
  return {
3803
2315
  ...parseFileDefinition(
3804
- this.execution,
2316
+ this.context,
3805
2317
  file,
3806
2318
  this.field.properties.reqSign || false
3807
2319
  ),
@@ -3818,6 +2330,9 @@ class FormsUploader extends UploaderApi {
3818
2330
  elemId() {
3819
2331
  return `dropUpprDiv${this.field.getForm().definition.frmParent}_${this.field.getForm().definition.id}_${this.field.definition.id}_${this.index()}${getWindow(this.execution).IS_EDIT_GRID_MODAL ? "_true_Mdl" : ""}`;
3820
2332
  }
2333
+ buildModalController(conf) {
2334
+ return super.buildModalController(conf);
2335
+ }
3821
2336
  filterByFilesAmountLimit(files) {
3822
2337
  const inProgressFiles = this.state.inProgressFiles;
3823
2338
  if (inProgressFiles.length === 1 && files.length)
@@ -3858,6 +2373,64 @@ class FormsUploader extends UploaderApi {
3858
2373
  }
3859
2374
  };
3860
2375
  }
2376
+ getAjaxUploadFileStatusParameters(defaultParameters) {
2377
+ return {
2378
+ ...super.getAjaxUploadFileStatusParameters(defaultParameters),
2379
+ forceDocTypeId: this.field.properties.docType,
2380
+ ...this.getFormParameters()
2381
+ };
2382
+ }
2383
+ getAjaxUploadStartParameters({
2384
+ useDocTypePermitted,
2385
+ docTypePermittedObjType,
2386
+ docTypePermittedObjId,
2387
+ ...defaultParameters
2388
+ }) {
2389
+ const {
2390
+ docTypePermittedObjId: a,
2391
+ docTypePermittedObjType: b,
2392
+ useDocTypePermitted: c,
2393
+ ...rest
2394
+ } = super.getAjaxUploadStartParameters(defaultParameters);
2395
+ return {
2396
+ ...rest,
2397
+ forceDocTypeId: this.field.properties.docType,
2398
+ ...this.getFormParameters()
2399
+ };
2400
+ }
2401
+ getConfirmDropModalParameters(defaultParameters) {
2402
+ const { frmParent } = this.getFormParameters();
2403
+ return {
2404
+ ...super.getConfirmDropModalParameters(defaultParameters),
2405
+ elemType: frmParent,
2406
+ forceDocTypeId: this.field.properties.docType,
2407
+ ...this.getFormParameters()
2408
+ };
2409
+ }
2410
+ getDocumentInfoParameters(parameters) {
2411
+ return {
2412
+ ...super.getDocumentInfoParameters(parameters),
2413
+ ajaxUrl: getWindow(this.execution).URL_REQUEST_AJAX
2414
+ };
2415
+ }
2416
+ getReloadMetadataParameters(defaultParameters) {
2417
+ return {
2418
+ ...super.getReloadMetadataParameters(defaultParameters),
2419
+ ...getWindow(this.execution).IS_EDIT_GRID ? { editionMode: true } : null,
2420
+ ...this.getFormParameters()
2421
+ };
2422
+ }
2423
+ getSaveDroppedFilesParameters(defaultParameters) {
2424
+ const elemId = this.elemId();
2425
+ const { prefix, ...rest } = this.getFormParameters();
2426
+ return {
2427
+ ...super.getSaveDroppedFilesParameters(defaultParameters),
2428
+ fromFormElem: true,
2429
+ elemType: elemId,
2430
+ elemId,
2431
+ ...rest
2432
+ };
2433
+ }
3861
2434
  async downloadVersion(fileId, version) {
3862
2435
  const file = this.getDocument(fileId);
3863
2436
  if (!file)
@@ -4733,12 +3306,14 @@ class Grid extends Field {
4733
3306
  }
4734
3307
  refreshColumnsVisibilities() {
4735
3308
  const shownColumns = /* @__PURE__ */ new Set();
4736
- for (let i = 0; i < this.tableController.body.rows[0]?.cells.length || 0; i++) {
4737
- for (const row of this.tableController.body.rows) {
3309
+ this.tableController.head.rows[0]?.cells.forEach((c) => {
3310
+ shownColumns.add(c.getState("colName"));
3311
+ });
3312
+ for (let i = 0; i < this.tableController.head.rows[0]?.cells.length || 0; i++) {
3313
+ for (const row of this.tableController.head.rows) {
4738
3314
  const cell = row.cells[i];
4739
- const field = cell.getState("properties")?.field;
4740
- if (!(field && (field.properties.visibilityHidden || field instanceof Hidden))) {
4741
- shownColumns.add(cell.getState("colName"));
3315
+ if (cell instanceof HeaderCell && cell.getState("isHidden")) {
3316
+ shownColumns.delete(cell.getState("colName"));
4742
3317
  break;
4743
3318
  }
4744
3319
  }
@@ -5716,7 +4291,8 @@ class SchedulerField extends Field {
5716
4291
  loadWeek: this.loadWeek.bind(this),
5717
4292
  deleteDate: this.deleteDate.bind(this),
5718
4293
  markDay: this.markDay.bind(this),
5719
- loadInfo: this.loadInfo.bind(this)
4294
+ loadInfo: this.loadInfo.bind(this),
4295
+ selectDayHandler: this.selectDayHandler.bind(this)
5720
4296
  },
5721
4297
  "Scheduler",
5722
4298
  getWindow(this.getForm().execution)
@@ -5765,6 +4341,47 @@ class SchedulerField extends Field {
5765
4341
  })
5766
4342
  );
5767
4343
  }
4344
+ async selectDayHandler({
4345
+ cellId,
4346
+ currentDayDefinition,
4347
+ dayNumber,
4348
+ hour,
4349
+ weekDay
4350
+ }) {
4351
+ await get(
4352
+ this.form.execution,
4353
+ makeApiaUrl(this.form.execution, {
4354
+ ajaxUrl: "/apia.design.TaskSchedulerAction.run",
4355
+ action: "setExecutionSchedulerSelectedDay",
4356
+ weekDay,
4357
+ hour,
4358
+ dayNumber
4359
+ })
4360
+ ).then((response) => {
4361
+ if (response?.data?.success) {
4362
+ this._schedController?.setState({
4363
+ ...this._schedController.state,
4364
+ selectedCell: cellId,
4365
+ selectedDay: {
4366
+ hour: String(hour),
4367
+ day: dayjs(weekDay, getDateFormat()).add(Number(dayNumber) - 1, "day").format(getDateFormat()),
4368
+ mondayWeek: String(
4369
+ dayjs(weekDay, getDateFormat()).format(getDateFormat())
4370
+ ),
4371
+ dayNumber: Number(dayNumber),
4372
+ morningOrAfternoonSelected: Number(hour)
4373
+ }
4374
+ });
4375
+ if (currentDayDefinition) {
4376
+ this._schedController?.syncStage(
4377
+ currentDayDefinition,
4378
+ Number(hour)
4379
+ );
4380
+ }
4381
+ }
4382
+ }).catch(() => {
4383
+ });
4384
+ }
5768
4385
  get schedController() {
5769
4386
  return this._schedController;
5770
4387
  }
@@ -7146,7 +5763,7 @@ class ApiaForm {
7146
5763
  hideModal() {
7147
5764
  __privateGet$3(this, _execution$1).emit("hideFormModal", __privateGet$3(this, _form));
7148
5765
  }
7149
- showAsModal(size) {
5766
+ showAsModal(size = "finder") {
7150
5767
  __privateGet$3(this, _execution$1).emit("showFormAsModal", { form: __privateGet$3(this, _form), size });
7151
5768
  }
7152
5769
  }
@@ -8547,7 +7164,7 @@ class Observations {
8547
7164
  makeApiaUrl(this.execution, {
8548
7165
  action: "getObservationsData",
8549
7166
  isAjax: true,
8550
- isTask: !window.isMonitor ? true : false
7167
+ isTask: !getWindow(this.execution).isMonitor ? true : false
8551
7168
  })
8552
7169
  );
8553
7170
  if (!res?.data?.obData) {
@@ -8702,6 +7319,7 @@ function buildPoolSelection(execution, status, poolForm) {
8702
7319
  function buildPathSelection(execution, status, form) {
8703
7320
  const modal = new ShowPathSelection(form, async function(result) {
8704
7321
  if (result.confirmed) {
7322
+ const unLock = execution.lock();
8705
7323
  const pathSelectionResult = await axios.post(
8706
7324
  makeApiaUrl(execution, {
8707
7325
  action: "confirmPath",
@@ -8713,6 +7331,8 @@ function buildPathSelection(execution, status, form) {
8713
7331
  const parsedRes = parseXMLRequestResponse(
8714
7332
  pathSelectionResult
8715
7333
  );
7334
+ if (parsedRes)
7335
+ unLock();
8716
7336
  if (parsedRes?.groupSelection) {
8717
7337
  return buildPoolSelection(execution, status, parsedRes.load.form);
8718
7338
  } else if (parsedRes?.actions?.action?.toDo === "functionTimedCall") {
@@ -8848,7 +7468,8 @@ async function defaultConfirm$1(execution, status) {
8848
7468
  if (key === "value" && typeof value === "string") {
8849
7469
  return value;
8850
7470
  }
8851
- return processStringObj(value, key);
7471
+ const parsed = processStringObj(value, key);
7472
+ return parsed;
8852
7473
  };
8853
7474
  const baseOptions = getDefaultXmlParserOptions();
8854
7475
  baseOptions.attrValueProcessors = [
@@ -8857,10 +7478,22 @@ async function defaultConfirm$1(execution, status) {
8857
7478
  processAjaxEventResponse
8858
7479
  ];
8859
7480
  const parser = new xml2js.Parser(baseOptions);
8860
- return getDefaultXmlPostProcessor()(
7481
+ let objJS = null;
7482
+ parser.parseString(
8861
7483
  xml,
8862
- parser
7484
+ (err, result) => {
7485
+ if (err) {
7486
+ console.warn("Error Parsing XML data", err);
7487
+ objJS = err;
7488
+ } else {
7489
+ if (result?.code === "-1" && result.exceptions) {
7490
+ throw new InvalidSessionException();
7491
+ }
7492
+ objJS = result;
7493
+ }
7494
+ }
8863
7495
  );
7496
+ return objJS;
8864
7497
  }
8865
7498
  }
8866
7499
  );
@@ -9220,13 +7853,14 @@ const unescapeMarkup = (str) => {
9220
7853
  return "";
9221
7854
  };
9222
7855
  class Execution extends EventEmitter$1 {
9223
- constructor(environment) {
7856
+ constructor(environment, renderers) {
9224
7857
  super();
9225
7858
  this.environment = environment;
7859
+ this.renderers = renderers;
9226
7860
  __publicField(this, "fieldsMapping");
9227
- __publicField(this, "entity", new Entity(this));
9228
- __publicField(this, "process", new Process(this));
9229
- __publicField(this, "observations", new Observations(this));
7861
+ __publicField(this, "entity");
7862
+ __publicField(this, "process");
7863
+ __publicField(this, "observations");
9230
7864
  __publicField(this, "executedOnLoadEvents", false);
9231
7865
  __publicField(this, "executionConfig", null);
9232
7866
  __publicField(this, "_steps", []);
@@ -9285,6 +7919,11 @@ class Execution extends EventEmitter$1 {
9285
7919
  this.fieldsMapping = { ...defaultFieldsMap, ...environment.fieldsMapping };
9286
7920
  this.notifications = new Notifications(this);
9287
7921
  makeObservable(this, { state: observable });
7922
+ setTimeout(() => {
7923
+ this.entity = new Entity(this);
7924
+ this.process = new Process(this);
7925
+ this.observations = new Observations(this);
7926
+ }, 0);
9288
7927
  }
9289
7928
  addPendingPromise(promise) {
9290
7929
  this._pendingPromises.add(promise);
@@ -9759,5 +8398,5 @@ class Execution extends EventEmitter$1 {
9759
8398
  }
9760
8399
  }
9761
8400
 
9762
- export { ActionsController, AdditionalCell, ApiaAttribute, ApiaField, ApiaFieldWithAttribute, ApiaForm, ApiaFunctions, BouncingEmitter, Button, ButtonField, Captcha, CaptchaField, CheckField, Checkbox, CustomComponent, GridField as DataGridField, Editor, EditorField, EventEmitter, Execution, ExecutionState, Field, FieldWithAttribute, File, FileUploaderField, FlowModal$1 as FlowModal, Form, FormsUploader, Grid, GridCell, GridField, GridPaginated, HeaderCell, Hidden, HiddenField, IProperty, Image, ImageField, Input, InputField, InvalidSessionException, Label, Link, LinkField, MessageNotification, ModalInput, ModalInputField, Multiple, MultipleField, Notifications, Password, PasswordField, Radio, RadioField, SchedulerField, Select, SelectField, ShowConfirmMessage, ShowPathSelection, ShowPoolSelection, ShowSign$1 as ShowSign, ShowSignSelection$1 as ShowSignSelection, StatefulEmitter, StatusNotification, AreaField as TextAreaField, TextField, Textarea, Title, TranslatableField, Translation, Tree, TreeField, UploaderApi, UploaderModalController, createNewField, deepEqual, get, getLabel, isHtmlResponse, isJsonResponse, isOneClickUploadEnabled, isXmlResponse, makeApiaUrl, parseFakeJSON$1 as parseFakeJSON, parseFileDefinition, parseSuccessfulResponse, parseXml, post, returnExactlyTheSame, shallowEqual };
8401
+ export { ActionsController, AdditionalCell, ApiaAttribute, ApiaField, ApiaFieldWithAttribute, ApiaForm, ApiaFunctions, BouncingEmitter, Button, ButtonField, Captcha, CaptchaField, CheckField, Checkbox, CustomComponent, GridField as DataGridField, Editor, EditorField, EventEmitter, Execution, ExecutionState, Field, FieldWithAttribute, File, FileUploaderField, FlowModal$1 as FlowModal, Form, FormsUploader, Grid, GridCell, GridField, GridPaginated, HeaderCell, Hidden, HiddenField, IProperty, Image, ImageField, Input, InputField, InvalidSessionException, Label, Link, LinkField, MessageNotification, ModalInput, ModalInputField, Multiple, MultipleField, Notifications, Password, PasswordField, Radio, RadioField, SchedulerField, Select, SelectField, ShowConfirmMessage, ShowPathSelection, ShowPoolSelection, ShowSign$1 as ShowSign, ShowSignSelection$1 as ShowSignSelection, StatefulEmitter, StatusNotification, AreaField as TextAreaField, TextField, Textarea, Title, TranslatableField, Translation, Tree, TreeField, UploaderApi, createNewField, deepEqual, get, getLabel, isHtmlResponse, isJsonResponse, isXmlResponse, makeApiaUrl, parseFakeJSON$1 as parseFakeJSON, parseSuccessfulResponse, parseXml, post, shallowEqual };
9763
8402
  //# sourceMappingURL=index.js.map