strapi-plugin-filerobot
Version:
Strapi v3 plugin for Filerobot by Scaleflex
119 lines (95 loc) • 3.17 kB
JavaScript
import React, { useEffect, useRef } from 'react';
import pluginId from '../../pluginId';
import $ from 'jquery';
// https://www.npmjs.com/package/@filerobot/core
// https://www.npmjs.com/package/@filerobot/explorer#filerobotexplorer
import Filerobot from '@filerobot/core';
import Explorer from '@filerobot/explorer';
import XHRUpload from '@filerobot/xhr-upload';
import '@filerobot/core/dist/style.min.css';
import '@filerobot/explorer/dist/style.min.css';
import { request, auth } from "strapi-helper-plugin";
import { useIntl } from 'react-intl';
const FMAW = (props) => {
const intl = useIntl();
const config = props.config;
const filerobot = useRef(null);
useEffect(() => {
if (config.token === '' || config.sec_temp === '')
{
return;
}
var folder = config.folder;
if (folder === '')
{
folder = '/';
}
else if ( !folder.startsWith('/') )
{
folder = '/' + folder;
}
filerobot.current = Filerobot({
securityTemplateID : config.sec_temp,
container : config.token
})
.use(Explorer, {
config: {
rootFolderPath: folder
},
target : '#filerobot-widget',
inline : true,
width: '100%',
height: '100%',
disableExportButton: true,
hideExportButtonIcon: true,
preventExportDefaultBehavior: true,
locale: {
strings: {
mutualizedExportButtonLabel: "Add to Strapi"
}
},
})
.use(XHRUpload)
.on('export', async (files, popupExportSucessMsgFn, downloadFilesPackagedFn, downloadFileFn) => {
$("button.filerobot-common-BaseButton").attr("disabled", "disabled");
await recordMedia(files, 'export', config);
$("button.filerobot-common-BaseButton").attr("disabled", false);
})
.on('complete', async ({ failed, uploadID, successful }) => {
$("button.filerobot-common-BaseButton").attr("disabled", "disabled");
if (successful)
{
await recordMedia(successful, 'complete', config);
$("button.filerobot-common-BaseButton").attr("disabled", false);
}
else
{
$("button.filerobot-common-BaseButton").attr("disabled", false);
}
});
return () => {
filerobot.current.close();
}
}, [config]);
const recordMedia = async (files, action, config) => {
files.forEach(async (file, index) => {
await request(`/${pluginId}/record-file`, {method: 'POST', headers:{'Authorization':`Bearer ${auth.getToken()}`}, body: {file:file, action:action, config:config}});
if (files.length-1==index)
{
// https://stackoverflow.com/questions/69703218/reactjs-bootstrap-tab-active-after-page-reload-or-how-can-i-save-active-tabs-us/69722943#69722943
if (typeof(Storage) !== "undefined")
{
sessionStorage.setItem("activeTab", "fmaw");
}
window.location.reload();
}
});
}
return (
<div>
<h2>Filerobot Media Asset Widget</h2>
<div id="filerobot-widget"></div>
</div>
);
};
export default FMAW;