]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/+admin/plugins/plugin-show-installed/plugin-show-installed.component.ts
Add channel hooks
[github/Chocobozzz/PeerTube.git] / client / src / app / +admin / plugins / plugin-show-installed / plugin-show-installed.component.ts
index 13d12b145935489a3fffd2a7c6178d4e6023dabb..ec02cfcd9a344b89afe9e7efa08d7d3266879f16 100644 (file)
@@ -1,13 +1,12 @@
-import { Component, OnDestroy, OnInit } from '@angular/core'
-import { PeerTubePlugin } from '@shared/models/plugins/peertube-plugin.model'
-import { I18n } from '@ngx-translate/i18n-polyfill'
-import { PluginApiService } from '@app/+admin/plugins/shared/plugin-api.service'
-import { Notifier } from '@app/core'
-import { ActivatedRoute } from '@angular/router'
 import { Subscription } from 'rxjs'
 import { map, switchMap } from 'rxjs/operators'
-import { BuildFormArgument, FormReactive, FormValidatorService } from '@app/shared'
-import { RegisterServerSettingOptions } from '@shared/models/plugins/register-server-setting.model'
+import { Component, OnDestroy, OnInit } from '@angular/core'
+import { ActivatedRoute } from '@angular/router'
+import { HooksService, Notifier, PluginService } from '@app/core'
+import { BuildFormArgument } from '@app/shared/form-validators'
+import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
+import { PeerTubePlugin, RegisterServerSettingOptions } from '@shared/models'
+import { PluginApiService } from '../shared/plugin-api.service'
 
 @Component({
   selector: 'my-plugin-show-installed',
@@ -20,12 +19,14 @@ export class PluginShowInstalledComponent extends FormReactive implements OnInit
   pluginTypeLabel: string
 
   private sub: Subscription
+  private npmName: string
 
   constructor (
     protected formValidatorService: FormValidatorService,
-    private i18n: I18n,
-    private pluginService: PluginApiService,
+    private pluginService: PluginService,
+    private pluginAPIService: PluginApiService,
     private notifier: Notifier,
+    private hooks: HooksService,
     private route: ActivatedRoute
   ) {
     super()
@@ -34,9 +35,9 @@ export class PluginShowInstalledComponent extends FormReactive implements OnInit
   ngOnInit () {
     this.sub = this.route.params.subscribe(
       routeParams => {
-        const npmName = routeParams['npmName']
+        this.npmName = routeParams['npmName']
 
-        this.loadPlugin(npmName)
+        this.loadPlugin(this.npmName)
       }
     )
   }
@@ -48,38 +49,53 @@ export class PluginShowInstalledComponent extends FormReactive implements OnInit
   formValidated () {
     const settings = this.form.value
 
-    this.pluginService.updatePluginSettings(this.plugin.name, this.plugin.type, settings)
-        .subscribe(
-          () => {
-            this.notifier.success(this.i18n('Settings updated.'))
+    this.pluginAPIService.updatePluginSettings(this.plugin.name, this.plugin.type, settings)
+        .subscribe({
+          next: () => {
+            this.notifier.success($localize`Settings updated.`)
           },
 
-          err => this.notifier.error(err.message)
-        )
+          error: err => this.notifier.error(err.message)
+        })
   }
 
   hasRegisteredSettings () {
     return Array.isArray(this.registeredSettings) && this.registeredSettings.length !== 0
   }
 
+  isSettingHidden (setting: RegisterServerSettingOptions) {
+    const script = this.pluginService.getRegisteredSettingsScript(this.npmName)
+
+    if (!script?.isSettingHidden) return false
+
+    return script.isSettingHidden({ setting, formValues: this.form.value })
+  }
+
+  getWrapperId (setting: RegisterServerSettingOptions) {
+    if (!setting.name) return
+
+    return setting.name + '-wrapper'
+  }
+
   private loadPlugin (npmName: string) {
-    this.pluginService.getPlugin(npmName)
+    this.pluginAPIService.getPlugin(npmName)
         .pipe(switchMap(plugin => {
-          return this.pluginService.getPluginRegisteredSettings(plugin.name, plugin.type)
+          return this.pluginAPIService.getPluginRegisteredSettings(plugin.name, plugin.type)
             .pipe(map(data => ({ plugin, registeredSettings: data.registeredSettings })))
         }))
-        .subscribe(
-          ({ plugin, registeredSettings }) => {
+        .subscribe({
+          next: async ({ plugin, registeredSettings }) => {
             this.plugin = plugin
-            this.registeredSettings = registeredSettings
 
-            this.pluginTypeLabel = this.pluginService.getPluginTypeLabel(this.plugin.type)
+            this.registeredSettings = await this.translateSettings(registeredSettings)
+
+            this.pluginTypeLabel = this.pluginAPIService.getPluginTypeLabel(this.plugin.type)
 
             this.buildSettingsForm()
           },
 
-          err => this.notifier.error(err.message)
-        )
+          error: err => this.notifier.error(err.message)
+        })
   }
 
   private buildSettingsForm () {
@@ -87,23 +103,32 @@ export class PluginShowInstalledComponent extends FormReactive implements OnInit
     const settingsValues: any = {}
 
     for (const setting of this.registeredSettings) {
-      buildOptions[ setting.name ] = null
-      settingsValues[ setting.name ] = this.getSetting(setting.name)
+      buildOptions[setting.name] = null
+      settingsValues[setting.name] = this.getSetting(setting.name)
     }
 
     this.buildForm(buildOptions)
 
     this.form.patchValue(settingsValues)
+
+    this.hooks.runAction('action:admin-plugin-settings.init', 'admin-plugin', { npmName: this.npmName })
   }
 
   private getSetting (name: string) {
     const settings = this.plugin.settings
 
-    if (settings && settings[name]) return settings[name]
+    if (settings?.[name] !== undefined) return settings[name]
 
     const registered = this.registeredSettings.find(r => r.name === name)
 
     return registered.default
   }
 
+  private async translateSettings (settings: RegisterServerSettingOptions[]) {
+    for (const setting of settings) {
+      await this.pluginService.translateSetting(this.npmName, setting)
+    }
+
+    return settings
+  }
 }