File

src/app/shared/widgets/data-list/default-footer-component/data-list-actions.service.ts

Index

Widget inputs
Widget outputs
Properties
Methods

Constructor

constructor()

Methods

Public mapSelectionState
mapSelectionState(total: , selectedItems: Observable, link: , islands: , columnObservable: Observable, cellObservable: Observable, grid: , api: DataListApi, exportEmitter: EventEmitter)
Parameters :
Name Type Optional
total no
selectedItems Observable<SelectionParams> no
link no
islands no
columnObservable Observable<Column> no
cellObservable Observable<IgxGridCell> no
grid no
api DataListApi no
exportEmitter EventEmitter<any> no
Returns : any
ngOnDestroy
ngOnDestroy()
Returns : void

Properties

Private _unsubscribe
_unsubscribe:
Default value : NgUnsubscribe.create()
import { BehaviorSubject, combineLatest, Observable, Subject } from "rxjs";

import {
  debounceTime,
  distinctUntilChanged,
  map,
  shareReplay,
  startWith,
  takeUntil,
} from "rxjs/operators";
import { OnDestroy, EventEmitter, Injectable } from "@angular/core";
import { NgUnsubscribe } from "../../../ng-unsubscribe";
import {
  Column,
  DataListConfiguration,
  SelectionParams,
} from "../../interfaces/list.interfaces";
import { IgxGridCell } from "@infragistics/igniteui-angular";
import { DataListApi } from "../data-list.api";

@Injectable()
export class DataListActionsService implements OnDestroy {
  private _unsubscribe = NgUnsubscribe.create();

  constructor() {}

  public mapSelectionState(
    total,
    selectedItems: Observable<SelectionParams>,
    link,
    islands,
    columnObservable: Observable<Column>,
    cellObservable: Observable<IgxGridCell>,
    grid,
    api: DataListApi,
    exportEmitter: EventEmitter<any>
  ) {
    if (!api || !grid) {
      console.error("api && grid are required for initialization");
      return;
    }
    return combineLatest(
      total.pipe(startWith(0)),
      selectedItems.pipe(startWith(null)),
      link.pipe(startWith(null), distinctUntilChanged()),
      columnObservable,
      cellObservable
    ).pipe(
      debounceTime(1),
      map(([total, selection, link, column, cell]) => {
        const data: any = {
          total,
          link,
          column,
          cell,
          grid,
          api,
          export: exportEmitter,
        };
        if (!selection) {
          data.total = 0;
          data.selected = 0;
          return data;
        }

        data.selected = selection.count || 0;
        data.selection = selection;
        if (data.selection.treeSelections) {
          Object.keys(data.selection.treeSelections).forEach((key) => {
            data[key] = data.selection.treeSelections[key];
          });
        }
        data.childrenSelected = 0;

        let dataChildren: { [index: string]: number } = {};
        data.children = dataChildren;

        if (selection && selection["children"]) {
          Object.keys(selection["children"]).forEach((islandKey) => {
            let children = selection["children"][islandKey];
            dataChildren[islandKey] = 0;

            Object.keys(children).forEach((parentKey) => {
              dataChildren[islandKey] += children[parentKey].count;
            });

            data.childrenSelected = dataChildren[islandKey];
          });

          data.childrenSelection = selection["children"];
        }

        // ensure, that all islands are registered with a zero count
        // this should make interpolation of custom strings of the selection
        // count easier
        if (islands.length > 0) {
          islands.forEach((islandKey) => {
            if (data.children.hasOwnProperty(islandKey)) {
              return;
            }

            data.children[islandKey] = 0;
          });
        }

        return data;
      })
    );
  }

  ngOnDestroy(): void {
    this._unsubscribe.destroy();
  }
}

results matching ""

    No results matching ""