Skip to content

Commit 6457b2b

Browse files
authored
Merge pull request #26 from rezo-labs/patch/deep_values
Fix deep values
2 parents 47637bb + ee67479 commit 6457b2b

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

src/interface.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ export default defineComponent({
103103
const expression = match.slice(2, -2).trim();
104104
return parseExpression(expression, values.value);
105105
});
106+
107+
errorMsg.value = null;
108+
106109
if (['integer', 'decimal', 'bigInteger'].includes(props.type)) {
107110
return parseInt(res) || 0;
108111
}

src/utils.ts

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,19 @@ export function checkFieldInTemplate(template: string, field: string) {
99
}
1010

1111
/** Simple check which fields are used */
12-
function shouldUpdate(template: string, computedField: string, val: Record<string, any>, oldVal: Record<string, any>) {
13-
for (const key of Object.keys(val)) {
12+
function shouldUpdate(
13+
template: string,
14+
computedField: string,
15+
val: Record<string, any>,
16+
oldVal: Record<string, any>,
17+
pk: string | number,
18+
) {
19+
// creating new item
20+
if (val.id && pk === '+') {
21+
return false;
22+
}
23+
24+
for (const key of Object.keys({ ...oldVal, ...val })) {
1425
if (
1526
key !== computedField &&
1627
checkFieldInTemplate(template, key) &&
@@ -59,13 +70,20 @@ export const useDeepValues = (
5970
async (val, oldVal) => {
6071
const valObj = JSON.parse(val);
6172
const oldValObj = oldVal !== undefined ? JSON.parse(oldVal) : {};
62-
if (!shouldUpdate(template, computedField, valObj, oldValObj)) {
73+
if (!shouldUpdate(template, computedField, valObj, oldValObj, pk)) {
6374
return;
6475
}
6576

77+
for (const key of Object.keys(oldValObj)) {
78+
if (!(key in valObj)) {
79+
valObj[key] = null;
80+
}
81+
}
82+
6683
let relationalData: Record<string, any> = {};
84+
const pkFinal = valObj.id || pk;
6785

68-
for (const key of Object.keys(values.value)) {
86+
for (const key of Object.keys(valObj)) {
6987
const relation = relations.value.find((rel) => [rel.meta?.one_field, rel.meta?.many_field].includes(key));
7088

7189
if (!relation || !checkFieldInTemplate(template, key)) {
@@ -75,7 +93,7 @@ export const useDeepValues = (
7593
const isM2O = relation.collection === collection;
7694
const fieldName = isM2O ? relation.meta?.many_field : relation.meta?.one_field;
7795

78-
let fieldChanges = values.value[fieldName!] as IRelationUpdate ?? {
96+
let fieldChanges = valObj[fieldName!] as IRelationUpdate ?? {
7997
create: [],
8098
update: [],
8199
delete: [],
@@ -109,12 +127,12 @@ export const useDeepValues = (
109127
itemCache = {};
110128
}
111129

112-
if (pk !== '+') {
130+
if (pkFinal !== '+') {
113131
let data;
114132
if (key in fieldCache) {
115133
data = fieldCache[key];
116134
} else {
117-
data = (await api.get(`items/${collection}/${pk}`, {
135+
data = (await api.get(`items/${collection}/${pkFinal}`, {
118136
params: {
119137
fields: [key],
120138
},
@@ -171,7 +189,7 @@ export const useDeepValues = (
171189
relationalData[key] = isM2O ? arrayOfData[0] : arrayOfData;
172190
}
173191

174-
finalValues.value = { ...values.value, ...relationalData };
192+
finalValues.value = { ...valObj, ...relationalData };
175193
},
176194
{
177195
deep: false,

0 commit comments

Comments
 (0)