Ana içeriğe geç

EventBus ile Sistem Geneli Event Yakalama/Fırlatma

Sistem genelinde bazı durumlarda eventların dinlenmesi gerekmektedir. Örneğin kullanıcı profil resmini değiştirdiğinde 3 farklı yerde (layout ta ve 3 ününde kullanıcının görebildiğini düşünelim. Ve Her biri farklı component, modul ve dosyalarda) bu değişimi dinleyip o anki resmi son kullanıcıya göstereceğiz. Bu ve benzer durumlar için bu servisi kullanabiliriz. Bu sayede her yer birbiri ile etkileşimli hale gelir.

EventBusService Kullanımı

//EventBus servis tarafından yakalanabilecek enumları içerir. Ekleme yapılabilir.
export enum CoreEvents {
  ProfilResmiDegisim = 1, // Profil resmi değişim eventi
  MenuDegisim = 2, // Menü değişiminde tetiklenir
  MenuUpdate = 3, // Bu işlem menünün yenilenmesini tetikler
  CloseHelpDesk = 4, // Yardım masası kapatma eventi
}
  import { EventBusService } from '@alpata/octapull.core';

  // import edilir
  constructor(
    private eventBusService: EventBusService,
  ) {}

  islemYap(){
    // ... çeşitli işlemlerin yapılması

    // CoreEvents.CloseHelpDesk adından event fırlatılması. CoreEvents.CloseHelpDesk bir enum olup fırlatılan nesnelerin sabit olması için bu şekilde kullanılır. Event core a eklenebilir, yeni enum yapılıp bu enumdan extend edilebilir veya any tipinde verilebilir.
    this.eventBusService.emit(new EmitEvent(CoreEvents.CloseHelpDesk, true));

    // ... çeşitli işlemlerin yapılması
  }

  // Event yakalanması, fırtlatılan event ın dinlenebilmesi için değişken oluşturulur.
  private eventBusServiceYardimModal$: Subscription;


  ngOnInit() {
    // Event dinleme işlemi. Burada en önemli kısım CoreEvents.CloseHelpDesk kısmıdır. CoreEvents.CloseHelpDesk olarak fırlatılan eventlar CoreEvents.CloseHelpDesk tipinde dinlenebilir.
    this.eventBusServiceYardimModal$ = this.eventBusService.on(
      CoreEvents.CloseHelpDesk,
      (res: boolean) => {
        if (res) {
          // ... çeşitli işlemlerin yapılması
        }
      }
    );
  }

  ngOnDestroy(): void {
    // Sayfa kapatıldığında Event dinleme işlemi sonlandırılır.
    this.eventBusServiceYardimModal$?.unsubscribe();
  }