import Page from 'flarum/components/Page'; import LinkButton from 'flarum/components/LinkButton'; import Button from 'flarum/components/Button'; import Dropdown from 'flarum/components/Dropdown'; import Separator from 'flarum/components/Separator'; import AddExtensionModal from 'flarum/components/AddExtensionModal'; import LoadingModal from 'flarum/components/LoadingModal'; import ItemList from 'flarum/utils/ItemList'; import icon from 'flarum/helpers/icon'; import listItems from 'flarum/helpers/listItems'; export default class ExtensionsPage extends Page { view() { return (
{Button.component({ children: app.translator.trans('core.admin.extensions.add_button'), icon: 'plus', className: 'Button Button--primary', onclick: () => app.modal.show(new AddExtensionModal()) })}
    {Object.keys(app.data.extensions) .map(id => { const extension = app.data.extensions[id]; const controls = this.controlItems(extension.id).toArray(); return
  • {extension.icon ? icon(extension.icon.name) : ''} {controls.length ? ( {controls} ) : ''}
    {extension.version}
  • ; })}
); } controlItems(name) { const items = new ItemList(); const enabled = this.isEnabled(name); if (app.extensionSettings[name]) { items.add('settings', Button.component({ icon: 'cog', children: app.translator.trans('core.admin.extensions.settings_button'), onclick: app.extensionSettings[name] })); } if (!enabled) { items.add('uninstall', Button.component({ icon: 'trash-o', children: app.translator.trans('core.admin.extensions.uninstall_button'), onclick: () => { app.request({ url: app.forum.attribute('apiUrl') + '/extensions/' + name, method: 'DELETE' }).then(() => window.location.reload()); app.modal.show(new LoadingModal()); } })); } return items; } isEnabled(name) { const enabled = JSON.parse(app.data.settings.extensions_enabled); return enabled.indexOf(name) !== -1; } toggle(id) { const enabled = this.isEnabled(id); app.request({ url: app.forum.attribute('apiUrl') + '/extensions/' + id, method: 'PATCH', data: {enabled: !enabled} }).then(() => { if (!enabled) localStorage.setItem('enabledExtension', id); window.location.reload(); }); app.modal.show(new LoadingModal()); } }