79 lines
2.1 KiB
JavaScript
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;
|
|
},
|
|
},
|
|
});
|