oak-frontend-base/es/components/i18n/upsert/index.js

79 lines
2.1 KiB
JavaScript

import { isEqual } from "oak-domain/lib/utils/lodash";
export default OakComponent({
entity: 'i18n',
isList: false,
projection: {
id: 1,
module: 1,
position: 1,
namespace: 1,
language: 1,
data: 1,
},
formData({ data, }) {
return {
i18n: data,
json: data.data,
};
},
data: {
dataArray: [],
},
listeners: {
json(prev, next) {
const dataArray = this.ObjectToArray(next.json);
this.setState({
dataArray,
});
}
},
methods: {
ObjectToArray(obj, prefix = '') {
const result = [];
for (const key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result.push(...this.ObjectToArray(obj[key], `${prefix}${key}.`));
}
else {
result.push({ key: `${prefix}${key}`, value: obj[key] });
}
}
return result;
},
arrayToObject(arr) {
return arr.reduce((acc, { key, value }) => {
const keys = key.split('.');
keys.reduce((o, k, i) => {
if (i === keys.length - 1) {
o[k] = value;
}
else {
o[k] = o[k] || {};
}
return o[k];
}, acc);
return acc;
}, {});
},
async myUpdate(newArray) {
const newData = this.arrayToObject(newArray);
this.update({
data: newData,
});
await this.execute();
this.refresh();
},
arraysAreEqual(first, second) {
if (first?.length !== second?.length) {
return false;
}
for (let i = 0; i < first?.length; ++i) {
if (!isEqual(first[i], second[i])) {
return false;
}
}
return true;
},
},
});