import { Directive , NgZone , OnInit } from "@angular/core" ; import { PolicyType } from "jslib-common/enums/policyType" ; import { SendType } from "jslib-common/enums/sendType" ; import { SendView } from "jslib-common/models/view/sendView" ; import { EnvironmentService } from "jslib-common/abstractions/environment.service" ; import { I18nService } from "jslib-common/abstractions/i18n.service" ; import { LogService } from "jslib-common/abstractions/log.service" ; import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service" ; import { PolicyService } from "jslib-common/abstractions/policy.service" ; import { SearchService } from "jslib-common/abstractions/search.service" ; import { SendService } from "jslib-common/abstractions/send.service" ; @ Directive ( ) export class SendComponent implements OnInit { disableSend = false ; sendType = SendType ; loaded = false ; loading = true ; refreshing = false ; expired : boolean = false ; type : SendType = null ; sends : SendView [ ] = [ ] ; filteredSends : SendView [ ] = [ ] ; searchText : string ; selectedType : SendType ; selectedAll : boolean ; searchPlaceholder : string ; filter : ( cipher : SendView ) => boolean ; searchPending = false ; hasSearched = false ; actionPromise : any ; onSuccessfulRemovePassword : ( ) => Promise < any > ; onSuccessfulDelete : ( ) => Promise < any > ; onSuccessfulLoad : ( ) => Promise < any > ; private searchTimeout : any ; constructor ( protected sendService , protected i18nService , protected platformUtilsService , protected environmentService , protected ngZone , protected searchService , protected policyService , private logService ) { } async ngOnInit ( ) { this . disableSend = await this . policyService . policyAppliesToUser ( PolicyType . DisableSend ) ; } async load ( filter = null ) { this . loading = true ; const sends = await this . sendService . getAllDecrypted ( ) ; this . sends = sends ; if ( this . onSuccessfulLoad != null ) { await this . onSuccessfulLoad ( ) ; } else { this . selectAll ( ) ; } this . loading = false ; this . loaded = true ; } async reload ( filter = null ) { this . loaded = false ; this . sends = [ ] ; await this . load ( filter ) ; } async refresh ( ) { try { this . refreshing = true ; await this . reload ( this . filter ) ; } finally { this . refreshing = false ; } } async applyFilter ( filter = null ) { this . filter = filter ; await this . search ( null ) ; } async search ( timeout = null ) { this . searchPending = false ; if ( this . searchTimeout != null ) { clearTimeout ( this . searchTimeout ) ; } if ( timeout == null ) { this . hasSearched = this . searchService . isSearchable ( this . searchText ) ; this . filteredSends = this . sends . filter ( ( s ) => this . filter == null || this . filter ( s ) ) ; this . applyTextSearch ( ) ; return ; } this . searchPending = true ; this . searchTimeout = setTimeout ( async ( ) => { this . hasSearched = this . searchService . isSearchable ( this . searchText ) ; this . filteredSends = this . sends . filter ( ( s ) => this . filter == null || this . filter ( s ) ) ; this . applyTextSearch ( ) ; this . searchPending = false ; } , timeout ) ; } async removePassword ( s ) { if ( this . actionPromise != null || s . password == null ) { return ; } const confirmed = await this . platformUtilsService . showDialog ( this . i18nService . t ( "removePasswordConfirmation" ) , this . i18nService . t ( "removePassword" ) , this . i18nService . t ( "yes" ) , this . i18nService . t ( "no" ) , "warning" ) ; if ( ! confirmed ) { return false ; } try { this . actionPromise = this . sendService . removePasswordWithServer ( s . id ) ; await this . actionPromise ; if ( this . onSuccessfulRemovePassword != null ) { this . onSuccessfulRemovePassword ( ) ; } else { this . platformUtilsService . showToast ( "success" , null , this . i18nService . t ( "removedPassword" ) ) ; await this . load ( ) ; } } catch ( e ) { this . logService . error ( e ) ; } this . actionPromise = null ; } async delete ( s ) { if ( this . actionPromise != null ) { return false ; } const confirmed = await this . platformUtilsService . showDialog ( this . i18nService . t ( "deleteSendConfirmation" ) , this . i18nService . t ( "deleteSend" ) , this . i18nService . t ( "yes" ) , this . i18nService . t ( "no" ) , "warning" ) ; if ( ! confirmed ) { return false ; } try { this . actionPromise = this . sendService . deleteWithServer ( s . id ) ; await this . actionPromise ; if ( this . onSuccessfulDelete != null ) { this . onSuccessfulDelete ( ) ; } else { this . platformUtilsService . showToast ( "success" , null , this . i18nService . t ( "deletedSend" ) ) ; await this . refresh ( ) ; } } catch ( e ) { this . logService . error ( e ) ; } this . actionPromise = null ; return true ; } copy ( s ) { const sendLinkBaseUrl = this . environmentService . getSendUrl ( ) ; const link = sendLinkBaseUrl + s . accessId + "/" + s . urlB64Key ; this . platformUtilsService . copyToClipboard ( link ) ; this . platformUtilsService . showToast ( "success" , null , this . i18nService . t ( "valueCopied" , this . i18nService . t ( "sendLink" ) ) ) ; } searchTextChanged ( ) { this . search ( 200 ) ; } selectAll ( ) { this . clearSelections ( ) ; this . selectedAll = true ; this . applyFilter ( null ) ; } selectType ( type ) { this . clearSelections ( ) ; this . selectedType = type ; this . applyFilter ( ( s ) => s . type === type ) ; } clearSelections ( ) { this . selectedAll = false ; this . selectedType = null ; } private applyTextSearch ( ) { if ( this . searchText != null ) { this . filteredSends = this . searchService . searchSends ( this . filteredSends , this . searchText ) ; } } }