@gisce/react-ooui 1.4.8 → 1.4.9-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Integer.d.ts","sourceRoot":"","sources":["Integer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,aAAK,YAAY,GAAG,WAAW,GAAG;IAChC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,YAAY,sBA+B1C,CAAC"}
1
+ {"version":3,"file":"Integer.d.ts","sourceRoot":"","sources":["Integer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,aAAK,YAAY,GAAG,WAAW,GAAG;IAChC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,YAAY,sBA4C1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"One2manyInput.d.ts","sourceRoot":"","sources":["One2manyInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAWvD,OAAO,EAAE,KAAK,EAAY,MAAM,SAAS,CAAC;AAkB1C,aAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC5B,CAAC;AAQF,aAAK,YAAY,GAAG;IAClB,SAAS,CAAC,EACN,UAAU,GACV,eAAe,GACf,eAAe,GACf,eAAe,GACf,aAAa,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB,CAAC;AAEF,UAAU,kBAAkB;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC;CACd;AAWD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6nB/C,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"One2manyInput.d.ts","sourceRoot":"","sources":["One2manyInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAWvD,OAAO,EAAE,KAAK,EAAY,MAAM,SAAS,CAAC;AAkB1C,aAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC5B,CAAC;AAQF,aAAK,YAAY,GAAG;IAClB,SAAS,CAAC,EACN,UAAU,GACV,eAAe,GACf,eAAe,GACf,eAAe,GACf,aAAa,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB,CAAC;AAEF,UAAU,kBAAkB;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC;CACd;AAWD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAqoB/C,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -9,8 +9,8 @@ export declare type FormProps = {
9
9
  showFooter?: boolean;
10
10
  getDataFromAction?: boolean;
11
11
  mustClearAfterSave?: boolean;
12
- submitMode?: "api" | "values";
13
- onSubmitSucceed?: (id?: number, values?: any, formValues?: any) => void;
12
+ submitMode?: "api" | "values" | "2many";
13
+ onSubmitSucceed?: (id?: number, values?: any, formValues?: any, x2manyPendingLink?: boolean) => void;
14
14
  onSubmitError?: (error: any) => void;
15
15
  onCancel?: () => void;
16
16
  onFieldsChange?: (values: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["Form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAkCf,OAAO,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC;AAmBjD,oBAAY,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACxE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;;AAm+BF,wBAAgC"}
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["Form.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AAkCf,OAAO,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC;AAmBjD,oBAAY,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,eAAe,CAAC,EAAE,CAChB,EAAE,CAAC,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,GAAG,EACZ,UAAU,CAAC,EAAE,GAAG,EAChB,iBAAiB,CAAC,EAAE,OAAO,KACxB,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;;AAmhCF,wBAAgC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gisce/react-ooui",
3
- "version": "1.4.8",
3
+ "version": "1.4.9-rc.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "src",
@@ -4,7 +4,8 @@ export default {
4
4
  aclarador: "aclaridor",
5
5
  active: true,
6
6
  autoconsum_id: false,
7
- bq: false,
7
+ ax: 347.21,
8
+ bq: 347.21,
8
9
  butlletins: [],
9
10
  catas_bq: false,
10
11
  catas_cpa: false,
@@ -49,7 +50,7 @@ export default {
49
50
  tv: false,
50
51
  },
51
52
  form: {
52
- arch: '<form string="CUPS">\n <notebook colspan="4">\n <page string="Corbes"> <group colspan="4"> <group string="Validada" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Facturada" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Autoconsumida" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Generada Neta" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Quart-Horària" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> </group> </page> <page string="General">\n <field name="name" select="1" size="25"/>\n <field name="active" select="1"/>\n <field name="distribuidora_id" domain="[(\'supplier\',\'=\',True)]" context="{\'task\': \'test\'}" required="1" select="1"/>\n <field name="id_municipi" select="1"/>\n <field name="id_provincia"/>\n <field name="id_poblacio" select="1" domain="[(\'municipi_id.id\', \'=\', id_municipi)]"/>\n <field name="dp"/>\n <field name="direccio" select="1" colspan="4"/>\n <field name="polissa_polissa" select="1"/>\n <field name="polissa_comptador" select="1"/>\n <field name="polissa_potencia"/>\n <field name="potencia_adscrita" attrs="{\'readonly\':[(\'force_potencia_adscrita\',\'=\',0)]}"/>\n <field name="force_potencia_adscrita"/>\n <group colspan="4" string="Adreces">\n <notebook colspan="4">\n <page string="Principal">\n <separator string="Zona urbana" colspan="4"/>\n <field name="tv"/>\n <field name="nv" select="1"/>\n <field name="pnp" select="1"/>\n <field name="bq" select="1"/>\n <field name="es" select="1"/>\n <field name="pt" select="1"/>\n <field name="pu" select="1"/>\n <field name="aclarador" colspan="4" select="1"/>\n <separator string="Zona industrial" colspan="4"/>\n <field name="cpo" select="1"/>\n <field name="cpa" select="1"/>\n </page>\n <page string="Cadastre">\n <separator string="Zona urbana" colspan="4"/>\n <field name="catas_np"/>\n <field name="catas_nm"/>\n <field name="ref_catastral" select="1"/>\n <button type="object" name="update_dir_from_ref" string="Obtenir del Cadastre"/>\n <button type="object" name="delete_dir_ref" string="Eliminar dades del Cadastre" confirm="Està segur que vol eliminar les dades que s\'han obtingut del cadastre?"/>\n <field name="catas_ldt" colspan="4"/>\n <field name="catas_tv"/>\n <field name="catas_nv"/>\n <field name="catas_pnp"/>\n <field name="catas_bq"/>\n <field name="catas_es"/>\n <field name="catas_pt"/>\n <field name="catas_pu"/>\n <field name="catas_dp"/>\n <separator string="Zona industrial" colspan="4"/>\n <field name="catas_cpo"/>\n <field name="catas_cpa"/>\n <separator string="Sincronització amb el cadastre" colspan="4"/>\n <label colspan="2" string="Si disposa de la referencia cadastral pot copiar les dades del cadastre a l\'adreça principal mitjançant aquest botó"/>\n <button type="object" name="copy_to_alternative" string="Copiar a la principal"/>\n </page>\n <page string="Notes">\n <field name="notes" colspan="4" nolabel="1"/>\n </page>\n </notebook>\n </group>\n </page>\n <page string="Autoconsum">\n <field name="autoconsum_id" readonly="1" colspan="4"/>\n <field name="coef_repartiment" readonly="1" colspan="4"/>\n </page>\n <page string="Butlletins">\n <field name="butlletins" colspan="4" nolabel="1" context="{\'cups_id\': active_id}"/>\n </page>\n <page string="Històric d\'autoconsums">\n <field name="hist_autoconsum" nolabel="1" context="{\'default_cups_id\': active_id}" readonly="1"/>\n </page>\n <page string="Històric de pòlisses">\n <field name="polisses" nolabel="1" colspan="4">\n </field>\n </page>\n </notebook>\n </form>',
53
+ arch: '<form string="CUPS">\n <notebook colspan="4">\n <page string="Corbes"> <group colspan="4"> <group string="Validada" colspan="2"> <field name="ax" string="AX"/> <field name="bq" string="Format"/> </group> <group string="Facturada" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Autoconsumida" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Generada Neta" colspan="2"> <field name="bq" string="Última corba"/> <field name="bq" string="Format"/> </group> <group string="Quart-Horària" colspan="2"> <field name="bq1" string="Última corba"/> <field name="bq" string="Format"/> </group> </group> </page> <page string="General">\n <field name="name" select="1" size="25"/>\n <field name="active" select="1"/>\n <field name="distribuidora_id" domain="[(\'supplier\',\'=\',True)]" context="{\'task\': \'test\'}" required="1" select="1"/>\n <field name="id_municipi" select="1"/>\n <field name="id_provincia"/>\n <field name="id_poblacio" select="1" domain="[(\'municipi_id.id\', \'=\', id_municipi)]"/>\n <field name="dp"/>\n <field name="direccio" select="1" colspan="4"/>\n <field name="polissa_polissa" select="1"/>\n <field name="polissa_comptador" select="1"/>\n <field name="polissa_potencia"/>\n <field name="potencia_adscrita" attrs="{\'readonly\':[(\'force_potencia_adscrita\',\'=\',0)]}"/>\n <field name="force_potencia_adscrita"/>\n <group colspan="4" string="Adreces">\n <notebook colspan="4">\n <page string="Principal">\n <separator string="Zona urbana" colspan="4"/>\n <field name="tv"/>\n <field name="nv" select="1"/>\n <field name="pnp" select="1"/>\n <field name="bq" select="1"/>\n <field name="es" select="1"/>\n <field name="pt" select="1"/>\n <field name="pu" select="1"/>\n <field name="aclarador" colspan="4" select="1"/>\n <separator string="Zona industrial" colspan="4"/>\n <field name="cpo" select="1"/>\n <field name="cpa" select="1"/>\n </page>\n <page string="Cadastre">\n <separator string="Zona urbana" colspan="4"/>\n <field name="catas_np"/>\n <field name="catas_nm"/>\n <field name="ref_catastral" select="1"/>\n <button type="object" name="update_dir_from_ref" string="Obtenir del Cadastre"/>\n <button type="object" name="delete_dir_ref" string="Eliminar dades del Cadastre" confirm="Està segur que vol eliminar les dades que s\'han obtingut del cadastre?"/>\n <field name="catas_ldt" colspan="4"/>\n <field name="catas_tv"/>\n <field name="catas_nv"/>\n <field name="catas_pnp"/>\n <field name="catas_bq"/>\n <field name="catas_es"/>\n <field name="catas_pt"/>\n <field name="catas_pu"/>\n <field name="catas_dp"/>\n <separator string="Zona industrial" colspan="4"/>\n <field name="catas_cpo"/>\n <field name="catas_cpa"/>\n <separator string="Sincronització amb el cadastre" colspan="4"/>\n <label colspan="2" string="Si disposa de la referencia cadastral pot copiar les dades del cadastre a l\'adreça principal mitjançant aquest botó"/>\n <button type="object" name="copy_to_alternative" string="Copiar a la principal"/>\n </page>\n <page string="Notes">\n <field name="notes" colspan="4" nolabel="1"/>\n </page>\n </notebook>\n </group>\n </page>\n <page string="Autoconsum">\n <field name="autoconsum_id" readonly="1" colspan="4"/>\n <field name="coef_repartiment" readonly="1" colspan="4"/>\n </page>\n <page string="Butlletins">\n <field name="butlletins" colspan="4" nolabel="1" context="{\'cups_id\': active_id}"/>\n </page>\n <page string="Històric d\'autoconsums">\n <field name="hist_autoconsum" nolabel="1" context="{\'default_cups_id\': active_id}" readonly="1"/>\n </page>\n <page string="Històric de pòlisses">\n <field name="polisses" nolabel="1" colspan="4">\n </field>\n </page>\n </notebook>\n </form>',
53
54
  field_parent: false,
54
55
  fields: {
55
56
  aclarador: {
@@ -72,10 +73,22 @@ export default {
72
73
  type: "many2one",
73
74
  views: {},
74
75
  },
76
+ ax: {
77
+ size: 4,
78
+ string: "Bloc",
79
+ type: "integer",
80
+ views: {},
81
+ },
75
82
  bq: {
76
83
  size: 4,
77
84
  string: "Bloc",
78
- type: "char",
85
+ type: "integer",
86
+ views: {},
87
+ },
88
+ bq1: {
89
+ size: 4,
90
+ string: "Bloc",
91
+ type: "integer",
79
92
  views: {},
80
93
  },
81
94
  butlletins: {
@@ -27,7 +27,20 @@ export const Integer = (props: IntegerProps) => {
27
27
  className={"w-full "}
28
28
  disabled={readOnly}
29
29
  formatter={(value) => {
30
- return `${value}`.replace(/[^0-9\-]+/g, "");
30
+ // Check if value is not undefined and is a valid number
31
+ if (value === undefined) {
32
+ return "";
33
+ }
34
+
35
+ if (typeof value === "string" && !isNaN(parseFloat(value))) {
36
+ let truncatedValue = Math.trunc(parseFloat(value));
37
+ return `${truncatedValue}`.replace(/[^0-9\-]+/g, "");
38
+ } else if (typeof value === "number") {
39
+ let truncatedValue = Math.trunc(value);
40
+ return `${truncatedValue}`.replace(/[^0-9\-]+/g, "");
41
+ }
42
+
43
+ return "";
31
44
  }}
32
45
  onChange={(newValue: any) => {
33
46
  const newNumber = newValue as number;
@@ -437,11 +437,19 @@ const One2manyInput: React.FC<One2manyInputProps> = (
437
437
  const onFormModalSubmitSucceed = (
438
438
  id: number | undefined,
439
439
  _: any,
440
- values: any
440
+ values: any,
441
+ x2manyPendingLink: boolean = false
441
442
  ) => {
442
443
  let updatedItems: One2manyItem[];
443
444
 
444
- if (id) {
445
+ if (x2manyPendingLink) {
446
+ updatedItems = items.concat({
447
+ id,
448
+ operation: "pendingLink",
449
+ values: { ...values, id },
450
+ treeValues: { ...values, id },
451
+ });
452
+ } else if (id) {
445
453
  updatedItems = items.map((item: One2manyItem) => {
446
454
  if (item.id === id) {
447
455
  return {
@@ -683,7 +691,7 @@ const One2manyInput: React.FC<One2manyInputProps> = (
683
691
  formView={views.get("form")}
684
692
  model={relation}
685
693
  id={modalItem?.id}
686
- submitMode={"values"}
694
+ submitMode={"2many"}
687
695
  values={modalItem?.values}
688
696
  defaultValues={modalItem?.defaultValues}
689
697
  visible={showFormModal}
@@ -67,8 +67,13 @@ export type FormProps = {
67
67
  showFooter?: boolean;
68
68
  getDataFromAction?: boolean;
69
69
  mustClearAfterSave?: boolean;
70
- submitMode?: "api" | "values";
71
- onSubmitSucceed?: (id?: number, values?: any, formValues?: any) => void;
70
+ submitMode?: "api" | "values" | "2many";
71
+ onSubmitSucceed?: (
72
+ id?: number,
73
+ values?: any,
74
+ formValues?: any,
75
+ x2manyPendingLink?: boolean
76
+ ) => void;
72
77
  onSubmitError?: (error: any) => void;
73
78
  onCancel?: () => void;
74
79
  onFieldsChange?: (values: any) => void;
@@ -127,6 +132,7 @@ function Form(props: FormProps, ref: any) {
127
132
  const lastAssignedValues = useRef<any>({});
128
133
  const warningIsShown = useRef<boolean>(false);
129
134
  const formSubmitting = useRef<boolean>(false);
135
+ const x2manyPendingLink = useRef<boolean>(false);
130
136
 
131
137
  const widthToEvaluate =
132
138
  parentWidth !== undefined ? parentWidth : containerWidth;
@@ -203,10 +209,15 @@ function Form(props: FormProps, ref: any) {
203
209
  }
204
210
  }, [defaultGetCalled]);
205
211
 
206
- const onSubmitSucceed = (id?: number, values?: any, formValues?: any) => {
212
+ const onSubmitSucceed = (
213
+ id?: number,
214
+ values?: any,
215
+ formValues?: any,
216
+ x2manyPendingLink?: boolean
217
+ ) => {
207
218
  setFormHasChanges?.(false);
208
219
  setFormIsSaving?.(false);
209
- propsOnSubmitSucceed?.(id, values, formValues);
220
+ propsOnSubmitSucceed?.(id, values, formValues, x2manyPendingLink);
210
221
  setCurrentId?.(id);
211
222
  };
212
223
 
@@ -294,6 +305,15 @@ function Form(props: FormProps, ref: any) {
294
305
  return { ...parentContext, ...formOoui?.context };
295
306
  }
296
307
 
308
+ function getActiveIdsContext() {
309
+ const currentId = getCurrentId()!;
310
+
311
+ if (!currentId) {
312
+ return {};
313
+ }
314
+ return { active_id: getCurrentId()!, active_ids: [getCurrentId()!] };
315
+ }
316
+
297
317
  function getAdditionalValues() {
298
318
  return {
299
319
  id: getCurrentId()!,
@@ -608,6 +628,32 @@ function Form(props: FormProps, ref: any) {
608
628
  formSubmitting.current = true;
609
629
 
610
630
  setError(undefined);
631
+
632
+ if (
633
+ x2manyPendingLink.current &&
634
+ !formHasChanges() &&
635
+ getCurrentId()! &&
636
+ callOnSubmitSucceed
637
+ ) {
638
+ formSubmitting.current = false;
639
+ setFormHasChanges?.(false);
640
+ onSubmitSucceed?.(
641
+ getCurrentId(),
642
+ getValues(),
643
+ getFormValues(),
644
+ x2manyPendingLink.current
645
+ );
646
+ x2manyPendingLink.current = false;
647
+ const currentId = getCurrentId()!;
648
+
649
+ if (mustClearAfterSave) {
650
+ createdId.current = undefined;
651
+ assignNewValuesToForm({ values: {}, fields, reset: true });
652
+ }
653
+
654
+ return { succeed: true, id: currentId };
655
+ }
656
+
611
657
  if (!formHasChanges() && getCurrentId()! && callOnSubmitSucceed) {
612
658
  formSubmitting.current = false;
613
659
  setFormHasChanges?.(false);
@@ -957,15 +1003,22 @@ function Form(props: FormProps, ref: any) {
957
1003
 
958
1004
  try {
959
1005
  if (formHasChanges() || getCurrentId() === undefined) {
960
- await submitForm({ callOnSubmitSucceed: false });
1006
+ if (submitMode === "2many") {
1007
+ await submitApi({ callOnSubmitSucceed: false });
1008
+ x2manyPendingLink.current = true;
1009
+ } else {
1010
+ await submitForm({ callOnSubmitSucceed: false });
1011
+ }
961
1012
  }
962
1013
 
1014
+ const updatedContext = { ...context, ...getActiveIdsContext() };
1015
+
963
1016
  if (type === "object") {
964
- await runObjectButton({ action, context });
1017
+ await runObjectButton({ action, context: updatedContext });
965
1018
  } else if (type === "workflow") {
966
1019
  await runWorkflowButton({ action });
967
1020
  } else if (type === "action") {
968
- await runActionButton({ action, context });
1021
+ await runActionButton({ action, context: updatedContext });
969
1022
  }
970
1023
  } catch (err) {
971
1024
  showErrorDialog(err);