diff --git a/public/js/subscription-manager.js b/public/js/subscription-manager.js
index 5dcd775..089d68c 100644
--- a/public/js/subscription-manager.js
+++ b/public/js/subscription-manager.js
@@ -13,77 +13,86 @@ const component = () => {
if (!data.success) throw new Error(data.error);
this.plugins = data.plugins;
- const pid = localStorage.getItem('plugin');
- if (pid && this.plugins.map((p) => p.id).includes(pid))
- this.pid = pid;
- else if (this.plugins.length > 0) this.pid = this.plugins[0].id;
+ let pid = localStorage.getItem("plugin");
+ if (!pid || !this.plugins.find((p) => p.id === pid)) {
+ pid = this.plugins[0].id;
+ }
- this.list(pid);
- })
- .catch((e) => {
- alert('danger', `Failed to list the available plugins. Error: ${e}`);
- });
- },
- pluginChanged() {
- localStorage.setItem('plugin', this.pid);
- this.list(this.pid);
- },
- list(pid) {
- if (!pid) return;
- fetch(
- `${base_url}api/admin/plugin/subscriptions?${new URLSearchParams({
- plugin: pid,
- })}`,
- {
- method: 'GET',
- },
- )
- .then((response) => response.json())
- .then((data) => {
- if (!data.success) throw new Error(data.error);
- this.subscriptions = data.subscriptions;
- })
- .catch((e) => {
- alert('danger', `Failed to list subscriptions. Error: ${e}`);
- });
- },
- renderStrCell(str) {
- const maxLength = 40;
- if (str.length > maxLength)
- return `
${str.substring(
- 0,
- maxLength,
- )}... ${str} | `;
- return `${str} | `;
- },
- renderDateCell(timestamp) {
- return `${moment
- .duration(moment.unix(timestamp).diff(moment()))
- .humanize(true)} | `;
- },
- selected(event, modal) {
- const id = event.currentTarget.getAttribute('sid');
- this.subscription = this.subscriptions.find((s) => s.id === id);
- UIkit.modal(modal).show();
- },
- renderFilterRow(ft) {
- const key = ft.key;
- let type = ft.type;
- switch (type) {
- case 'number-min':
- type = 'number (minimum value)';
- break;
- case 'number-max':
- type = 'number (maximum value)';
- break;
- case 'date-min':
- type = 'minimum date';
- break;
- case 'date-max':
- type = 'maximum date';
- break;
- }
- let value = ft.value;
+ this.pid = pid;
+ this.list(pid);
+ })
+ .catch((e) => {
+ alert(
+ "danger",
+ `Failed to list the available plugins. Error: ${e}`
+ );
+ });
+ },
+ pluginChanged() {
+ localStorage.setItem("plugin", this.pid);
+ this.list(this.pid);
+ },
+ list(pid) {
+ if (!pid) return;
+ fetch(
+ `${base_url}api/admin/plugin/subscriptions?${new URLSearchParams(
+ {
+ plugin: pid,
+ }
+ )}`,
+ {
+ method: "GET",
+ }
+ )
+ .then((response) => response.json())
+ .then((data) => {
+ if (!data.success) throw new Error(data.error);
+ this.subscriptions = data.subscriptions;
+ })
+ .catch((e) => {
+ alert(
+ "danger",
+ `Failed to list subscriptions. Error: ${e}`
+ );
+ });
+ },
+ renderStrCell(str) {
+ const maxLength = 40;
+ if (str.length > maxLength)
+ return `${str.substring(
+ 0,
+ maxLength
+ )}... ${str} | `;
+ return `${str} | `;
+ },
+ renderDateCell(timestamp) {
+ return `${moment
+ .duration(moment.unix(timestamp).diff(moment()))
+ .humanize(true)} | `;
+ },
+ selected(event, modal) {
+ const id = event.currentTarget.getAttribute("sid");
+ this.subscription = this.subscriptions.find((s) => s.id === id);
+ UIkit.modal(modal).show();
+ },
+ renderFilterRow(ft) {
+ const key = ft.key;
+ let type = ft.type;
+ switch (type) {
+ case "number-min":
+ type = "number (minimum value)";
+ break;
+ case "number-max":
+ type = "number (maximum value)";
+ break;
+ case "date-min":
+ type = "minimum date";
+ break;
+ case "date-max":
+ type = "maximum date";
+ break;
+ }
+ let value = ft.value;
if (ft.type.startsWith('number') && isNaN(value)) value = '';
else if (ft.type.startsWith('date') && value)