extensions refactor

This commit is contained in:
Jan Prochazka
2020-11-21 20:12:33 +01:00
parent 3009724a82
commit 5ec39054a3
18 changed files with 200 additions and 227 deletions

View File

@@ -9,12 +9,7 @@ export default function PluginsProvider({ children }) {
const installedPlugins = useInstalledPlugins();
const [plugins, setPlugins] = React.useState({});
const handleLoadPlugins = async () => {
setPlugins((x) =>
_.pick(
x,
installedPlugins.map((y) => y.name)
)
);
const newPlugins = {};
for (const installed of installedPlugins) {
if (!_.keys(plugins).includes(installed.name)) {
console.log('Loading module', installed.name);
@@ -26,12 +21,16 @@ export default function PluginsProvider({ children }) {
},
});
const module = eval(resp.data);
setPlugins((v) => ({
...v,
[installed.name]: module,
}));
console.log('Loaded plugin', module);
newPlugins[installed.name] = module.__esModule ? module.default : module;
}
}
setPlugins((x) =>
_.pick(
{ ...x, ...newPlugins },
installedPlugins.map((y) => y.name)
)
);
};
React.useEffect(() => {
handleLoadPlugins();
@@ -42,11 +41,16 @@ export default function PluginsProvider({ children }) {
export function usePlugins() {
const installed = useInstalledPlugins();
const loaded = React.useContext(PluginsContext);
return installed
.map((manifest) => ({
packageName: manifest.name,
manifest,
content: loaded[manifest.name],
}))
.filter((x) => x.content);
return React.useMemo(
() =>
installed
.map((manifest) => ({
packageName: manifest.name,
manifest,
content: loaded[manifest.name],
}))
.filter((x) => x.content),
[installed, loaded]
);
}