]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/app/shared/shared-instance/instance-about-accordion.component.ts
Fix button icon margin
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-instance / instance-about-accordion.component.ts
1 import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
2 import { HooksService, Notifier } from '@app/core'
3 import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'
4 import { ClientFilterHookName, PluginClientScope } from '@shared/models/plugins'
5 import { About } from '@shared/models/server'
6 import { InstanceService } from './instance.service'
7
8 @Component({
9 selector: 'my-instance-about-accordion',
10 templateUrl: './instance-about-accordion.component.html',
11 styleUrls: [ './instance-about-accordion.component.scss' ]
12 })
13 export class InstanceAboutAccordionComponent implements OnInit {
14 @ViewChild('accordion', { static: true }) accordion: NgbAccordion
15
16 @Output() init: EventEmitter<InstanceAboutAccordionComponent> = new EventEmitter<InstanceAboutAccordionComponent>()
17
18 @Input() pluginScope: PluginClientScope
19 @Input() pluginHook: ClientFilterHookName
20
21 @Input() panels = {
22 features: true,
23 administrators: true,
24 moderation: true,
25 codeOfConduct: true,
26 terms: true
27 }
28
29 about: About
30 aboutHtml = {
31 terms: '',
32 codeOfConduct: '',
33 moderationInformation: '',
34 administrator: ''
35 }
36
37 pluginPanels: { id: string, title: string, html: string }[] = []
38
39 constructor (
40 private instanceService: InstanceService,
41 private notifier: Notifier,
42 private hookService: HooksService
43 ) { }
44
45 async ngOnInit () {
46 this.instanceService.getAbout()
47 .subscribe({
48 next: async about => {
49 this.about = about
50
51 this.aboutHtml = await this.instanceService.buildHtml(about)
52
53 this.init.emit(this)
54 },
55
56 error: err => this.notifier.error(err.message)
57 })
58
59 this.pluginPanels = await this.hookService.wrapObject([], this.pluginScope, this.pluginHook)
60 }
61
62 getAdministratorsPanel () {
63 if (!this.about) return false
64 if (!this.panels.administrators) return false
65
66 return !!(this.aboutHtml?.administrator || this.about?.instance.maintenanceLifetime || this.about?.instance.businessModel)
67 }
68
69 get moderationPanel () {
70 return this.panels.moderation && !!this.aboutHtml.moderationInformation
71 }
72
73 get codeOfConductPanel () {
74 return this.panels.codeOfConduct && !!this.aboutHtml.codeOfConduct
75 }
76
77 get termsPanel () {
78 return this.panels.terms && !!this.aboutHtml.terms
79 }
80 }