import { html, render } from "/js/lib/lit-html.js"; import { pageEffect, bindPageTitle } from "/js/router.js"; import { headerTemplate } from "/js/templates/header.template.js"; import { Signal, ReactiveStore } from "/js/signals.js"; import "/js/components/plugin-custom-content.js"; import { showToast } from "/js/toasts.js"; function pluginOwnedSettingsTemplate({ pluginService, settingTab }) { return html`
`; } function systemSettingsTemplate({ origins, onRevoke }) { return html`
System settings

Network access

You granted this plugin permission to send requests to these addresses.

`; } export default async function pluginSettingsView({ root, router, layout, params, context: { auth, pluginService }, }) { await auth.requireAuth(); const { pluginId } = params; const state = new ReactiveStore("pluginSettingsView"); state.$pluginDetails = new Signal.Computed(() => { const installed = pluginService.$installedPlugins .get() .find((plugin) => plugin.id === pluginId); return installed ?? null; }); state.$settingTab = new Signal.Computed(() => { const tab = pluginService.$settingTabs.get(pluginId); return tab ?? null; }); state.$loadStatus = new Signal.Computed(() => pluginService.getPluginLoadStatus(pluginId), ); bindPageTitle(root, () => { return state.$pluginDetails.get()?.name ?? null; }); pageEffect(root, () => { const pluginDetails = state.$pluginDetails.get(); const settingTab = state.$settingTab.get(); const { loading: pluginLoading, error: pluginLoadError } = state.$loadStatus.get(); render( html`
${headerTemplate({ title: pluginDetails?.name ?? pluginId, backButtonFallbackRoute: "/plugins/installed", })}
${(() => { if (!pluginDetails) { return html`

Plugin not found.

`; } if (!pluginDetails.enabled) { return html`

This plugin is not enabled.

`; } if (pluginLoadError) { return html`

${pluginLoadError.message ?? "This plugin failed to load."}

`; } const grantedOrigins = pluginService.permissionsManager.getUserGrantedFetchOrigins( pluginId, ); if (!settingTab) { if (pluginLoading) { return html`
`; } if (grantedOrigins.length === 0) { return html`

This plugin has no settings.

`; } } return html`${settingTab ? pluginOwnedSettingsTemplate({ pluginService, settingTab }) : ""} ${grantedOrigins.length > 0 ? systemSettingsTemplate({ origins: grantedOrigins, onRevoke: (origin) => pluginService.permissionsManager .revokeUserGrantedFetchOrigin(pluginId, origin) .catch((e) => { console.error(e); showToast("Failed to revoke access", { style: "error", }); }), }) : ""}`; })()}
`, root, ); }); }