ngOnInit()

in web/frontend/src/app/pages/streams/components/stream-view-reverse/stream-view-reverse.component.ts [206:311]


  ngOnInit() {
    combineLatest([
      this.permissionsService.isWriter().pipe(take(1)),
      this.appStore.pipe(select(getActiveTab), filter(Boolean)),
    ]).subscribe(([isWriter, tab]: [boolean, TabModel]) => {
      this.reverseStreamOrder = !!tab.reverse;
      if (tab.symbol) {
        this.tabSymbolFilter = [tab.symbol];
      }
      
      this.streamId = tab.stream;
      this.streamName = tab.name;
      this.tabName = tab.stream + tab.id;
      
      const sendMessageMenu = {
        data: (event) => ({
          disabled: !event.node || !this.streamId,
          name: 'Send Message',
          action: () => {
            this.bsModalRef = this.modalService.show(ModalSendMessageComponent, {
              initialState: {
                stream: {
                  id: this.streamId,
                  name: this.streamName,
                },
                formData: (event.node.data as StreamDetailsModel)?.original, // (params.node.data as StreamDetailsModel).$type, //
                editMessageMode: false,
              },
              ignoreBackdropClick: true,
              class: 'modal-message scroll-content-modal',
            });
          },
        }),
        alias: 'sendMessage',
      };

      const editMessageMenu = {
        data: (event) => ({    
          disabled: !event.node || !this.streamId,
          name: 'Edit Message',
          action: () => {
            this.bsModalRef = this.modalService.show(ModalSendMessageComponent, {
              initialState: {
                stream: {
                  id: this.streamId,
                  name: this.streamName,
                },
                formData: (event.node.data as StreamDetailsModel)?.original,
                editMessageMode: true,
                messageInfo: this.messageInfo,
                editingMessageNanoTime: this.editingMessageNanoTime,
              },
              ignoreBackdropClick: true,
              class: 'modal-message scroll-content-modal',
            });
          },
        }),
        alias: 'editMessage',
      }
      
      const orderBookMenu = {
        data: (event: { node: RowNode }) => ({
          disabled: true,
          name: 'View Oder Book',
          action: () => this.messageInfoService.viewOrderBook(event.node.data, event.node.rowIndex),
        }),
        alias: 'openOrderBook',
      };
      
      const items = [];
     
      if (isWriter && !tab.isView) {
        typeof tab.space === 'string' ? 
          items.push(sendMessageMenu) : items.push(sendMessageMenu, editMessageMenu);
      }
      
      if (tab.chartType?.includes(ChartTypes.PRICES_L2)) {
        items.push(orderBookMenu);
      }

      this.gridContextMenuService.addCellMenuItems(items);
      this.gridContextMenuService.addColumnSizeMenuItems(
        () => this.gridStateLS,
        () => this.rowData,
        this.tabName,
      ).pipe(takeUntil(this.destroy$)).subscribe(event => {
        this.columnsIdVisible = {};
        this.columnsVisibleData(event.columnApi, this.rowData);
      });
    });
    
    this.modalService.onHide
      .pipe(takeUntil(this.destroy$))
      .subscribe(() => {
        this.streamDataService.getRows(this.streamDataService.getRowsParams);
      })

    this.activeTab = this.appStore.pipe(select(getActiveOrFirstTab));
    
    this.globalFiltersService
      .getFilters()
      .pipe(takeUntil(this.destroy$))
      .subscribe(() => setTimeout(() => this.readyApi?.api.redrawRows(), 0));
    
    this.gridOptions = this.gridDefaults;
  }