UNPKG

strapi-plugin-i18n

Version:

This plugin enables to create, to read and to update content in different languages, both from the Admin Panel and from the API

59 lines (49 loc) 1.85 kB
'use strict'; const { isScalarAttribute } = require('strapi-utils').contentTypes; const { pick, prop, map, intersection, isEmpty, orderBy, pipe, every } = require('lodash/fp'); const { getService } = require('../../../../utils'); const shouldBeProcessed = processedLocaleCodes => entry => { return ( entry.localizations.length > 0 && intersection(entry.localizations.map(prop('locale')), processedLocaleCodes).length === 0 ); }; const getUpdatesInfo = ({ entriesToProcess, attributesToMigrate }) => { const updates = []; for (const entry of entriesToProcess) { const attributesValues = pick(attributesToMigrate, entry); const entriesIdsToUpdate = entry.localizations.map(prop('id')); updates.push({ entriesIdsToUpdate, attributesValues }); } return updates; }; const getSortedLocales = async ({ transacting } = {}) => { const localeService = getService('locales'); let defaultLocale; try { const storeRes = await strapi .query('core_store') .findOne({ key: 'plugin_i18n_default_locale' }, null, { transacting }); defaultLocale = JSON.parse(storeRes.value); } catch (e) { throw new Error("Could not migrate because the default locale doesn't exist"); } const locales = await localeService.find({}, null, { transacting }); if (isEmpty(locales)) { throw new Error('Could not migrate because no locale exist'); } // Put default locale first return pipe( map(locale => ({ code: locale.code, isDefault: locale.code === defaultLocale })), orderBy(['isDefault', 'code'], ['desc', 'asc']), map(prop('code')) )(locales); }; const areScalarAttributesOnly = ({ model, attributes }) => pipe(pick(attributes), every(isScalarAttribute))(model.attributes); module.exports = { shouldBeProcessed, getUpdatesInfo, getSortedLocales, areScalarAttributesOnly, };