@gisce/react-ooui 1.4.10 → 1.4.11-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react-ooui.es.js +3596 -3555
- package/dist/react-ooui.es.js.map +1 -1
- package/dist/react-ooui.umd.js +11 -11
- package/dist/react-ooui.umd.js.map +1 -1
- package/dist/widgets/base/Integer.d.ts.map +1 -1
- package/dist/widgets/base/many2one/Many2oneSuffix.d.ts.map +1 -1
- package/dist/widgets/base/one2many/One2manyInput.d.ts.map +1 -1
- package/dist/widgets/views/Form.d.ts +2 -2
- package/dist/widgets/views/Form.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/stories/mocks/models/cups.ts +16 -3
- package/src/widgets/base/Integer.tsx +14 -1
- package/src/widgets/base/many2one/Many2oneSuffix.tsx +27 -12
- package/src/widgets/base/one2many/One2manyInput.tsx +11 -3
- package/src/widgets/views/Form.tsx +65 -8
|
@@ -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,
|
|
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":"Many2oneSuffix.d.ts","sourceRoot":"","sources":["Many2oneSuffix.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Many2oneSuffix.d.ts","sourceRoot":"","sources":["Many2oneSuffix.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAwB/D,aAAK,KAAK,GAAG;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,KAAK,6BAiM1C,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,
|
|
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;
|
|
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;;AAuhCF,wBAAgC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gisce/react-ooui",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.11-rc.1",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"src",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@ant-design/plots": "^1.0.9",
|
|
35
35
|
"@gisce/fiber-diagram": "^1.1.0-rc.3",
|
|
36
|
-
"@gisce/ooui": "^0.22.
|
|
36
|
+
"@gisce/ooui": "^0.22.3-rc.0",
|
|
37
37
|
"@gisce/react-formiga-components": "^1.0.9-rc.21",
|
|
38
38
|
"@gisce/react-formiga-table": "^0.8.5",
|
|
39
39
|
"@monaco-editor/react": "^4.4.5",
|
|
@@ -4,7 +4,8 @@ export default {
|
|
|
4
4
|
aclarador: "aclaridor",
|
|
5
5
|
active: true,
|
|
6
6
|
autoconsum_id: false,
|
|
7
|
-
|
|
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="
|
|
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: "
|
|
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
|
-
|
|
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;
|
|
@@ -20,6 +20,7 @@ import ConnectionProvider from "@/ConnectionProvider";
|
|
|
20
20
|
import { processValues } from "@/helpers/formHelper";
|
|
21
21
|
import showErrorDialog from "@/ui/ActionErrorDialog";
|
|
22
22
|
import { LocaleContext, LocaleContextType } from "@/context/LocaleContext";
|
|
23
|
+
import { parseContextFields, parseDomainFields } from "@gisce/ooui";
|
|
23
24
|
|
|
24
25
|
type Props = {
|
|
25
26
|
id: number;
|
|
@@ -60,18 +61,30 @@ export const Many2oneSuffix = (props: Props) => {
|
|
|
60
61
|
context,
|
|
61
62
|
}) as FormView;
|
|
62
63
|
setFormView(formView);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
64
|
+
let fields: string[] = [];
|
|
65
|
+
const { toolbar } = formView;
|
|
66
|
+
toolbar.action?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));
|
|
67
|
+
toolbar.action?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));
|
|
68
|
+
toolbar.relate?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));
|
|
69
|
+
toolbar.relate?.filter((item: any) => item.hasOwnProperty('domain')).map((item: any) => fields.push(...parseDomainFields(item.domain)));
|
|
70
|
+
toolbar.print?.filter((item: any) => item.hasOwnProperty('context')).map((item: any) => fields.push(...parseContextFields(item.context)));
|
|
71
|
+
fields = fields.filter((i) => Object.keys(formView.fields).indexOf(i) > -1)
|
|
72
|
+
|
|
73
|
+
let values = {}
|
|
74
|
+
|
|
75
|
+
if (fields.length > 0) {
|
|
76
|
+
values = (
|
|
77
|
+
await ConnectionProvider.getHandler().readObjects({
|
|
78
|
+
model,
|
|
79
|
+
ids: [id],
|
|
80
|
+
fieldsToRetrieve: fields,
|
|
81
|
+
context,
|
|
82
|
+
})
|
|
83
|
+
)[0];
|
|
84
|
+
}
|
|
85
|
+
values = { ...processValues(values, fields), active_id: id };
|
|
86
|
+
setTargetValues(values);
|
|
87
|
+
console.log('Values', targetValues, values);
|
|
75
88
|
|
|
76
89
|
setIsLoading(false);
|
|
77
90
|
} catch (err) {
|
|
@@ -149,6 +162,8 @@ export const Many2oneSuffix = (props: Props) => {
|
|
|
149
162
|
return;
|
|
150
163
|
}
|
|
151
164
|
|
|
165
|
+
console.log(targetValues);
|
|
166
|
+
|
|
152
167
|
openRelate({
|
|
153
168
|
relateData: relateItemClicked,
|
|
154
169
|
values: targetValues,
|
|
@@ -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 (
|
|
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={"
|
|
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?: (
|
|
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 = (
|
|
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);
|
|
@@ -833,9 +879,9 @@ function Form(props: FormProps, ref: any) {
|
|
|
833
879
|
action,
|
|
834
880
|
payload: [getCurrentId()!],
|
|
835
881
|
context: {
|
|
836
|
-
...context,
|
|
837
882
|
...formOoui?.context,
|
|
838
883
|
...parentContext,
|
|
884
|
+
...context,
|
|
839
885
|
},
|
|
840
886
|
});
|
|
841
887
|
|
|
@@ -957,15 +1003,26 @@ function Form(props: FormProps, ref: any) {
|
|
|
957
1003
|
|
|
958
1004
|
try {
|
|
959
1005
|
if (formHasChanges() || getCurrentId() === undefined) {
|
|
960
|
-
|
|
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 additionalContext = x2manyPendingLink.current
|
|
1015
|
+
? getActiveIdsContext()
|
|
1016
|
+
: {};
|
|
1017
|
+
|
|
1018
|
+
const updatedContext = { ...context, ...additionalContext };
|
|
1019
|
+
|
|
963
1020
|
if (type === "object") {
|
|
964
|
-
await runObjectButton({ action, context });
|
|
1021
|
+
await runObjectButton({ action, context: updatedContext });
|
|
965
1022
|
} else if (type === "workflow") {
|
|
966
1023
|
await runWorkflowButton({ action });
|
|
967
1024
|
} else if (type === "action") {
|
|
968
|
-
await runActionButton({ action, context });
|
|
1025
|
+
await runActionButton({ action, context: updatedContext });
|
|
969
1026
|
}
|
|
970
1027
|
} catch (err) {
|
|
971
1028
|
showErrorDialog(err);
|