@gisce/ooui 2.33.0-alpha.3 → 2.33.0-alpha.5

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.
@@ -48,8 +48,8 @@ declare class One2many extends Field {
48
48
  /**
49
49
  * Infinite mode
50
50
  */
51
- _infinite: string | undefined;
52
- get infinite(): string | undefined;
51
+ _infinite: string | boolean | undefined;
52
+ get infinite(): string | boolean | undefined;
53
53
  set infinite(value: string | undefined);
54
54
  constructor(props: any);
55
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"One2many.d.ts","sourceRoot":"","sources":["../src/One2many.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B;;GAEG;AACH,cAAM,QAAS,SAAQ,KAAK;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAO;IACpB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED;;OAEG;IACH,SAAS,EAAE,MAAM,CAAM;IACvB,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAED;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEtC;IAED;;OAEG;IACH,MAAM,EAAE,GAAG,CAAQ;IACnB,IAAI,KAAK,IAAI,GAAG,CAEf;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAEnB;IAED;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,IAAI,IAAI,IAAI,MAAM,EAAE,CAEnB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAEvB;IAED;;OAEG;IACH,WAAW,EAAE,OAAO,CAAS;IAC7B,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAE5B;IAED;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAEvB;IAED;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,SAAS,CAAa;IAC1C,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAErC;gBAEW,KAAK,EAAE,GAAG;CA2CvB;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"One2many.d.ts","sourceRoot":"","sources":["../src/One2many.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B;;GAEG;AACH,cAAM,QAAS,SAAQ,KAAK;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAO;IACpB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED;;OAEG;IACH,SAAS,EAAE,MAAM,CAAM;IACvB,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;IAED;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEtC;IAED;;OAEG;IACH,MAAM,EAAE,GAAG,CAAQ;IACnB,IAAI,KAAK,IAAI,GAAG,CAEf;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAEnB;IAED;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,IAAI,IAAI,IAAI,MAAM,EAAE,CAEnB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAEvB;IAED;;OAEG;IACH,WAAW,EAAE,OAAO,CAAS;IAC7B,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAE5B;IAED;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAEvB;IAED;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAa;IACpD,IAAI,QAAQ,IAAI,MAAM,GAAG,OAAO,GAAG,SAAS,CAE3C;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAErC;gBAEW,KAAK,EAAE,GAAG;CA2CvB;AAED,eAAe,QAAQ,CAAC"}
package/dist/Widget.d.ts CHANGED
@@ -53,6 +53,8 @@ declare abstract class Widget {
53
53
  _isFunction: boolean | undefined;
54
54
  get isFunction(): boolean | undefined;
55
55
  set isFunction(value: boolean | undefined);
56
+ _isSortable: boolean;
57
+ get isSortable(): boolean;
56
58
  /**
57
59
  * Base type of the field
58
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Widget.d.ts","sourceRoot":"","sources":["../src/Widget.ts"],"names":[],"mappings":"AAGA,uBAAe,MAAM;IACnB;;OAEG;IACH,MAAM,CAAC,eAAe,EAAE,MAAM,CAAK;IACnC,MAAM,KAAK,cAAc,WAExB;IAED,MAAM,KAAK,cAAc,CAAC,KAAK,QAAA,EAE9B;IAED;;OAEG;IACH,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,IAAI,QAAQ,IAAI,OAAO,GAAG,SAAS,CAElC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAEtC;IAED;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAExB;IAED;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;IAED;;OAEG;IACH,KAAK,EAAE,MAAM,CAAM;IACnB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,OAAO,IAAI,GAAG,CAEjB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAErB;IAED;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEnC;IAED;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEhC;IAED,kBAAkB,EAAE,GAAG,CAAM;IAC7B,IAAI,iBAAiB,IAAI,GAAG,CAE3B;IAED,IAAI,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAE/B;IAED,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,IAAI,UAAU,IAAI,OAAO,GAAG,SAAS,CAEpC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAExC;IAED;;OAEG;IACH,UAAU,EAAE,MAAM,CAAM;IACxB,IAAI,SAAS,IAAI,MAAM,CAEtB;gBAEW,KAAK,CAAC,EAAE,GAAG;IAgDvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAC7C;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Widget.d.ts","sourceRoot":"","sources":["../src/Widget.ts"],"names":[],"mappings":"AAGA,uBAAe,MAAM;IACnB;;OAEG;IACH,MAAM,CAAC,eAAe,EAAE,MAAM,CAAK;IACnC,MAAM,KAAK,cAAc,WAExB;IAED,MAAM,KAAK,cAAc,CAAC,KAAK,QAAA,EAE9B;IAED;;OAEG;IACH,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,IAAI,QAAQ,IAAI,OAAO,GAAG,SAAS,CAElC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAEtC;IAED;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAExB;IAED;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,EAE3B;IAED;;OAEG;IACH,KAAK,EAAE,MAAM,CAAM;IACnB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,OAAO,IAAI,GAAG,CAEjB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAErB;IAED;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEnC;IAED;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,GAAG,IAAI,MAAM,GAAG,SAAS,CAE5B;IAED,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAEhC;IAED,kBAAkB,EAAE,GAAG,CAAM;IAC7B,IAAI,iBAAiB,IAAI,GAAG,CAE3B;IAED,IAAI,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAE/B;IAED,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,IAAI,UAAU,IAAI,OAAO,GAAG,SAAS,CAEpC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAExC;IAED,WAAW,EAAE,OAAO,CAAS;IAC7B,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;OAEG;IACH,UAAU,EAAE,MAAM,CAAM;IACxB,IAAI,SAAS,IAAI,MAAM,CAEtB;gBAEW,KAAK,CAAC,EAAE,GAAG;IAmDvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAC7C;AAED,eAAe,MAAM,CAAC"}
package/dist/ooui.es.js CHANGED
@@ -189,11 +189,12 @@ const we = (i = !1) => (i = JSON.parse(i.toString().toLowerCase()), +i > 0), Fe
189
189
  r(this, "_key");
190
190
  r(this, "_parsedWidgetProps", {});
191
191
  r(this, "_isFunction");
192
+ r(this, "_isSortable", !1);
192
193
  /**
193
194
  * Base type of the field
194
195
  */
195
196
  r(this, "_fieldType", "");
196
- this._colspan = k._defaultColspan, this._invisible = !1, t && (t.colspan && (this._colspan = +t.colspan), t.readonly !== void 0 && (this._readOnly = W(t.readonly)), t.invisible && (t.invisible === 1 || t.invisible === "1" || t.invisible === !0) && (this._invisible = !0), t.type && (this._type = t.type), t.context && (this._context = t.context), t.domain && (typeof t.domain != "string" ? this._domain = m(JSON.stringify(t.domain)) : this._domain = m(t.domain)), t.type && (this._fieldType = t.fieldsWidgetType), t.widget_props && (this._parsedWidgetProps = U(t.widget_props)), t.key && (this._key = t.key), t.is_function && (this._isFunction = t.is_function));
197
+ this._colspan = k._defaultColspan, this._invisible = !1, t && (t.colspan && (this._colspan = +t.colspan), t.readonly !== void 0 && (this._readOnly = W(t.readonly)), t.invisible && (t.invisible === 1 || t.invisible === "1" || t.invisible === !0) && (this._invisible = !0), t.type && (this._type = t.type), t.context && (this._context = t.context), t.domain && (typeof t.domain != "string" ? this._domain = m(JSON.stringify(t.domain)) : this._domain = m(t.domain)), t.type && (this._fieldType = t.fieldsWidgetType), t.widget_props && (this._parsedWidgetProps = U(t.widget_props)), t.key && (this._key = t.key), t.is_function && (this._isFunction = t.is_function), t.is_sortable && (this._isSortable = t.is_sortable));
197
198
  }
198
199
  static get defaultColspan() {
199
200
  return k._defaultColspan;
@@ -255,6 +256,9 @@ const we = (i = !1) => (i = JSON.parse(i.toString().toLowerCase()), +i > 0), Fe
255
256
  set isFunction(t) {
256
257
  this._isFunction = t;
257
258
  }
259
+ get isSortable() {
260
+ return this._isSortable;
261
+ }
258
262
  get fieldType() {
259
263
  return this._fieldType;
260
264
  }
@@ -994,7 +998,7 @@ class te extends f {
994
998
  super(t);
995
999
  }
996
1000
  }
997
- class Ie extends f {
1001
+ class Se extends f {
998
1002
  constructor(t) {
999
1003
  super(t);
1000
1004
  }
@@ -1032,9 +1036,9 @@ class R extends f {
1032
1036
  this._decimalDigits = e;
1033
1037
  }
1034
1038
  }
1035
- class Ee extends R {
1039
+ class Ie extends R {
1036
1040
  }
1037
- class Se extends f {
1041
+ class Ee extends f {
1038
1042
  }
1039
1043
  class Ve extends R {
1040
1044
  }
@@ -1580,13 +1584,13 @@ class $ {
1580
1584
  this._widgetClass = te;
1581
1585
  break;
1582
1586
  case "integer":
1583
- this._widgetClass = Ie;
1587
+ this._widgetClass = Se;
1584
1588
  break;
1585
1589
  case "float":
1586
1590
  this._widgetClass = R;
1587
1591
  break;
1588
1592
  case "float_time":
1589
- this._widgetClass = Ee;
1593
+ this._widgetClass = Ie;
1590
1594
  break;
1591
1595
  case "date":
1592
1596
  this._widgetClass = Ye;
@@ -1663,7 +1667,7 @@ class $ {
1663
1667
  this._widgetClass = Qe;
1664
1668
  break;
1665
1669
  case "html_preview":
1666
- this._widgetClass = Se;
1670
+ this._widgetClass = Ee;
1667
1671
  break;
1668
1672
  case "alert":
1669
1673
  this._widgetClass = Xe;
@@ -1956,9 +1960,9 @@ class Tt {
1956
1960
  const { tagName: l, attributes: o, children: d } = a;
1957
1961
  let _ = l, h = o;
1958
1962
  if (l === "field") {
1959
- const { name: x, widget: I } = o;
1960
- if (I)
1961
- _ = I;
1963
+ const { name: x, widget: S } = o;
1964
+ if (S)
1965
+ _ = S;
1962
1966
  else if (x) {
1963
1967
  if (!this._fields[x])
1964
1968
  throw new Error(
@@ -2154,7 +2158,7 @@ const at = {
2154
2158
  date: "date",
2155
2159
  datetime: "datetime"
2156
2160
  };
2157
- class It {
2161
+ class St {
2158
2162
  constructor(t, e, s = 8) {
2159
2163
  /**
2160
2164
  * Object containing the specific fields for primary and secondary search fields
@@ -2213,7 +2217,7 @@ class It {
2213
2217
  return this.advancedSearchContainer.findById(t);
2214
2218
  }
2215
2219
  }
2216
- const Et = ({
2220
+ const It = ({
2217
2221
  domain: i,
2218
2222
  widgetFieldName: t
2219
2223
  }) => {
@@ -2228,7 +2232,7 @@ const Et = ({
2228
2232
  n.length - 1
2229
2233
  )) : (o = n, d = "id"), o === t && e.push([d, a, l]);
2230
2234
  }), e;
2231
- }, St = (i) => typeof i != "string" ? [] : i.replace(/[()[\]]/g, "").split(",").map((t) => t.trim()).filter((t) => !t.includes("'"));
2235
+ }, Et = (i) => typeof i != "string" ? [] : i.replace(/[()[\]]/g, "").split(",").map((t) => t.trim()).filter((t) => !t.includes("'"));
2232
2236
  class lt {
2233
2237
  constructor(t) {
2234
2238
  r(this, "_action_id", null);
@@ -2525,12 +2529,12 @@ function mt({
2525
2529
  for (let l = 0; l < a.length - 1; l++) {
2526
2530
  const o = a[l], d = a[l + 1];
2527
2531
  if (!ue([o, d], n)) {
2528
- const _ = T(o, S(n)).add(
2532
+ const _ = T(o, E(n)).add(
2529
2533
  e,
2530
2534
  n
2531
- ), h = T(d, S(n));
2535
+ ), h = T(d, E(n));
2532
2536
  for (; _.isBefore(h); )
2533
- s.push(_.format(S(n))), _.add(e, n);
2537
+ s.push(_.format(E(n))), _.add(e, n);
2534
2538
  }
2535
2539
  }
2536
2540
  return s;
@@ -2604,7 +2608,7 @@ function xt(i) {
2604
2608
  }
2605
2609
  function ue(i, t) {
2606
2610
  let e = !1;
2607
- const s = S(t);
2611
+ const s = E(t);
2608
2612
  if (i.length === 0)
2609
2613
  return !1;
2610
2614
  if (i.length === 1)
@@ -2625,7 +2629,7 @@ function he({
2625
2629
  e[o] || (e[o] = []), e[o].push(s);
2626
2630
  }), e;
2627
2631
  }
2628
- function S(i) {
2632
+ function E(i) {
2629
2633
  switch (i) {
2630
2634
  case "days":
2631
2635
  return "YYYY-MM-DD";
@@ -2669,7 +2673,7 @@ const wt = {
2669
2673
  fields: e
2670
2674
  });
2671
2675
  Object.keys(F).forEach((v) => {
2672
- const x = F[v].entries, I = F[v].label, ge = N({
2676
+ const x = F[v].entries, S = F[v].label, ge = N({
2673
2677
  entries: x,
2674
2678
  fields: e,
2675
2679
  fieldName: c.name
@@ -2680,7 +2684,7 @@ const wt = {
2680
2684
  a.push({
2681
2685
  x: p || !1,
2682
2686
  value: me,
2683
- type: I,
2687
+ type: S,
2684
2688
  operator: c.operator,
2685
2689
  stacked: c.stacked
2686
2690
  });
@@ -2752,26 +2756,26 @@ function Y({
2752
2756
  case "count":
2753
2757
  return t.length;
2754
2758
  case "+":
2755
- return E(
2759
+ return I(
2756
2760
  t.reduce(function(e, s) {
2757
2761
  return e + s;
2758
2762
  })
2759
2763
  );
2760
2764
  case "-":
2761
- return E(
2765
+ return I(
2762
2766
  t.reduce(function(e, s) {
2763
2767
  return e - s;
2764
2768
  })
2765
2769
  );
2766
2770
  case "*":
2767
- return E(
2771
+ return I(
2768
2772
  t.reduce(function(e, s) {
2769
2773
  return e * s;
2770
2774
  })
2771
2775
  );
2772
2776
  case "avg": {
2773
2777
  const s = t.reduce((n, a) => n + a, 0) / t.length || 0;
2774
- return E(s);
2778
+ return I(s);
2775
2779
  }
2776
2780
  case "min":
2777
2781
  return Math.min(...t);
@@ -2779,7 +2783,7 @@ function Y({
2779
2783
  return Math.max(...t);
2780
2784
  }
2781
2785
  }
2782
- function E(i) {
2786
+ function I(i) {
2783
2787
  return Math.round((i + Number.EPSILON) * 100) / 100;
2784
2788
  }
2785
2789
  function B({
@@ -2852,7 +2856,7 @@ export {
2852
2856
  Ke as Email,
2853
2857
  f as Field,
2854
2858
  R as Float,
2855
- Ee as FloatTime,
2859
+ Ie as FloatTime,
2856
2860
  Tt as Form,
2857
2861
  oe as Graph,
2858
2862
  de as GraphAxis,
@@ -2862,10 +2866,10 @@ export {
2862
2866
  ht as GraphXAxis,
2863
2867
  ut as GraphYAxis,
2864
2868
  Pe as Group,
2865
- Se as HTMLPreview,
2869
+ Ee as HTMLPreview,
2866
2870
  Ne as Image,
2867
2871
  Ge as Indicator,
2868
- Ie as Integer,
2872
+ Se as Integer,
2869
2873
  H as JSONField,
2870
2874
  Z as Label,
2871
2875
  Te as Many2one,
@@ -2879,7 +2883,7 @@ export {
2879
2883
  qe as Radio,
2880
2884
  Me as Reference,
2881
2885
  at as SearchFieldTypes,
2882
- It as SearchFilter,
2886
+ St as SearchFilter,
2883
2887
  z as Selection,
2884
2888
  je as Separator,
2885
2889
  L as Spinner,
@@ -2896,8 +2900,8 @@ export {
2896
2900
  jt as graphProcessor,
2897
2901
  ne as parseContext,
2898
2902
  Wt as parseContextFields,
2899
- St as parseDomainFields,
2903
+ Et as parseDomainFields,
2900
2904
  Yt as parseGraph,
2901
- Et as transformDomainForChildWidget
2905
+ It as transformDomainForChildWidget
2902
2906
  };
2903
2907
  //# sourceMappingURL=ooui.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ooui.es.js","sources":["../src/helpers/attributeParser.ts","../src/helpers/nodeParser.ts","../src/Widget.ts","../src/Field.ts","../src/Avatar.ts","../src/NewLine.ts","../src/Label.ts","../src/Container.ts","../src/ContainerWidget.ts","../src/Notebook.ts","../src/Spinner.ts","../src/Page.ts","../src/Group.ts","../src/Button.ts","../src/ButtonGroup.ts","../src/Char.ts","../src/Text.ts","../src/Selection.ts","../src/Many2one.ts","../src/Markdown.ts","../src/Boolean.ts","../src/Integer.ts","../src/Float.ts","../src/FloatTime.ts","../src/HTMLPreview.ts","../src/ProgressBar.ts","../src/Date.ts","../src/DateTime.ts","../src/One2many.ts","../src/Separator.ts","../src/Reference.ts","../src/Binary.ts","../src/Image.ts","../src/FiberGrid.ts","../src/Timeline.ts","../src/Indicator.ts","../src/MultiCheckbox.ts","../src/Tags.ts","../src/Tag.ts","../src/Radio.ts","../src/Switch.ts","../src/Steps.ts","../src/CodeEditor.ts","../src/Time.ts","../src/Alert.ts","../src/Comments.ts","../src/JSONField.ts","../src/Email.ts","../src/Carousel.ts","../src/ColorPicker.ts","../src/WidgetFactory.ts","../src/helpers/stateParser.ts","../src/helpers/fieldParser.ts","../src/helpers/contextParser.ts","../src/helpers/onChangeParser.ts","../src/helpers/widgetHelper.ts","../src/Form.ts","../src/Tree.ts","../src/SearchFilter.ts","../src/helpers/domainParser.ts","../src/DashboardItem.ts","../src/Dashboard.ts","../src/Graph/Graph.ts","../src/Graph/GraphIndicator.ts","../src/Graph/GraphIndicatorField.ts","../src/Graph/graphHelper.ts","../src/Graph/GraphChart.ts","../src/Graph/GraphFactory.ts","../src/Graph/GraphAxis.ts","../src/Graph/GraphYAxis.ts","../src/Graph/GraphXAxis.ts","../src/Graph/processor/fieldUtils.ts","../src/Graph/processor/timerangeHelper.ts","../src/Graph/processor/graphProcessor.ts"],"sourcesContent":["import { decode } from \"html-entities\";\nimport {\n Condition,\n FieldComparisonParams,\n FieldComparisonResult,\n evaluateCondition as evaluateConscheckCondition,\n} from \"@gisce/conscheck\";\n\ntype JsonAttributes = Record<string, Condition>;\n\nexport const isTrue = (value: string | boolean | number = false) => {\n value = JSON.parse(value.toString().toLowerCase());\n return +value > 0;\n};\n\nconst evaluateCondition = ({\n entry,\n values,\n fields,\n}: {\n entry: any[];\n values: any;\n fields: any;\n}) => {\n let [fieldName, operator, expectedValue] = entry;\n let valueInObject = values[fieldName];\n\n const comparisonResult = evaluateFieldComparison({\n fieldName,\n valueInObject,\n expectedValue,\n fields,\n });\n\n if (comparisonResult.directOutcome !== undefined) {\n return comparisonResult.directOutcome;\n }\n if (comparisonResult.modifiedValueInObject !== null) {\n valueInObject = comparisonResult.modifiedValueInObject;\n }\n if (comparisonResult.modifiedExpectedValue !== null) {\n expectedValue = comparisonResult.modifiedExpectedValue;\n }\n\n switch (operator.toLowerCase()) {\n case \"=\":\n case \"==\":\n return valueInObject == expectedValue;\n case \"<>\":\n case \"!=\":\n return valueInObject != expectedValue;\n case \">\":\n return valueInObject > expectedValue;\n case \">=\":\n return valueInObject >= expectedValue;\n case \"<\":\n return valueInObject < expectedValue;\n case \"<=\":\n return valueInObject <= expectedValue;\n case \"in\":\n return expectedValue.includes(valueInObject);\n case \"not in\":\n return !expectedValue.includes(valueInObject);\n default:\n return false;\n }\n};\n\nconst replaceEntities = (string: string): string => {\n return decode(string, { level: \"xml\" });\n};\n\nconst evaluateFieldComparison = ({\n fieldName,\n valueInObject,\n expectedValue,\n fields = {},\n}: FieldComparisonParams & { fields: any }): FieldComparisonResult => {\n const result: FieldComparisonResult = {\n modifiedValueInObject: valueInObject,\n modifiedExpectedValue: null,\n directOutcome: undefined,\n };\n\n if (fields[fieldName] === undefined) {\n return {\n modifiedValueInObject: null,\n modifiedExpectedValue: null,\n directOutcome: false,\n };\n }\n\n if (\n valueInObject === undefined &&\n fields[fieldName].type !== \"boolean\" &&\n fields[fieldName].type !== \"many2one\" &&\n fields[fieldName].type !== \"selection\" &&\n typeof expectedValue !== \"boolean\"\n ) {\n return {\n modifiedValueInObject: null,\n modifiedExpectedValue: null,\n directOutcome: false,\n };\n }\n\n result.modifiedValueInObject =\n fields[fieldName].type === \"boolean\" ? !!valueInObject : valueInObject;\n\n if (\n fields[fieldName].type === \"many2one\" &&\n expectedValue === false &&\n valueInObject === undefined\n ) {\n result.modifiedExpectedValue = undefined;\n } else {\n if (result.modifiedValueInObject === undefined) {\n result.modifiedValueInObject = false;\n } else if (\n Array.isArray(result.modifiedValueInObject) &&\n result.modifiedValueInObject[0] !== undefined\n ) {\n result.modifiedValueInObject = result.modifiedValueInObject[0];\n }\n\n if (result.modifiedValueInObject === null) {\n result.modifiedValueInObject = false;\n }\n }\n\n if (\n fields[fieldName].type === \"many2one\" &&\n Array.isArray(result.modifiedValueInObject) &&\n result.modifiedValueInObject[0] === undefined\n ) {\n result.modifiedValueInObject = false;\n }\n\n if (\n fields[fieldName].type === \"boolean\" &&\n (expectedValue === 0 || expectedValue === 1)\n ) {\n result.modifiedExpectedValue = expectedValue !== 0;\n }\n\n return result;\n};\n\nconst parseAttributes = ({\n attrs,\n values,\n fields,\n widgetType,\n}: {\n attrs: string;\n values: any;\n fields: any;\n widgetType?: string;\n}) => {\n const leftP = attrs.replace(/\\(/g, \"[\");\n const rightP = leftP.replace(/\\)/g, \"]\");\n const clearQuotes = rightP.replace(/'/g, '\"');\n const replaceTrue = clearQuotes.replace(/True/g, \"true\");\n const replaceFalse = replaceTrue.replace(/False/g, \"false\");\n const replaceTags = replaceEntities(replaceFalse);\n const parsedObject = JSON.parse(replaceTags);\n const newAttributes: any = {};\n\n for (const attrField of Object.keys(parsedObject)) {\n const entries = parsedObject[attrField];\n const evaluatedEntries: boolean[] = entries.map((entry: any) => {\n return evaluateCondition({ entry, values, fields });\n });\n const attrIsTrue = evaluatedEntries.every((i: boolean) => i);\n\n if (attrIsTrue) {\n newAttributes[attrField] = true;\n } else if (\n attrField === \"readonly\" &&\n !attrIsTrue &&\n widgetType === \"button\"\n ) {\n // Buttons with readonly false will have to override the default readonly\n newAttributes[attrField] = false;\n }\n }\n\n return newAttributes;\n};\n\nexport const parseWidgetProps = (widget_props: string | object): object => {\n if (widget_props === undefined) {\n return {};\n }\n if (typeof widget_props === \"string\") {\n try {\n return JSON.parse(widget_props.replace(/'/g, '\"'));\n } catch (err) {\n console.error(\"Error parsing widget_props\");\n return {};\n }\n } else {\n return widget_props;\n }\n};\n\nexport const parseJsonAttributes = ({\n attrs,\n values,\n fields,\n widgetType,\n}: {\n attrs: string;\n values: any;\n fields: any;\n widgetType?: string;\n}) => {\n try {\n const attrsWithReplacedEntities = replaceEntities(attrs);\n const jsonAttributes = JSON.parse(\n attrsWithReplacedEntities.replace(/'/g, '\"'),\n ) as JsonAttributes;\n const finalAttributes: Record<string, boolean> = {};\n for (const attrField of Object.keys(jsonAttributes)) {\n const evaluatedEntry = evaluateConscheckCondition({\n object: values,\n condition: jsonAttributes[attrField],\n evaluateFieldComparison: ({\n fieldName,\n valueInObject,\n expectedValue,\n }: FieldComparisonParams) => {\n return evaluateFieldComparison({\n fieldName,\n valueInObject,\n expectedValue,\n fields,\n });\n },\n });\n\n if (evaluatedEntry) {\n finalAttributes[attrField] = true;\n } else if (\n attrField === \"readonly\" &&\n !evaluatedEntry &&\n widgetType === \"button\"\n ) {\n // Buttons with readonly false will have to override the default readonly\n finalAttributes[attrField] = false;\n }\n }\n\n return finalAttributes;\n } catch (error) {\n console.error(error);\n if (error instanceof SyntaxError) {\n throw new Error(\n \"Error parsing new json_attrs. Original string: \" + attrs,\n );\n } else {\n throw error;\n }\n }\n};\n\nconst evaluateAttributes = ({\n tagAttributes,\n values,\n fields,\n widgetType,\n fallbackMode = true,\n}: {\n tagAttributes: any;\n values: any;\n fields: any;\n widgetType?: string;\n fallbackMode?: boolean;\n}) => {\n let finalTagAttributes = {};\n\n if (tagAttributes.json_attrs) {\n try {\n finalTagAttributes = parseJsonAttributes({\n attrs: tagAttributes.json_attrs,\n values,\n fields,\n widgetType,\n });\n } catch (error) {\n if (fallbackMode && tagAttributes.attrs) {\n finalTagAttributes = parseAttributes({\n attrs: tagAttributes.attrs,\n values,\n fields,\n widgetType,\n });\n } else {\n throw error;\n }\n }\n } else if (tagAttributes.attrs) {\n finalTagAttributes = parseAttributes({\n attrs: tagAttributes.attrs,\n values,\n fields,\n widgetType,\n });\n }\n\n return {\n ...tagAttributes,\n ...finalTagAttributes,\n attrs: undefined,\n json_attrs: undefined,\n };\n};\n\nexport { evaluateAttributes, replaceEntities };\n","type ParsedNode = {\n tagName: string;\n attributes: any;\n children: ParsedNode[];\n};\n\nconst parseBoolAttribute = (attr: any): boolean => {\n if (\n attr === 1 ||\n attr === \"1\" ||\n attr === true ||\n attr === \"True\" ||\n attr === \"true\"\n ) {\n return true;\n } else {\n return false;\n }\n};\n\nexport { ParsedNode, parseBoolAttribute };\n","import { replaceEntities, parseWidgetProps } from \"./helpers/attributeParser\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\nabstract class Widget {\n /**\n * Default colspan\n */\n static _defaultColspan: number = 1;\n static get defaultColspan() {\n return Widget._defaultColspan;\n }\n\n static set defaultColspan(value) {\n Widget._defaultColspan = value;\n }\n\n /**\n * Determines if widget is read only (default is undefined)\n */\n _readOnly: boolean | undefined;\n get readOnly(): boolean | undefined {\n return this._readOnly;\n }\n\n set readOnly(value: boolean | undefined) {\n this._readOnly = value;\n }\n\n /**\n * Column span (default is 1)\n */\n _colspan: number;\n get colspan(): number {\n return this._colspan;\n }\n\n set colspan(value: number) {\n this._colspan = +value;\n }\n\n /**\n * Invisible fields (default is false)\n */\n _invisible: boolean;\n get invisible(): boolean {\n return this._invisible;\n }\n\n set invisible(value: boolean) {\n this._invisible = value;\n }\n\n /**\n * Widget type\n */\n _type: string = \"\";\n get type(): string {\n return this._type;\n }\n\n set type(value: string) {\n this._type = value;\n }\n\n /**\n * Context\n */\n _context: any;\n get context(): any {\n return this._context;\n }\n\n set context(value: any) {\n this._context = value;\n }\n\n /**\n * Domain\n */\n _domain?: string;\n get domain(): string | undefined {\n return this._domain;\n }\n\n set domain(value: string | undefined) {\n this._domain = value;\n }\n\n /**\n * Unique key for widget\n */\n _key?: string;\n get key(): string | undefined {\n return this._key;\n }\n\n set key(value: string | undefined) {\n this._key = value;\n }\n\n _parsedWidgetProps: any = {};\n get parsedWidgetProps(): any {\n return this._parsedWidgetProps;\n }\n\n set parsedWidgetProps(value: any) {\n this._parsedWidgetProps = value;\n }\n\n _isFunction: boolean | undefined;\n get isFunction(): boolean | undefined {\n return this._isFunction;\n }\n\n set isFunction(value: boolean | undefined) {\n this._isFunction = value;\n }\n\n /**\n * Base type of the field\n */\n _fieldType: string = \"\";\n get fieldType(): string {\n return this._fieldType;\n }\n\n constructor(props?: any) {\n this._colspan = Widget._defaultColspan;\n this._invisible = false;\n\n if (props) {\n if (props.colspan) {\n this._colspan = +props.colspan;\n }\n if (props.readonly !== undefined) {\n this._readOnly = parseBoolAttribute(props.readonly);\n }\n if (props.invisible) {\n if (\n props.invisible === 1 ||\n props.invisible === \"1\" ||\n props.invisible === true\n ) {\n this._invisible = true;\n }\n }\n if (props.type) {\n this._type = props.type;\n }\n if (props.context) {\n this._context = props.context;\n }\n if (props.domain) {\n if (typeof props.domain !== \"string\") {\n this._domain = replaceEntities(JSON.stringify(props.domain));\n } else {\n this._domain = replaceEntities(props.domain);\n }\n }\n if (props.type) {\n this._fieldType = props.fieldsWidgetType;\n }\n if (props.widget_props) {\n this._parsedWidgetProps = parseWidgetProps(props.widget_props);\n }\n if (props.key) {\n this._key = props.key;\n }\n if (props.is_function) {\n this._isFunction = props.is_function;\n }\n }\n }\n\n abstract findById(id: string): Widget | null;\n}\n\nexport default Widget;\n","import Widget from \"./Widget\";\nimport { replaceEntities, isTrue } from \"./helpers/attributeParser\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\nclass Field extends Widget {\n /**\n * Field identifier\n *\n * Corresponds to the field's name attribute from xml\n */\n _id: string = \"\";\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n }\n\n /**\n * Label\n */\n _label: string = \"\";\n get label(): string {\n return this._label;\n }\n\n set label(value: string) {\n this._label = value;\n }\n\n /**\n * No label\n *\n * This field hasn't got to show the label\n *\n */\n _nolabel: boolean = false;\n get nolabel(): boolean {\n return this._nolabel;\n }\n\n set nolabel(value: boolean) {\n this._nolabel = value;\n }\n\n /**\n *\n * Required field\n *\n */\n _required: boolean = false;\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = value;\n }\n\n /**\n * Tooltip\n */\n _tooltip?: string;\n get tooltip(): string | undefined {\n return this._tooltip;\n }\n\n set tooltip(value: string | undefined) {\n this._tooltip = value;\n }\n\n /**\n * Tooltip inline\n */\n _tooltipInline: boolean = false;\n get tooltipInline(): boolean {\n return this._tooltipInline;\n }\n\n set tooltipInline(value: boolean) {\n this._tooltipInline = value;\n }\n\n /**\n * Activated (default is true)\n */\n _activated: boolean = true;\n get activated(): boolean {\n return this._activated;\n }\n\n set activated(value: boolean) {\n this._activated = value;\n }\n\n /**\n * Sum - sum parameter (label), this will mean that we have to sum this field in the tree\n */\n _sum?: string;\n get sum(): string | undefined {\n return this._sum;\n }\n\n set sum(value: string | undefined) {\n this._sum = value;\n }\n\n get suffix(): string {\n return this._parsedWidgetProps.suffix || \"\";\n }\n\n get prefix(): string {\n return this._parsedWidgetProps.prefix || \"\";\n }\n\n /**\n * Values and keys\n */\n _selectionValues: Map<string, string> = new Map([]);\n get selectionValues(): Map<string, string> {\n return this._selectionValues;\n }\n\n set selectionValues(value: Map<string, string>) {\n this._selectionValues = value;\n }\n\n _autoRefresh?: boolean = false;\n get autoRefresh(): boolean {\n return this._autoRefresh ?? false;\n }\n\n set autoRefresh(value: boolean) {\n this._autoRefresh = value;\n }\n\n get readOnly(): boolean | undefined {\n if (this.autoRefresh) {\n return true;\n } else {\n return super.readOnly;\n }\n }\n\n set readOnly(value: boolean | undefined) {\n super.readOnly = value;\n }\n\n _raw_props: any;\n get raw_props(): any {\n return this._raw_props;\n }\n\n constructor(props: any) {\n super(props);\n\n // Activated by default\n this._activated = true;\n\n if (props) {\n this._raw_props = props;\n if (props.name) {\n this._id = props.name;\n }\n\n if (props.activated) {\n this._activated = props.activated;\n }\n\n if (props.string) {\n this._label = replaceEntities(props.string);\n }\n\n if (props.help) {\n this._tooltip = replaceEntities(props.help);\n }\n\n if (\n props.nolabel &&\n (props.nolabel === \"1\" ||\n (typeof props.nolabel === \"boolean\" && props.nolabel === true))\n ) {\n this._nolabel = true;\n }\n\n if (\n props.required &&\n (props.required === \"1\" ||\n props.required === true ||\n props.required === \"True\")\n ) {\n this._required = true;\n }\n\n if (props.sum) {\n this._sum = replaceEntities(props.sum);\n }\n\n if (props.selection) {\n this._selectionValues = new Map(props.selection);\n }\n\n if (props.help_inline) {\n this.tooltipInline = isTrue(props.help_inline);\n }\n if (props.autorefresh) {\n this.autoRefresh = parseBoolAttribute(props.autorefresh);\n }\n }\n }\n\n /**\n * Returns this instance in case this id matches param id.\n * @param {string} id id (name) to find\n */\n findById(id: string): Field | null {\n if (this._id === id) {\n return this;\n }\n return null;\n }\n}\n\nexport default Field;\n","import Field from \"./Field\";\n\nclass Avatar extends Field {}\n\nexport default Avatar;\n","import Widget from \"./Widget\";\n\nclass NewLine extends Widget {\n findById(id: string): null {\n return null;\n }\n}\n\nexport default NewLine;\n","import Field from \"./Field\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\ntype LabelType = \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"default\";\ntype LabelSize = 1 | 2 | 3 | 4 | 5 | undefined;\n\nclass Label extends Field {\n /**\n * Label text\n */\n _text: string = \"\";\n get text(): string {\n return this._text;\n }\n\n set text(value: string) {\n this._text = value;\n }\n\n /**\n * Align text\n */\n _align: string = \"left\";\n get align(): string {\n return this._align;\n }\n\n set align(value: string) {\n this._align = value;\n }\n\n /**\n * Label type\n */\n _labelType: LabelType = \"default\";\n get labelType(): LabelType {\n return this._labelType;\n }\n\n set labelType(value: LabelType) {\n this._labelType = value;\n }\n\n /**\n * Label size\n */\n _labelSize: LabelSize = undefined;\n get labelSize(): LabelSize {\n return this._labelSize;\n }\n\n set labelSize(value: LabelSize) {\n this._labelSize = value;\n }\n\n get humanDate(): boolean {\n return parseBoolAttribute(this._parsedWidgetProps?.human_date ?? false);\n }\n\n /**\n * Id of the field that this label goes with. Null if it's an independent label\n */\n _fieldForLabel: string | null = null;\n get fieldForLabel(): string | null {\n return this._fieldForLabel;\n }\n\n set fieldForLabel(value: string | null) {\n this._fieldForLabel = value;\n }\n\n constructor(props?: any) {\n super({ ...props, nolabel: true });\n\n if (props?.fieldForLabel) {\n this._fieldForLabel = props.fieldForLabel;\n }\n if (props.widget_props) {\n if (this.parsedWidgetProps.label_type) {\n this.labelType = this.parsedWidgetProps.label_type;\n }\n if (this.parsedWidgetProps.label_size) {\n this.labelSize = this.parsedWidgetProps.label_size;\n }\n }\n }\n}\n\nexport default Label;\n","import Field from \"./Field\";\nimport NewLine from \"./NewLine\";\nimport Widget from \"./Widget\";\nimport Label from \"./Label\";\n\ntype AddWidgetOptions = {\n addLabel: boolean;\n};\n\nclass Container {\n /**\n * Number of columns the container is divided\n */\n _columns: number;\n get columns(): number {\n return this._columns;\n }\n\n set columns(value: number) {\n this._columns = value;\n }\n\n /**\n * Number of columns to use\n */\n _colspan: number;\n get colspan(): number {\n return this._colspan;\n }\n\n set colspan(value: number) {\n this._colspan = value;\n }\n\n /**\n * Number of rows\n */\n _rows: Widget[][];\n get rows(): Widget[][] {\n return this._rows;\n }\n\n set rows(value: Widget[][]) {\n this._rows = value;\n }\n\n _index: number;\n get index(): number {\n return this._index;\n }\n\n /**\n * Determines if widget is read only (default is false)\n */\n _readOnly: boolean;\n get readOnly(): boolean {\n return this._readOnly;\n }\n\n set readOnly(value: boolean) {\n this._readOnly = value;\n }\n\n /**\n * Unique key for container\n */\n _key?: string;\n get key(): string | undefined {\n return this._key;\n }\n\n set key(value: string | undefined) {\n this._key = value;\n }\n\n constructor(\n columns: number = 4,\n colspan: number = 6,\n readOnly: boolean = false,\n key: string | undefined = undefined,\n ) {\n this._columns = columns;\n this._colspan = colspan;\n this._rows = [[]];\n this._index = 0;\n this._readOnly = readOnly;\n this._key = key;\n }\n\n /**\n * Returns the next free position\n */\n freePosition(): number {\n const span = this._rows[this._index]\n .filter((el) => {\n return !el.invisible;\n })\n .reduce((prev, current) => {\n return prev + current.colspan;\n }, 0);\n return this._columns - span;\n }\n\n addWidget(widget: Widget, options?: AddWidgetOptions) {\n const widgetsToAdd: Widget[] = [];\n const addLabel = options ? options.addLabel : true;\n\n if (widget instanceof NewLine) {\n this._rows.push([]);\n this._index++;\n return;\n }\n\n if (widget.colspan > this._columns) {\n // Widget colspan is greater than container columns, so we change widget\n // colspan to fit container columns.\n widget.colspan = this._columns;\n }\n\n // If the container is set to readonly, reflect it to its children\n widget.readOnly = widget.readOnly || this.readOnly;\n\n // For fields without nolabel we add a preceding label widget\n if (addLabel && widget instanceof Field && !widget.nolabel) {\n if (widget.colspan > 1) {\n widget.colspan -= 1; // We substract one colspan for the corresponding label\n }\n\n const label = new Label({\n name: widget.id + \"_label\",\n string: widget.label,\n invisible: widget.invisible,\n help: widget.tooltip,\n fieldForLabel: widget.id,\n key: `${widget.key!}-label`,\n });\n label.type = \"label\";\n\n widgetsToAdd.push(label);\n widgetsToAdd.push(widget);\n } else {\n widgetsToAdd.push(widget);\n }\n\n const widgetsColspan = widgetsToAdd.reduce(\n (accumulator: number, currentWidget: Widget) => {\n return accumulator + currentWidget.colspan;\n },\n 0,\n );\n\n if (widgetsColspan > this.freePosition()) {\n this._rows.push([]);\n this._index++;\n }\n\n this._rows[this._index] = this._rows[this._index].concat(widgetsToAdd);\n }\n\n /**\n * Traverses children to find a matching container or widget with the exact same id.\n * @param {string} id id (name) of the field or container to find\n */\n findById(id: string): Widget | null {\n let r: Widget | null = null;\n if (this._rows?.length) {\n this._rows.forEach((row) => {\n if (r) {\n // Item has been found.\n return;\n }\n\n if (row?.length) {\n row.forEach((item) => {\n if (r) {\n // Item has been found.\n return;\n }\n if (item) {\n r = item.findById(id);\n }\n });\n }\n });\n }\n return r;\n }\n}\n\nexport default Container;\n","import Widget from \"./Widget\";\nimport Container from \"./Container\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass ContainerWidget extends Widget {\n /**\n * Field identifier\n *\n * Corresponds to the field's name attribute from xml\n */\n _id: string = \"\";\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n }\n\n static _defaultColspan: number = 6;\n static get defaultColspan(): number {\n return ContainerWidget._defaultColspan;\n }\n\n static set defaultColspan(value: number) {\n ContainerWidget._defaultColspan = value;\n }\n\n /**\n * Container\n */\n _container: Container;\n get container(): Container {\n return this._container;\n }\n\n set container(value: Container) {\n this._container = value;\n }\n\n get colspan(): number {\n return this._container.colspan;\n }\n\n set colspan(value: number) {\n this._container.colspan = +value;\n }\n\n /**\n * Must expand widget\n */\n _mustExpand: boolean = false;\n get mustExpand(): boolean {\n return this._mustExpand;\n }\n\n set mustExpand(value: boolean) {\n this._mustExpand = value;\n }\n\n /**\n * Container label\n */\n _label: string = \"\";\n get label(): string {\n return this._label;\n }\n\n set label(value: string) {\n this._label = value;\n }\n\n constructor(props?: any) {\n super(props);\n\n this._container = new Container(\n props?.col,\n ContainerWidget._defaultColspan,\n this.readOnly,\n props?.key,\n );\n\n if (props) {\n if (props.name) {\n this._id = props.name;\n }\n\n if (props.colspan) {\n this._container.colspan = +props.colspan;\n } else {\n this._mustExpand = true;\n }\n\n if (props.string) {\n this._label = replaceEntities(props.string);\n }\n }\n }\n\n /**\n * Calls container's findById method to find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Widget | null {\n if (id === this.id) {\n return this;\n }\n\n return this.container.findById(id);\n }\n}\n\nexport default ContainerWidget;\n","import ContainerWidget from \"./ContainerWidget\";\nimport Page from \"./Page\";\n\nexport type TabPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nclass Notebook extends ContainerWidget {\n static _defaultColspan: number = 3;\n static get defaultColspan(): number {\n return Notebook._defaultColspan;\n }\n\n static set defaultColspan(value: number) {\n Notebook._defaultColspan = value;\n }\n\n _tabPosition: TabPosition = \"top\";\n get tabPosition(): TabPosition {\n return this._tabPosition;\n }\n\n set tabPosition(value: TabPosition) {\n this._tabPosition = value;\n }\n\n _pages: Page[] = [];\n get pages(): Page[] {\n return [].concat.apply([], this._container.rows) as Page[];\n }\n\n constructor(props: any) {\n super(props);\n this.colspan = Notebook._defaultColspan;\n\n if (props) {\n if (props.colspan) {\n this.colspan = props.colspan;\n }\n if (props.tabpos) {\n this._tabPosition = props.tabpos;\n }\n }\n }\n}\n\nexport default Notebook;\n","import ContainerWidget from \"./ContainerWidget\";\n\nclass Spinner extends ContainerWidget {\n _loading = false;\n get loading(): boolean {\n return this._loading;\n }\n\n set loading(value: boolean) {\n this._loading = value;\n }\n\n constructor(props?: any) {\n super(props);\n if (props) {\n if (props.loading) {\n this._loading = props.loading;\n }\n }\n }\n}\n\nexport default Spinner;\n","import Spinner from \"./Spinner\";\n\nclass Page extends Spinner {\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props.icon) {\n this._icon = props.icon;\n }\n }\n}\n\nexport default Page;\n","import Spinner from \"./Spinner\";\n\nclass Group extends Spinner {\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n _height: number | undefined;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n _backgroundColor: string | undefined = undefined;\n get backgroundColor(): string | undefined {\n return this._backgroundColor;\n }\n\n set backgroundColor(value: string | undefined) {\n this._backgroundColor = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props) {\n if (props.icon) {\n this._icon = props.icon;\n }\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n console.log(\"Error parsing height\");\n this._height = undefined;\n }\n }\n }\n if (this._parsedWidgetProps?.backgroundColor) {\n this._backgroundColor = this._parsedWidgetProps.backgroundColor;\n }\n }\n}\n\nexport default Group;\n","import Field from \"./Field\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass Button extends Field {\n /**\n * Type\n */\n _buttonType: \"workflow\" | \"action\" | \"object\" | \"cancel\" = \"workflow\";\n get buttonType() {\n return this._buttonType;\n }\n\n set buttonType(value) {\n this._buttonType = value;\n }\n\n /**\n * Button caption\n */\n _caption: string = \"\";\n get caption(): string {\n return this._caption;\n }\n\n set caption(value: string) {\n this._caption = value;\n }\n\n /**\n * Button icon\n */\n _icon: string | undefined;\n get icon(): string | undefined {\n return this._icon;\n }\n\n set icon(value: string | undefined) {\n this._icon = value;\n }\n\n /**\n * Confirm string for modal in button types workflow\n */\n _confirmMessage: string = \"\";\n get confirmMessage(): string {\n return this._confirmMessage;\n }\n\n set confirmMessage(value: string) {\n this._confirmMessage = value;\n }\n\n _primary: boolean = false;\n get primary(): boolean {\n return this._primary;\n }\n\n set primary(value: boolean) {\n this._primary = value;\n }\n\n _danger: boolean = false;\n get danger(): boolean {\n return this._danger;\n }\n\n set danger(value: boolean) {\n this._danger = value;\n }\n\n constructor(props: any) {\n super({\n ...props,\n nolabel: props?.nolabel !== undefined ? props.nolabel : true,\n });\n\n if (props) {\n if (props.string) {\n this._caption = replaceEntities(props.string);\n }\n\n if (props.buttonType) {\n this._buttonType = props.buttonType;\n }\n\n if (props.confirm) {\n this._confirmMessage = replaceEntities(props.confirm);\n }\n\n if (props.special && props.special === \"cancel\") {\n this._buttonType = \"cancel\";\n }\n\n if (props.icon) {\n this._icon = props.icon;\n }\n if (props.primary) {\n const primary = props.primary;\n if (primary === \"1\" || primary === 1 || primary === true) {\n this._primary = true;\n }\n }\n if (props.danger) {\n const danger = props.danger;\n if (danger === \"1\" || danger === 1 || danger === true) {\n this._danger = true;\n }\n }\n }\n }\n}\n\nexport default Button;\n","import Button from \"./Button\";\nimport ContainerWidget from \"./ContainerWidget\";\n\nclass ButtonGroup extends ContainerWidget {\n _defaultName: string = \"\";\n get defaultName(): string {\n return this._defaultName;\n }\n\n get defaultButton(): Button | undefined {\n const btn = this.buttons.find((button) => button.id === this.defaultName);\n return btn || this.buttons[0];\n }\n\n get colspan(): number {\n return this.defaultButton?.colspan || 1;\n }\n\n set colspan(value: number) {\n if (this.defaultButton) {\n this.defaultButton.colspan = value;\n }\n }\n\n get secondaryButtons(): Button[] {\n const btns = this.buttons.filter(\n (button) => button.id !== this.defaultButton?.id,\n );\n return btns;\n }\n\n get buttons(): Button[] {\n return this._container.rows.flat().filter((b) => !b.invisible) as Button[];\n }\n\n constructor(props: any) {\n super(props);\n if (props.default) {\n this._defaultName = props.default;\n }\n }\n}\n\nexport default ButtonGroup;\n","import Field from \"./Field\";\n\n/**\n * One-line input with a length limit.\n */\nclass Char extends Field {\n /**\n * Field place holder\n */\n _placeholder: string = \"\";\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n }\n\n get showCount(): boolean {\n return this.parsedWidgetProps.showCount || false;\n }\n\n /**\n * Field size\n */\n _size: number | undefined;\n get size(): number | undefined {\n return this._size;\n }\n\n set size(value: number | undefined) {\n this._size = value;\n }\n\n _isPassword: boolean = false;\n get isPassword(): boolean {\n return this._isPassword;\n }\n\n set isPassword(value: boolean) {\n this._isPassword = value;\n }\n\n _translatable: boolean = false;\n get translatable(): boolean {\n return this._translatable;\n }\n\n set translatable(value: boolean) {\n this._translatable = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.password) {\n this.isPassword = props.password === \"True\";\n }\n\n if (props.translate) {\n this.translatable = !!(\n props.translate === \"True\" || props.translate === true\n );\n }\n }\n }\n}\n\nexport default Char;\n","import Field from \"./Field\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\n/**\n * Multiline input with no length limit.\n */\nclass Text extends Field {\n /**\n * Field place holder\n */\n _placeholder: string = \"\";\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n }\n\n get showCount(): boolean {\n return this.parsedWidgetProps.showCount || false;\n }\n\n /**\n * Field size\n */\n _size: number | undefined;\n get size(): number | undefined {\n return this._size;\n }\n\n set size(value: number | undefined) {\n this._size = value;\n }\n\n /**\n * Must expand widget\n */\n _mustExpand: boolean = false;\n get mustExpand(): boolean {\n return this._mustExpand;\n }\n\n set mustExpand(value: boolean) {\n this._mustExpand = value;\n }\n\n /**\n * Height\n */\n _height: number | undefined;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n _translatable: boolean = false;\n get translatable(): boolean {\n return this._translatable;\n }\n\n set translatable(value: boolean) {\n this._translatable = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.placeholder) {\n this._placeholder = replaceEntities(props.placeholder);\n }\n\n if (!props.colspan) {\n this._mustExpand = true;\n }\n\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n this._height = undefined;\n }\n }\n\n if (props.translate) {\n this.translatable = !!(\n props.translate === \"True\" || props.translate === true\n );\n }\n if (props.size) {\n this.size = parseInt(props.size);\n }\n }\n }\n}\n\nexport default Text;\n","import Field from \"./Field\";\n\n/**\n * Selection field for key-value lists\n */\nclass Selection extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n }\n }\n}\n\nexport default Selection;\n","import Field from \"./Field\";\n\n/**\n * A many2one relationship field\n */\nclass Many2one extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n get showFolder(): boolean | undefined {\n return this.parsedWidgetProps.showFolder;\n }\n\n get showSearch(): boolean | undefined {\n return this.parsedWidgetProps.showSearch;\n }\n\n get showMenu(): boolean | undefined {\n return this.parsedWidgetProps.showMenu;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.relation) {\n this._relation = props.relation;\n }\n }\n }\n}\n\nexport default Many2one;\n","import Text from \"./Text\";\n\nclass Markdown extends Text {}\n\nexport default Markdown;\n","import Field from \"./Field\";\n\n/**\n * Boolean input\n */\nclass Boolean extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Boolean;\n","import Field from \"./Field\";\n\n/**\n * Integer input\n */\nclass Integer extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Integer;\n","import Field from \"./Field\";\n\n/**\n * Float input\n */\nclass Float extends Field {\n /**\n * Integer digits\n *\n * Number of integer digits that will be part of the float\n */\n _integerDigits: number = 16;\n get integerDigits(): number {\n return this._integerDigits;\n }\n\n set integerDigits(value: number) {\n this._integerDigits = value;\n }\n\n /**\n * Decimal digits\n *\n * Number of decimal digits that will be part of the float\n */\n _decimalDigits: number = 2;\n get decimalDigits(): number {\n return this._decimalDigits;\n }\n\n set decimalDigits(value: number) {\n this._decimalDigits = value;\n }\n\n constructor(props?: any) {\n super(props);\n\n if (props?.digits) {\n const [integers, decimals] = props.digits;\n this._integerDigits = integers;\n this._decimalDigits = decimals;\n }\n }\n}\n\nexport default Float;\n","import Float from \"./Float\";\n\n/**\n * FloatTime input\n */\nclass FloatTime extends Float {}\n\nexport default FloatTime;\n","import Field from \"./Field\";\n\nclass HTMLPreview extends Field {}\n\nexport default HTMLPreview;\n","import Float from \"./Float\";\n\n/**\n * ProgressBar input\n */\nclass ProgressBar extends Float {}\n\nexport default ProgressBar;\n","import Field from \"./Field\";\n\n/**\n * Date input\n */\nclass Date extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Date;\n","import Field from \"./Field\";\n\n/**\n * DateTime input\n */\nclass DateTime extends Field {\n _timezone: string | undefined = undefined;\n\n get timezone(): string | undefined {\n return this._timezone;\n }\n\n set timezone(value: string | undefined) {\n this._timezone = value;\n }\n\n constructor(props?: { timezone?: string } & any) {\n super(props);\n this._timezone = props?.timezone || undefined;\n }\n}\n\nexport default DateTime;\n","import Field from \"./Field\";\n\n/**\n * A One2Many relationship field\n */\nclass One2many extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n /**\n * Inv_field\n */\n _inv_field: string | undefined;\n get inv_field(): string | undefined {\n return this._inv_field;\n }\n\n set inv_field(value: string | undefined) {\n this._inv_field = value;\n }\n\n /**\n * Views\n */\n _views: any = null;\n get views(): any {\n return this._views;\n }\n\n set views(value: any) {\n this._views = value;\n }\n\n /**\n * Mode\n */\n _mode: string[] = [];\n get mode(): string[] {\n return this._mode;\n }\n\n set mode(value: string[]) {\n this._mode = value;\n }\n\n /**\n * Must expand widget\n */\n _mustExpand: boolean = false;\n get mustExpand(): boolean {\n return this._mustExpand;\n }\n\n set mustExpand(value: boolean) {\n this._mustExpand = value;\n }\n\n /**\n * Height\n */\n _height?: number;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n }\n\n /**\n * Infinite mode\n */\n _infinite: string | undefined = undefined;\n get infinite(): string | undefined {\n return this._infinite;\n }\n\n set infinite(value: string | undefined) {\n this._infinite = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.relation) {\n this._relation = props.relation;\n }\n\n if (props.mode) {\n this._mode = props.mode.split(\",\");\n }\n\n if (props.views) {\n this._views = props.views;\n }\n\n if (props.colspan) {\n this.colspan = props.colspan;\n } else {\n this._mustExpand = true;\n }\n\n if (props.inv_field) {\n this._inv_field = props.inv_field;\n }\n\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n this._height = undefined;\n }\n }\n\n if (props.widget_props) {\n this._infinite = props.widget_props.infinite;\n }\n }\n }\n}\n\nexport default One2many;\n","import Widget from \"./Widget\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass Separator extends Widget {\n /**\n * Label\n */\n _label: string = \"\";\n get label(): string {\n return this._label;\n }\n\n set label(value: string) {\n this._label = value;\n }\n\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.string) {\n this._label = replaceEntities(props.string);\n }\n if (props.icon) {\n this._icon = props.icon;\n }\n }\n }\n\n findById(id: string): null {\n return null;\n }\n}\n\nexport default Separator;\n","import Selection from \"./Selection\";\n\n/**\n * Reference field for key-value Many2One behaviour\n */\nclass Reference extends Selection {}\n\nexport default Reference;\n","import Field from \"./Field\";\n\n/**\n * Binary base64 field\n */\nclass Binary extends Field {\n /**\n * Filename field name\n */\n _filenameField: string = \"\";\n get filenameField(): string {\n return this._filenameField;\n }\n\n set filenameField(value: string) {\n this._filenameField = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.filename) {\n this._filenameField = props.filename;\n }\n }\n }\n}\n\nexport default Binary;\n","import Field from \"./Field\";\n\n/**\n * Image base64 field\n */\nclass Image extends Field {\n get showControls(): boolean {\n return this.parsedWidgetProps?.showControls ?? true;\n }\n}\n\nexport default Image;\n","import Field from \"./Field\";\n\nclass FiberGrid extends Field {\n constructor(props: any) {\n super(props);\n }\n}\n\nexport default FiberGrid;\n","import One2many from \"./One2many\";\n\nclass Timeline extends One2many {\n /**\n * Title field\n */\n _titleField: string;\n get titleField(): string {\n return this._titleField;\n }\n\n set titleField(value: string) {\n this._titleField = value;\n }\n\n /**\n * Summary field\n */\n _summaryField: string;\n get summaryField(): string {\n return this._summaryField;\n }\n\n set summaryField(value: string) {\n this._summaryField = value;\n }\n\n get iconField(): string {\n return this.parsedWidgetProps.iconField;\n }\n\n get colorField(): string {\n return this.parsedWidgetProps.colorField;\n }\n\n constructor(props: any) {\n super(props);\n this._titleField = \"\";\n this._summaryField = \"\";\n if (this._parsedWidgetProps) {\n this._titleField = this._parsedWidgetProps.titleField;\n this._summaryField = this.parsedWidgetProps.summaryField;\n }\n }\n}\n\nexport default Timeline;\n","import Selection from \"./Selection\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass Indicator extends Selection {\n _nolabel: boolean = true;\n\n _card: boolean;\n get card(): boolean {\n return this._card;\n }\n\n set card(value: boolean) {\n this._card = value;\n }\n\n _icon: string;\n get icon(): string {\n return this._icon;\n }\n\n set icon(value: string) {\n this._icon = value;\n }\n\n _suffix: string;\n get suffix(): string {\n return this._suffix;\n }\n\n set suffix(value: string) {\n this._suffix = value;\n }\n\n _color: string = \"\";\n get color(): string {\n return this._color;\n }\n\n /**\n * Action id\n */\n _actionId: number | undefined = undefined;\n get actionId(): number | undefined {\n return this._actionId;\n }\n\n set actionId(value: number | undefined) {\n this._actionId = value;\n }\n\n /**\n * Action field\n */\n _actionField: string | undefined = undefined;\n get actionField(): string | undefined {\n return this._actionField;\n }\n\n set actionField(value: string | undefined) {\n this._actionField = value;\n }\n\n _height: number | undefined;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n constructor(props: any) {\n super(props);\n this._card = false;\n this._icon = \"\";\n this._suffix = \"\";\n if (this._parsedWidgetProps) {\n this._card = this._parsedWidgetProps.card || false;\n this._icon = replaceEntities(this._parsedWidgetProps.icon) || \"\";\n this._suffix = this._parsedWidgetProps.suffix || \"\";\n this._color = replaceEntities(this._parsedWidgetProps.color) || \"\";\n }\n if (props) {\n if (props.action_id) {\n this._actionId = parseInt(props.action_id);\n }\n if (props.action_field) {\n this._actionField = props.action_field;\n }\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n}\n\nexport default Indicator;\n","import Field from \"./Field\";\n\n/**\n * A Tags widget\n */\nclass MultiCheckbox extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n /**\n * Inv_field\n */\n _inv_field: string | undefined;\n get inv_field(): string | undefined {\n return this._inv_field;\n }\n\n set inv_field(value: string | undefined) {\n this._inv_field = value;\n }\n\n /**\n * field to define the value to show\n */\n _field: string = \"name\";\n get field(): string {\n return this._field;\n }\n\n set field(value: string) {\n this._field = value;\n }\n\n _columns: number = 4;\n get columns(): number {\n return this._columns;\n }\n\n set columns(value: number) {\n this._columns = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.relation) {\n this._relation = props.relation;\n }\n\n if (props.inv_field) {\n this._inv_field = props.inv_field;\n }\n if (this.parsedWidgetProps.hasOwnProperty(\"field\")) {\n this._field = this.parsedWidgetProps.field;\n }\n if (this.parsedWidgetProps.columns) {\n this._columns = this.parsedWidgetProps.columns;\n }\n }\n }\n}\n\nexport default MultiCheckbox;\n","import MultiCheckbox from \"./MultiCheckbox\";\n\n/**\n * A Tags widget\n */\nclass Tags extends MultiCheckbox {}\n\nexport default Tags;\n","import Selection from \"./Selection\";\n\n/**\n * A Tag widget\n */\nclass Tag extends Selection {\n get colors(): any | \"auto\" {\n return this._parsedWidgetProps.colors || {};\n }\n\n get colorField(): string | null {\n return this._parsedWidgetProps?.colorField || null;\n }\n}\n\nexport default Tag;\n","import Selection from \"./Selection\";\n\ntype directionType = \"horizontal\" | \"vertical\";\n\n/**\n * Selection field for key-value lists\n */\nclass Radio extends Selection {\n /**\n * Define the direction\n */\n _direction: directionType = \"horizontal\";\n get direction(): directionType {\n return this._direction;\n }\n\n set direction(value: directionType) {\n this._direction = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (this.parsedWidgetProps.hasOwnProperty(\"direction\")) {\n this._direction = this.parsedWidgetProps.direction;\n }\n }\n }\n}\n\nexport default Radio;\n","import Boolean from \"./Boolean\";\n\n/**\n * Switch\n */\nclass Switch extends Boolean {}\n\nexport default Switch;\n","import Field from \"./Field\";\n\n/**\n * A many2one relationship field\n */\nclass Steps extends Field {\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n _errorField: string | null = null;\n get errorField(): string | null {\n return this._errorField;\n }\n\n set errorField(value: string | null) {\n this._errorField = value;\n }\n\n _lastStep: boolean | null = true;\n\n get lastStep(): boolean | null {\n return this._lastStep;\n }\n\n set lastStep(value: boolean | null) {\n this._lastStep = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.relation) {\n this._relation = props.relation;\n }\n\n if (this.parsedWidgetProps.hasOwnProperty(\"error_field\")) {\n this._errorField = this.parsedWidgetProps.error_field;\n }\n if (this.parsedWidgetProps.hasOwnProperty(\"last_step\")) {\n this._lastStep = this.parsedWidgetProps.last_step;\n }\n }\n }\n}\n\nexport default Steps;\n","import Text from \"./Text\";\n\n/**\n * A CodeEditor widget\n */\nclass CodeEditor extends Text {\n _lang: string | null = null;\n get lang(): string | null {\n return this._lang;\n }\n\n set lang(value: string | null) {\n this._lang = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (this.parsedWidgetProps.lang) {\n this._lang = this.parsedWidgetProps.lang;\n }\n }\n }\n}\n\nexport default CodeEditor;\n","import Field from \"./Field\";\n\n/**\n * Time input\n */\nclass Time extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Time;\n","import ContainerWidget from \"./ContainerWidget\";\nimport Button from \"./Button\";\n\ntype AlertType = \"success\" | \"warning\" | \"info\" | \"error\" | undefined;\n\nclass Alert extends ContainerWidget {\n /**\n * Alert type\n */\n _alertType: AlertType = \"info\";\n get alertType(): AlertType {\n return this._alertType;\n }\n\n set alertType(value: AlertType) {\n this._alertType = value;\n }\n\n _title: string = \"\";\n get title(): string {\n return this._title;\n }\n\n set title(value: string) {\n this._title = value;\n }\n\n _text: string = \"\";\n get text(): string {\n return this._text;\n }\n\n set text(value: string) {\n this._text = value;\n }\n\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n get buttons(): Button[] {\n return this._container.rows.flat().filter((b) => !b.invisible) as Button[];\n }\n\n constructor(props: any) {\n super(props);\n if (props) {\n if (props.alert_type) {\n this._alertType = props.alert_type;\n }\n if (props.title) {\n this._title = props.title;\n }\n if (props.text) {\n this._text = props.text;\n }\n if (props.icon) {\n this._icon = props.icon;\n }\n }\n }\n}\n\nexport default Alert;\n","import Field from \"./Field\";\n\nclass Comments extends Field {\n /**\n * Height of the comments component\n */\n _height: number | undefined = undefined;\n\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props.height) {\n const parsedHeight = parseInt(props.height);\n this._height = isNaN(parsedHeight) ? undefined : parsedHeight;\n }\n }\n}\n\nexport default Comments;\n","import CodeEditor from \"./CodeEditor\";\n\nclass JSONField extends CodeEditor {\n _lang = \"json\";\n}\n\nexport default JSONField;\n","import Field from \"./Field\";\n\nclass Email extends Field {\n _multi: boolean = false;\n get multi(): boolean {\n return this._multi;\n }\n\n set multi(value: boolean) {\n this._multi = value;\n }\n\n _size: number | undefined;\n get size(): number | undefined {\n return this._size;\n }\n\n set size(value: number | undefined) {\n this._size = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props) {\n if (props.size) {\n this.size = props.size;\n }\n }\n if (this.parsedWidgetProps.multi) {\n this.multi = this.parsedWidgetProps.multi;\n }\n }\n}\n\nexport default Email;\n","import ContainerWidget from \"./ContainerWidget\";\nimport Group from \"./Group\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\nclass Carousel extends ContainerWidget {\n _autoPlay = true;\n\n get autoPlay(): boolean {\n return this._autoPlay;\n }\n\n set autoPlay(value: boolean) {\n this._autoPlay = value;\n }\n\n get items(): Group[] {\n return this._container.rows.flat().filter((g) => !g.invisible) as Group[];\n }\n\n constructor(props?: any) {\n super(props);\n if (props) {\n if (\"auto_play\" in props) {\n this._autoPlay = parseBoolAttribute(props.auto_play);\n }\n }\n }\n}\n\nexport default Carousel;\n","import Char from \"./Char\";\n\nclass ColorPicker extends Char {\n get showText(): boolean {\n return this.parsedWidgetProps.show_text ?? true;\n }\n}\n\nexport default ColorPicker;\n","import Notebook from \"./Notebook\";\nimport Page from \"./Page\";\nimport Group from \"./Group\";\nimport Button from \"./Button\";\nimport ButtonGroup from \"./ButtonGroup\";\nimport Label from \"./Label\";\nimport Char from \"./Char\";\nimport Text from \"./Text\";\nimport Selection from \"./Selection\";\nimport Many2one from \"./Many2one\";\nimport Markdown from \"./Markdown\";\nimport Boolean from \"./Boolean\";\nimport Integer from \"./Integer\";\nimport Widget from \"./Widget\";\nimport Float from \"./Float\";\nimport FloatTime from \"./FloatTime\";\nimport HTMLPreview from \"./HTMLPreview\";\nimport ProgressBar from \"./ProgressBar\";\nimport Date from \"./Date\";\nimport DateTime from \"./DateTime\";\nimport One2many from \"./One2many\";\nimport NewLine from \"./NewLine\";\nimport Separator from \"./Separator\";\nimport Reference from \"./Reference\";\nimport Binary from \"./Binary\";\nimport Image from \"./Image\";\nimport FiberGrid from \"./FiberGrid\";\nimport Timeline from \"./Timeline\";\nimport Indicator from \"./Indicator\";\nimport Tags from \"./Tags\";\nimport Tag from \"./Tag\";\nimport Radio from \"./Radio\";\nimport MultiCheckbox from \"./MultiCheckbox\";\nimport Switch from \"./Switch\";\nimport Steps from \"./Steps\";\nimport CodeEditor from \"./CodeEditor\";\nimport Avatar from \"./Avatar\";\nimport Time from \"./Time\";\nimport Alert from \"./Alert\";\nimport Comments from \"./Comments\";\nimport JSONField from \"./JSONField\";\nimport Email from \"./Email\";\nimport Spinner from \"./Spinner\";\nimport Carousel from \"./Carousel\";\nimport ColorPicker from \"./ColorPicker\";\n\nclass WidgetFactory {\n /**\n * Widget class\n */\n _widgetClass: any;\n\n setWidgetClass(type: string): void {\n switch (type) {\n case \"notebook\":\n this._widgetClass = Notebook;\n break;\n case \"page\":\n this._widgetClass = Page;\n break;\n case \"group\":\n this._widgetClass = Group;\n break;\n case \"label\":\n this._widgetClass = Label;\n break;\n case \"char\":\n this._widgetClass = Char;\n break;\n case \"text\":\n this._widgetClass = Text;\n break;\n case \"button\":\n this._widgetClass = Button;\n break;\n case \"buttonGroup\":\n this._widgetClass = ButtonGroup;\n break;\n case \"selection\":\n this._widgetClass = Selection;\n break;\n case \"many2one\":\n this._widgetClass = Many2one;\n break;\n case \"boolean\":\n this._widgetClass = Boolean;\n break;\n case \"integer\":\n this._widgetClass = Integer;\n break;\n case \"float\":\n this._widgetClass = Float;\n break;\n case \"float_time\":\n this._widgetClass = FloatTime;\n break;\n case \"date\":\n this._widgetClass = Date;\n break;\n case \"datetime\":\n this._widgetClass = DateTime;\n break;\n case \"progressbar\":\n this._widgetClass = ProgressBar;\n break;\n case \"markdown\":\n this._widgetClass = Markdown;\n break;\n case \"many2many\":\n case \"one2many\":\n case \"one2many_list\":\n this._widgetClass = One2many;\n break;\n case \"newline\":\n this._widgetClass = NewLine;\n break;\n case \"separator\":\n this._widgetClass = Separator;\n break;\n case \"url\":\n this._widgetClass = Char;\n break;\n case \"email\":\n this._widgetClass = Email;\n break;\n case \"reference\":\n this._widgetClass = Reference;\n break;\n case \"binary\":\n this._widgetClass = Binary;\n break;\n case \"image\":\n this._widgetClass = Image;\n break;\n case \"fiber_grid\":\n this._widgetClass = FiberGrid;\n break;\n case \"timeline\":\n this._widgetClass = Timeline;\n break;\n case \"indicator\":\n this._widgetClass = Indicator;\n break;\n case \"tags\":\n this._widgetClass = Tags;\n break;\n case \"tag\":\n this._widgetClass = Tag;\n break;\n case \"avatar\":\n this._widgetClass = Avatar;\n break;\n case \"radio\":\n this._widgetClass = Radio;\n break;\n case \"multicheckbox\":\n this._widgetClass = MultiCheckbox;\n break;\n case \"switch\":\n this._widgetClass = Switch;\n break;\n case \"steps\":\n this._widgetClass = Steps;\n break;\n case \"codeeditor\":\n this._widgetClass = CodeEditor;\n break;\n case \"time\":\n this._widgetClass = Time;\n break;\n case \"html_preview\":\n this._widgetClass = HTMLPreview;\n break;\n case \"alert\":\n this._widgetClass = Alert;\n break;\n case \"comments_timeline\":\n this._widgetClass = Comments;\n break;\n case \"json\":\n this._widgetClass = JSONField;\n break;\n case \"arrow_steps\":\n this._widgetClass = JSONField;\n break;\n case \"spinner\":\n this._widgetClass = Spinner;\n break;\n case \"carousel\":\n this._widgetClass = Carousel;\n break;\n case \"colorPicker\":\n this._widgetClass = ColorPicker;\n break;\n default:\n break;\n }\n }\n\n createWidget(type: string, props: any) {\n this._widgetClass = undefined;\n let finalType = type;\n\n this.setWidgetClass(type);\n\n // Fallback to default widget, we try to use the fields type widget if it exists\n if (this._widgetClass === undefined) {\n finalType = props.fieldsWidgetType;\n this.setWidgetClass(props.fieldsWidgetType);\n }\n\n if (this._widgetClass === undefined) {\n this._widgetClass = Widget;\n }\n\n // TODO: Widget Class constructors should use only the props needed, not all props.\n switch (type) {\n // Specific cases (only selected props should be used)\n case \"notebook\":\n case \"page\":\n case \"group\":\n return new this._widgetClass({ ...props, type: finalType });\n case \"button\":\n return new this._widgetClass({\n ...props,\n type,\n buttonType: props.type,\n });\n // Generic case\n default:\n return new this._widgetClass({ ...props, type: finalType });\n }\n }\n}\n\nexport default WidgetFactory;\n","const evaluateStates = ({\n fieldName,\n values,\n fields,\n}: {\n fieldName: string;\n values: any;\n fields: any;\n}) => {\n if (!fieldName) {\n return {};\n }\n\n const fieldStatesConfig = fields[fieldName]?.states;\n\n if (!fieldStatesConfig) {\n return {};\n }\n\n const newTagStateAttrs: any = {};\n const evaluatedStates: any = {};\n\n for (const stateCondition of Object.keys(fieldStatesConfig)) {\n if (values.state === stateCondition) {\n const configAttrValues = fieldStatesConfig[stateCondition];\n\n for (const entryConfig of configAttrValues) {\n const [attribute, value] = entryConfig;\n if (!evaluatedStates[attribute]) {\n evaluatedStates[attribute] = [];\n }\n evaluatedStates[attribute].push(value);\n }\n }\n }\n\n for (const evaluatedState of Object.keys(evaluatedStates)) {\n const values = evaluatedStates[evaluatedState];\n newTagStateAttrs[evaluatedState] = values.some((i: boolean) => i);\n }\n\n return newTagStateAttrs;\n};\n\nconst evaluateButtonStates = ({\n states,\n values,\n}: {\n states: string;\n values: any;\n}) => {\n if (!values?.state) {\n return {};\n }\n const splittedStates = states.split(\",\");\n if (splittedStates.length === 0) {\n return {};\n }\n return !splittedStates.includes(values.state) ? { invisible: true } : {};\n};\n\nexport { evaluateStates, evaluateButtonStates };\n","export function getValueForField({\n values = {},\n fieldName,\n fields = {},\n}: {\n values: any;\n fieldName: string;\n fields: any;\n}) {\n const fieldType = fields[fieldName]?.type || \"passthrough\";\n\n if (fieldType === \"many2one\") {\n return values[fieldName] ? values[fieldName][0] || null : false;\n } else if (fieldType === \"one2many\" || fieldType === \"many2many\") {\n return values[fieldName].map((item: any) => item.id);\n } else {\n if (values?.[fieldName]) {\n return values?.[fieldName];\n }\n\n if (fieldName.includes(\"'\")) {\n return fieldName;\n } else {\n return parseInt(fieldName);\n }\n }\n}\n","import { getValueForField } from \"./fieldParser\";\n\nexport const parseContext = ({\n context,\n values,\n fields,\n}: {\n context?: any;\n values?: any;\n fields?: any;\n}) => {\n // TODO: remove try/catch when we know for sure that all the incoming contexts formats are expected\n try {\n if (!context) return undefined;\n\n if (isObject(context)) {\n return context;\n }\n\n if (typeof context !== \"string\") {\n return context;\n }\n\n const parsedContextInJson = tryParseJSON(context);\n if (parsedContextInJson !== null) {\n return parsedContextInJson;\n }\n\n if (context.trim().length === 0) {\n return undefined;\n }\n\n // TODO: maybe this can be accomplished more performant and elegant with regex\n const singleQuotesReplace = context.replace(/\"/g, \"'\");\n const strNoWhitespaces = singleQuotesReplace.replace(/\\s/g, \"\");\n const replaceTrue = strNoWhitespaces.replace(/True/g, \"true\");\n const replaceFalse = replaceTrue.replace(/False/g, \"false\");\n const strNoClauLeft = replaceFalse.replace(/\\{/g, \"\");\n const strNoClauRight = strNoClauLeft.replace(/\\}/g, \"\");\n\n const entryValues = strNoClauRight.split(\",\");\n const valuesSplitted = entryValues.map((entry) => {\n return entry.split(\":\");\n });\n\n const parsedContext: any = {};\n\n valuesSplitted.forEach((entry) => {\n const fieldName = entry[1];\n\n if (\n !entry[1].includes(\"'\") &&\n entry[1] !== \"true\" &&\n entry[1] !== \"false\"\n ) {\n const valueForField = getValueForField({\n values,\n fields,\n fieldName: fieldName === \"active_id\" ? \"id\" : fieldName,\n });\n parsedContext[entry[0].replace(/'/g, \"\")] = valueForField || undefined;\n } else {\n if (entry[1] === \"true\") {\n parsedContext[entry[0].replace(/'/g, \"\")] = true;\n } else if (entry[1] === \"false\") {\n parsedContext[entry[0].replace(/'/g, \"\")] = false;\n } else {\n parsedContext[entry[0].replace(/'/g, \"\")] = entry[1].replace(\n /'/g,\n \"\",\n );\n }\n }\n });\n\n return parsedContext;\n } catch (e) {\n return undefined;\n }\n};\n\nexport const parseContextFields = (context: string): string[] => {\n const fields: string[] = [];\n try {\n if (!context) return fields;\n\n if (isObject(context)) {\n return fields;\n }\n\n if (typeof context !== \"string\") {\n return fields;\n }\n\n const parsedContextInJson = tryParseJSON(context);\n if (parsedContextInJson !== null) {\n return [];\n }\n\n if (context.trim().length === 0) {\n return fields;\n }\n\n // TODO: maybe this can be accomplished more performant and elegant with regex\n const singleQuotesReplace = context.replace(/\"/g, \"'\");\n const strNoWhitespaces = singleQuotesReplace.replace(/\\s/g, \"\");\n const replaceTrue = strNoWhitespaces.replace(/True/g, \"true\");\n const replaceFalse = replaceTrue.replace(/False/g, \"false\");\n const strNoClauLeft = replaceFalse.replace(/\\{/g, \"\");\n const strNoClauRight = strNoClauLeft.replace(/\\}/g, \"\");\n\n const entryValues = strNoClauRight.split(\",\");\n const valuesSplitted = entryValues.map((entry) => {\n return entry.split(\":\");\n });\n\n valuesSplitted.forEach((entry) => {\n if (\n !entry[1].includes(\"'\") &&\n entry[1] !== \"true\" &&\n entry[1] !== \"false\"\n ) {\n fields.push(entry[1].replace(/'/g, \"\"));\n }\n });\n\n return fields;\n } catch (e) {}\n return fields;\n};\n\nfunction tryParseJSON(str: string): any | null {\n try {\n const parsedJSON = JSON.parse(str.replace(/'/g, '\"'));\n return parsedJSON;\n } catch (error) {\n return null;\n }\n}\n\nfunction isObject(variable: any): boolean {\n return (\n typeof variable === \"object\" &&\n variable !== null &&\n typeof variable !== \"string\"\n );\n}\n","const parseOnChange = (onChangeString: string) => {\n const splitted = onChangeString.trim().replace(\")\", \"\").split(\"(\");\n\n const method = splitted[0];\n const argsGross = splitted[1];\n const argsSplitted = argsGross.split(\",\").map((arg) => arg.trim());\n\n return {\n method,\n args: argsSplitted,\n };\n};\n\nexport { parseOnChange };\n","import ContainerWidget from \"../ContainerWidget\";\nimport Widget from \"../Widget\";\n\nexport function flattenContainer(widgets: Widget[][]): Widget[] {\n const flattened: Widget[][] = [];\n\n function flattenArray(items: Widget[]): void {\n const flatSubArray: Widget[] = [];\n\n for (const item of items) {\n if (item instanceof ContainerWidget) {\n flattenArray(item._container.rows.flat()); // Recurse into the container\n } else {\n flatSubArray.push(item);\n }\n }\n\n if (flatSubArray.length > 0) {\n flattened.push(flatSubArray);\n }\n }\n\n // Iterate through the outer array and process each inner array\n for (const widgetArray of widgets) {\n flattenArray(widgetArray);\n }\n\n return flattened.flat();\n}\n","import WidgetFactory from \"./WidgetFactory\";\nimport Container from \"./Container\";\nimport ContainerWidget from \"./ContainerWidget\";\nimport Widget from \"./Widget\";\nimport { ParsedNode } from \"./helpers/nodeParser\";\nimport {\n evaluateAttributes,\n replaceEntities,\n parseWidgetProps,\n} from \"./helpers/attributeParser\";\nimport { evaluateStates, evaluateButtonStates } from \"./helpers/stateParser\";\nimport { parseContext } from \"./helpers/contextParser\";\nimport { parseOnChange } from \"./helpers/onChangeParser\";\nimport * as txml from \"txml\";\nimport Field from \"./Field\";\nimport Button from \"./Button\";\nimport { flattenContainer } from \"./helpers/widgetHelper\";\n\nexport type FormParseOptions = {\n readOnly?: boolean;\n values?: any;\n};\n\nclass Form {\n /**\n * Object containing fields specification of the form.\n */\n _fields: any;\n get fields() {\n return this._fields;\n }\n\n _container: Container;\n get container(): Container {\n return this._container;\n }\n\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n /**\n * Widget type\n */\n _type: string = \"form\";\n get type(): string {\n return this._type;\n }\n\n /**\n * Determines if form is read only (default is false)\n */\n _readOnly: boolean = false;\n get readOnly(): boolean {\n return this._readOnly;\n }\n\n set readOnly(value: boolean) {\n this._readOnly = value;\n }\n\n /**\n * Context\n */\n _context: any = {};\n get context(): any {\n return this._context;\n }\n\n set context(value: any) {\n this._context = value;\n }\n\n /**\n * Collection of onChange actions for fields\n */\n _onChangeFields: any = {};\n get onChangeFields(): any {\n return this._onChangeFields;\n }\n\n set onChangeFields(value: any) {\n this._onChangeFields = value;\n }\n\n /*\n _widgets = {\n *[Symbol.iterator]() {\n if (this._container && this._container.length) {\n this._container.forEach((item) => {\n\n // yield item\n });\n }\n }\n };\n get widgets() {\n return this._widgets;\n }\n */\n\n /**\n * Unique key for container\n */\n _keyIdx: number = 0;\n get keyIdx(): number {\n return this._keyIdx;\n }\n\n set keyIdx(value: number) {\n this._keyIdx = value;\n }\n\n /**\n * List of invisible fields\n */\n _invisibleFields: string[] = [];\n get invisibleFields(): string[] {\n return this._invisibleFields;\n }\n\n set invisibleFields(value: string[]) {\n this._invisibleFields = value;\n }\n\n /**\n * List of autorefreshable fields\n */\n _autorefreshableFields: string[] = [];\n get autorefreshableFields(): string[] {\n return this._autorefreshableFields;\n }\n\n /**\n * Context for each field in the form\n */\n _contextForFields: Record<string, any> = {};\n get contextForFields(): Record<string, any> {\n return this._contextForFields;\n }\n\n set contextForFields(value: Record<string, any>) {\n this._contextForFields = value;\n }\n\n constructor(fields: Object, columns: number = 4) {\n this._fields = fields;\n this._container = new Container(columns, 6, false, \"root\");\n }\n\n parse(xml: string, options?: FormParseOptions) {\n const { values = {}, readOnly = false } = options || {};\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"form\")[0];\n this._string = view.attributes?.string || null;\n if (this._string) {\n this._string = replaceEntities(this._string);\n }\n this._readOnly = readOnly;\n this._context = values.id\n ? { active_id: values.id, active_ids: [values.id] }\n : {};\n this._invisibleFields = [];\n this.parseNode({\n fields: view.children,\n container: this._container,\n values,\n });\n\n // For each widget in the form, we get the context and put it in the contextForFields object\n const allWidgets = flattenContainer(this._container._rows);\n\n allWidgets.forEach((widget) => {\n const unknownWidget = widget as any;\n if (unknownWidget._id && unknownWidget._context) {\n this._contextForFields[unknownWidget._id] = widget._context;\n }\n });\n\n // Also we store all the autorefreshables fields in a list\n this._autorefreshableFields = allWidgets\n .filter((widget) => widget instanceof Field && widget.autoRefresh)\n .map((field) => (field as Field)._id);\n }\n\n parseNode({\n fields,\n container,\n values,\n }: {\n fields: ParsedNode[];\n container: Container;\n values: any;\n }) {\n const widgetFactory = new WidgetFactory();\n fields\n .filter((f) => typeof f === \"object\")\n .forEach((field) => {\n const { tagName, attributes, children } = field;\n let widgetType = tagName;\n let tagAttributes = attributes;\n if (tagName === \"field\") {\n const { name, widget } = attributes;\n if (widget) {\n widgetType = widget;\n } else if (name) {\n if (!this._fields[name]) {\n throw new Error(\n `Field ${name as string} doesn't exist in fields defintion`,\n );\n }\n widgetType = this._fields[name].type;\n // Merge _fields[widget_props] with attributes[widget_props]\n attributes.widget_props = {\n ...parseWidgetProps(attributes.widget_props),\n ...(this._fields[name].widget_props || {}),\n };\n }\n tagAttributes = {\n ...this._fields[name],\n ...attributes,\n fieldsWidgetType: this._fields[name].type,\n };\n }\n const evaluatedTagAttributes = evaluateAttributes({\n tagAttributes,\n values,\n fields: this._fields,\n widgetType: tagName,\n });\n let evaluatedStateAttributes;\n\n if (tagName === \"button\" && tagAttributes.states) {\n evaluatedStateAttributes = evaluateButtonStates({\n states: tagAttributes.states,\n values,\n });\n } else {\n evaluatedStateAttributes = evaluateStates({\n fieldName: tagAttributes.name,\n values,\n fields: this._fields,\n });\n }\n\n const widgetContext = parseContext({\n context:\n tagAttributes.context || this._fields[tagAttributes.name]?.context,\n values,\n fields: this._fields,\n });\n\n if (tagAttributes.on_change) {\n this._onChangeFields[tagAttributes.name] = parseOnChange(\n tagAttributes.on_change,\n );\n }\n\n let domain: string | undefined;\n\n if (checkIfDomainHasValue(tagAttributes.domain)) {\n domain = tagAttributes.domain;\n } else if (\n checkIfDomainHasValue(this._fields[tagAttributes.name]?.domain)\n ) {\n domain = this._fields[tagAttributes.name].domain;\n }\n\n this._keyIdx = this._keyIdx + 1;\n\n const widgetProps = {\n ...evaluatedTagAttributes,\n ...evaluatedStateAttributes,\n context: widgetContext,\n domain,\n key: `${this._keyIdx}`,\n };\n\n if (container.readOnly) {\n widgetProps.readonly = true;\n }\n\n const widget = widgetFactory.createWidget(widgetType, widgetProps);\n\n if (widget.invisible && widget instanceof Field) {\n this._invisibleFields.push(widgetProps.name);\n }\n\n if (widget instanceof ContainerWidget) {\n this.parseNode({\n fields: children,\n container: widget.container,\n values,\n });\n }\n\n // If the widget is a button and has a readonly attribute specified\n // reflect it to the widget independently of the form readonly attribute\n if (widget instanceof Button && widget.readOnly !== undefined) {\n // widget.readOnly = widget.readOnly;\n } else {\n // If the form is set to readonly, reflect it to its children\n widget.readOnly = widget.readOnly || this.readOnly;\n }\n\n container.addWidget(widget);\n });\n }\n\n /**\n * Calls container's findById method to find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Field | Widget | null {\n return this.container.findById(id);\n }\n}\n\nfunction checkIfDomainHasValue(domain: any) {\n if (!domain) {\n return false;\n }\n if (Array.isArray(domain) && domain.length > 0) {\n return true;\n } else if (typeof domain === \"string\" && domain !== \"\" && domain !== \"[]\") {\n return true;\n }\n return false;\n}\nexport default Form;\n","import WidgetFactory from \"./WidgetFactory\";\nimport Widget from \"./Widget\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\nimport { parseBoolAttribute, ParsedNode } from \"./helpers/nodeParser\";\nimport * as txml from \"txml\";\nimport { parseContext } from \"./helpers/contextParser\";\n\ntype EditableTreeOptions = \"top\" | \" bottom\" | null;\n\nclass Tree {\n /**\n * Object containing fields specification of the form.\n */\n _fields: any;\n get fields() {\n return this._fields;\n }\n\n _columns: any[] = [];\n get columns(): any[] {\n return this._columns;\n }\n\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n /**\n * Widget type\n */\n _type: string = \"tree\";\n get type(): string {\n return this._type;\n }\n\n /**\n * Color expression value\n */\n _colors: string | null = null;\n get colors(): string | null {\n return this._colors;\n }\n\n _status: string | null = null;\n get status(): string | null {\n return this._status;\n }\n\n /**\n * Editable value\n */\n _editable: EditableTreeOptions = null;\n get editable(): EditableTreeOptions {\n return this._editable;\n }\n\n /**\n * Context for each field in the form\n */\n _contextForFields: Record<string, any> = {};\n get contextForFields(): Record<string, any> {\n return this._contextForFields;\n }\n\n set contextForFields(value: Record<string, any>) {\n this._contextForFields = value;\n }\n\n /**\n * List of autorefreshable fields\n */\n _autorefreshableFields: string[] = [];\n get autorefreshableFields(): string[] {\n return this._autorefreshableFields;\n }\n\n /**\n * Is infinite\n */\n _infinite: boolean = false;\n get infinite(): boolean {\n return this._infinite;\n }\n\n set infinite(value: boolean) {\n this._infinite = value;\n }\n\n constructor(fields: Object) {\n this._fields = fields;\n }\n\n parse(xml: string) {\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"tree\")[0];\n this._string = view.attributes.string || null;\n if (this._string) {\n this._string = replaceEntities(this._string);\n }\n this._colors = view.attributes.colors || null;\n if (this._colors) {\n this._colors = replaceEntities(this._colors);\n }\n this._status = view.attributes.status || null;\n if (this._status) {\n this._status = replaceEntities(this._status);\n }\n this._editable = view.attributes.editable || null;\n this._infinite = view.attributes.infinite || false;\n const widgetFactory = new WidgetFactory();\n view.children.forEach((field: ParsedNode) => {\n const { tagName, attributes } = field;\n let widgetType = null;\n if (tagName === \"field\") {\n const { name, widget } = attributes;\n let mergedAttrs = attributes;\n if (name) {\n if (!this._fields[name]) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Field ${name} doesn't exist in fields defintion`);\n }\n const fieldDef = this._fields[name];\n widgetType = fieldDef.type;\n if (\n ((Array.isArray(fieldDef?.domain) &&\n fieldDef?.domain.length === 0) ||\n fieldDef?.domain === false) &&\n attributes.domain &&\n attributes.domain.length > 0\n ) {\n delete fieldDef.domain;\n }\n const widgetContext = parseContext({\n context: attributes.context || fieldDef.context,\n values: {},\n fields: this._fields,\n });\n mergedAttrs = {\n ...fieldDef,\n ...attributes,\n fieldsWidgetType: fieldDef?.type,\n context: widgetContext,\n };\n this._contextForFields[name] = widgetContext;\n }\n if (widget) {\n widgetType = widget;\n }\n\n if (!mergedAttrs.invisible) {\n const widget = widgetFactory.createWidget(widgetType, mergedAttrs);\n this._columns.push(widget);\n }\n\n if (parseBoolAttribute(mergedAttrs.autorefresh)) {\n this._autorefreshableFields.push(name);\n }\n }\n });\n }\n\n /**\n * Find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Widget | null {\n return this._columns.find((item) => {\n if (item.findById) {\n return item.findById(id);\n }\n return false;\n });\n }\n}\n\nexport default Tree;\n","import WidgetFactory from \"./WidgetFactory\";\nimport Container from \"./Container\";\nimport Widget from \"./Widget\";\n\nexport const SearchFieldTypes: any = {\n text: \"text\",\n many2one: \"many2one\",\n char: \"char\",\n boolean: \"boolean\",\n selection: \"selection\",\n float: \"float\",\n float_time: \"float_time\",\n progressbar: \"progressbar\",\n integer: \"integer\",\n date: \"date\",\n datetime: \"datetime\",\n};\n\nclass SearchFilter {\n /**\n * Object containing the specific fields for primary and secondary search fields\n */\n _searchFields: any;\n get searchFields() {\n return this._searchFields;\n }\n\n /**\n * Object containing all the fields specification of the whole form\n */\n _fields: any;\n get fields() {\n return this._fields;\n }\n\n _simpleSearchContainer: Container;\n get simpleSearchContainer(): Container {\n return this._simpleSearchContainer;\n }\n\n _advancedSearchContainer: Container;\n get advancedSearchContainer(): Container {\n return this._advancedSearchContainer;\n }\n\n constructor(searchFields: Object, fields: Object, columns: number = 8) {\n this._searchFields = searchFields;\n this._fields = fields;\n this._simpleSearchContainer = new Container(columns);\n this._advancedSearchContainer = new Container(columns);\n }\n\n parse() {\n const widgetFactory = new WidgetFactory();\n\n const simpleSearchWidgets = this.parseFields(\n this.searchFields.primary,\n widgetFactory,\n );\n simpleSearchWidgets.forEach((widget) => {\n this.simpleSearchContainer.addWidget(widget, { addLabel: false });\n this.advancedSearchContainer.addWidget(widget, { addLabel: false });\n });\n\n const advancedSearchWidgets = this.parseFields(\n this.searchFields.secondary,\n widgetFactory,\n );\n advancedSearchWidgets.forEach((widget) => {\n this.advancedSearchContainer.addWidget(widget, { addLabel: false });\n });\n }\n\n parseFields(searchFields: string[], widgetFactory: WidgetFactory) {\n return searchFields.map((searchField) => {\n const fieldAttributes = {\n ...this.fields[searchField],\n name: searchField,\n colspan: 2,\n };\n const { type, widget } = fieldAttributes;\n let widgetType = widget ?? type;\n if (SearchFieldTypes[widgetType] === undefined) {\n widgetType = type;\n }\n return widgetFactory.createWidget(widgetType, fieldAttributes);\n });\n }\n\n /**\n * Calls container's findById method to find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Widget | null {\n return this.advancedSearchContainer.findById(id);\n }\n}\n\nexport default SearchFilter;\n","const transformDomainForChildWidget = ({\n domain,\n widgetFieldName,\n}: {\n domain: any;\n widgetFieldName: string;\n}) => {\n const transformedDomain: any[] = [];\n\n domain.forEach((domainEntry: any) => {\n if (!Array.isArray(domainEntry)) {\n return;\n }\n\n const [fieldName, operator, value] = domainEntry;\n\n let rootFieldName;\n let targetFieldName;\n\n if (fieldName.indexOf(\".\") !== -1) {\n rootFieldName = fieldName.substr(0, fieldName.indexOf(\".\"));\n targetFieldName = fieldName.substr(\n (fieldName.indexOf(\".\") as number) + 1,\n fieldName.length - 1,\n );\n } else {\n rootFieldName = fieldName;\n targetFieldName = \"id\";\n }\n\n if (rootFieldName === widgetFieldName) {\n transformedDomain.push([targetFieldName, operator, value]);\n }\n });\n\n return transformedDomain;\n};\n\nexport const parseDomainFields = (domain: string | boolean): string[] => {\n if (typeof domain !== \"string\") {\n return [];\n }\n return domain\n .replace(/[()[\\]]/g, \"\")\n .split(\",\")\n .map((i) => i.trim())\n .filter((i) => !i.includes(\"'\"));\n};\n\nexport { transformDomainForChildWidget };\n","class DashboardItem {\n _action_id: string | null = null;\n get action_id(): string | null {\n return this._action_id;\n }\n\n _position: string | null = null;\n get position(): string | null {\n return this._position;\n }\n\n constructor(attributes: any) {\n if (attributes.action_id) {\n this._action_id = attributes.action_id;\n }\n\n if (attributes.position) {\n this._position = attributes.position;\n }\n }\n}\n\nexport default DashboardItem;\n","import DashboardItem from \"./DashboardItem\";\nimport * as txml from \"txml\";\nimport { ParsedNode } from \"./helpers/nodeParser\";\n\nclass Dashboard {\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n _items: DashboardItem[] = [];\n get items(): DashboardItem[] {\n return this._items;\n }\n\n constructor(xml: string) {\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"dashboard\")[0];\n this._string = view.attributes.string || null;\n\n const { children } = view;\n\n children.forEach((item: ParsedNode) => {\n if (item.tagName === \"dashboard_item\") {\n this._items.push(new DashboardItem(item.attributes));\n }\n });\n }\n}\n\nexport default Dashboard;\n","import { ParsedNode } from \"../helpers/nodeParser\";\n\nexport type GraphType = \"indicator\" | \"indicatorField\" | \"line\" | \"bar\" | \"pie\";\nexport type RangeType = \"auto\" | \"full\" | \"default\";\n\nexport class Graph {\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n _type?: GraphType;\n get type(): GraphType | undefined {\n return this._type;\n }\n\n _timerange: string | null = null;\n get timerange(): string | null {\n return this._timerange;\n }\n\n _interval: number = 1;\n get interval(): number {\n return this._interval;\n }\n\n _y_range: RangeType = \"default\";\n get y_range(): RangeType {\n return this._y_range;\n }\n\n constructor(element: ParsedNode) {\n this._string = element.attributes.string || null;\n this._timerange = element.attributes.timerange || null;\n if (element.attributes.interval) {\n this._interval = parseInt(element.attributes.interval);\n }\n if (element.attributes.y_range) {\n const range = element.attributes.y_range;\n if (range === \"auto\" || range === \"full\" || range === \"default\") {\n this._y_range = range;\n }\n }\n }\n}\n","import { Graph, GraphType } from \"./Graph\";\nimport { parseBoolAttribute, ParsedNode } from \"../helpers/nodeParser\";\nimport { replaceEntities } from \"../helpers/attributeParser\";\n\nexport class GraphIndicator extends Graph {\n _color: string | null = null;\n get color(): string | null {\n return this._color;\n }\n\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n _totalDomain: string | null = null;\n get totalDomain(): string | null {\n return this._totalDomain;\n }\n\n _showPercent: boolean = false;\n get showPercent(): boolean {\n return this._showPercent;\n }\n\n _suffix: string | null = null;\n get suffix(): string | null {\n return this._suffix;\n }\n\n constructor(type: GraphType, element: ParsedNode) {\n super(element);\n\n this._type = type;\n this._color = element.attributes.color || null;\n if (this._color) {\n this._color = replaceEntities(this._color);\n }\n this._icon = element.attributes.icon || null;\n if (this._icon) {\n this._icon = replaceEntities(this._icon);\n }\n this._suffix = element.attributes.suffix || null;\n this._totalDomain = replaceEntities(element.attributes.totalDomain) || null;\n this._showPercent = parseBoolAttribute(element.attributes.showPercent);\n }\n}\n","import { Operator } from \".\";\nimport { GraphType } from \"./Graph\";\nimport { GraphIndicator } from \"./GraphIndicator\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\n\nexport class GraphIndicatorField extends GraphIndicator {\n _field: string | undefined;\n get field(): string | undefined {\n return this._field;\n }\n\n _operator: Operator | undefined;\n get operator(): Operator | undefined {\n return this._operator;\n }\n\n constructor(type: GraphType, element: ParsedNode) {\n super(type, element);\n\n const { children } = element;\n children.forEach((item) => {\n if (item.tagName === \"field\") {\n const name = item.attributes.name;\n const operator = item.attributes.operator;\n this._field = name || undefined;\n this._operator = operator as Operator;\n }\n });\n }\n}\n","import { GraphXAxis, GraphYAxis, Operator } from \".\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\n\nexport type XYAxis = {\n x: GraphXAxis;\n y: GraphYAxis[];\n};\n\nexport const parseXYAxis = (nodes: ParsedNode[]): XYAxis => {\n const yAxisElements: GraphYAxis[] = [];\n let xAxis;\n\n nodes.forEach((child) => {\n if (child.tagName === \"field\") {\n const axis = child.attributes.axis;\n const operator = child.attributes.operator;\n const name = child.attributes.name;\n const label = child.attributes.label || undefined;\n const stacked = child.attributes.stacked || undefined;\n\n if (!axis) {\n throw new Error(`Field ${name} doesn't have an axis`);\n }\n\n if (!name) {\n throw new Error(\"Missing name attribute for field\");\n }\n\n if (axis === \"x\") {\n xAxis = new GraphXAxis({\n name,\n });\n } else if (axis === \"y\") {\n yAxisElements.push(\n new GraphYAxis({\n name,\n operator: operator as Operator,\n label,\n stacked,\n }),\n );\n }\n }\n });\n\n if (!xAxis) {\n throw new Error(\"No x axis found\");\n }\n\n if (!yAxisElements.length) {\n throw new Error(\"No y axis found. At least we need one y axis\");\n }\n\n return {\n x: xAxis,\n y: yAxisElements,\n };\n};\n","import { GraphXAxis, GraphYAxis } from \".\";\nimport { Graph, GraphType } from \"./Graph\";\nimport { parseXYAxis } from \"./graphHelper\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\n\nexport class GraphChart extends Graph {\n _x: GraphXAxis;\n get x(): GraphXAxis {\n return this._x;\n }\n\n _y: GraphYAxis[];\n get y(): GraphYAxis[] {\n return this._y;\n }\n\n constructor(type: GraphType, element: ParsedNode) {\n super(element);\n\n this._type = type;\n const xyAxis = parseXYAxis(element.children);\n this._x = xyAxis.x;\n this._y = xyAxis.y;\n }\n}\n","import { GraphIndicator } from \"./GraphIndicator\";\nimport { GraphIndicatorField } from \"./GraphIndicatorField\";\nimport { GraphChart } from \"./GraphChart\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\nimport * as txml from \"txml\";\n\nconst GraphTypes: Record<string, any> = {\n indicator: GraphIndicator,\n indicatorField: GraphIndicatorField,\n line: GraphChart,\n bar: GraphChart,\n pie: GraphChart,\n};\n\nexport const parseGraph = (xml: string): GraphIndicator | GraphChart => {\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"graph\")[0];\n const type = view.attributes.type;\n\n if (!type) {\n throw new Error(`${type} is not a valid graph`);\n }\n\n const GraphModel = GraphTypes[type];\n\n if (!GraphModel) {\n throw new Error(`${type} not found as a GraphModel`);\n }\n\n return new GraphModel(type, view);\n};\n","export type Axis = \"x\" | \"y\";\n\nexport class GraphAxis {\n _name: string;\n get name(): string {\n return this._name;\n }\n\n _axis: Axis;\n get axis(): Axis {\n return this._axis;\n }\n\n constructor({ name, axis }: { name: string; axis: Axis }) {\n this._name = name;\n this._axis = axis;\n }\n}\n","import { GraphAxis } from \".\";\n\nexport type Operator = \"count\" | \"+\" | \"-\" | \"*\" | \"min\" | \"max\" | \"avg\";\n\nexport class GraphYAxis extends GraphAxis {\n _operator: Operator;\n get operator(): Operator {\n return this._operator;\n }\n\n _label: string | undefined;\n get label(): string | undefined {\n return this._label;\n }\n\n _stacked: string | undefined;\n get stacked(): string | undefined {\n return this._stacked;\n }\n\n constructor({\n name,\n operator,\n label,\n stacked,\n }: {\n name: string;\n operator: Operator;\n label?: string;\n stacked?: string;\n }) {\n super({ name, axis: \"y\" });\n this._operator = operator!;\n this._label = label;\n this._stacked = stacked;\n }\n}\n","import { GraphAxis } from \".\";\n\nexport class GraphXAxis extends GraphAxis {\n constructor({ name }: { name: string }) {\n super({ name, axis: \"x\" });\n }\n}\n","import { GraphChart } from \"../GraphChart\";\n\nexport const getFieldsToRetrieve = ({ ooui }: { ooui: GraphChart }) => {\n const xField: string = ooui.x.name;\n const fields = [xField];\n\n if (!ooui.y) {\n return [];\n }\n\n ooui.y.forEach((y) => {\n if (y.operator !== \"count\" && !fields.includes(y.name)) {\n fields.push(y.name);\n }\n\n if (y.label && !fields.includes(y.label)) {\n fields.push(y.label);\n }\n });\n\n return fields;\n};\n\nexport function getValueAndLabelForField({\n fields,\n values,\n fieldName,\n}: {\n fields: Record<string, any>;\n values: Record<string, any>;\n fieldName: string;\n}) {\n const xFieldData = fields[fieldName];\n const value = values[fieldName];\n\n if (!xFieldData) {\n throw new Error(`Field ${fieldName} not found`);\n }\n\n if (xFieldData.type === \"many2one\") {\n if (!value) {\n return { value: false, label: undefined };\n }\n return { value: value[0], label: value[1] };\n } else if (xFieldData.type === \"selection\") {\n const selectionValues: Array<[number, string]> = xFieldData.selection;\n\n const valuePair = selectionValues.find((selectionPair) => {\n return selectionPair[0] === value;\n });\n\n if (!valuePair) {\n return { value: false, label: undefined };\n }\n\n return { value, label: valuePair[1] };\n }\n\n return { value, label: value };\n}\n","import moment from \"moment\";\nimport { getValueForOperator } from \"./graphProcessor\";\n\nexport function processTimerangeData({\n values,\n timerange,\n interval = 1,\n}: {\n values: any[];\n timerange: string;\n interval?: number;\n}) {\n const combinedValues = combineValuesForTimerange({\n values,\n timerange,\n });\n\n // Fill the gaps\n const filledValues = fillGapsInTimerangeData({\n values: combinedValues,\n timerange,\n interval,\n });\n\n return filledValues;\n}\n\nexport function fillGapsInTimerangeData({\n values,\n timerange,\n interval = 1,\n}: {\n values: any[];\n timerange: string;\n interval?: number;\n}) {\n let finalValues: any[] = [];\n const uniqueValues: Record<string, any> = getUniqueValuesGroupedBy({\n values,\n groupBy: \"type-stacked\",\n });\n const units = `${timerange}s` as any;\n\n Object.keys(uniqueValues).forEach((key) => {\n const valuesForKey = uniqueValues[key];\n\n for (let i = 0; i < valuesForKey.length; i++) {\n const value = valuesForKey[i];\n\n finalValues.push(value);\n\n // If it's the last item\n if (i === valuesForKey.length - 1) {\n return;\n }\n\n const date = value.x;\n const nextDate = valuesForKey[i + 1].x;\n\n if (!checkDatesConsecutive([date, nextDate], units)) {\n const missingDates = getMissingConsecutiveDates({\n dates: [date, nextDate],\n timerange,\n interval,\n });\n finalValues = finalValues.concat(\n missingDates.map((stringDate) => {\n return {\n x: stringDate,\n value: 0,\n type: value.type,\n stacked: value.stacked,\n };\n }),\n );\n }\n }\n });\n\n const sortedData = finalValues.sort((a, b) => {\n if (a.x < b.x) {\n return -1;\n }\n if (a.x > b.x) {\n return 1;\n }\n return 0;\n });\n return sortedData;\n}\n\nexport function getMissingConsecutiveDates({\n dates,\n timerange,\n interval = 1,\n}: {\n dates: string[];\n timerange: string;\n interval?: number;\n}) {\n const missingDates: string[] = [];\n const units = `${timerange}s` as any;\n if (dates.length === 1) {\n return dates;\n }\n\n const sortedDates = dates.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n\n for (let i = 0; i < sortedDates.length - 1; i++) {\n const date1 = sortedDates[i];\n const date2 = sortedDates[i + 1];\n\n if (!checkDatesConsecutive([date1, date2], units)) {\n const iDate = moment(date1, getFormatForUnits(units)).add(\n interval,\n units,\n );\n const fDate = moment(date2, getFormatForUnits(units));\n\n while (iDate.isBefore(fDate)) {\n missingDates.push(iDate.format(getFormatForUnits(units)));\n iDate.add(interval, units);\n }\n }\n }\n\n return missingDates;\n}\n\nexport function combineValuesForTimerange({\n values,\n timerange,\n}: {\n values: any[];\n timerange: string;\n}) {\n const adjustedValues = adjustXValuesForTimeRage({\n values,\n timerange,\n });\n const finalValues: any[] = [];\n // group by x, type and stacked\n const uniqueValues: Record<string, any> = getUniqueValuesGroupedBy({\n values: adjustedValues,\n groupBy: \"all\",\n });\n\n Object.keys(uniqueValues).forEach((key) => {\n const valuesForKey = uniqueValues[key];\n const operator =\n valuesForKey[0].operator === \"count\" ? \"+\" : valuesForKey[0].operator;\n\n const finalValue = getValueForOperator({\n values: valuesForKey.map((entry: any) => entry.value),\n operator,\n });\n\n finalValues.push({\n ...valuesForKey[0],\n value: finalValue,\n });\n });\n\n return finalValues;\n}\n\nexport function adjustXValuesForTimeRage({\n values,\n timerange,\n}: {\n values: any[];\n timerange: string;\n}) {\n return values.map((value) => {\n return {\n ...value,\n x: convertDateToTimeRangeAdjusted({\n date: value.x,\n timerange,\n }),\n };\n });\n}\n\nexport function convertDateToTimeRangeAdjusted({\n date,\n timerange,\n}: {\n date: string;\n timerange: string;\n}) {\n let format = getDateFormat(date);\n const momentDate = moment(date, format);\n switch (timerange) {\n case \"hour\": {\n format = \"YYYY-MM-DD HH:00\";\n break;\n }\n case \"day\": {\n format = \"YYYY-MM-DD\";\n break;\n }\n case \"week\": {\n format = \"YYYY-WW\";\n break;\n }\n case \"month\": {\n format = \"YYYY-MM\";\n break;\n }\n case \"year\": {\n format = \"YYYY\";\n break;\n }\n }\n return momentDate.format(format);\n}\n\nexport function getDateFormat(date: string) {\n return date.indexOf(\":\") ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD\";\n}\n\nexport function checkDatesConsecutive(\n dates: string[],\n unit: \"hours\" | \"days\" | \"weeks\" | \"months\" | \"years\",\n) {\n let consecutive = false;\n const format = getFormatForUnits(unit);\n\n if (dates.length === 0) {\n return false;\n }\n\n if (dates.length === 1) {\n return true;\n }\n\n for (let i = 0; i < dates.length - 1; i++) {\n const date1 = moment(dates[i], format);\n const date2 = moment(dates[i + 1], format);\n const diff = date2.diff(date1, unit);\n\n if (Math.abs(diff) === 1) {\n consecutive = true;\n } else {\n consecutive = false;\n }\n }\n return consecutive;\n}\n\nexport function getUniqueValuesGroupedBy({\n values,\n groupBy,\n}: {\n values: any[];\n groupBy: \"all\" | \"type-stacked\";\n}) {\n const uniqueValues: Record<string, any> = {};\n values.forEach((value) => {\n const x = value.x;\n const type = value.type;\n const stacked = value.stacked;\n const uniqueKey =\n groupBy === \"all\" ? `${x}-${type}-${stacked}` : `${type}-${stacked}`;\n if (!uniqueValues[uniqueKey]) {\n uniqueValues[uniqueKey] = [];\n }\n uniqueValues[uniqueKey].push(value);\n });\n return uniqueValues;\n}\n\nexport function getFormatForUnits(units: string) {\n switch (units) {\n case \"days\": {\n return \"YYYY-MM-DD\";\n }\n case \"weeks\": {\n return \"YYYY-WW\";\n }\n case \"months\": {\n return \"YYYY-MM\";\n }\n case \"years\": {\n return \"YYYY\";\n }\n case \"hours\":\n default: {\n return \"YYYY-MM-DD HH:mm\";\n }\n }\n}\n","import { GraphChart, GraphYAxis, Operator } from \"..\";\nimport { getValueAndLabelForField } from \"./fieldUtils\";\nimport { processTimerangeData } from \"./timerangeHelper\";\n\nexport type GroupedValues = Record<\n string,\n { label: string; entries: Array<Record<string, any>> }\n>;\n\ntype GraphValues = {\n value: number;\n [key: string]: any;\n};\n\nexport const labelsForOperator = {\n count: \"count\",\n \"+\": \"sum\",\n \"-\": \"subtract\",\n \"*\": \"multiply\",\n avg: \"average\",\n min: \"min\",\n max: \"max\",\n};\n\nexport type ProcessGraphDataOpts = {\n uninformedString: string;\n};\n\nexport type YAxisOpts = {\n mode?: \"auto\" | \"default\" | \"full\" | \"slider\";\n valueOpts?: MinMaxValues;\n};\n\nexport type MinMaxValues = {\n min: number;\n max: number;\n};\n\nexport type Result = {\n data: any[];\n isGroup: boolean;\n isStack: boolean;\n yAxisOpts?: YAxisOpts;\n};\n\nexport const processGraphData = ({\n ooui,\n values,\n fields,\n options,\n}: {\n ooui: GraphChart;\n values: Array<Record<string, any>>;\n fields: Record<string, any>;\n options?: ProcessGraphDataOpts;\n}) => {\n // First we group all the results by the x field. This way we will have one or more items in an array for every occurrence of ooui.x.name\n // Result of this will be an object which keys will be unique keys for values of ooui.x.name for each item\n const valuesGroupedByX = getValuesGroupedByField({\n fieldName: ooui.x.name,\n values,\n fields,\n });\n\n const data: GraphValues[] = [];\n // We iterate through the y axis items found in the ooui object\n ooui.y.forEach((yField) => {\n // We iterate now for every single key of the grouped results by x\n Object.keys(valuesGroupedByX).forEach((xValue) => {\n const xLabel = valuesGroupedByX[xValue].label;\n const objectsForXValue = valuesGroupedByX[xValue].entries;\n\n // If the y field hasn't got label defined\n if (!yField.label) {\n // We calculate the final value using the entries of this unique x key\n const valuesForYField = getValuesForYField({\n entries: objectsForXValue,\n fields,\n fieldName: yField.name,\n });\n\n const finalValue = getValueForOperator({\n values: valuesForYField,\n operator: yField.operator,\n });\n\n data.push({\n x: xLabel || false,\n value: finalValue,\n type: getYAxisFieldname({\n yAxis: yField,\n fields,\n }),\n operator: yField.operator,\n stacked: yField.stacked,\n });\n }\n // The field has label\n else {\n // We retrieve an object with unique keys and grouped values for the label\n const valuesGroupedByYLabel = getValuesGroupedByField({\n fieldName: yField.label,\n values: objectsForXValue,\n fields,\n });\n\n // For every key of the grouped results by label\n Object.keys(valuesGroupedByYLabel).forEach((yUniqueValue) => {\n const entries = valuesGroupedByYLabel[yUniqueValue].entries;\n const label = valuesGroupedByYLabel[yUniqueValue].label;\n\n // We calculate the final value using the entries of this unique x key\n const valuesForYField = getValuesForYField({\n entries,\n fields,\n fieldName: yField.name,\n });\n\n const finalValue = getValueForOperator({\n values: valuesForYField,\n operator: yField.operator,\n });\n data.push({\n x: xLabel || false,\n value: finalValue,\n type: label,\n operator: yField.operator,\n stacked: yField.stacked,\n });\n });\n }\n });\n });\n\n // Check if we have to flag isGroup\n const isGroup = ooui.y.some((y) => y.label !== undefined);\n\n // Check if we have to flag isStacked\n const isStack = ooui.y.some((entry) => entry.stacked !== undefined);\n\n // We sort the data by x\n const sortedData = data.sort((a, b) => {\n if (a.x < b.x) {\n return -1;\n }\n if (a.x > b.x) {\n return 1;\n }\n return 0;\n });\n\n let adjustedStackedData = [...sortedData];\n // If it's an stacked graph and we have more than one group stacked, we have to change the type description in order to add\n // the stacked group\n if (\n isStack &&\n ooui.y.filter((entry) => entry.stacked !== undefined).length > 1\n ) {\n adjustedStackedData = adjustedStackedData.map((entry) => {\n return { ...entry, type: `${entry.type} - ${entry.stacked}` };\n });\n }\n\n let adjustedUninformedData = [...adjustedStackedData];\n // If the type of the graph is pie, we have to check for \"false\" (uninformed) computes values\n // in order to adjust the description to a localized string for \"Unassigned / not introduced\"\n // Else, we have to ignore those entries\n if (\n ooui.type === \"pie\" &&\n adjustedUninformedData.some((entry) => entry.x === false)\n ) {\n adjustedUninformedData = adjustedUninformedData.map((entry) => {\n if (entry.x === false) {\n return { ...entry, x: options?.uninformedString || \"Not informed\" };\n }\n return entry;\n });\n } else if (adjustedStackedData.some((entry) => entry.x === false)) {\n adjustedUninformedData = adjustedUninformedData.filter(\n (entry) => entry.x !== false,\n );\n }\n\n // If we have a timerange parameter defined in ooui, we must fill the gaps with the desired units and group results too\n let finalData = adjustedUninformedData;\n\n if (ooui.timerange) {\n finalData = processTimerangeData({\n values: finalData,\n timerange: ooui.timerange,\n interval: ooui.interval,\n });\n } else if (ooui.type == \"pie\") {\n finalData = adjustedUninformedData.sort((a, b) => b.value - a.value);\n }\n\n const result: Result = {\n data: finalData,\n isGroup: isStack || isGroup,\n isStack,\n };\n\n if (ooui.type === \"line\" && ooui.y_range) {\n result.yAxisOpts = {\n mode: ooui.y_range,\n };\n if (ooui.y_range === \"auto\") {\n const { min, max } = getMinMax(finalData);\n result.yAxisOpts.valueOpts = { min, max };\n }\n }\n\n return result;\n};\n\nexport function getValuesForYField({\n entries,\n fieldName,\n fields,\n}: {\n entries: Array<Record<string, any>>;\n fieldName: string;\n fields: Record<string, any>;\n}) {\n return entries\n .map((obj) => {\n return getValueAndLabelForField({\n fieldName,\n values: obj,\n fields,\n });\n })\n .map(({ value, label }) => {\n return label;\n });\n}\n\nexport function getValueForOperator({\n operator,\n values,\n}: {\n operator: Operator;\n values: any[];\n}) {\n switch (operator) {\n case \"count\": {\n return values.length;\n }\n case \"+\": {\n return roundNumber(\n values.reduce(function (previousValue: number, currentValue: number) {\n return previousValue + currentValue;\n }),\n );\n }\n case \"-\": {\n return roundNumber(\n values.reduce(function (previousValue: number, currentValue: number) {\n return previousValue - currentValue;\n }),\n );\n }\n case \"*\": {\n return roundNumber(\n values.reduce(function (previousValue: number, currentValue: number) {\n return previousValue * currentValue;\n }),\n );\n }\n case \"avg\": {\n const sum = values.reduce((a: number, b: number) => a + b, 0);\n const avg = sum / values.length || 0;\n return roundNumber(avg);\n }\n case \"min\": {\n return Math.min(...values);\n }\n case \"max\": {\n return Math.max(...values);\n }\n }\n}\n\nfunction roundNumber(num: number) {\n return Math.round((num + Number.EPSILON) * 100) / 100;\n}\n\nexport function getValuesGroupedByField({\n fieldName,\n fields,\n values,\n}: {\n fieldName: string;\n values: Array<Record<string, any>>;\n fields: Record<string, any>;\n}) {\n const groupedValues: GroupedValues = {};\n\n values.forEach((entry) => {\n const { value, label } = getValueAndLabelForField({\n fields,\n values: entry,\n fieldName,\n });\n\n if (!groupedValues[value]) {\n groupedValues[value] = { label, entries: [] };\n }\n\n groupedValues[value].entries.push(entry);\n });\n\n return groupedValues;\n}\n\nexport function getAllObjectsInGroupedValues(grouped: GroupedValues) {\n let totalObjects: any[] = [];\n Object.keys(grouped).forEach((key) => {\n const group = grouped[key];\n totalObjects = totalObjects.concat(group.entries);\n });\n return totalObjects;\n}\n\nexport function getYAxisFieldname({\n yAxis,\n fields,\n}: {\n yAxis: GraphYAxis;\n fields: Record<string, any>;\n}) {\n const fieldProps = fields[yAxis.name];\n\n if (fieldProps?.string) {\n // return `${fieldProps.string} (${labelsForOperator[yAxis.operator]})`;\n return fieldProps.string;\n }\n\n // return yAxis.name + \"_\" + labelsForOperator[yAxis.operator];\n return yAxis.name;\n}\n\nexport function getMinMax(values: GraphValues[], margin: number = 0.1) {\n if (values.length === 0) {\n throw new Error(\"The values array cannot be empty.\");\n }\n const valueList = values.map((d) => d.value);\n const minValue = Math.min(...valueList);\n const maxValue = Math.max(...valueList);\n const calculatedMargin = (maxValue - minValue) * margin;\n\n return {\n min: minValue - calculatedMargin,\n max: maxValue + calculatedMargin,\n };\n}\n"],"names":["isTrue","value","evaluateCondition","entry","values","fields","fieldName","operator","expectedValue","valueInObject","comparisonResult","evaluateFieldComparison","replaceEntities","string","decode","result","parseAttributes","attrs","widgetType","replaceFalse","replaceTags","parsedObject","newAttributes","attrField","attrIsTrue","i","parseWidgetProps","widget_props","parseJsonAttributes","attrsWithReplacedEntities","jsonAttributes","finalAttributes","evaluatedEntry","evaluateConscheckCondition","error","evaluateAttributes","tagAttributes","fallbackMode","finalTagAttributes","parseBoolAttribute","attr","_Widget","props","__publicField","Widget","Field","id","Avatar","NewLine","Label","_a","Container","columns","colspan","readOnly","key","span","el","prev","current","widget","options","widgetsToAdd","addLabel","label","accumulator","currentWidget","r","row","item","_ContainerWidget","ContainerWidget","_Notebook","Notebook","Spinner","Page","Group","Button","primary","danger","ButtonGroup","button","b","Char","Text","Selection","Many2one","Markdown","Boolean","Integer","Float","integers","decimals","FloatTime","HTMLPreview","ProgressBar","Date","DateTime","One2many","Separator","Reference","Binary","Image","FiberGrid","Timeline","Indicator","e","MultiCheckbox","Tags","Tag","Radio","Switch","Steps","CodeEditor","Time","Alert","Comments","parsedHeight","JSONField","Email","Carousel","g","ColorPicker","WidgetFactory","type","finalType","evaluateStates","fieldStatesConfig","newTagStateAttrs","evaluatedStates","stateCondition","configAttrValues","entryConfig","attribute","evaluatedState","evaluateButtonStates","states","splittedStates","getValueForField","fieldType","parseContext","context","isObject","parsedContextInJson","tryParseJSON","valuesSplitted","parsedContext","valueForField","parseContextFields","str","variable","parseOnChange","onChangeString","splitted","method","argsSplitted","arg","flattenContainer","widgets","flattened","flattenArray","items","flatSubArray","widgetArray","Form","xml","view","txml","allWidgets","unknownWidget","field","container","widgetFactory","f","tagName","attributes","children","name","evaluatedTagAttributes","evaluatedStateAttributes","widgetContext","domain","checkIfDomainHasValue","_b","widgetProps","Tree","mergedAttrs","fieldDef","SearchFieldTypes","SearchFilter","searchFields","searchField","fieldAttributes","transformDomainForChildWidget","widgetFieldName","transformedDomain","domainEntry","rootFieldName","targetFieldName","parseDomainFields","DashboardItem","Dashboard","Graph","element","range","GraphIndicator","GraphIndicatorField","parseXYAxis","nodes","yAxisElements","xAxis","child","axis","stacked","GraphXAxis","GraphYAxis","GraphChart","xyAxis","GraphTypes","parseGraph","GraphModel","GraphAxis","getFieldsToRetrieve","ooui","y","getValueAndLabelForField","xFieldData","valuePair","selectionPair","processTimerangeData","timerange","interval","combinedValues","combineValuesForTimerange","fillGapsInTimerangeData","finalValues","uniqueValues","getUniqueValuesGroupedBy","units","valuesForKey","date","nextDate","checkDatesConsecutive","missingDates","getMissingConsecutiveDates","stringDate","a","dates","sortedDates","date1","date2","iDate","moment","getFormatForUnits","fDate","adjustedValues","adjustXValuesForTimeRage","finalValue","getValueForOperator","convertDateToTimeRangeAdjusted","format","getDateFormat","momentDate","unit","consecutive","diff","groupBy","x","uniqueKey","labelsForOperator","processGraphData","valuesGroupedByX","getValuesGroupedByField","data","yField","xValue","xLabel","objectsForXValue","valuesGroupedByYLabel","yUniqueValue","entries","valuesForYField","getValuesForYField","getYAxisFieldname","isGroup","isStack","adjustedStackedData","adjustedUninformedData","finalData","min","max","getMinMax","obj","roundNumber","previousValue","currentValue","avg","num","groupedValues","getAllObjectsInGroupedValues","grouped","totalObjects","group","yAxis","fieldProps","margin","valueList","d","minValue","maxValue","calculatedMargin"],"mappings":"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"}
1
+ {"version":3,"file":"ooui.es.js","sources":["../src/helpers/attributeParser.ts","../src/helpers/nodeParser.ts","../src/Widget.ts","../src/Field.ts","../src/Avatar.ts","../src/NewLine.ts","../src/Label.ts","../src/Container.ts","../src/ContainerWidget.ts","../src/Notebook.ts","../src/Spinner.ts","../src/Page.ts","../src/Group.ts","../src/Button.ts","../src/ButtonGroup.ts","../src/Char.ts","../src/Text.ts","../src/Selection.ts","../src/Many2one.ts","../src/Markdown.ts","../src/Boolean.ts","../src/Integer.ts","../src/Float.ts","../src/FloatTime.ts","../src/HTMLPreview.ts","../src/ProgressBar.ts","../src/Date.ts","../src/DateTime.ts","../src/One2many.ts","../src/Separator.ts","../src/Reference.ts","../src/Binary.ts","../src/Image.ts","../src/FiberGrid.ts","../src/Timeline.ts","../src/Indicator.ts","../src/MultiCheckbox.ts","../src/Tags.ts","../src/Tag.ts","../src/Radio.ts","../src/Switch.ts","../src/Steps.ts","../src/CodeEditor.ts","../src/Time.ts","../src/Alert.ts","../src/Comments.ts","../src/JSONField.ts","../src/Email.ts","../src/Carousel.ts","../src/ColorPicker.ts","../src/WidgetFactory.ts","../src/helpers/stateParser.ts","../src/helpers/fieldParser.ts","../src/helpers/contextParser.ts","../src/helpers/onChangeParser.ts","../src/helpers/widgetHelper.ts","../src/Form.ts","../src/Tree.ts","../src/SearchFilter.ts","../src/helpers/domainParser.ts","../src/DashboardItem.ts","../src/Dashboard.ts","../src/Graph/Graph.ts","../src/Graph/GraphIndicator.ts","../src/Graph/GraphIndicatorField.ts","../src/Graph/graphHelper.ts","../src/Graph/GraphChart.ts","../src/Graph/GraphFactory.ts","../src/Graph/GraphAxis.ts","../src/Graph/GraphYAxis.ts","../src/Graph/GraphXAxis.ts","../src/Graph/processor/fieldUtils.ts","../src/Graph/processor/timerangeHelper.ts","../src/Graph/processor/graphProcessor.ts"],"sourcesContent":["import { decode } from \"html-entities\";\nimport {\n Condition,\n FieldComparisonParams,\n FieldComparisonResult,\n evaluateCondition as evaluateConscheckCondition,\n} from \"@gisce/conscheck\";\n\ntype JsonAttributes = Record<string, Condition>;\n\nexport const isTrue = (value: string | boolean | number = false) => {\n value = JSON.parse(value.toString().toLowerCase());\n return +value > 0;\n};\n\nconst evaluateCondition = ({\n entry,\n values,\n fields,\n}: {\n entry: any[];\n values: any;\n fields: any;\n}) => {\n let [fieldName, operator, expectedValue] = entry;\n let valueInObject = values[fieldName];\n\n const comparisonResult = evaluateFieldComparison({\n fieldName,\n valueInObject,\n expectedValue,\n fields,\n });\n\n if (comparisonResult.directOutcome !== undefined) {\n return comparisonResult.directOutcome;\n }\n if (comparisonResult.modifiedValueInObject !== null) {\n valueInObject = comparisonResult.modifiedValueInObject;\n }\n if (comparisonResult.modifiedExpectedValue !== null) {\n expectedValue = comparisonResult.modifiedExpectedValue;\n }\n\n switch (operator.toLowerCase()) {\n case \"=\":\n case \"==\":\n return valueInObject == expectedValue;\n case \"<>\":\n case \"!=\":\n return valueInObject != expectedValue;\n case \">\":\n return valueInObject > expectedValue;\n case \">=\":\n return valueInObject >= expectedValue;\n case \"<\":\n return valueInObject < expectedValue;\n case \"<=\":\n return valueInObject <= expectedValue;\n case \"in\":\n return expectedValue.includes(valueInObject);\n case \"not in\":\n return !expectedValue.includes(valueInObject);\n default:\n return false;\n }\n};\n\nconst replaceEntities = (string: string): string => {\n return decode(string, { level: \"xml\" });\n};\n\nconst evaluateFieldComparison = ({\n fieldName,\n valueInObject,\n expectedValue,\n fields = {},\n}: FieldComparisonParams & { fields: any }): FieldComparisonResult => {\n const result: FieldComparisonResult = {\n modifiedValueInObject: valueInObject,\n modifiedExpectedValue: null,\n directOutcome: undefined,\n };\n\n if (fields[fieldName] === undefined) {\n return {\n modifiedValueInObject: null,\n modifiedExpectedValue: null,\n directOutcome: false,\n };\n }\n\n if (\n valueInObject === undefined &&\n fields[fieldName].type !== \"boolean\" &&\n fields[fieldName].type !== \"many2one\" &&\n fields[fieldName].type !== \"selection\" &&\n typeof expectedValue !== \"boolean\"\n ) {\n return {\n modifiedValueInObject: null,\n modifiedExpectedValue: null,\n directOutcome: false,\n };\n }\n\n result.modifiedValueInObject =\n fields[fieldName].type === \"boolean\" ? !!valueInObject : valueInObject;\n\n if (\n fields[fieldName].type === \"many2one\" &&\n expectedValue === false &&\n valueInObject === undefined\n ) {\n result.modifiedExpectedValue = undefined;\n } else {\n if (result.modifiedValueInObject === undefined) {\n result.modifiedValueInObject = false;\n } else if (\n Array.isArray(result.modifiedValueInObject) &&\n result.modifiedValueInObject[0] !== undefined\n ) {\n result.modifiedValueInObject = result.modifiedValueInObject[0];\n }\n\n if (result.modifiedValueInObject === null) {\n result.modifiedValueInObject = false;\n }\n }\n\n if (\n fields[fieldName].type === \"many2one\" &&\n Array.isArray(result.modifiedValueInObject) &&\n result.modifiedValueInObject[0] === undefined\n ) {\n result.modifiedValueInObject = false;\n }\n\n if (\n fields[fieldName].type === \"boolean\" &&\n (expectedValue === 0 || expectedValue === 1)\n ) {\n result.modifiedExpectedValue = expectedValue !== 0;\n }\n\n return result;\n};\n\nconst parseAttributes = ({\n attrs,\n values,\n fields,\n widgetType,\n}: {\n attrs: string;\n values: any;\n fields: any;\n widgetType?: string;\n}) => {\n const leftP = attrs.replace(/\\(/g, \"[\");\n const rightP = leftP.replace(/\\)/g, \"]\");\n const clearQuotes = rightP.replace(/'/g, '\"');\n const replaceTrue = clearQuotes.replace(/True/g, \"true\");\n const replaceFalse = replaceTrue.replace(/False/g, \"false\");\n const replaceTags = replaceEntities(replaceFalse);\n const parsedObject = JSON.parse(replaceTags);\n const newAttributes: any = {};\n\n for (const attrField of Object.keys(parsedObject)) {\n const entries = parsedObject[attrField];\n const evaluatedEntries: boolean[] = entries.map((entry: any) => {\n return evaluateCondition({ entry, values, fields });\n });\n const attrIsTrue = evaluatedEntries.every((i: boolean) => i);\n\n if (attrIsTrue) {\n newAttributes[attrField] = true;\n } else if (\n attrField === \"readonly\" &&\n !attrIsTrue &&\n widgetType === \"button\"\n ) {\n // Buttons with readonly false will have to override the default readonly\n newAttributes[attrField] = false;\n }\n }\n\n return newAttributes;\n};\n\nexport const parseWidgetProps = (widget_props: string | object): object => {\n if (widget_props === undefined) {\n return {};\n }\n if (typeof widget_props === \"string\") {\n try {\n return JSON.parse(widget_props.replace(/'/g, '\"'));\n } catch (err) {\n console.error(\"Error parsing widget_props\");\n return {};\n }\n } else {\n return widget_props;\n }\n};\n\nexport const parseJsonAttributes = ({\n attrs,\n values,\n fields,\n widgetType,\n}: {\n attrs: string;\n values: any;\n fields: any;\n widgetType?: string;\n}) => {\n try {\n const attrsWithReplacedEntities = replaceEntities(attrs);\n const jsonAttributes = JSON.parse(\n attrsWithReplacedEntities.replace(/'/g, '\"'),\n ) as JsonAttributes;\n const finalAttributes: Record<string, boolean> = {};\n for (const attrField of Object.keys(jsonAttributes)) {\n const evaluatedEntry = evaluateConscheckCondition({\n object: values,\n condition: jsonAttributes[attrField],\n evaluateFieldComparison: ({\n fieldName,\n valueInObject,\n expectedValue,\n }: FieldComparisonParams) => {\n return evaluateFieldComparison({\n fieldName,\n valueInObject,\n expectedValue,\n fields,\n });\n },\n });\n\n if (evaluatedEntry) {\n finalAttributes[attrField] = true;\n } else if (\n attrField === \"readonly\" &&\n !evaluatedEntry &&\n widgetType === \"button\"\n ) {\n // Buttons with readonly false will have to override the default readonly\n finalAttributes[attrField] = false;\n }\n }\n\n return finalAttributes;\n } catch (error) {\n console.error(error);\n if (error instanceof SyntaxError) {\n throw new Error(\n \"Error parsing new json_attrs. Original string: \" + attrs,\n );\n } else {\n throw error;\n }\n }\n};\n\nconst evaluateAttributes = ({\n tagAttributes,\n values,\n fields,\n widgetType,\n fallbackMode = true,\n}: {\n tagAttributes: any;\n values: any;\n fields: any;\n widgetType?: string;\n fallbackMode?: boolean;\n}) => {\n let finalTagAttributes = {};\n\n if (tagAttributes.json_attrs) {\n try {\n finalTagAttributes = parseJsonAttributes({\n attrs: tagAttributes.json_attrs,\n values,\n fields,\n widgetType,\n });\n } catch (error) {\n if (fallbackMode && tagAttributes.attrs) {\n finalTagAttributes = parseAttributes({\n attrs: tagAttributes.attrs,\n values,\n fields,\n widgetType,\n });\n } else {\n throw error;\n }\n }\n } else if (tagAttributes.attrs) {\n finalTagAttributes = parseAttributes({\n attrs: tagAttributes.attrs,\n values,\n fields,\n widgetType,\n });\n }\n\n return {\n ...tagAttributes,\n ...finalTagAttributes,\n attrs: undefined,\n json_attrs: undefined,\n };\n};\n\nexport { evaluateAttributes, replaceEntities };\n","type ParsedNode = {\n tagName: string;\n attributes: any;\n children: ParsedNode[];\n};\n\nconst parseBoolAttribute = (attr: any): boolean => {\n if (\n attr === 1 ||\n attr === \"1\" ||\n attr === true ||\n attr === \"True\" ||\n attr === \"true\"\n ) {\n return true;\n } else {\n return false;\n }\n};\n\nexport { ParsedNode, parseBoolAttribute };\n","import { replaceEntities, parseWidgetProps } from \"./helpers/attributeParser\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\nabstract class Widget {\n /**\n * Default colspan\n */\n static _defaultColspan: number = 1;\n static get defaultColspan() {\n return Widget._defaultColspan;\n }\n\n static set defaultColspan(value) {\n Widget._defaultColspan = value;\n }\n\n /**\n * Determines if widget is read only (default is undefined)\n */\n _readOnly: boolean | undefined;\n get readOnly(): boolean | undefined {\n return this._readOnly;\n }\n\n set readOnly(value: boolean | undefined) {\n this._readOnly = value;\n }\n\n /**\n * Column span (default is 1)\n */\n _colspan: number;\n get colspan(): number {\n return this._colspan;\n }\n\n set colspan(value: number) {\n this._colspan = +value;\n }\n\n /**\n * Invisible fields (default is false)\n */\n _invisible: boolean;\n get invisible(): boolean {\n return this._invisible;\n }\n\n set invisible(value: boolean) {\n this._invisible = value;\n }\n\n /**\n * Widget type\n */\n _type: string = \"\";\n get type(): string {\n return this._type;\n }\n\n set type(value: string) {\n this._type = value;\n }\n\n /**\n * Context\n */\n _context: any;\n get context(): any {\n return this._context;\n }\n\n set context(value: any) {\n this._context = value;\n }\n\n /**\n * Domain\n */\n _domain?: string;\n get domain(): string | undefined {\n return this._domain;\n }\n\n set domain(value: string | undefined) {\n this._domain = value;\n }\n\n /**\n * Unique key for widget\n */\n _key?: string;\n get key(): string | undefined {\n return this._key;\n }\n\n set key(value: string | undefined) {\n this._key = value;\n }\n\n _parsedWidgetProps: any = {};\n get parsedWidgetProps(): any {\n return this._parsedWidgetProps;\n }\n\n set parsedWidgetProps(value: any) {\n this._parsedWidgetProps = value;\n }\n\n _isFunction: boolean | undefined;\n get isFunction(): boolean | undefined {\n return this._isFunction;\n }\n\n set isFunction(value: boolean | undefined) {\n this._isFunction = value;\n }\n\n _isSortable: boolean = false;\n get isSortable(): boolean {\n return this._isSortable;\n }\n\n /**\n * Base type of the field\n */\n _fieldType: string = \"\";\n get fieldType(): string {\n return this._fieldType;\n }\n\n constructor(props?: any) {\n this._colspan = Widget._defaultColspan;\n this._invisible = false;\n\n if (props) {\n if (props.colspan) {\n this._colspan = +props.colspan;\n }\n if (props.readonly !== undefined) {\n this._readOnly = parseBoolAttribute(props.readonly);\n }\n if (props.invisible) {\n if (\n props.invisible === 1 ||\n props.invisible === \"1\" ||\n props.invisible === true\n ) {\n this._invisible = true;\n }\n }\n if (props.type) {\n this._type = props.type;\n }\n if (props.context) {\n this._context = props.context;\n }\n if (props.domain) {\n if (typeof props.domain !== \"string\") {\n this._domain = replaceEntities(JSON.stringify(props.domain));\n } else {\n this._domain = replaceEntities(props.domain);\n }\n }\n if (props.type) {\n this._fieldType = props.fieldsWidgetType;\n }\n if (props.widget_props) {\n this._parsedWidgetProps = parseWidgetProps(props.widget_props);\n }\n if (props.key) {\n this._key = props.key;\n }\n if (props.is_function) {\n this._isFunction = props.is_function;\n }\n if (props.is_sortable) {\n this._isSortable = props.is_sortable;\n }\n }\n }\n\n abstract findById(id: string): Widget | null;\n}\n\nexport default Widget;\n","import Widget from \"./Widget\";\nimport { replaceEntities, isTrue } from \"./helpers/attributeParser\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\nclass Field extends Widget {\n /**\n * Field identifier\n *\n * Corresponds to the field's name attribute from xml\n */\n _id: string = \"\";\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n }\n\n /**\n * Label\n */\n _label: string = \"\";\n get label(): string {\n return this._label;\n }\n\n set label(value: string) {\n this._label = value;\n }\n\n /**\n * No label\n *\n * This field hasn't got to show the label\n *\n */\n _nolabel: boolean = false;\n get nolabel(): boolean {\n return this._nolabel;\n }\n\n set nolabel(value: boolean) {\n this._nolabel = value;\n }\n\n /**\n *\n * Required field\n *\n */\n _required: boolean = false;\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = value;\n }\n\n /**\n * Tooltip\n */\n _tooltip?: string;\n get tooltip(): string | undefined {\n return this._tooltip;\n }\n\n set tooltip(value: string | undefined) {\n this._tooltip = value;\n }\n\n /**\n * Tooltip inline\n */\n _tooltipInline: boolean = false;\n get tooltipInline(): boolean {\n return this._tooltipInline;\n }\n\n set tooltipInline(value: boolean) {\n this._tooltipInline = value;\n }\n\n /**\n * Activated (default is true)\n */\n _activated: boolean = true;\n get activated(): boolean {\n return this._activated;\n }\n\n set activated(value: boolean) {\n this._activated = value;\n }\n\n /**\n * Sum - sum parameter (label), this will mean that we have to sum this field in the tree\n */\n _sum?: string;\n get sum(): string | undefined {\n return this._sum;\n }\n\n set sum(value: string | undefined) {\n this._sum = value;\n }\n\n get suffix(): string {\n return this._parsedWidgetProps.suffix || \"\";\n }\n\n get prefix(): string {\n return this._parsedWidgetProps.prefix || \"\";\n }\n\n /**\n * Values and keys\n */\n _selectionValues: Map<string, string> = new Map([]);\n get selectionValues(): Map<string, string> {\n return this._selectionValues;\n }\n\n set selectionValues(value: Map<string, string>) {\n this._selectionValues = value;\n }\n\n _autoRefresh?: boolean = false;\n get autoRefresh(): boolean {\n return this._autoRefresh ?? false;\n }\n\n set autoRefresh(value: boolean) {\n this._autoRefresh = value;\n }\n\n get readOnly(): boolean | undefined {\n if (this.autoRefresh) {\n return true;\n } else {\n return super.readOnly;\n }\n }\n\n set readOnly(value: boolean | undefined) {\n super.readOnly = value;\n }\n\n _raw_props: any;\n get raw_props(): any {\n return this._raw_props;\n }\n\n constructor(props: any) {\n super(props);\n\n // Activated by default\n this._activated = true;\n\n if (props) {\n this._raw_props = props;\n if (props.name) {\n this._id = props.name;\n }\n\n if (props.activated) {\n this._activated = props.activated;\n }\n\n if (props.string) {\n this._label = replaceEntities(props.string);\n }\n\n if (props.help) {\n this._tooltip = replaceEntities(props.help);\n }\n\n if (\n props.nolabel &&\n (props.nolabel === \"1\" ||\n (typeof props.nolabel === \"boolean\" && props.nolabel === true))\n ) {\n this._nolabel = true;\n }\n\n if (\n props.required &&\n (props.required === \"1\" ||\n props.required === true ||\n props.required === \"True\")\n ) {\n this._required = true;\n }\n\n if (props.sum) {\n this._sum = replaceEntities(props.sum);\n }\n\n if (props.selection) {\n this._selectionValues = new Map(props.selection);\n }\n\n if (props.help_inline) {\n this.tooltipInline = isTrue(props.help_inline);\n }\n if (props.autorefresh) {\n this.autoRefresh = parseBoolAttribute(props.autorefresh);\n }\n }\n }\n\n /**\n * Returns this instance in case this id matches param id.\n * @param {string} id id (name) to find\n */\n findById(id: string): Field | null {\n if (this._id === id) {\n return this;\n }\n return null;\n }\n}\n\nexport default Field;\n","import Field from \"./Field\";\n\nclass Avatar extends Field {}\n\nexport default Avatar;\n","import Widget from \"./Widget\";\n\nclass NewLine extends Widget {\n findById(id: string): null {\n return null;\n }\n}\n\nexport default NewLine;\n","import Field from \"./Field\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\ntype LabelType = \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"default\";\ntype LabelSize = 1 | 2 | 3 | 4 | 5 | undefined;\n\nclass Label extends Field {\n /**\n * Label text\n */\n _text: string = \"\";\n get text(): string {\n return this._text;\n }\n\n set text(value: string) {\n this._text = value;\n }\n\n /**\n * Align text\n */\n _align: string = \"left\";\n get align(): string {\n return this._align;\n }\n\n set align(value: string) {\n this._align = value;\n }\n\n /**\n * Label type\n */\n _labelType: LabelType = \"default\";\n get labelType(): LabelType {\n return this._labelType;\n }\n\n set labelType(value: LabelType) {\n this._labelType = value;\n }\n\n /**\n * Label size\n */\n _labelSize: LabelSize = undefined;\n get labelSize(): LabelSize {\n return this._labelSize;\n }\n\n set labelSize(value: LabelSize) {\n this._labelSize = value;\n }\n\n get humanDate(): boolean {\n return parseBoolAttribute(this._parsedWidgetProps?.human_date ?? false);\n }\n\n /**\n * Id of the field that this label goes with. Null if it's an independent label\n */\n _fieldForLabel: string | null = null;\n get fieldForLabel(): string | null {\n return this._fieldForLabel;\n }\n\n set fieldForLabel(value: string | null) {\n this._fieldForLabel = value;\n }\n\n constructor(props?: any) {\n super({ ...props, nolabel: true });\n\n if (props?.fieldForLabel) {\n this._fieldForLabel = props.fieldForLabel;\n }\n if (props.widget_props) {\n if (this.parsedWidgetProps.label_type) {\n this.labelType = this.parsedWidgetProps.label_type;\n }\n if (this.parsedWidgetProps.label_size) {\n this.labelSize = this.parsedWidgetProps.label_size;\n }\n }\n }\n}\n\nexport default Label;\n","import Field from \"./Field\";\nimport NewLine from \"./NewLine\";\nimport Widget from \"./Widget\";\nimport Label from \"./Label\";\n\ntype AddWidgetOptions = {\n addLabel: boolean;\n};\n\nclass Container {\n /**\n * Number of columns the container is divided\n */\n _columns: number;\n get columns(): number {\n return this._columns;\n }\n\n set columns(value: number) {\n this._columns = value;\n }\n\n /**\n * Number of columns to use\n */\n _colspan: number;\n get colspan(): number {\n return this._colspan;\n }\n\n set colspan(value: number) {\n this._colspan = value;\n }\n\n /**\n * Number of rows\n */\n _rows: Widget[][];\n get rows(): Widget[][] {\n return this._rows;\n }\n\n set rows(value: Widget[][]) {\n this._rows = value;\n }\n\n _index: number;\n get index(): number {\n return this._index;\n }\n\n /**\n * Determines if widget is read only (default is false)\n */\n _readOnly: boolean;\n get readOnly(): boolean {\n return this._readOnly;\n }\n\n set readOnly(value: boolean) {\n this._readOnly = value;\n }\n\n /**\n * Unique key for container\n */\n _key?: string;\n get key(): string | undefined {\n return this._key;\n }\n\n set key(value: string | undefined) {\n this._key = value;\n }\n\n constructor(\n columns: number = 4,\n colspan: number = 6,\n readOnly: boolean = false,\n key: string | undefined = undefined,\n ) {\n this._columns = columns;\n this._colspan = colspan;\n this._rows = [[]];\n this._index = 0;\n this._readOnly = readOnly;\n this._key = key;\n }\n\n /**\n * Returns the next free position\n */\n freePosition(): number {\n const span = this._rows[this._index]\n .filter((el) => {\n return !el.invisible;\n })\n .reduce((prev, current) => {\n return prev + current.colspan;\n }, 0);\n return this._columns - span;\n }\n\n addWidget(widget: Widget, options?: AddWidgetOptions) {\n const widgetsToAdd: Widget[] = [];\n const addLabel = options ? options.addLabel : true;\n\n if (widget instanceof NewLine) {\n this._rows.push([]);\n this._index++;\n return;\n }\n\n if (widget.colspan > this._columns) {\n // Widget colspan is greater than container columns, so we change widget\n // colspan to fit container columns.\n widget.colspan = this._columns;\n }\n\n // If the container is set to readonly, reflect it to its children\n widget.readOnly = widget.readOnly || this.readOnly;\n\n // For fields without nolabel we add a preceding label widget\n if (addLabel && widget instanceof Field && !widget.nolabel) {\n if (widget.colspan > 1) {\n widget.colspan -= 1; // We substract one colspan for the corresponding label\n }\n\n const label = new Label({\n name: widget.id + \"_label\",\n string: widget.label,\n invisible: widget.invisible,\n help: widget.tooltip,\n fieldForLabel: widget.id,\n key: `${widget.key!}-label`,\n });\n label.type = \"label\";\n\n widgetsToAdd.push(label);\n widgetsToAdd.push(widget);\n } else {\n widgetsToAdd.push(widget);\n }\n\n const widgetsColspan = widgetsToAdd.reduce(\n (accumulator: number, currentWidget: Widget) => {\n return accumulator + currentWidget.colspan;\n },\n 0,\n );\n\n if (widgetsColspan > this.freePosition()) {\n this._rows.push([]);\n this._index++;\n }\n\n this._rows[this._index] = this._rows[this._index].concat(widgetsToAdd);\n }\n\n /**\n * Traverses children to find a matching container or widget with the exact same id.\n * @param {string} id id (name) of the field or container to find\n */\n findById(id: string): Widget | null {\n let r: Widget | null = null;\n if (this._rows?.length) {\n this._rows.forEach((row) => {\n if (r) {\n // Item has been found.\n return;\n }\n\n if (row?.length) {\n row.forEach((item) => {\n if (r) {\n // Item has been found.\n return;\n }\n if (item) {\n r = item.findById(id);\n }\n });\n }\n });\n }\n return r;\n }\n}\n\nexport default Container;\n","import Widget from \"./Widget\";\nimport Container from \"./Container\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass ContainerWidget extends Widget {\n /**\n * Field identifier\n *\n * Corresponds to the field's name attribute from xml\n */\n _id: string = \"\";\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n }\n\n static _defaultColspan: number = 6;\n static get defaultColspan(): number {\n return ContainerWidget._defaultColspan;\n }\n\n static set defaultColspan(value: number) {\n ContainerWidget._defaultColspan = value;\n }\n\n /**\n * Container\n */\n _container: Container;\n get container(): Container {\n return this._container;\n }\n\n set container(value: Container) {\n this._container = value;\n }\n\n get colspan(): number {\n return this._container.colspan;\n }\n\n set colspan(value: number) {\n this._container.colspan = +value;\n }\n\n /**\n * Must expand widget\n */\n _mustExpand: boolean = false;\n get mustExpand(): boolean {\n return this._mustExpand;\n }\n\n set mustExpand(value: boolean) {\n this._mustExpand = value;\n }\n\n /**\n * Container label\n */\n _label: string = \"\";\n get label(): string {\n return this._label;\n }\n\n set label(value: string) {\n this._label = value;\n }\n\n constructor(props?: any) {\n super(props);\n\n this._container = new Container(\n props?.col,\n ContainerWidget._defaultColspan,\n this.readOnly,\n props?.key,\n );\n\n if (props) {\n if (props.name) {\n this._id = props.name;\n }\n\n if (props.colspan) {\n this._container.colspan = +props.colspan;\n } else {\n this._mustExpand = true;\n }\n\n if (props.string) {\n this._label = replaceEntities(props.string);\n }\n }\n }\n\n /**\n * Calls container's findById method to find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Widget | null {\n if (id === this.id) {\n return this;\n }\n\n return this.container.findById(id);\n }\n}\n\nexport default ContainerWidget;\n","import ContainerWidget from \"./ContainerWidget\";\nimport Page from \"./Page\";\n\nexport type TabPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nclass Notebook extends ContainerWidget {\n static _defaultColspan: number = 3;\n static get defaultColspan(): number {\n return Notebook._defaultColspan;\n }\n\n static set defaultColspan(value: number) {\n Notebook._defaultColspan = value;\n }\n\n _tabPosition: TabPosition = \"top\";\n get tabPosition(): TabPosition {\n return this._tabPosition;\n }\n\n set tabPosition(value: TabPosition) {\n this._tabPosition = value;\n }\n\n _pages: Page[] = [];\n get pages(): Page[] {\n return [].concat.apply([], this._container.rows) as Page[];\n }\n\n constructor(props: any) {\n super(props);\n this.colspan = Notebook._defaultColspan;\n\n if (props) {\n if (props.colspan) {\n this.colspan = props.colspan;\n }\n if (props.tabpos) {\n this._tabPosition = props.tabpos;\n }\n }\n }\n}\n\nexport default Notebook;\n","import ContainerWidget from \"./ContainerWidget\";\n\nclass Spinner extends ContainerWidget {\n _loading = false;\n get loading(): boolean {\n return this._loading;\n }\n\n set loading(value: boolean) {\n this._loading = value;\n }\n\n constructor(props?: any) {\n super(props);\n if (props) {\n if (props.loading) {\n this._loading = props.loading;\n }\n }\n }\n}\n\nexport default Spinner;\n","import Spinner from \"./Spinner\";\n\nclass Page extends Spinner {\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props.icon) {\n this._icon = props.icon;\n }\n }\n}\n\nexport default Page;\n","import Spinner from \"./Spinner\";\n\nclass Group extends Spinner {\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n _height: number | undefined;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n _backgroundColor: string | undefined = undefined;\n get backgroundColor(): string | undefined {\n return this._backgroundColor;\n }\n\n set backgroundColor(value: string | undefined) {\n this._backgroundColor = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props) {\n if (props.icon) {\n this._icon = props.icon;\n }\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n console.log(\"Error parsing height\");\n this._height = undefined;\n }\n }\n }\n if (this._parsedWidgetProps?.backgroundColor) {\n this._backgroundColor = this._parsedWidgetProps.backgroundColor;\n }\n }\n}\n\nexport default Group;\n","import Field from \"./Field\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass Button extends Field {\n /**\n * Type\n */\n _buttonType: \"workflow\" | \"action\" | \"object\" | \"cancel\" = \"workflow\";\n get buttonType() {\n return this._buttonType;\n }\n\n set buttonType(value) {\n this._buttonType = value;\n }\n\n /**\n * Button caption\n */\n _caption: string = \"\";\n get caption(): string {\n return this._caption;\n }\n\n set caption(value: string) {\n this._caption = value;\n }\n\n /**\n * Button icon\n */\n _icon: string | undefined;\n get icon(): string | undefined {\n return this._icon;\n }\n\n set icon(value: string | undefined) {\n this._icon = value;\n }\n\n /**\n * Confirm string for modal in button types workflow\n */\n _confirmMessage: string = \"\";\n get confirmMessage(): string {\n return this._confirmMessage;\n }\n\n set confirmMessage(value: string) {\n this._confirmMessage = value;\n }\n\n _primary: boolean = false;\n get primary(): boolean {\n return this._primary;\n }\n\n set primary(value: boolean) {\n this._primary = value;\n }\n\n _danger: boolean = false;\n get danger(): boolean {\n return this._danger;\n }\n\n set danger(value: boolean) {\n this._danger = value;\n }\n\n constructor(props: any) {\n super({\n ...props,\n nolabel: props?.nolabel !== undefined ? props.nolabel : true,\n });\n\n if (props) {\n if (props.string) {\n this._caption = replaceEntities(props.string);\n }\n\n if (props.buttonType) {\n this._buttonType = props.buttonType;\n }\n\n if (props.confirm) {\n this._confirmMessage = replaceEntities(props.confirm);\n }\n\n if (props.special && props.special === \"cancel\") {\n this._buttonType = \"cancel\";\n }\n\n if (props.icon) {\n this._icon = props.icon;\n }\n if (props.primary) {\n const primary = props.primary;\n if (primary === \"1\" || primary === 1 || primary === true) {\n this._primary = true;\n }\n }\n if (props.danger) {\n const danger = props.danger;\n if (danger === \"1\" || danger === 1 || danger === true) {\n this._danger = true;\n }\n }\n }\n }\n}\n\nexport default Button;\n","import Button from \"./Button\";\nimport ContainerWidget from \"./ContainerWidget\";\n\nclass ButtonGroup extends ContainerWidget {\n _defaultName: string = \"\";\n get defaultName(): string {\n return this._defaultName;\n }\n\n get defaultButton(): Button | undefined {\n const btn = this.buttons.find((button) => button.id === this.defaultName);\n return btn || this.buttons[0];\n }\n\n get colspan(): number {\n return this.defaultButton?.colspan || 1;\n }\n\n set colspan(value: number) {\n if (this.defaultButton) {\n this.defaultButton.colspan = value;\n }\n }\n\n get secondaryButtons(): Button[] {\n const btns = this.buttons.filter(\n (button) => button.id !== this.defaultButton?.id,\n );\n return btns;\n }\n\n get buttons(): Button[] {\n return this._container.rows.flat().filter((b) => !b.invisible) as Button[];\n }\n\n constructor(props: any) {\n super(props);\n if (props.default) {\n this._defaultName = props.default;\n }\n }\n}\n\nexport default ButtonGroup;\n","import Field from \"./Field\";\n\n/**\n * One-line input with a length limit.\n */\nclass Char extends Field {\n /**\n * Field place holder\n */\n _placeholder: string = \"\";\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n }\n\n get showCount(): boolean {\n return this.parsedWidgetProps.showCount || false;\n }\n\n /**\n * Field size\n */\n _size: number | undefined;\n get size(): number | undefined {\n return this._size;\n }\n\n set size(value: number | undefined) {\n this._size = value;\n }\n\n _isPassword: boolean = false;\n get isPassword(): boolean {\n return this._isPassword;\n }\n\n set isPassword(value: boolean) {\n this._isPassword = value;\n }\n\n _translatable: boolean = false;\n get translatable(): boolean {\n return this._translatable;\n }\n\n set translatable(value: boolean) {\n this._translatable = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.password) {\n this.isPassword = props.password === \"True\";\n }\n\n if (props.translate) {\n this.translatable = !!(\n props.translate === \"True\" || props.translate === true\n );\n }\n }\n }\n}\n\nexport default Char;\n","import Field from \"./Field\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\n/**\n * Multiline input with no length limit.\n */\nclass Text extends Field {\n /**\n * Field place holder\n */\n _placeholder: string = \"\";\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n }\n\n get showCount(): boolean {\n return this.parsedWidgetProps.showCount || false;\n }\n\n /**\n * Field size\n */\n _size: number | undefined;\n get size(): number | undefined {\n return this._size;\n }\n\n set size(value: number | undefined) {\n this._size = value;\n }\n\n /**\n * Must expand widget\n */\n _mustExpand: boolean = false;\n get mustExpand(): boolean {\n return this._mustExpand;\n }\n\n set mustExpand(value: boolean) {\n this._mustExpand = value;\n }\n\n /**\n * Height\n */\n _height: number | undefined;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n _translatable: boolean = false;\n get translatable(): boolean {\n return this._translatable;\n }\n\n set translatable(value: boolean) {\n this._translatable = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.placeholder) {\n this._placeholder = replaceEntities(props.placeholder);\n }\n\n if (!props.colspan) {\n this._mustExpand = true;\n }\n\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n this._height = undefined;\n }\n }\n\n if (props.translate) {\n this.translatable = !!(\n props.translate === \"True\" || props.translate === true\n );\n }\n if (props.size) {\n this.size = parseInt(props.size);\n }\n }\n }\n}\n\nexport default Text;\n","import Field from \"./Field\";\n\n/**\n * Selection field for key-value lists\n */\nclass Selection extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n }\n }\n}\n\nexport default Selection;\n","import Field from \"./Field\";\n\n/**\n * A many2one relationship field\n */\nclass Many2one extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n get showFolder(): boolean | undefined {\n return this.parsedWidgetProps.showFolder;\n }\n\n get showSearch(): boolean | undefined {\n return this.parsedWidgetProps.showSearch;\n }\n\n get showMenu(): boolean | undefined {\n return this.parsedWidgetProps.showMenu;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.relation) {\n this._relation = props.relation;\n }\n }\n }\n}\n\nexport default Many2one;\n","import Text from \"./Text\";\n\nclass Markdown extends Text {}\n\nexport default Markdown;\n","import Field from \"./Field\";\n\n/**\n * Boolean input\n */\nclass Boolean extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Boolean;\n","import Field from \"./Field\";\n\n/**\n * Integer input\n */\nclass Integer extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Integer;\n","import Field from \"./Field\";\n\n/**\n * Float input\n */\nclass Float extends Field {\n /**\n * Integer digits\n *\n * Number of integer digits that will be part of the float\n */\n _integerDigits: number = 16;\n get integerDigits(): number {\n return this._integerDigits;\n }\n\n set integerDigits(value: number) {\n this._integerDigits = value;\n }\n\n /**\n * Decimal digits\n *\n * Number of decimal digits that will be part of the float\n */\n _decimalDigits: number = 2;\n get decimalDigits(): number {\n return this._decimalDigits;\n }\n\n set decimalDigits(value: number) {\n this._decimalDigits = value;\n }\n\n constructor(props?: any) {\n super(props);\n\n if (props?.digits) {\n const [integers, decimals] = props.digits;\n this._integerDigits = integers;\n this._decimalDigits = decimals;\n }\n }\n}\n\nexport default Float;\n","import Float from \"./Float\";\n\n/**\n * FloatTime input\n */\nclass FloatTime extends Float {}\n\nexport default FloatTime;\n","import Field from \"./Field\";\n\nclass HTMLPreview extends Field {}\n\nexport default HTMLPreview;\n","import Float from \"./Float\";\n\n/**\n * ProgressBar input\n */\nclass ProgressBar extends Float {}\n\nexport default ProgressBar;\n","import Field from \"./Field\";\n\n/**\n * Date input\n */\nclass Date extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Date;\n","import Field from \"./Field\";\n\n/**\n * DateTime input\n */\nclass DateTime extends Field {\n _timezone: string | undefined = undefined;\n\n get timezone(): string | undefined {\n return this._timezone;\n }\n\n set timezone(value: string | undefined) {\n this._timezone = value;\n }\n\n constructor(props?: { timezone?: string } & any) {\n super(props);\n this._timezone = props?.timezone || undefined;\n }\n}\n\nexport default DateTime;\n","import Field from \"./Field\";\n\n/**\n * A One2Many relationship field\n */\nclass One2many extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n /**\n * Inv_field\n */\n _inv_field: string | undefined;\n get inv_field(): string | undefined {\n return this._inv_field;\n }\n\n set inv_field(value: string | undefined) {\n this._inv_field = value;\n }\n\n /**\n * Views\n */\n _views: any = null;\n get views(): any {\n return this._views;\n }\n\n set views(value: any) {\n this._views = value;\n }\n\n /**\n * Mode\n */\n _mode: string[] = [];\n get mode(): string[] {\n return this._mode;\n }\n\n set mode(value: string[]) {\n this._mode = value;\n }\n\n /**\n * Must expand widget\n */\n _mustExpand: boolean = false;\n get mustExpand(): boolean {\n return this._mustExpand;\n }\n\n set mustExpand(value: boolean) {\n this._mustExpand = value;\n }\n\n /**\n * Height\n */\n _height?: number;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n }\n\n /**\n * Infinite mode\n */\n _infinite: string | boolean | undefined = undefined;\n get infinite(): string | boolean | undefined {\n return this._infinite;\n }\n\n set infinite(value: string | undefined) {\n this._infinite = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.relation) {\n this._relation = props.relation;\n }\n\n if (props.mode) {\n this._mode = props.mode.split(\",\");\n }\n\n if (props.views) {\n this._views = props.views;\n }\n\n if (props.colspan) {\n this.colspan = props.colspan;\n } else {\n this._mustExpand = true;\n }\n\n if (props.inv_field) {\n this._inv_field = props.inv_field;\n }\n\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n this._height = undefined;\n }\n }\n\n if (props.widget_props) {\n this._infinite = props.widget_props.infinite;\n }\n }\n }\n}\n\nexport default One2many;\n","import Widget from \"./Widget\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass Separator extends Widget {\n /**\n * Label\n */\n _label: string = \"\";\n get label(): string {\n return this._label;\n }\n\n set label(value: string) {\n this._label = value;\n }\n\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.string) {\n this._label = replaceEntities(props.string);\n }\n if (props.icon) {\n this._icon = props.icon;\n }\n }\n }\n\n findById(id: string): null {\n return null;\n }\n}\n\nexport default Separator;\n","import Selection from \"./Selection\";\n\n/**\n * Reference field for key-value Many2One behaviour\n */\nclass Reference extends Selection {}\n\nexport default Reference;\n","import Field from \"./Field\";\n\n/**\n * Binary base64 field\n */\nclass Binary extends Field {\n /**\n * Filename field name\n */\n _filenameField: string = \"\";\n get filenameField(): string {\n return this._filenameField;\n }\n\n set filenameField(value: string) {\n this._filenameField = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.filename) {\n this._filenameField = props.filename;\n }\n }\n }\n}\n\nexport default Binary;\n","import Field from \"./Field\";\n\n/**\n * Image base64 field\n */\nclass Image extends Field {\n get showControls(): boolean {\n return this.parsedWidgetProps?.showControls ?? true;\n }\n}\n\nexport default Image;\n","import Field from \"./Field\";\n\nclass FiberGrid extends Field {\n constructor(props: any) {\n super(props);\n }\n}\n\nexport default FiberGrid;\n","import One2many from \"./One2many\";\n\nclass Timeline extends One2many {\n /**\n * Title field\n */\n _titleField: string;\n get titleField(): string {\n return this._titleField;\n }\n\n set titleField(value: string) {\n this._titleField = value;\n }\n\n /**\n * Summary field\n */\n _summaryField: string;\n get summaryField(): string {\n return this._summaryField;\n }\n\n set summaryField(value: string) {\n this._summaryField = value;\n }\n\n get iconField(): string {\n return this.parsedWidgetProps.iconField;\n }\n\n get colorField(): string {\n return this.parsedWidgetProps.colorField;\n }\n\n constructor(props: any) {\n super(props);\n this._titleField = \"\";\n this._summaryField = \"\";\n if (this._parsedWidgetProps) {\n this._titleField = this._parsedWidgetProps.titleField;\n this._summaryField = this.parsedWidgetProps.summaryField;\n }\n }\n}\n\nexport default Timeline;\n","import Selection from \"./Selection\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\n\nclass Indicator extends Selection {\n _nolabel: boolean = true;\n\n _card: boolean;\n get card(): boolean {\n return this._card;\n }\n\n set card(value: boolean) {\n this._card = value;\n }\n\n _icon: string;\n get icon(): string {\n return this._icon;\n }\n\n set icon(value: string) {\n this._icon = value;\n }\n\n _suffix: string;\n get suffix(): string {\n return this._suffix;\n }\n\n set suffix(value: string) {\n this._suffix = value;\n }\n\n _color: string = \"\";\n get color(): string {\n return this._color;\n }\n\n /**\n * Action id\n */\n _actionId: number | undefined = undefined;\n get actionId(): number | undefined {\n return this._actionId;\n }\n\n set actionId(value: number | undefined) {\n this._actionId = value;\n }\n\n /**\n * Action field\n */\n _actionField: string | undefined = undefined;\n get actionField(): string | undefined {\n return this._actionField;\n }\n\n set actionField(value: string | undefined) {\n this._actionField = value;\n }\n\n _height: number | undefined;\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n constructor(props: any) {\n super(props);\n this._card = false;\n this._icon = \"\";\n this._suffix = \"\";\n if (this._parsedWidgetProps) {\n this._card = this._parsedWidgetProps.card || false;\n this._icon = replaceEntities(this._parsedWidgetProps.icon) || \"\";\n this._suffix = this._parsedWidgetProps.suffix || \"\";\n this._color = replaceEntities(this._parsedWidgetProps.color) || \"\";\n }\n if (props) {\n if (props.action_id) {\n this._actionId = parseInt(props.action_id);\n }\n if (props.action_field) {\n this._actionField = props.action_field;\n }\n if (props.height) {\n try {\n this._height = parseInt(props.height);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n}\n\nexport default Indicator;\n","import Field from \"./Field\";\n\n/**\n * A Tags widget\n */\nclass MultiCheckbox extends Field {\n /**\n * Field size\n */\n _size: number = 150;\n get size(): number {\n return this._size;\n }\n\n set size(value: number) {\n this._size = value;\n }\n\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n /**\n * Inv_field\n */\n _inv_field: string | undefined;\n get inv_field(): string | undefined {\n return this._inv_field;\n }\n\n set inv_field(value: string | undefined) {\n this._inv_field = value;\n }\n\n /**\n * field to define the value to show\n */\n _field: string = \"name\";\n get field(): string {\n return this._field;\n }\n\n set field(value: string) {\n this._field = value;\n }\n\n _columns: number = 4;\n get columns(): number {\n return this._columns;\n }\n\n set columns(value: number) {\n this._columns = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.size) {\n this._size = props.size;\n }\n\n if (props.relation) {\n this._relation = props.relation;\n }\n\n if (props.inv_field) {\n this._inv_field = props.inv_field;\n }\n if (this.parsedWidgetProps.hasOwnProperty(\"field\")) {\n this._field = this.parsedWidgetProps.field;\n }\n if (this.parsedWidgetProps.columns) {\n this._columns = this.parsedWidgetProps.columns;\n }\n }\n }\n}\n\nexport default MultiCheckbox;\n","import MultiCheckbox from \"./MultiCheckbox\";\n\n/**\n * A Tags widget\n */\nclass Tags extends MultiCheckbox {}\n\nexport default Tags;\n","import Selection from \"./Selection\";\n\n/**\n * A Tag widget\n */\nclass Tag extends Selection {\n get colors(): any | \"auto\" {\n return this._parsedWidgetProps.colors || {};\n }\n\n get colorField(): string | null {\n return this._parsedWidgetProps?.colorField || null;\n }\n}\n\nexport default Tag;\n","import Selection from \"./Selection\";\n\ntype directionType = \"horizontal\" | \"vertical\";\n\n/**\n * Selection field for key-value lists\n */\nclass Radio extends Selection {\n /**\n * Define the direction\n */\n _direction: directionType = \"horizontal\";\n get direction(): directionType {\n return this._direction;\n }\n\n set direction(value: directionType) {\n this._direction = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (this.parsedWidgetProps.hasOwnProperty(\"direction\")) {\n this._direction = this.parsedWidgetProps.direction;\n }\n }\n }\n}\n\nexport default Radio;\n","import Boolean from \"./Boolean\";\n\n/**\n * Switch\n */\nclass Switch extends Boolean {}\n\nexport default Switch;\n","import Field from \"./Field\";\n\n/**\n * A many2one relationship field\n */\nclass Steps extends Field {\n /**\n * Relation\n */\n _relation: string = \"\";\n get relation(): string {\n return this._relation;\n }\n\n set relation(value: string) {\n this._relation = value;\n }\n\n _errorField: string | null = null;\n get errorField(): string | null {\n return this._errorField;\n }\n\n set errorField(value: string | null) {\n this._errorField = value;\n }\n\n _lastStep: boolean | null = true;\n\n get lastStep(): boolean | null {\n return this._lastStep;\n }\n\n set lastStep(value: boolean | null) {\n this._lastStep = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (props.relation) {\n this._relation = props.relation;\n }\n\n if (this.parsedWidgetProps.hasOwnProperty(\"error_field\")) {\n this._errorField = this.parsedWidgetProps.error_field;\n }\n if (this.parsedWidgetProps.hasOwnProperty(\"last_step\")) {\n this._lastStep = this.parsedWidgetProps.last_step;\n }\n }\n }\n}\n\nexport default Steps;\n","import Text from \"./Text\";\n\n/**\n * A CodeEditor widget\n */\nclass CodeEditor extends Text {\n _lang: string | null = null;\n get lang(): string | null {\n return this._lang;\n }\n\n set lang(value: string | null) {\n this._lang = value;\n }\n\n constructor(props: any) {\n super(props);\n\n if (props) {\n if (this.parsedWidgetProps.lang) {\n this._lang = this.parsedWidgetProps.lang;\n }\n }\n }\n}\n\nexport default CodeEditor;\n","import Field from \"./Field\";\n\n/**\n * Time input\n */\nclass Time extends Field {\n constructor(props?: any) {\n super(props);\n }\n}\n\nexport default Time;\n","import ContainerWidget from \"./ContainerWidget\";\nimport Button from \"./Button\";\n\ntype AlertType = \"success\" | \"warning\" | \"info\" | \"error\" | undefined;\n\nclass Alert extends ContainerWidget {\n /**\n * Alert type\n */\n _alertType: AlertType = \"info\";\n get alertType(): AlertType {\n return this._alertType;\n }\n\n set alertType(value: AlertType) {\n this._alertType = value;\n }\n\n _title: string = \"\";\n get title(): string {\n return this._title;\n }\n\n set title(value: string) {\n this._title = value;\n }\n\n _text: string = \"\";\n get text(): string {\n return this._text;\n }\n\n set text(value: string) {\n this._text = value;\n }\n\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n set icon(value: string | null) {\n this._icon = value;\n }\n\n get buttons(): Button[] {\n return this._container.rows.flat().filter((b) => !b.invisible) as Button[];\n }\n\n constructor(props: any) {\n super(props);\n if (props) {\n if (props.alert_type) {\n this._alertType = props.alert_type;\n }\n if (props.title) {\n this._title = props.title;\n }\n if (props.text) {\n this._text = props.text;\n }\n if (props.icon) {\n this._icon = props.icon;\n }\n }\n }\n}\n\nexport default Alert;\n","import Field from \"./Field\";\n\nclass Comments extends Field {\n /**\n * Height of the comments component\n */\n _height: number | undefined = undefined;\n\n get height(): number | undefined {\n return this._height;\n }\n\n set height(value: number | undefined) {\n this._height = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props.height) {\n const parsedHeight = parseInt(props.height);\n this._height = isNaN(parsedHeight) ? undefined : parsedHeight;\n }\n }\n}\n\nexport default Comments;\n","import CodeEditor from \"./CodeEditor\";\n\nclass JSONField extends CodeEditor {\n _lang = \"json\";\n}\n\nexport default JSONField;\n","import Field from \"./Field\";\n\nclass Email extends Field {\n _multi: boolean = false;\n get multi(): boolean {\n return this._multi;\n }\n\n set multi(value: boolean) {\n this._multi = value;\n }\n\n _size: number | undefined;\n get size(): number | undefined {\n return this._size;\n }\n\n set size(value: number | undefined) {\n this._size = value;\n }\n\n constructor(props: any) {\n super(props);\n if (props) {\n if (props.size) {\n this.size = props.size;\n }\n }\n if (this.parsedWidgetProps.multi) {\n this.multi = this.parsedWidgetProps.multi;\n }\n }\n}\n\nexport default Email;\n","import ContainerWidget from \"./ContainerWidget\";\nimport Group from \"./Group\";\nimport { parseBoolAttribute } from \"./helpers/nodeParser\";\n\nclass Carousel extends ContainerWidget {\n _autoPlay = true;\n\n get autoPlay(): boolean {\n return this._autoPlay;\n }\n\n set autoPlay(value: boolean) {\n this._autoPlay = value;\n }\n\n get items(): Group[] {\n return this._container.rows.flat().filter((g) => !g.invisible) as Group[];\n }\n\n constructor(props?: any) {\n super(props);\n if (props) {\n if (\"auto_play\" in props) {\n this._autoPlay = parseBoolAttribute(props.auto_play);\n }\n }\n }\n}\n\nexport default Carousel;\n","import Char from \"./Char\";\n\nclass ColorPicker extends Char {\n get showText(): boolean {\n return this.parsedWidgetProps.show_text ?? true;\n }\n}\n\nexport default ColorPicker;\n","import Notebook from \"./Notebook\";\nimport Page from \"./Page\";\nimport Group from \"./Group\";\nimport Button from \"./Button\";\nimport ButtonGroup from \"./ButtonGroup\";\nimport Label from \"./Label\";\nimport Char from \"./Char\";\nimport Text from \"./Text\";\nimport Selection from \"./Selection\";\nimport Many2one from \"./Many2one\";\nimport Markdown from \"./Markdown\";\nimport Boolean from \"./Boolean\";\nimport Integer from \"./Integer\";\nimport Widget from \"./Widget\";\nimport Float from \"./Float\";\nimport FloatTime from \"./FloatTime\";\nimport HTMLPreview from \"./HTMLPreview\";\nimport ProgressBar from \"./ProgressBar\";\nimport Date from \"./Date\";\nimport DateTime from \"./DateTime\";\nimport One2many from \"./One2many\";\nimport NewLine from \"./NewLine\";\nimport Separator from \"./Separator\";\nimport Reference from \"./Reference\";\nimport Binary from \"./Binary\";\nimport Image from \"./Image\";\nimport FiberGrid from \"./FiberGrid\";\nimport Timeline from \"./Timeline\";\nimport Indicator from \"./Indicator\";\nimport Tags from \"./Tags\";\nimport Tag from \"./Tag\";\nimport Radio from \"./Radio\";\nimport MultiCheckbox from \"./MultiCheckbox\";\nimport Switch from \"./Switch\";\nimport Steps from \"./Steps\";\nimport CodeEditor from \"./CodeEditor\";\nimport Avatar from \"./Avatar\";\nimport Time from \"./Time\";\nimport Alert from \"./Alert\";\nimport Comments from \"./Comments\";\nimport JSONField from \"./JSONField\";\nimport Email from \"./Email\";\nimport Spinner from \"./Spinner\";\nimport Carousel from \"./Carousel\";\nimport ColorPicker from \"./ColorPicker\";\n\nclass WidgetFactory {\n /**\n * Widget class\n */\n _widgetClass: any;\n\n setWidgetClass(type: string): void {\n switch (type) {\n case \"notebook\":\n this._widgetClass = Notebook;\n break;\n case \"page\":\n this._widgetClass = Page;\n break;\n case \"group\":\n this._widgetClass = Group;\n break;\n case \"label\":\n this._widgetClass = Label;\n break;\n case \"char\":\n this._widgetClass = Char;\n break;\n case \"text\":\n this._widgetClass = Text;\n break;\n case \"button\":\n this._widgetClass = Button;\n break;\n case \"buttonGroup\":\n this._widgetClass = ButtonGroup;\n break;\n case \"selection\":\n this._widgetClass = Selection;\n break;\n case \"many2one\":\n this._widgetClass = Many2one;\n break;\n case \"boolean\":\n this._widgetClass = Boolean;\n break;\n case \"integer\":\n this._widgetClass = Integer;\n break;\n case \"float\":\n this._widgetClass = Float;\n break;\n case \"float_time\":\n this._widgetClass = FloatTime;\n break;\n case \"date\":\n this._widgetClass = Date;\n break;\n case \"datetime\":\n this._widgetClass = DateTime;\n break;\n case \"progressbar\":\n this._widgetClass = ProgressBar;\n break;\n case \"markdown\":\n this._widgetClass = Markdown;\n break;\n case \"many2many\":\n case \"one2many\":\n case \"one2many_list\":\n this._widgetClass = One2many;\n break;\n case \"newline\":\n this._widgetClass = NewLine;\n break;\n case \"separator\":\n this._widgetClass = Separator;\n break;\n case \"url\":\n this._widgetClass = Char;\n break;\n case \"email\":\n this._widgetClass = Email;\n break;\n case \"reference\":\n this._widgetClass = Reference;\n break;\n case \"binary\":\n this._widgetClass = Binary;\n break;\n case \"image\":\n this._widgetClass = Image;\n break;\n case \"fiber_grid\":\n this._widgetClass = FiberGrid;\n break;\n case \"timeline\":\n this._widgetClass = Timeline;\n break;\n case \"indicator\":\n this._widgetClass = Indicator;\n break;\n case \"tags\":\n this._widgetClass = Tags;\n break;\n case \"tag\":\n this._widgetClass = Tag;\n break;\n case \"avatar\":\n this._widgetClass = Avatar;\n break;\n case \"radio\":\n this._widgetClass = Radio;\n break;\n case \"multicheckbox\":\n this._widgetClass = MultiCheckbox;\n break;\n case \"switch\":\n this._widgetClass = Switch;\n break;\n case \"steps\":\n this._widgetClass = Steps;\n break;\n case \"codeeditor\":\n this._widgetClass = CodeEditor;\n break;\n case \"time\":\n this._widgetClass = Time;\n break;\n case \"html_preview\":\n this._widgetClass = HTMLPreview;\n break;\n case \"alert\":\n this._widgetClass = Alert;\n break;\n case \"comments_timeline\":\n this._widgetClass = Comments;\n break;\n case \"json\":\n this._widgetClass = JSONField;\n break;\n case \"arrow_steps\":\n this._widgetClass = JSONField;\n break;\n case \"spinner\":\n this._widgetClass = Spinner;\n break;\n case \"carousel\":\n this._widgetClass = Carousel;\n break;\n case \"colorPicker\":\n this._widgetClass = ColorPicker;\n break;\n default:\n break;\n }\n }\n\n createWidget(type: string, props: any) {\n this._widgetClass = undefined;\n let finalType = type;\n\n this.setWidgetClass(type);\n\n // Fallback to default widget, we try to use the fields type widget if it exists\n if (this._widgetClass === undefined) {\n finalType = props.fieldsWidgetType;\n this.setWidgetClass(props.fieldsWidgetType);\n }\n\n if (this._widgetClass === undefined) {\n this._widgetClass = Widget;\n }\n\n // TODO: Widget Class constructors should use only the props needed, not all props.\n switch (type) {\n // Specific cases (only selected props should be used)\n case \"notebook\":\n case \"page\":\n case \"group\":\n return new this._widgetClass({ ...props, type: finalType });\n case \"button\":\n return new this._widgetClass({\n ...props,\n type,\n buttonType: props.type,\n });\n // Generic case\n default:\n return new this._widgetClass({ ...props, type: finalType });\n }\n }\n}\n\nexport default WidgetFactory;\n","const evaluateStates = ({\n fieldName,\n values,\n fields,\n}: {\n fieldName: string;\n values: any;\n fields: any;\n}) => {\n if (!fieldName) {\n return {};\n }\n\n const fieldStatesConfig = fields[fieldName]?.states;\n\n if (!fieldStatesConfig) {\n return {};\n }\n\n const newTagStateAttrs: any = {};\n const evaluatedStates: any = {};\n\n for (const stateCondition of Object.keys(fieldStatesConfig)) {\n if (values.state === stateCondition) {\n const configAttrValues = fieldStatesConfig[stateCondition];\n\n for (const entryConfig of configAttrValues) {\n const [attribute, value] = entryConfig;\n if (!evaluatedStates[attribute]) {\n evaluatedStates[attribute] = [];\n }\n evaluatedStates[attribute].push(value);\n }\n }\n }\n\n for (const evaluatedState of Object.keys(evaluatedStates)) {\n const values = evaluatedStates[evaluatedState];\n newTagStateAttrs[evaluatedState] = values.some((i: boolean) => i);\n }\n\n return newTagStateAttrs;\n};\n\nconst evaluateButtonStates = ({\n states,\n values,\n}: {\n states: string;\n values: any;\n}) => {\n if (!values?.state) {\n return {};\n }\n const splittedStates = states.split(\",\");\n if (splittedStates.length === 0) {\n return {};\n }\n return !splittedStates.includes(values.state) ? { invisible: true } : {};\n};\n\nexport { evaluateStates, evaluateButtonStates };\n","export function getValueForField({\n values = {},\n fieldName,\n fields = {},\n}: {\n values: any;\n fieldName: string;\n fields: any;\n}) {\n const fieldType = fields[fieldName]?.type || \"passthrough\";\n\n if (fieldType === \"many2one\") {\n return values[fieldName] ? values[fieldName][0] || null : false;\n } else if (fieldType === \"one2many\" || fieldType === \"many2many\") {\n return values[fieldName].map((item: any) => item.id);\n } else {\n if (values?.[fieldName]) {\n return values?.[fieldName];\n }\n\n if (fieldName.includes(\"'\")) {\n return fieldName;\n } else {\n return parseInt(fieldName);\n }\n }\n}\n","import { getValueForField } from \"./fieldParser\";\n\nexport const parseContext = ({\n context,\n values,\n fields,\n}: {\n context?: any;\n values?: any;\n fields?: any;\n}) => {\n // TODO: remove try/catch when we know for sure that all the incoming contexts formats are expected\n try {\n if (!context) return undefined;\n\n if (isObject(context)) {\n return context;\n }\n\n if (typeof context !== \"string\") {\n return context;\n }\n\n const parsedContextInJson = tryParseJSON(context);\n if (parsedContextInJson !== null) {\n return parsedContextInJson;\n }\n\n if (context.trim().length === 0) {\n return undefined;\n }\n\n // TODO: maybe this can be accomplished more performant and elegant with regex\n const singleQuotesReplace = context.replace(/\"/g, \"'\");\n const strNoWhitespaces = singleQuotesReplace.replace(/\\s/g, \"\");\n const replaceTrue = strNoWhitespaces.replace(/True/g, \"true\");\n const replaceFalse = replaceTrue.replace(/False/g, \"false\");\n const strNoClauLeft = replaceFalse.replace(/\\{/g, \"\");\n const strNoClauRight = strNoClauLeft.replace(/\\}/g, \"\");\n\n const entryValues = strNoClauRight.split(\",\");\n const valuesSplitted = entryValues.map((entry) => {\n return entry.split(\":\");\n });\n\n const parsedContext: any = {};\n\n valuesSplitted.forEach((entry) => {\n const fieldName = entry[1];\n\n if (\n !entry[1].includes(\"'\") &&\n entry[1] !== \"true\" &&\n entry[1] !== \"false\"\n ) {\n const valueForField = getValueForField({\n values,\n fields,\n fieldName: fieldName === \"active_id\" ? \"id\" : fieldName,\n });\n parsedContext[entry[0].replace(/'/g, \"\")] = valueForField || undefined;\n } else {\n if (entry[1] === \"true\") {\n parsedContext[entry[0].replace(/'/g, \"\")] = true;\n } else if (entry[1] === \"false\") {\n parsedContext[entry[0].replace(/'/g, \"\")] = false;\n } else {\n parsedContext[entry[0].replace(/'/g, \"\")] = entry[1].replace(\n /'/g,\n \"\",\n );\n }\n }\n });\n\n return parsedContext;\n } catch (e) {\n return undefined;\n }\n};\n\nexport const parseContextFields = (context: string): string[] => {\n const fields: string[] = [];\n try {\n if (!context) return fields;\n\n if (isObject(context)) {\n return fields;\n }\n\n if (typeof context !== \"string\") {\n return fields;\n }\n\n const parsedContextInJson = tryParseJSON(context);\n if (parsedContextInJson !== null) {\n return [];\n }\n\n if (context.trim().length === 0) {\n return fields;\n }\n\n // TODO: maybe this can be accomplished more performant and elegant with regex\n const singleQuotesReplace = context.replace(/\"/g, \"'\");\n const strNoWhitespaces = singleQuotesReplace.replace(/\\s/g, \"\");\n const replaceTrue = strNoWhitespaces.replace(/True/g, \"true\");\n const replaceFalse = replaceTrue.replace(/False/g, \"false\");\n const strNoClauLeft = replaceFalse.replace(/\\{/g, \"\");\n const strNoClauRight = strNoClauLeft.replace(/\\}/g, \"\");\n\n const entryValues = strNoClauRight.split(\",\");\n const valuesSplitted = entryValues.map((entry) => {\n return entry.split(\":\");\n });\n\n valuesSplitted.forEach((entry) => {\n if (\n !entry[1].includes(\"'\") &&\n entry[1] !== \"true\" &&\n entry[1] !== \"false\"\n ) {\n fields.push(entry[1].replace(/'/g, \"\"));\n }\n });\n\n return fields;\n } catch (e) {}\n return fields;\n};\n\nfunction tryParseJSON(str: string): any | null {\n try {\n const parsedJSON = JSON.parse(str.replace(/'/g, '\"'));\n return parsedJSON;\n } catch (error) {\n return null;\n }\n}\n\nfunction isObject(variable: any): boolean {\n return (\n typeof variable === \"object\" &&\n variable !== null &&\n typeof variable !== \"string\"\n );\n}\n","const parseOnChange = (onChangeString: string) => {\n const splitted = onChangeString.trim().replace(\")\", \"\").split(\"(\");\n\n const method = splitted[0];\n const argsGross = splitted[1];\n const argsSplitted = argsGross.split(\",\").map((arg) => arg.trim());\n\n return {\n method,\n args: argsSplitted,\n };\n};\n\nexport { parseOnChange };\n","import ContainerWidget from \"../ContainerWidget\";\nimport Widget from \"../Widget\";\n\nexport function flattenContainer(widgets: Widget[][]): Widget[] {\n const flattened: Widget[][] = [];\n\n function flattenArray(items: Widget[]): void {\n const flatSubArray: Widget[] = [];\n\n for (const item of items) {\n if (item instanceof ContainerWidget) {\n flattenArray(item._container.rows.flat()); // Recurse into the container\n } else {\n flatSubArray.push(item);\n }\n }\n\n if (flatSubArray.length > 0) {\n flattened.push(flatSubArray);\n }\n }\n\n // Iterate through the outer array and process each inner array\n for (const widgetArray of widgets) {\n flattenArray(widgetArray);\n }\n\n return flattened.flat();\n}\n","import WidgetFactory from \"./WidgetFactory\";\nimport Container from \"./Container\";\nimport ContainerWidget from \"./ContainerWidget\";\nimport Widget from \"./Widget\";\nimport { ParsedNode } from \"./helpers/nodeParser\";\nimport {\n evaluateAttributes,\n replaceEntities,\n parseWidgetProps,\n} from \"./helpers/attributeParser\";\nimport { evaluateStates, evaluateButtonStates } from \"./helpers/stateParser\";\nimport { parseContext } from \"./helpers/contextParser\";\nimport { parseOnChange } from \"./helpers/onChangeParser\";\nimport * as txml from \"txml\";\nimport Field from \"./Field\";\nimport Button from \"./Button\";\nimport { flattenContainer } from \"./helpers/widgetHelper\";\n\nexport type FormParseOptions = {\n readOnly?: boolean;\n values?: any;\n};\n\nclass Form {\n /**\n * Object containing fields specification of the form.\n */\n _fields: any;\n get fields() {\n return this._fields;\n }\n\n _container: Container;\n get container(): Container {\n return this._container;\n }\n\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n /**\n * Widget type\n */\n _type: string = \"form\";\n get type(): string {\n return this._type;\n }\n\n /**\n * Determines if form is read only (default is false)\n */\n _readOnly: boolean = false;\n get readOnly(): boolean {\n return this._readOnly;\n }\n\n set readOnly(value: boolean) {\n this._readOnly = value;\n }\n\n /**\n * Context\n */\n _context: any = {};\n get context(): any {\n return this._context;\n }\n\n set context(value: any) {\n this._context = value;\n }\n\n /**\n * Collection of onChange actions for fields\n */\n _onChangeFields: any = {};\n get onChangeFields(): any {\n return this._onChangeFields;\n }\n\n set onChangeFields(value: any) {\n this._onChangeFields = value;\n }\n\n /*\n _widgets = {\n *[Symbol.iterator]() {\n if (this._container && this._container.length) {\n this._container.forEach((item) => {\n\n // yield item\n });\n }\n }\n };\n get widgets() {\n return this._widgets;\n }\n */\n\n /**\n * Unique key for container\n */\n _keyIdx: number = 0;\n get keyIdx(): number {\n return this._keyIdx;\n }\n\n set keyIdx(value: number) {\n this._keyIdx = value;\n }\n\n /**\n * List of invisible fields\n */\n _invisibleFields: string[] = [];\n get invisibleFields(): string[] {\n return this._invisibleFields;\n }\n\n set invisibleFields(value: string[]) {\n this._invisibleFields = value;\n }\n\n /**\n * List of autorefreshable fields\n */\n _autorefreshableFields: string[] = [];\n get autorefreshableFields(): string[] {\n return this._autorefreshableFields;\n }\n\n /**\n * Context for each field in the form\n */\n _contextForFields: Record<string, any> = {};\n get contextForFields(): Record<string, any> {\n return this._contextForFields;\n }\n\n set contextForFields(value: Record<string, any>) {\n this._contextForFields = value;\n }\n\n constructor(fields: Object, columns: number = 4) {\n this._fields = fields;\n this._container = new Container(columns, 6, false, \"root\");\n }\n\n parse(xml: string, options?: FormParseOptions) {\n const { values = {}, readOnly = false } = options || {};\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"form\")[0];\n this._string = view.attributes?.string || null;\n if (this._string) {\n this._string = replaceEntities(this._string);\n }\n this._readOnly = readOnly;\n this._context = values.id\n ? { active_id: values.id, active_ids: [values.id] }\n : {};\n this._invisibleFields = [];\n this.parseNode({\n fields: view.children,\n container: this._container,\n values,\n });\n\n // For each widget in the form, we get the context and put it in the contextForFields object\n const allWidgets = flattenContainer(this._container._rows);\n\n allWidgets.forEach((widget) => {\n const unknownWidget = widget as any;\n if (unknownWidget._id && unknownWidget._context) {\n this._contextForFields[unknownWidget._id] = widget._context;\n }\n });\n\n // Also we store all the autorefreshables fields in a list\n this._autorefreshableFields = allWidgets\n .filter((widget) => widget instanceof Field && widget.autoRefresh)\n .map((field) => (field as Field)._id);\n }\n\n parseNode({\n fields,\n container,\n values,\n }: {\n fields: ParsedNode[];\n container: Container;\n values: any;\n }) {\n const widgetFactory = new WidgetFactory();\n fields\n .filter((f) => typeof f === \"object\")\n .forEach((field) => {\n const { tagName, attributes, children } = field;\n let widgetType = tagName;\n let tagAttributes = attributes;\n if (tagName === \"field\") {\n const { name, widget } = attributes;\n if (widget) {\n widgetType = widget;\n } else if (name) {\n if (!this._fields[name]) {\n throw new Error(\n `Field ${name as string} doesn't exist in fields defintion`,\n );\n }\n widgetType = this._fields[name].type;\n // Merge _fields[widget_props] with attributes[widget_props]\n attributes.widget_props = {\n ...parseWidgetProps(attributes.widget_props),\n ...(this._fields[name].widget_props || {}),\n };\n }\n tagAttributes = {\n ...this._fields[name],\n ...attributes,\n fieldsWidgetType: this._fields[name].type,\n };\n }\n const evaluatedTagAttributes = evaluateAttributes({\n tagAttributes,\n values,\n fields: this._fields,\n widgetType: tagName,\n });\n let evaluatedStateAttributes;\n\n if (tagName === \"button\" && tagAttributes.states) {\n evaluatedStateAttributes = evaluateButtonStates({\n states: tagAttributes.states,\n values,\n });\n } else {\n evaluatedStateAttributes = evaluateStates({\n fieldName: tagAttributes.name,\n values,\n fields: this._fields,\n });\n }\n\n const widgetContext = parseContext({\n context:\n tagAttributes.context || this._fields[tagAttributes.name]?.context,\n values,\n fields: this._fields,\n });\n\n if (tagAttributes.on_change) {\n this._onChangeFields[tagAttributes.name] = parseOnChange(\n tagAttributes.on_change,\n );\n }\n\n let domain: string | undefined;\n\n if (checkIfDomainHasValue(tagAttributes.domain)) {\n domain = tagAttributes.domain;\n } else if (\n checkIfDomainHasValue(this._fields[tagAttributes.name]?.domain)\n ) {\n domain = this._fields[tagAttributes.name].domain;\n }\n\n this._keyIdx = this._keyIdx + 1;\n\n const widgetProps = {\n ...evaluatedTagAttributes,\n ...evaluatedStateAttributes,\n context: widgetContext,\n domain,\n key: `${this._keyIdx}`,\n };\n\n if (container.readOnly) {\n widgetProps.readonly = true;\n }\n\n const widget = widgetFactory.createWidget(widgetType, widgetProps);\n\n if (widget.invisible && widget instanceof Field) {\n this._invisibleFields.push(widgetProps.name);\n }\n\n if (widget instanceof ContainerWidget) {\n this.parseNode({\n fields: children,\n container: widget.container,\n values,\n });\n }\n\n // If the widget is a button and has a readonly attribute specified\n // reflect it to the widget independently of the form readonly attribute\n if (widget instanceof Button && widget.readOnly !== undefined) {\n // widget.readOnly = widget.readOnly;\n } else {\n // If the form is set to readonly, reflect it to its children\n widget.readOnly = widget.readOnly || this.readOnly;\n }\n\n container.addWidget(widget);\n });\n }\n\n /**\n * Calls container's findById method to find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Field | Widget | null {\n return this.container.findById(id);\n }\n}\n\nfunction checkIfDomainHasValue(domain: any) {\n if (!domain) {\n return false;\n }\n if (Array.isArray(domain) && domain.length > 0) {\n return true;\n } else if (typeof domain === \"string\" && domain !== \"\" && domain !== \"[]\") {\n return true;\n }\n return false;\n}\nexport default Form;\n","import WidgetFactory from \"./WidgetFactory\";\nimport Widget from \"./Widget\";\nimport { replaceEntities } from \"./helpers/attributeParser\";\nimport { parseBoolAttribute, ParsedNode } from \"./helpers/nodeParser\";\nimport * as txml from \"txml\";\nimport { parseContext } from \"./helpers/contextParser\";\n\ntype EditableTreeOptions = \"top\" | \" bottom\" | null;\n\nclass Tree {\n /**\n * Object containing fields specification of the form.\n */\n _fields: any;\n get fields() {\n return this._fields;\n }\n\n _columns: any[] = [];\n get columns(): any[] {\n return this._columns;\n }\n\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n /**\n * Widget type\n */\n _type: string = \"tree\";\n get type(): string {\n return this._type;\n }\n\n /**\n * Color expression value\n */\n _colors: string | null = null;\n get colors(): string | null {\n return this._colors;\n }\n\n _status: string | null = null;\n get status(): string | null {\n return this._status;\n }\n\n /**\n * Editable value\n */\n _editable: EditableTreeOptions = null;\n get editable(): EditableTreeOptions {\n return this._editable;\n }\n\n /**\n * Context for each field in the form\n */\n _contextForFields: Record<string, any> = {};\n get contextForFields(): Record<string, any> {\n return this._contextForFields;\n }\n\n set contextForFields(value: Record<string, any>) {\n this._contextForFields = value;\n }\n\n /**\n * List of autorefreshable fields\n */\n _autorefreshableFields: string[] = [];\n get autorefreshableFields(): string[] {\n return this._autorefreshableFields;\n }\n\n /**\n * Is infinite\n */\n _infinite: boolean = false;\n get infinite(): boolean {\n return this._infinite;\n }\n\n set infinite(value: boolean) {\n this._infinite = value;\n }\n\n constructor(fields: Object) {\n this._fields = fields;\n }\n\n parse(xml: string) {\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"tree\")[0];\n this._string = view.attributes.string || null;\n if (this._string) {\n this._string = replaceEntities(this._string);\n }\n this._colors = view.attributes.colors || null;\n if (this._colors) {\n this._colors = replaceEntities(this._colors);\n }\n this._status = view.attributes.status || null;\n if (this._status) {\n this._status = replaceEntities(this._status);\n }\n this._editable = view.attributes.editable || null;\n this._infinite = view.attributes.infinite || false;\n const widgetFactory = new WidgetFactory();\n view.children.forEach((field: ParsedNode) => {\n const { tagName, attributes } = field;\n let widgetType = null;\n if (tagName === \"field\") {\n const { name, widget } = attributes;\n let mergedAttrs = attributes;\n if (name) {\n if (!this._fields[name]) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Field ${name} doesn't exist in fields defintion`);\n }\n const fieldDef = this._fields[name];\n widgetType = fieldDef.type;\n if (\n ((Array.isArray(fieldDef?.domain) &&\n fieldDef?.domain.length === 0) ||\n fieldDef?.domain === false) &&\n attributes.domain &&\n attributes.domain.length > 0\n ) {\n delete fieldDef.domain;\n }\n const widgetContext = parseContext({\n context: attributes.context || fieldDef.context,\n values: {},\n fields: this._fields,\n });\n mergedAttrs = {\n ...fieldDef,\n ...attributes,\n fieldsWidgetType: fieldDef?.type,\n context: widgetContext,\n };\n this._contextForFields[name] = widgetContext;\n }\n if (widget) {\n widgetType = widget;\n }\n\n if (!mergedAttrs.invisible) {\n const widget = widgetFactory.createWidget(widgetType, mergedAttrs);\n this._columns.push(widget);\n }\n\n if (parseBoolAttribute(mergedAttrs.autorefresh)) {\n this._autorefreshableFields.push(name);\n }\n }\n });\n }\n\n /**\n * Find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Widget | null {\n return this._columns.find((item) => {\n if (item.findById) {\n return item.findById(id);\n }\n return false;\n });\n }\n}\n\nexport default Tree;\n","import WidgetFactory from \"./WidgetFactory\";\nimport Container from \"./Container\";\nimport Widget from \"./Widget\";\n\nexport const SearchFieldTypes: any = {\n text: \"text\",\n many2one: \"many2one\",\n char: \"char\",\n boolean: \"boolean\",\n selection: \"selection\",\n float: \"float\",\n float_time: \"float_time\",\n progressbar: \"progressbar\",\n integer: \"integer\",\n date: \"date\",\n datetime: \"datetime\",\n};\n\nclass SearchFilter {\n /**\n * Object containing the specific fields for primary and secondary search fields\n */\n _searchFields: any;\n get searchFields() {\n return this._searchFields;\n }\n\n /**\n * Object containing all the fields specification of the whole form\n */\n _fields: any;\n get fields() {\n return this._fields;\n }\n\n _simpleSearchContainer: Container;\n get simpleSearchContainer(): Container {\n return this._simpleSearchContainer;\n }\n\n _advancedSearchContainer: Container;\n get advancedSearchContainer(): Container {\n return this._advancedSearchContainer;\n }\n\n constructor(searchFields: Object, fields: Object, columns: number = 8) {\n this._searchFields = searchFields;\n this._fields = fields;\n this._simpleSearchContainer = new Container(columns);\n this._advancedSearchContainer = new Container(columns);\n }\n\n parse() {\n const widgetFactory = new WidgetFactory();\n\n const simpleSearchWidgets = this.parseFields(\n this.searchFields.primary,\n widgetFactory,\n );\n simpleSearchWidgets.forEach((widget) => {\n this.simpleSearchContainer.addWidget(widget, { addLabel: false });\n this.advancedSearchContainer.addWidget(widget, { addLabel: false });\n });\n\n const advancedSearchWidgets = this.parseFields(\n this.searchFields.secondary,\n widgetFactory,\n );\n advancedSearchWidgets.forEach((widget) => {\n this.advancedSearchContainer.addWidget(widget, { addLabel: false });\n });\n }\n\n parseFields(searchFields: string[], widgetFactory: WidgetFactory) {\n return searchFields.map((searchField) => {\n const fieldAttributes = {\n ...this.fields[searchField],\n name: searchField,\n colspan: 2,\n };\n const { type, widget } = fieldAttributes;\n let widgetType = widget ?? type;\n if (SearchFieldTypes[widgetType] === undefined) {\n widgetType = type;\n }\n return widgetFactory.createWidget(widgetType, fieldAttributes);\n });\n }\n\n /**\n * Calls container's findById method to find the widgets matching with param id\n * @param {string} id id to find\n */\n findById(id: string): Widget | null {\n return this.advancedSearchContainer.findById(id);\n }\n}\n\nexport default SearchFilter;\n","const transformDomainForChildWidget = ({\n domain,\n widgetFieldName,\n}: {\n domain: any;\n widgetFieldName: string;\n}) => {\n const transformedDomain: any[] = [];\n\n domain.forEach((domainEntry: any) => {\n if (!Array.isArray(domainEntry)) {\n return;\n }\n\n const [fieldName, operator, value] = domainEntry;\n\n let rootFieldName;\n let targetFieldName;\n\n if (fieldName.indexOf(\".\") !== -1) {\n rootFieldName = fieldName.substr(0, fieldName.indexOf(\".\"));\n targetFieldName = fieldName.substr(\n (fieldName.indexOf(\".\") as number) + 1,\n fieldName.length - 1,\n );\n } else {\n rootFieldName = fieldName;\n targetFieldName = \"id\";\n }\n\n if (rootFieldName === widgetFieldName) {\n transformedDomain.push([targetFieldName, operator, value]);\n }\n });\n\n return transformedDomain;\n};\n\nexport const parseDomainFields = (domain: string | boolean): string[] => {\n if (typeof domain !== \"string\") {\n return [];\n }\n return domain\n .replace(/[()[\\]]/g, \"\")\n .split(\",\")\n .map((i) => i.trim())\n .filter((i) => !i.includes(\"'\"));\n};\n\nexport { transformDomainForChildWidget };\n","class DashboardItem {\n _action_id: string | null = null;\n get action_id(): string | null {\n return this._action_id;\n }\n\n _position: string | null = null;\n get position(): string | null {\n return this._position;\n }\n\n constructor(attributes: any) {\n if (attributes.action_id) {\n this._action_id = attributes.action_id;\n }\n\n if (attributes.position) {\n this._position = attributes.position;\n }\n }\n}\n\nexport default DashboardItem;\n","import DashboardItem from \"./DashboardItem\";\nimport * as txml from \"txml\";\nimport { ParsedNode } from \"./helpers/nodeParser\";\n\nclass Dashboard {\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n _items: DashboardItem[] = [];\n get items(): DashboardItem[] {\n return this._items;\n }\n\n constructor(xml: string) {\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"dashboard\")[0];\n this._string = view.attributes.string || null;\n\n const { children } = view;\n\n children.forEach((item: ParsedNode) => {\n if (item.tagName === \"dashboard_item\") {\n this._items.push(new DashboardItem(item.attributes));\n }\n });\n }\n}\n\nexport default Dashboard;\n","import { ParsedNode } from \"../helpers/nodeParser\";\n\nexport type GraphType = \"indicator\" | \"indicatorField\" | \"line\" | \"bar\" | \"pie\";\nexport type RangeType = \"auto\" | \"full\" | \"default\";\n\nexport class Graph {\n _string: string | null = null;\n get string(): string | null {\n return this._string;\n }\n\n _type?: GraphType;\n get type(): GraphType | undefined {\n return this._type;\n }\n\n _timerange: string | null = null;\n get timerange(): string | null {\n return this._timerange;\n }\n\n _interval: number = 1;\n get interval(): number {\n return this._interval;\n }\n\n _y_range: RangeType = \"default\";\n get y_range(): RangeType {\n return this._y_range;\n }\n\n constructor(element: ParsedNode) {\n this._string = element.attributes.string || null;\n this._timerange = element.attributes.timerange || null;\n if (element.attributes.interval) {\n this._interval = parseInt(element.attributes.interval);\n }\n if (element.attributes.y_range) {\n const range = element.attributes.y_range;\n if (range === \"auto\" || range === \"full\" || range === \"default\") {\n this._y_range = range;\n }\n }\n }\n}\n","import { Graph, GraphType } from \"./Graph\";\nimport { parseBoolAttribute, ParsedNode } from \"../helpers/nodeParser\";\nimport { replaceEntities } from \"../helpers/attributeParser\";\n\nexport class GraphIndicator extends Graph {\n _color: string | null = null;\n get color(): string | null {\n return this._color;\n }\n\n _icon: string | null = null;\n get icon(): string | null {\n return this._icon;\n }\n\n _totalDomain: string | null = null;\n get totalDomain(): string | null {\n return this._totalDomain;\n }\n\n _showPercent: boolean = false;\n get showPercent(): boolean {\n return this._showPercent;\n }\n\n _suffix: string | null = null;\n get suffix(): string | null {\n return this._suffix;\n }\n\n constructor(type: GraphType, element: ParsedNode) {\n super(element);\n\n this._type = type;\n this._color = element.attributes.color || null;\n if (this._color) {\n this._color = replaceEntities(this._color);\n }\n this._icon = element.attributes.icon || null;\n if (this._icon) {\n this._icon = replaceEntities(this._icon);\n }\n this._suffix = element.attributes.suffix || null;\n this._totalDomain = replaceEntities(element.attributes.totalDomain) || null;\n this._showPercent = parseBoolAttribute(element.attributes.showPercent);\n }\n}\n","import { Operator } from \".\";\nimport { GraphType } from \"./Graph\";\nimport { GraphIndicator } from \"./GraphIndicator\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\n\nexport class GraphIndicatorField extends GraphIndicator {\n _field: string | undefined;\n get field(): string | undefined {\n return this._field;\n }\n\n _operator: Operator | undefined;\n get operator(): Operator | undefined {\n return this._operator;\n }\n\n constructor(type: GraphType, element: ParsedNode) {\n super(type, element);\n\n const { children } = element;\n children.forEach((item) => {\n if (item.tagName === \"field\") {\n const name = item.attributes.name;\n const operator = item.attributes.operator;\n this._field = name || undefined;\n this._operator = operator as Operator;\n }\n });\n }\n}\n","import { GraphXAxis, GraphYAxis, Operator } from \".\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\n\nexport type XYAxis = {\n x: GraphXAxis;\n y: GraphYAxis[];\n};\n\nexport const parseXYAxis = (nodes: ParsedNode[]): XYAxis => {\n const yAxisElements: GraphYAxis[] = [];\n let xAxis;\n\n nodes.forEach((child) => {\n if (child.tagName === \"field\") {\n const axis = child.attributes.axis;\n const operator = child.attributes.operator;\n const name = child.attributes.name;\n const label = child.attributes.label || undefined;\n const stacked = child.attributes.stacked || undefined;\n\n if (!axis) {\n throw new Error(`Field ${name} doesn't have an axis`);\n }\n\n if (!name) {\n throw new Error(\"Missing name attribute for field\");\n }\n\n if (axis === \"x\") {\n xAxis = new GraphXAxis({\n name,\n });\n } else if (axis === \"y\") {\n yAxisElements.push(\n new GraphYAxis({\n name,\n operator: operator as Operator,\n label,\n stacked,\n }),\n );\n }\n }\n });\n\n if (!xAxis) {\n throw new Error(\"No x axis found\");\n }\n\n if (!yAxisElements.length) {\n throw new Error(\"No y axis found. At least we need one y axis\");\n }\n\n return {\n x: xAxis,\n y: yAxisElements,\n };\n};\n","import { GraphXAxis, GraphYAxis } from \".\";\nimport { Graph, GraphType } from \"./Graph\";\nimport { parseXYAxis } from \"./graphHelper\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\n\nexport class GraphChart extends Graph {\n _x: GraphXAxis;\n get x(): GraphXAxis {\n return this._x;\n }\n\n _y: GraphYAxis[];\n get y(): GraphYAxis[] {\n return this._y;\n }\n\n constructor(type: GraphType, element: ParsedNode) {\n super(element);\n\n this._type = type;\n const xyAxis = parseXYAxis(element.children);\n this._x = xyAxis.x;\n this._y = xyAxis.y;\n }\n}\n","import { GraphIndicator } from \"./GraphIndicator\";\nimport { GraphIndicatorField } from \"./GraphIndicatorField\";\nimport { GraphChart } from \"./GraphChart\";\nimport { ParsedNode } from \"../helpers/nodeParser\";\nimport * as txml from \"txml\";\n\nconst GraphTypes: Record<string, any> = {\n indicator: GraphIndicator,\n indicatorField: GraphIndicatorField,\n line: GraphChart,\n bar: GraphChart,\n pie: GraphChart,\n};\n\nexport const parseGraph = (xml: string): GraphIndicator | GraphChart => {\n const view = txml\n .parse(xml)\n .filter((el: ParsedNode) => el.tagName === \"graph\")[0];\n const type = view.attributes.type;\n\n if (!type) {\n throw new Error(`${type} is not a valid graph`);\n }\n\n const GraphModel = GraphTypes[type];\n\n if (!GraphModel) {\n throw new Error(`${type} not found as a GraphModel`);\n }\n\n return new GraphModel(type, view);\n};\n","export type Axis = \"x\" | \"y\";\n\nexport class GraphAxis {\n _name: string;\n get name(): string {\n return this._name;\n }\n\n _axis: Axis;\n get axis(): Axis {\n return this._axis;\n }\n\n constructor({ name, axis }: { name: string; axis: Axis }) {\n this._name = name;\n this._axis = axis;\n }\n}\n","import { GraphAxis } from \".\";\n\nexport type Operator = \"count\" | \"+\" | \"-\" | \"*\" | \"min\" | \"max\" | \"avg\";\n\nexport class GraphYAxis extends GraphAxis {\n _operator: Operator;\n get operator(): Operator {\n return this._operator;\n }\n\n _label: string | undefined;\n get label(): string | undefined {\n return this._label;\n }\n\n _stacked: string | undefined;\n get stacked(): string | undefined {\n return this._stacked;\n }\n\n constructor({\n name,\n operator,\n label,\n stacked,\n }: {\n name: string;\n operator: Operator;\n label?: string;\n stacked?: string;\n }) {\n super({ name, axis: \"y\" });\n this._operator = operator!;\n this._label = label;\n this._stacked = stacked;\n }\n}\n","import { GraphAxis } from \".\";\n\nexport class GraphXAxis extends GraphAxis {\n constructor({ name }: { name: string }) {\n super({ name, axis: \"x\" });\n }\n}\n","import { GraphChart } from \"../GraphChart\";\n\nexport const getFieldsToRetrieve = ({ ooui }: { ooui: GraphChart }) => {\n const xField: string = ooui.x.name;\n const fields = [xField];\n\n if (!ooui.y) {\n return [];\n }\n\n ooui.y.forEach((y) => {\n if (y.operator !== \"count\" && !fields.includes(y.name)) {\n fields.push(y.name);\n }\n\n if (y.label && !fields.includes(y.label)) {\n fields.push(y.label);\n }\n });\n\n return fields;\n};\n\nexport function getValueAndLabelForField({\n fields,\n values,\n fieldName,\n}: {\n fields: Record<string, any>;\n values: Record<string, any>;\n fieldName: string;\n}) {\n const xFieldData = fields[fieldName];\n const value = values[fieldName];\n\n if (!xFieldData) {\n throw new Error(`Field ${fieldName} not found`);\n }\n\n if (xFieldData.type === \"many2one\") {\n if (!value) {\n return { value: false, label: undefined };\n }\n return { value: value[0], label: value[1] };\n } else if (xFieldData.type === \"selection\") {\n const selectionValues: Array<[number, string]> = xFieldData.selection;\n\n const valuePair = selectionValues.find((selectionPair) => {\n return selectionPair[0] === value;\n });\n\n if (!valuePair) {\n return { value: false, label: undefined };\n }\n\n return { value, label: valuePair[1] };\n }\n\n return { value, label: value };\n}\n","import moment from \"moment\";\nimport { getValueForOperator } from \"./graphProcessor\";\n\nexport function processTimerangeData({\n values,\n timerange,\n interval = 1,\n}: {\n values: any[];\n timerange: string;\n interval?: number;\n}) {\n const combinedValues = combineValuesForTimerange({\n values,\n timerange,\n });\n\n // Fill the gaps\n const filledValues = fillGapsInTimerangeData({\n values: combinedValues,\n timerange,\n interval,\n });\n\n return filledValues;\n}\n\nexport function fillGapsInTimerangeData({\n values,\n timerange,\n interval = 1,\n}: {\n values: any[];\n timerange: string;\n interval?: number;\n}) {\n let finalValues: any[] = [];\n const uniqueValues: Record<string, any> = getUniqueValuesGroupedBy({\n values,\n groupBy: \"type-stacked\",\n });\n const units = `${timerange}s` as any;\n\n Object.keys(uniqueValues).forEach((key) => {\n const valuesForKey = uniqueValues[key];\n\n for (let i = 0; i < valuesForKey.length; i++) {\n const value = valuesForKey[i];\n\n finalValues.push(value);\n\n // If it's the last item\n if (i === valuesForKey.length - 1) {\n return;\n }\n\n const date = value.x;\n const nextDate = valuesForKey[i + 1].x;\n\n if (!checkDatesConsecutive([date, nextDate], units)) {\n const missingDates = getMissingConsecutiveDates({\n dates: [date, nextDate],\n timerange,\n interval,\n });\n finalValues = finalValues.concat(\n missingDates.map((stringDate) => {\n return {\n x: stringDate,\n value: 0,\n type: value.type,\n stacked: value.stacked,\n };\n }),\n );\n }\n }\n });\n\n const sortedData = finalValues.sort((a, b) => {\n if (a.x < b.x) {\n return -1;\n }\n if (a.x > b.x) {\n return 1;\n }\n return 0;\n });\n return sortedData;\n}\n\nexport function getMissingConsecutiveDates({\n dates,\n timerange,\n interval = 1,\n}: {\n dates: string[];\n timerange: string;\n interval?: number;\n}) {\n const missingDates: string[] = [];\n const units = `${timerange}s` as any;\n if (dates.length === 1) {\n return dates;\n }\n\n const sortedDates = dates.sort((a, b) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n });\n\n for (let i = 0; i < sortedDates.length - 1; i++) {\n const date1 = sortedDates[i];\n const date2 = sortedDates[i + 1];\n\n if (!checkDatesConsecutive([date1, date2], units)) {\n const iDate = moment(date1, getFormatForUnits(units)).add(\n interval,\n units,\n );\n const fDate = moment(date2, getFormatForUnits(units));\n\n while (iDate.isBefore(fDate)) {\n missingDates.push(iDate.format(getFormatForUnits(units)));\n iDate.add(interval, units);\n }\n }\n }\n\n return missingDates;\n}\n\nexport function combineValuesForTimerange({\n values,\n timerange,\n}: {\n values: any[];\n timerange: string;\n}) {\n const adjustedValues = adjustXValuesForTimeRage({\n values,\n timerange,\n });\n const finalValues: any[] = [];\n // group by x, type and stacked\n const uniqueValues: Record<string, any> = getUniqueValuesGroupedBy({\n values: adjustedValues,\n groupBy: \"all\",\n });\n\n Object.keys(uniqueValues).forEach((key) => {\n const valuesForKey = uniqueValues[key];\n const operator =\n valuesForKey[0].operator === \"count\" ? \"+\" : valuesForKey[0].operator;\n\n const finalValue = getValueForOperator({\n values: valuesForKey.map((entry: any) => entry.value),\n operator,\n });\n\n finalValues.push({\n ...valuesForKey[0],\n value: finalValue,\n });\n });\n\n return finalValues;\n}\n\nexport function adjustXValuesForTimeRage({\n values,\n timerange,\n}: {\n values: any[];\n timerange: string;\n}) {\n return values.map((value) => {\n return {\n ...value,\n x: convertDateToTimeRangeAdjusted({\n date: value.x,\n timerange,\n }),\n };\n });\n}\n\nexport function convertDateToTimeRangeAdjusted({\n date,\n timerange,\n}: {\n date: string;\n timerange: string;\n}) {\n let format = getDateFormat(date);\n const momentDate = moment(date, format);\n switch (timerange) {\n case \"hour\": {\n format = \"YYYY-MM-DD HH:00\";\n break;\n }\n case \"day\": {\n format = \"YYYY-MM-DD\";\n break;\n }\n case \"week\": {\n format = \"YYYY-WW\";\n break;\n }\n case \"month\": {\n format = \"YYYY-MM\";\n break;\n }\n case \"year\": {\n format = \"YYYY\";\n break;\n }\n }\n return momentDate.format(format);\n}\n\nexport function getDateFormat(date: string) {\n return date.indexOf(\":\") ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD\";\n}\n\nexport function checkDatesConsecutive(\n dates: string[],\n unit: \"hours\" | \"days\" | \"weeks\" | \"months\" | \"years\",\n) {\n let consecutive = false;\n const format = getFormatForUnits(unit);\n\n if (dates.length === 0) {\n return false;\n }\n\n if (dates.length === 1) {\n return true;\n }\n\n for (let i = 0; i < dates.length - 1; i++) {\n const date1 = moment(dates[i], format);\n const date2 = moment(dates[i + 1], format);\n const diff = date2.diff(date1, unit);\n\n if (Math.abs(diff) === 1) {\n consecutive = true;\n } else {\n consecutive = false;\n }\n }\n return consecutive;\n}\n\nexport function getUniqueValuesGroupedBy({\n values,\n groupBy,\n}: {\n values: any[];\n groupBy: \"all\" | \"type-stacked\";\n}) {\n const uniqueValues: Record<string, any> = {};\n values.forEach((value) => {\n const x = value.x;\n const type = value.type;\n const stacked = value.stacked;\n const uniqueKey =\n groupBy === \"all\" ? `${x}-${type}-${stacked}` : `${type}-${stacked}`;\n if (!uniqueValues[uniqueKey]) {\n uniqueValues[uniqueKey] = [];\n }\n uniqueValues[uniqueKey].push(value);\n });\n return uniqueValues;\n}\n\nexport function getFormatForUnits(units: string) {\n switch (units) {\n case \"days\": {\n return \"YYYY-MM-DD\";\n }\n case \"weeks\": {\n return \"YYYY-WW\";\n }\n case \"months\": {\n return \"YYYY-MM\";\n }\n case \"years\": {\n return \"YYYY\";\n }\n case \"hours\":\n default: {\n return \"YYYY-MM-DD HH:mm\";\n }\n }\n}\n","import { GraphChart, GraphYAxis, Operator } from \"..\";\nimport { getValueAndLabelForField } from \"./fieldUtils\";\nimport { processTimerangeData } from \"./timerangeHelper\";\n\nexport type GroupedValues = Record<\n string,\n { label: string; entries: Array<Record<string, any>> }\n>;\n\ntype GraphValues = {\n value: number;\n [key: string]: any;\n};\n\nexport const labelsForOperator = {\n count: \"count\",\n \"+\": \"sum\",\n \"-\": \"subtract\",\n \"*\": \"multiply\",\n avg: \"average\",\n min: \"min\",\n max: \"max\",\n};\n\nexport type ProcessGraphDataOpts = {\n uninformedString: string;\n};\n\nexport type YAxisOpts = {\n mode?: \"auto\" | \"default\" | \"full\" | \"slider\";\n valueOpts?: MinMaxValues;\n};\n\nexport type MinMaxValues = {\n min: number;\n max: number;\n};\n\nexport type Result = {\n data: any[];\n isGroup: boolean;\n isStack: boolean;\n yAxisOpts?: YAxisOpts;\n};\n\nexport const processGraphData = ({\n ooui,\n values,\n fields,\n options,\n}: {\n ooui: GraphChart;\n values: Array<Record<string, any>>;\n fields: Record<string, any>;\n options?: ProcessGraphDataOpts;\n}) => {\n // First we group all the results by the x field. This way we will have one or more items in an array for every occurrence of ooui.x.name\n // Result of this will be an object which keys will be unique keys for values of ooui.x.name for each item\n const valuesGroupedByX = getValuesGroupedByField({\n fieldName: ooui.x.name,\n values,\n fields,\n });\n\n const data: GraphValues[] = [];\n // We iterate through the y axis items found in the ooui object\n ooui.y.forEach((yField) => {\n // We iterate now for every single key of the grouped results by x\n Object.keys(valuesGroupedByX).forEach((xValue) => {\n const xLabel = valuesGroupedByX[xValue].label;\n const objectsForXValue = valuesGroupedByX[xValue].entries;\n\n // If the y field hasn't got label defined\n if (!yField.label) {\n // We calculate the final value using the entries of this unique x key\n const valuesForYField = getValuesForYField({\n entries: objectsForXValue,\n fields,\n fieldName: yField.name,\n });\n\n const finalValue = getValueForOperator({\n values: valuesForYField,\n operator: yField.operator,\n });\n\n data.push({\n x: xLabel || false,\n value: finalValue,\n type: getYAxisFieldname({\n yAxis: yField,\n fields,\n }),\n operator: yField.operator,\n stacked: yField.stacked,\n });\n }\n // The field has label\n else {\n // We retrieve an object with unique keys and grouped values for the label\n const valuesGroupedByYLabel = getValuesGroupedByField({\n fieldName: yField.label,\n values: objectsForXValue,\n fields,\n });\n\n // For every key of the grouped results by label\n Object.keys(valuesGroupedByYLabel).forEach((yUniqueValue) => {\n const entries = valuesGroupedByYLabel[yUniqueValue].entries;\n const label = valuesGroupedByYLabel[yUniqueValue].label;\n\n // We calculate the final value using the entries of this unique x key\n const valuesForYField = getValuesForYField({\n entries,\n fields,\n fieldName: yField.name,\n });\n\n const finalValue = getValueForOperator({\n values: valuesForYField,\n operator: yField.operator,\n });\n data.push({\n x: xLabel || false,\n value: finalValue,\n type: label,\n operator: yField.operator,\n stacked: yField.stacked,\n });\n });\n }\n });\n });\n\n // Check if we have to flag isGroup\n const isGroup = ooui.y.some((y) => y.label !== undefined);\n\n // Check if we have to flag isStacked\n const isStack = ooui.y.some((entry) => entry.stacked !== undefined);\n\n // We sort the data by x\n const sortedData = data.sort((a, b) => {\n if (a.x < b.x) {\n return -1;\n }\n if (a.x > b.x) {\n return 1;\n }\n return 0;\n });\n\n let adjustedStackedData = [...sortedData];\n // If it's an stacked graph and we have more than one group stacked, we have to change the type description in order to add\n // the stacked group\n if (\n isStack &&\n ooui.y.filter((entry) => entry.stacked !== undefined).length > 1\n ) {\n adjustedStackedData = adjustedStackedData.map((entry) => {\n return { ...entry, type: `${entry.type} - ${entry.stacked}` };\n });\n }\n\n let adjustedUninformedData = [...adjustedStackedData];\n // If the type of the graph is pie, we have to check for \"false\" (uninformed) computes values\n // in order to adjust the description to a localized string for \"Unassigned / not introduced\"\n // Else, we have to ignore those entries\n if (\n ooui.type === \"pie\" &&\n adjustedUninformedData.some((entry) => entry.x === false)\n ) {\n adjustedUninformedData = adjustedUninformedData.map((entry) => {\n if (entry.x === false) {\n return { ...entry, x: options?.uninformedString || \"Not informed\" };\n }\n return entry;\n });\n } else if (adjustedStackedData.some((entry) => entry.x === false)) {\n adjustedUninformedData = adjustedUninformedData.filter(\n (entry) => entry.x !== false,\n );\n }\n\n // If we have a timerange parameter defined in ooui, we must fill the gaps with the desired units and group results too\n let finalData = adjustedUninformedData;\n\n if (ooui.timerange) {\n finalData = processTimerangeData({\n values: finalData,\n timerange: ooui.timerange,\n interval: ooui.interval,\n });\n } else if (ooui.type == \"pie\") {\n finalData = adjustedUninformedData.sort((a, b) => b.value - a.value);\n }\n\n const result: Result = {\n data: finalData,\n isGroup: isStack || isGroup,\n isStack,\n };\n\n if (ooui.type === \"line\" && ooui.y_range) {\n result.yAxisOpts = {\n mode: ooui.y_range,\n };\n if (ooui.y_range === \"auto\") {\n const { min, max } = getMinMax(finalData);\n result.yAxisOpts.valueOpts = { min, max };\n }\n }\n\n return result;\n};\n\nexport function getValuesForYField({\n entries,\n fieldName,\n fields,\n}: {\n entries: Array<Record<string, any>>;\n fieldName: string;\n fields: Record<string, any>;\n}) {\n return entries\n .map((obj) => {\n return getValueAndLabelForField({\n fieldName,\n values: obj,\n fields,\n });\n })\n .map(({ value, label }) => {\n return label;\n });\n}\n\nexport function getValueForOperator({\n operator,\n values,\n}: {\n operator: Operator;\n values: any[];\n}) {\n switch (operator) {\n case \"count\": {\n return values.length;\n }\n case \"+\": {\n return roundNumber(\n values.reduce(function (previousValue: number, currentValue: number) {\n return previousValue + currentValue;\n }),\n );\n }\n case \"-\": {\n return roundNumber(\n values.reduce(function (previousValue: number, currentValue: number) {\n return previousValue - currentValue;\n }),\n );\n }\n case \"*\": {\n return roundNumber(\n values.reduce(function (previousValue: number, currentValue: number) {\n return previousValue * currentValue;\n }),\n );\n }\n case \"avg\": {\n const sum = values.reduce((a: number, b: number) => a + b, 0);\n const avg = sum / values.length || 0;\n return roundNumber(avg);\n }\n case \"min\": {\n return Math.min(...values);\n }\n case \"max\": {\n return Math.max(...values);\n }\n }\n}\n\nfunction roundNumber(num: number) {\n return Math.round((num + Number.EPSILON) * 100) / 100;\n}\n\nexport function getValuesGroupedByField({\n fieldName,\n fields,\n values,\n}: {\n fieldName: string;\n values: Array<Record<string, any>>;\n fields: Record<string, any>;\n}) {\n const groupedValues: GroupedValues = {};\n\n values.forEach((entry) => {\n const { value, label } = getValueAndLabelForField({\n fields,\n values: entry,\n fieldName,\n });\n\n if (!groupedValues[value]) {\n groupedValues[value] = { label, entries: [] };\n }\n\n groupedValues[value].entries.push(entry);\n });\n\n return groupedValues;\n}\n\nexport function getAllObjectsInGroupedValues(grouped: GroupedValues) {\n let totalObjects: any[] = [];\n Object.keys(grouped).forEach((key) => {\n const group = grouped[key];\n totalObjects = totalObjects.concat(group.entries);\n });\n return totalObjects;\n}\n\nexport function getYAxisFieldname({\n yAxis,\n fields,\n}: {\n yAxis: GraphYAxis;\n fields: Record<string, any>;\n}) {\n const fieldProps = fields[yAxis.name];\n\n if (fieldProps?.string) {\n // return `${fieldProps.string} (${labelsForOperator[yAxis.operator]})`;\n return fieldProps.string;\n }\n\n // return yAxis.name + \"_\" + labelsForOperator[yAxis.operator];\n return yAxis.name;\n}\n\nexport function getMinMax(values: GraphValues[], margin: number = 0.1) {\n if (values.length === 0) {\n throw new Error(\"The values array cannot be empty.\");\n }\n const valueList = values.map((d) => d.value);\n const minValue = Math.min(...valueList);\n const maxValue = Math.max(...valueList);\n const calculatedMargin = (maxValue - minValue) * margin;\n\n return {\n min: minValue - calculatedMargin,\n max: maxValue + calculatedMargin,\n };\n}\n"],"names":["isTrue","value","evaluateCondition","entry","values","fields","fieldName","operator","expectedValue","valueInObject","comparisonResult","evaluateFieldComparison","replaceEntities","string","decode","result","parseAttributes","attrs","widgetType","replaceFalse","replaceTags","parsedObject","newAttributes","attrField","attrIsTrue","i","parseWidgetProps","widget_props","parseJsonAttributes","attrsWithReplacedEntities","jsonAttributes","finalAttributes","evaluatedEntry","evaluateConscheckCondition","error","evaluateAttributes","tagAttributes","fallbackMode","finalTagAttributes","parseBoolAttribute","attr","_Widget","props","__publicField","Widget","Field","id","Avatar","NewLine","Label","_a","Container","columns","colspan","readOnly","key","span","el","prev","current","widget","options","widgetsToAdd","addLabel","label","accumulator","currentWidget","r","row","item","_ContainerWidget","ContainerWidget","_Notebook","Notebook","Spinner","Page","Group","Button","primary","danger","ButtonGroup","button","b","Char","Text","Selection","Many2one","Markdown","Boolean","Integer","Float","integers","decimals","FloatTime","HTMLPreview","ProgressBar","Date","DateTime","One2many","Separator","Reference","Binary","Image","FiberGrid","Timeline","Indicator","e","MultiCheckbox","Tags","Tag","Radio","Switch","Steps","CodeEditor","Time","Alert","Comments","parsedHeight","JSONField","Email","Carousel","g","ColorPicker","WidgetFactory","type","finalType","evaluateStates","fieldStatesConfig","newTagStateAttrs","evaluatedStates","stateCondition","configAttrValues","entryConfig","attribute","evaluatedState","evaluateButtonStates","states","splittedStates","getValueForField","fieldType","parseContext","context","isObject","parsedContextInJson","tryParseJSON","valuesSplitted","parsedContext","valueForField","parseContextFields","str","variable","parseOnChange","onChangeString","splitted","method","argsSplitted","arg","flattenContainer","widgets","flattened","flattenArray","items","flatSubArray","widgetArray","Form","xml","view","txml","allWidgets","unknownWidget","field","container","widgetFactory","f","tagName","attributes","children","name","evaluatedTagAttributes","evaluatedStateAttributes","widgetContext","domain","checkIfDomainHasValue","_b","widgetProps","Tree","mergedAttrs","fieldDef","SearchFieldTypes","SearchFilter","searchFields","searchField","fieldAttributes","transformDomainForChildWidget","widgetFieldName","transformedDomain","domainEntry","rootFieldName","targetFieldName","parseDomainFields","DashboardItem","Dashboard","Graph","element","range","GraphIndicator","GraphIndicatorField","parseXYAxis","nodes","yAxisElements","xAxis","child","axis","stacked","GraphXAxis","GraphYAxis","GraphChart","xyAxis","GraphTypes","parseGraph","GraphModel","GraphAxis","getFieldsToRetrieve","ooui","y","getValueAndLabelForField","xFieldData","valuePair","selectionPair","processTimerangeData","timerange","interval","combinedValues","combineValuesForTimerange","fillGapsInTimerangeData","finalValues","uniqueValues","getUniqueValuesGroupedBy","units","valuesForKey","date","nextDate","checkDatesConsecutive","missingDates","getMissingConsecutiveDates","stringDate","a","dates","sortedDates","date1","date2","iDate","moment","getFormatForUnits","fDate","adjustedValues","adjustXValuesForTimeRage","finalValue","getValueForOperator","convertDateToTimeRangeAdjusted","format","getDateFormat","momentDate","unit","consecutive","diff","groupBy","x","uniqueKey","labelsForOperator","processGraphData","valuesGroupedByX","getValuesGroupedByField","data","yField","xValue","xLabel","objectsForXValue","valuesGroupedByYLabel","yUniqueValue","entries","valuesForYField","getValuesForYField","getYAxisFieldname","isGroup","isStack","adjustedStackedData","adjustedUninformedData","finalData","min","max","getMinMax","obj","roundNumber","previousValue","currentValue","avg","num","groupedValues","getAllObjectsInGroupedValues","grouped","totalObjects","group","yAxis","fieldProps","margin","valueList","d","minValue","maxValue","calculatedMargin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gisce/ooui",
3
- "version": "2.33.0-alpha.3",
3
+ "version": "2.33.0-alpha.5",
4
4
  "engines": {
5
5
  "node": "20.5.0"
6
6
  },
package/src/One2many.ts CHANGED
@@ -91,8 +91,8 @@ class One2many extends Field {
91
91
  /**
92
92
  * Infinite mode
93
93
  */
94
- _infinite: string | undefined = undefined;
95
- get infinite(): string | undefined {
94
+ _infinite: string | boolean | undefined = undefined;
95
+ get infinite(): string | boolean | undefined {
96
96
  return this._infinite;
97
97
  }
98
98
 
package/src/Widget.ts CHANGED
@@ -116,6 +116,11 @@ abstract class Widget {
116
116
  this._isFunction = value;
117
117
  }
118
118
 
119
+ _isSortable: boolean = false;
120
+ get isSortable(): boolean {
121
+ return this._isSortable;
122
+ }
123
+
119
124
  /**
120
125
  * Base type of the field
121
126
  */
@@ -169,6 +174,9 @@ abstract class Widget {
169
174
  if (props.is_function) {
170
175
  this._isFunction = props.is_function;
171
176
  }
177
+ if (props.is_sortable) {
178
+ this._isSortable = props.is_sortable;
179
+ }
172
180
  }
173
181
  }
174
182