2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 13:36:50 +00:00

Form updates

This commit is contained in:
Oliver 2021-07-20 19:14:44 +10:00
parent fd818740f7
commit ca6226a596
3 changed files with 81 additions and 49 deletions

View File

@ -63,6 +63,7 @@ class APIFormField {
Widget constructField() { Widget constructField() {
switch (type) { switch (type) {
case "string": case "string":
case "url":
return _constructString(); return _constructString();
case "boolean": case "boolean":
return _constructBoolean(); return _constructBoolean();
@ -86,8 +87,9 @@ class APIFormField {
data["value"] = val; data["value"] = val;
}, },
validator: (value) { validator: (value) {
if (required && (value == null || value.isEmpty)) {
// TODO - Custom field validation return L10().valueCannotBeEmpty;
}
}, },
); );
} }
@ -193,14 +195,39 @@ Future<void> launchApiForm(String title, String url, Map<String, dynamic> fields
formFields.add(APIFormField(fieldName, remoteField)); formFields.add(APIFormField(fieldName, remoteField));
} }
List<Widget> buildWidgets() {
List<Widget> widgets = []; List<Widget> widgets = [];
for (var ff in formFields) { for (var ff in formFields) {
if (!ff.hidden) {
if (ff.hidden) {
continue;
}
widgets.add(ff.constructField()); widgets.add(ff.constructField());
if (ff.hasErrors()) {
for (String error in ff.errorMessages()) {
widgets.add(
ListTile(
title: Text(
error,
style: TextStyle(color: Color.fromRGBO(250, 50, 50, 1))
),
)
);
} }
} }
}
return widgets;
}
List<Widget> _widgets = buildWidgets();
void sendRequest(BuildContext context) async { void sendRequest(BuildContext context) async {
// Package up the form data // Package up the form data
@ -252,6 +279,8 @@ Future<void> launchApiForm(String title, String url, Map<String, dynamic> fields
OneContext().showDialog( OneContext().showDialog(
builder: (BuildContext context) { builder: (BuildContext context) {
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog( return AlertDialog(
title: Text(title), title: Text(title),
actions: <Widget>[ actions: <Widget>[
@ -274,7 +303,10 @@ Future<void> launchApiForm(String title, String url, Map<String, dynamic> fields
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate()) {
_formKey.currentState!.save(); _formKey.currentState!.save();
setState(() {
sendRequest(context); sendRequest(context);
_widgets = buildWidgets();
});
} }
}, },
) )
@ -286,11 +318,13 @@ Future<void> launchApiForm(String title, String url, Map<String, dynamic> fields
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: widgets children: _widgets,
) )
) )
) )
); );
} }
); );
}
);
} }

@ -1 +1 @@
Subproject commit 84f6ed3faf63cbf371016e134196400e5f822759 Subproject commit 0870256fb97a27ccf0ab73b4665b886ca0abb4aa

View File

@ -179,18 +179,16 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
var _keywords; var _keywords;
var _link; var _link;
launchApiForm( launchApiForm(
"Edit Part", L10().editPart,
part.url, part.url,
{ {
"name": {}, "name": {},
"description": {}, "description": {},
"IPN": { "IPN": {},
"hidden": true, "keywords": {},
"label": "My custom label!",
},
"active": {}, "active": {},
"link": {},
}, },
modelData: part.jsondata, modelData: part.jsondata,
onSuccess: refresh, onSuccess: refresh,