aboutsummaryrefslogblamecommitdiffhomepage
path: root/client/src/app/shared/shared-instance/instance-about-accordion.component.ts
blob: b9f57e2a468fd1c884d3ea05b823c39990ce86d4 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                                                                         
                                                  
                                                         
                                                                                
                                             
                                                    



                                                           
                                                            


                                                                   
 

                                                                                                                     


                                           









                         





                              

                                                                  

                                             

                                     

       
                     
                                   

                              






                                                                      

                                                      

                                                                                                




















                                                                                                                              
import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'
import { HooksService, Notifier } from '@app/core'
import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'
import { ClientFilterHookName, PluginClientScope } from '@shared/models/plugins'
import { About } from '@shared/models/server'
import { InstanceService } from './instance.service'

@Component({
  selector: 'my-instance-about-accordion',
  templateUrl: './instance-about-accordion.component.html',
  styleUrls: [ './instance-about-accordion.component.scss' ]
})
export class InstanceAboutAccordionComponent implements OnInit {
  @ViewChild('accordion', { static: true }) accordion: NgbAccordion

  @Output() init: EventEmitter<InstanceAboutAccordionComponent> = new EventEmitter<InstanceAboutAccordionComponent>()

  @Input() pluginScope: PluginClientScope
  @Input() pluginHook: ClientFilterHookName

  @Input() panels = {
    features: true,
    administrators: true,
    moderation: true,
    codeOfConduct: true,
    terms: true
  }

  about: About
  aboutHtml = {
    terms: '',
    codeOfConduct: '',
    moderationInformation: '',
    administrator: ''
  }

  pluginPanels: { id: string, title: string, html: string }[] = []

  constructor (
    private instanceService: InstanceService,
    private notifier: Notifier,
    private hookService: HooksService
  ) { }

  async ngOnInit () {
    this.instanceService.getAbout()
      .subscribe({
        next: async about => {
          this.about = about

          this.aboutHtml = await this.instanceService.buildHtml(about)

          this.init.emit(this)
        },

        error: err => this.notifier.error(err.message)
      })

    this.pluginPanels = await this.hookService.wrapObject([], this.pluginScope, this.pluginHook)
  }

  getAdministratorsPanel () {
    if (!this.about) return false
    if (!this.panels.administrators) return false

    return !!(this.aboutHtml?.administrator || this.about?.instance.maintenanceLifetime || this.about?.instance.businessModel)
  }

  get moderationPanel () {
    return this.panels.moderation && !!this.aboutHtml.moderationInformation
  }

  get codeOfConductPanel () {
    return this.panels.codeOfConduct && !!this.aboutHtml.codeOfConduct
  }

  get termsPanel () {
    return this.panels.terms && !!this.aboutHtml.terms
  }
}