all files / component/data-grid/data-grid-parent-row/ data-grid-parent-row.component.ts

89.19% Statements 33/37
37.5% Branches 3/8
88.89% Functions 8/9
88.57% Lines 31/35
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95                                                            66×   132×     66×       66× 66× 66× 66× 396×                 396×   66× 66×           132×     66×   396×                      
/*
 *  @license
 *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.
 *
 *  Use of this source code is governed by an Apache-2.0 license that can be
 *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE
 */
 
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Input } from '@angular/core';
import { ItemListService } from '../../../common/core/item-list/item-list.service';
import { IDejaGridColumn } from '../data-grid-column/data-grid-column';
import { IDejaGridRow } from '../data-grid-row/data-grid-row';
import { IDejaGridParentRow } from './data-grid-parent-row';
 
/** Composant représentant une ligne parente d'une structure de ligne hierarchique */
@Component({
    changeDetection: ChangeDetectionStrategy.OnPush,
    selector: 'deja-grid-parent-row',
    styles: [require('./data-grid-parent-row.component.scss')],
    template: require('./data-grid-parent-row.component.html'),
})
export class DejaGridParentRowComponent {
    /** Définit la structure de la ligne associée à ce composant */
    @Input() public row: IDejaGridParentRow;
 
    /** Template de cellule si définit extérieurement à la grille */
    @Input() public cellTemplateExternal: any;
 
    /** Template de titre si définit extérieurement à la grille */
    @Input() public parentTitleTemplateExternal: any;
 
    /** Index de la ligne sur la liste plate de ItemListService */
    @Input() public flatIndex: number;
 
    /** Template de titre par defaut définit dans le HTML de la grille */
    @ContentChild('parentTitleTemplate') protected parentTitleTemplateInternal: any;
 
    /** Template de cellule par defaut  définit dans le HTML de la grille */
    @ContentChild('cellTemplate') protected cellTemplateInternal: any;
 
    private _columnLayout = {} as IDejaGridParentRowColumnLayout;
 
    public get columnLayoutOfColumn0() {
        return this._columnLayout.column0;
    }
 
    public get columnLayoutOfColumns() {
        return this._columnLayout.columns;
    }
 
    /** Définit la structure de colonnes a appliquer sur cette ligne */
    @Input()
    public set columns(columns: IDejaGridColumn[]) {
        let left = 0;
        this._columnLayout.columns = [];
        columns.forEach((column) => {
            Iif (this.getCellText(this.row, column.name)) {
                if (this._columnLayout.column0 === 0) {
                    this._columnLayout.column0 = left;
                }
                this._columnLayout.columns.push({
                    column: column,
                    left: left,
                });
            }
            left += column.w;
        });
        this._columnLayout.column0 = left;
        this.changeDetectorRef.markForCheck();
    }
 
    protected get cellTemplate() {
        return this.cellTemplateExternal || this.cellTemplateInternal;
    }
 
    protected get parentTitleTemplate() {
        return this.parentTitleTemplateExternal || this.parentTitleTemplateInternal;
    }
 
    constructor(private changeDetectorRef: ChangeDetectorRef) { }
 
    public getCellText(row: IDejaGridRow, textField: string) {
        return ItemListService.getItemText(row, textField);
    }
}
 
export interface IDejaGridParentRowColumnLayout {
    column0: number;
    columns: {
        column: IDejaGridColumn;
        left: number;
    }[];
}