@uppy/core
Version:
Core module for the extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:
69 lines (68 loc) • 2.05 kB
JavaScript
/**
* Core plugin logic that all plugins share.
*
* BasePlugin does not contain DOM rendering so it can be used for plugins
* without a user interface.
*
* See `Plugin` for the extended version with Preact rendering for interfaces.
*/
import { Translator } from '@uppy/utils';
export default class BasePlugin {
uppy;
opts;
id;
defaultLocale;
i18n;
i18nArray;
type;
VERSION;
constructor(uppy, opts) {
this.uppy = uppy;
this.opts = opts ?? {};
}
getPluginState() {
const { plugins } = this.uppy.getState();
return (plugins?.[this.id] || {});
}
setPluginState(update) {
const { plugins } = this.uppy.getState();
this.uppy.setState({
plugins: {
...plugins,
[this.id]: {
...plugins[this.id],
...update,
},
},
});
}
setOptions(newOpts) {
this.opts = { ...this.opts, ...newOpts };
this.setPluginState(undefined); // so that UI re-renders with new options
this.i18nInit();
}
i18nInit() {
const translator = new Translator([
this.defaultLocale,
this.uppy.locale,
this.opts.locale,
]);
this.i18n = translator.translate.bind(translator);
this.i18nArray = translator.translateArray.bind(translator);
this.setPluginState(undefined); // so that UI re-renders and we see the updated locale
}
/**
* Extendable methods
* ==================
* These methods are here to serve as an overview of the extendable methods as well as
* making them not conditional in use, such as `if (this.afterUpdate)`.
*/
addTarget(plugin) {
throw new Error("Extend the addTarget method to add your plugin to another plugin's target");
}
install() { }
uninstall() { }
update(state) { }
// Called after every state update, after everything's mounted. Debounced.
afterUpdate() { }
}