edit form save almost working

This commit is contained in:
2021-02-20 18:11:03 +01:00
parent 6561da7e99
commit bc8b04f331
17 changed files with 469 additions and 81 deletions
@@ -1,6 +1,7 @@
<script>
import {castId, keyBy, objCopy, isEmpty} from "../utils";
import forEach from "lodash-es/forEach";
import isEqual from "lodash-es/isEqual";
import axios from "axios";
export default {
@@ -29,7 +30,6 @@ export default {
values[p.id] = [
// this is the format used for values
{
id: null,
// it can also have model: ... here
value: objCopy(p.default)
}
@@ -67,7 +67,11 @@ export default {
let values = [];
forEach(objCopy(this.values), (vv, prop_model_id) => {
for (let v of vv) {
v.model_id = castId(prop_model_id);
if (isEqual(v.value, {"String": ""}) && this.properties[prop_model_id].optional) {
continue;
}
v.model = castId(prop_model_id);
values.push(v);
}
})
@@ -80,7 +84,7 @@ export default {
}
return {
model_id: this.object.model, // string is fine
model: this.object.model, // string is fine
id: this.object.id,
name: this.name,
values,
@@ -100,13 +104,13 @@ export default {
axios({
method: 'post',
url: '/object/update',
url: `/object/update/${this.object.id}`,
data: data
})
.then(function (response) {
location.href = '/object/detail/'+this.object.id;
.then((response) => {
location.href = `/object/detail/${this.object.id}`;
})
.catch(function (error) {
.catch((error) => {
// TODO show error toast instead
alert(error.response ?
error.response.data :
@@ -7,14 +7,14 @@ export default {
props: ['model', 'values'],
data() {
return {
id: uniqueId(),
widget_id: uniqueId(),
fieldRefs: [],
}
},
methods: {
addValue(event) {
this.values.push({
id: null,
model: this.model.id,
value: objCopy(this.model.default)
});
@@ -45,12 +45,12 @@ export default {
</td>
</tr>
<tr v-else v-for="(instance, vi) in values" :key="vi">
<th :rowspan="values.length + model.multiple" v-if="vi == 0"><label :for="id">{{model.name}}</label></th>
<th :rowspan="values.length + model.multiple" v-if="vi == 0"><label :for="widget_id">{{model.name}}</label></th>
<td>
<string-value :ref="setFieldRef" :value="instance.value" :id="vi===0?id:null" v-if="model.data_type==='String'"></string-value>
<integer-value :ref="setFieldRef" :value="instance.value" :id="vi===0?id:null" v-if="model.data_type==='Integer'"></integer-value>
<decimal-value :ref="setFieldRef" :value="instance.value" :id="vi===0?id:null" v-if="model.data_type==='Decimal'"></decimal-value>
<boolean-value :ref="setFieldRef" :value="instance.value" :id="vi===0?id:null" v-if="model.data_type==='Boolean'"></boolean-value>
<string-value :ref="setFieldRef" :value="instance.value" :id="vi===0?widget_id:null" v-if="model.data_type==='String'"></string-value>
<integer-value :ref="setFieldRef" :value="instance.value" :id="vi===0?widget_id:null" v-if="model.data_type==='Integer'"></integer-value>
<decimal-value :ref="setFieldRef" :value="instance.value" :id="vi===0?widget_id:null" v-if="model.data_type==='Decimal'"></decimal-value>
<boolean-value :ref="setFieldRef" :value="instance.value" :id="vi===0?widget_id:null" v-if="model.data_type==='Boolean'"></boolean-value>
<a href="#" @click="removeValue(vi)" v-if="vi > 0 || model.optional" style="margin-left:5px">X</a>
</td>
</tr>
@@ -1,6 +1,7 @@
<script>
import {castId, isEmpty, keyBy, objCopy} from "../utils";
import forEach from "lodash-es/forEach";
import isEqual from "lodash-es/isEqual";
export default {
props: ['model_id', 'schema', 'objects', 'initialInstances'],
@@ -14,7 +15,7 @@ export default {
properties.sort((a, b) => a.name.localeCompare(b.name));
if (isEmpty(properties)) {
properties = null;
properties = [];
} else {
properties = keyBy(properties, 'id');
}
@@ -55,11 +56,15 @@ export default {
let values = [];
forEach(instance.values, (vv, prop_model_id) => {
for (let v of vv) {
v.model_id = castId(prop_model_id);
if (isEqual(v.value, {"String": ""}) && this.properties[prop_model_id].optional) {
continue;
}
v.model = castId(prop_model_id);
values.push(v);
}
})
instance.model_id = this.model.id;
instance.related = castId(instance.related);
instance.model = this.model.id;
instance.values = values;
relations.push(instance);
})
@@ -78,7 +83,6 @@ export default {
}
});
this.instances.push({
id: null,
related: '',
values
})
@@ -2,6 +2,7 @@
import {castId, keyBy, objCopy, isEmpty} from "../utils";
import forEach from "lodash-es/forEach";
import axios from "axios";
import isEqual from "lodash-es/isEqual";
export default {
props: ['model_id', 'schema', 'objects'],
@@ -50,10 +51,14 @@ export default {
}
let values = [];
forEach(objCopy(this.values), (vv, k) => {
forEach(objCopy(this.values), (vv, prop_model_id) => {
for (let v of vv) {
if (isEqual(v, {"String": ""}) && this.properties[prop_model_id].optional) {
continue;
}
values.push({
model_id: castId(k),
model: castId(prop_model_id),
value: v
})
}
@@ -67,7 +72,7 @@ export default {
}
return {
model_id: this.model_id, // string is fine
model: this.model.id,
name: this.name,
values,
relations,
@@ -1,6 +1,7 @@
<script>
import {castId, keyBy, objCopy, isEmpty} from "../utils";
import forEach from "lodash-es/forEach";
import isEqual from "lodash-es/isEqual";
export default {
props: ['model_id', 'schema', 'objects'],
@@ -14,7 +15,7 @@ export default {
properties.sort((a, b) => a.name.localeCompare(b.name));
if (isEmpty(properties)) {
properties = null;
properties = [];
} else {
properties = keyBy(properties, 'id');
}
@@ -70,16 +71,20 @@ export default {
forEach(instance.values, (vv, prop_model_id) => {
for (let v of vv) {
if (isEqual(v, {"String": ""}) && this.properties[prop_model_id].optional) {
continue;
}
values.push({
model_id: castId(prop_model_id),
model: castId(prop_model_id),
value: v
});
}
})
relations.push({
model_id: this.model.id,
related_id: castId(instance.related),
model: this.model.id,
related: castId(instance.related),
values
});
})
@@ -96,6 +101,7 @@ export default {
}
});
this.instances.push({
model: this.model.id,
related: '',
values
})
@@ -7,7 +7,7 @@ export default {
props: ['model', 'values'],
data() {
return {
id: uniqueId(),
widget_id: uniqueId(),
fieldRefs: [],
}
},
@@ -42,12 +42,12 @@ export default {
</td>
</tr>
<tr v-else v-for="(value, vi) in values" :key="vi">
<th :rowspan="values.length + model.multiple" v-if="vi == 0"><label :for="id">{{model.name}}</label></th>
<th :rowspan="values.length + model.multiple" v-if="vi == 0"><label :for="widget_id">{{model.name}}</label></th>
<td>
<string-value :ref="setFieldRef" :value="value" :id="vi===0?id:null" v-if="model.data_type==='String'"></string-value>
<integer-value :ref="setFieldRef" :value="value" :id="vi===0?id:null" v-if="model.data_type==='Integer'"></integer-value>
<decimal-value :ref="setFieldRef" :value="value" :id="vi===0?id:null" v-if="model.data_type==='Decimal'"></decimal-value>
<boolean-value :ref="setFieldRef" :value="value" :id="vi===0?id:null" v-if="model.data_type==='Boolean'"></boolean-value>
<string-value :ref="setFieldRef" :value="value" :id="vi===0?widget_id:null" v-if="model.data_type==='String'"></string-value>
<integer-value :ref="setFieldRef" :value="value" :id="vi===0?widget_id:null" v-if="model.data_type==='Integer'"></integer-value>
<decimal-value :ref="setFieldRef" :value="value" :id="vi===0?widget_id:null" v-if="model.data_type==='Decimal'"></decimal-value>
<boolean-value :ref="setFieldRef" :value="value" :id="vi===0?widget_id:null" v-if="model.data_type==='Boolean'"></boolean-value>
<a href="#" @click="removeValue(vi)" v-if="vi > 0 || model.optional" style="margin-left:5px">X</a>
</td>
</tr>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -6,6 +6,7 @@
{% block nav -%}
<a href="/">Home</a>
<a href="/object/update/{{object.id}}">Edit</a>
{%- endblock %}
{% block content -%}
@@ -35,7 +36,7 @@
<ul>
{% for instance in relation.instances %}
<li>
<b>{{instance.related.name}}</b>
<b><a href="/object/detail/{{instance.related.id}}">{{instance.related.name}}</a></b>
{% if instance.properties %}
<br>
@@ -61,4 +62,37 @@
{% endfor %}
{% for relation in reciprocal_relations %}
<h3>{{relation.model.reciprocal_name}}</h3>
<ul>
{% for instance in relation.instances %}
<li>
<b><a href="/object/detail/{{instance.related.id}}">{{instance.related.name}}</a></b>
{% if instance.properties %}
<br>
<small>
{% for property in instance.properties %}
{%- if 0 != loop.index0 -%}
;
{%- endif -%}
{% for value in property.values %}
{%- if loop.first -%}
<i>{{ property.model.name }}:</i>
{%- else -%}
,
{% endif -%}
{{ value.value | print_typed_value }}
{% endfor %}
{% endfor %}
</small>
{% endif %}
</li>
{% endfor %}
</ul>
{% endfor %}
{%- endblock %}