72 lines
2.0 KiB
JavaScript
Raw Normal View History

2021-02-15 11:24:28 +01:00
'use strict';
2021-04-02 15:13:23 +02:00
const { prop, isNil, isEmpty } = require('lodash/fp');
const { getService } = require('../utils');
2021-02-15 11:24:28 +01:00
/**
2021-02-17 18:40:45 +01:00
* Adds the default locale to an object if it isn't defined yet
* @param {Object} data a data object before being persisted into db
*/
2022-08-08 23:33:39 +02:00
const assignDefaultLocale = async (data) => {
const { getDefaultLocale } = getService('locales');
if (isNil(data.locale)) {
data.locale = await getDefaultLocale();
}
};
/**
* Synchronize related localizations from a root one
* @param {Object} entry entry to update
* @param {Object} options
* @param {Object} options.model corresponding model
*/
const syncLocalizations = async (entry, { model }) => {
if (Array.isArray(entry.localizations)) {
2021-03-09 11:12:09 +01:00
const newLocalizations = [entry.id, ...entry.localizations.map(prop('id'))];
2022-08-08 23:33:39 +02:00
const updateLocalization = (id) => {
const localizations = newLocalizations.filter((localizationId) => localizationId !== id);
2021-07-19 16:47:24 +02:00
return strapi.query(model.uid).update({ where: { id }, data: { localizations } });
};
2021-02-15 11:24:28 +01:00
for (const localization of entry.localizations) {
await updateLocalization(localization.id);
}
2021-02-15 11:24:28 +01:00
}
};
/**
* Update non localized fields of all the related localizations of an entry with the entry values
* @param {Object} entry entry to update
* @param {Object} options
* @param {Object} options.model corresponding model
*/
const syncNonLocalizedAttributes = async (entry, { model }) => {
2021-04-02 15:13:23 +02:00
const { copyNonLocalizedAttributes } = getService('content-types');
2021-02-15 11:24:28 +01:00
if (Array.isArray(entry.localizations)) {
2021-04-02 15:13:23 +02:00
const nonLocalizedAttributes = copyNonLocalizedAttributes(model, entry);
2021-02-15 11:24:28 +01:00
2021-04-02 15:13:23 +02:00
if (isEmpty(nonLocalizedAttributes)) {
return;
}
2022-08-08 23:33:39 +02:00
const updateLocalization = (id) => {
2021-08-18 16:57:18 +02:00
return strapi.entityService.update(model.uid, id, { data: nonLocalizedAttributes });
2021-07-19 16:47:24 +02:00
};
for (const localization of entry.localizations) {
await updateLocalization(localization.id);
}
}
};
2021-06-08 10:39:45 +02:00
module.exports = () => ({
assignDefaultLocale,
syncLocalizations,
syncNonLocalizedAttributes,
2021-06-08 10:39:45 +02:00
});