strapi/packages/core/admin/server/services/project-settings.js

93 lines
2.4 KiB
JavaScript
Raw Normal View History

2022-04-04 15:09:08 +02:00
'use strict';
const fs = require('fs');
const PROJECT_SETTINGS_FILE_INPUTS = ['menuLogo'];
const parseFilesData = async files => {
const formatedFilesData = {};
2022-04-04 15:09:08 +02:00
await Promise.all(
PROJECT_SETTINGS_FILE_INPUTS.map(async inputName => {
// Do not parse empty file inputs
if (!files[inputName]) {
return;
}
2022-04-04 15:09:08 +02:00
const getStream = () => fs.createReadStream(files[inputName].path);
formatedFilesData[inputName] = {
path: files[inputName].path,
stream: getStream(),
};
// Add formated data for the upload provider
Object.assign(
formatedFilesData[inputName],
strapi
.plugin('upload')
.service('upload')
.formatFileInfo({
filename: files[inputName].name,
type: files[inputName].type,
size: files[inputName].size,
})
);
// Add image dimensions
Object.assign(
formatedFilesData[inputName],
await strapi
.plugin('upload')
.service('image-manipulation')
.getDimensions({ getStream })
);
2022-04-04 15:09:08 +02:00
})
);
return formatedFilesData;
};
const uploadFiles = async files => {
return Promise.all(Object.values(files).map(strapi.plugin('upload').provider.uploadStream));
};
const updateProjectSettings = async (body, files) => {
const store = await strapi.store({ type: 'core', name: 'admin' });
const previousSettings = await store.get({ key: 'project-settings' });
const newSettings = {
...body,
...files,
};
PROJECT_SETTINGS_FILE_INPUTS.forEach(inputName => {
if (newSettings[inputName] !== undefined && !(typeof newSettings[inputName] === 'object')) {
// If the user input exists but is not a formdata "file" remove the file
newSettings[inputName] = null;
} else if (!newSettings[inputName]) {
// If the user input is undefined reuse previous setting (do not update field)
newSettings[inputName] = previousSettings[inputName];
} else {
// Update the file
newSettings[inputName] = {
name: newSettings[inputName].name,
url: 'test',
width: newSettings[inputName].width,
height: newSettings[inputName].height,
};
}
});
// No await to proceed asynchronously
uploadFiles(files);
return store.set({ key: 'project-settings', value: { ...previousSettings, ...newSettings } });
};
2022-04-04 15:09:08 +02:00
module.exports = {
parseFilesData,
uploadFiles,
updateProjectSettings,
2022-04-04 15:09:08 +02:00
};