getVariantsGridColumns()

in client/client/app/components/ngbVariantsTablePanel/ngbVariantsTable/ngbVariantsTable.service.js [19:225]


    getVariantsGridColumns() {

        const infoCells = require('./ngbVariantsTable_actions.tpl.html');
        const headerCells = require('./ngbVariantsTable_header.tpl.html');

        const columnsList = this.projectContext.vcfColumns;
        const visibleColumns = this.projectContext.vcfInfo.map(c => c.name);
        const result = [];

        let columnSettings = null;
        let sortDirection = 0;

        for (let i = 0; i < columnsList.length; i++) {
            const column = columnsList[i];
            columnSettings = null;
            const nameOrderByColumn = this.projectContext.orderByColumnsVariations[column] ? this.projectContext.orderByColumnsVariations[column] : column;
            if (this.projectContext.orderByVariations) {
                const currentOrderByFieldVariations = this.projectContext.orderByVariations[0].field;
                const currentOrderByDirectionVariations = this.projectContext.orderByVariations[0].desc ? 'desc' : 'asc';
                sortDirection = currentOrderByFieldVariations === nameOrderByColumn ? currentOrderByDirectionVariations : 0;
            }
            switch (column) {
                case 'variationType': {
                    columnSettings = {
                        cellTemplate: `<div class="md-label variation-type" 
                                    md-colors="{background: 'accent-{{COL_FIELD CUSTOM_FILTERS}}',color:'background-900'}" 
                                    ng-class="COL_FIELD CUSTOM_FILTERS" >{{COL_FIELD CUSTOM_FILTERS}}</div>`,
                        enableHiding: false,
                        field: 'variationType',
                        filter: {
                            selectOptions: [
                                {label: 'DEL', value: 'DEL'},
                                {label: 'INS', value: 'INS'},
                                {label: 'SNV', value: 'SNV'},
                                {label: 'BND', value: 'BND'},
                                {label: 'INV', value: 'INV'},
                                {label: 'DUP', value: 'DUP'},
                                {label: 'MNP', value: 'MNP'},
                                {label: 'UNK', value: 'UNK'}],
                            term: '',
                            type: this.uiGridConstants.filter.SELECT
                        },
                        headerCellTemplate: headerCells,
                        maxWidth: 104,
                        minWidth: 104,
                        name: 'Type',
                        filterApplied: () => this.projectContext.variantsFieldIsFiltered(column),
                        menuItems: [
                            {
                                title: 'Clear column filter',
                                action: () => this.projectContext.clearVariantFieldFilter(column),
                                shown: () => this.projectContext.variantsFieldIsFiltered(column)
                            }
                        ]
                    };
                }
                    break;
                case 'chrName': {
                    columnSettings = {
                        enableHiding: false,
                        field: 'chrName',
                        headerCellTemplate: headerCells,
                        minWidth: 50,
                        name: 'Chr',
                        width: '*',
                        filterApplied: () => this.projectContext.variantsFieldIsFiltered(column),
                        menuItems: [
                            {
                                title: 'Clear column filter',
                                action: () => this.projectContext.clearVariantFieldFilter(column),
                                shown: () => this.projectContext.variantsFieldIsFiltered(column)
                            }
                        ]
                    };
                }
                    break;
                case 'geneNames': {
                    columnSettings = {
                        enableHiding: false,
                        field: 'geneNames',
                        headerCellTemplate: headerCells,
                        minWidth: 50,
                        name: 'Gene',
                        width: '*',
                        filterApplied: () => this.projectContext.variantsFieldIsFiltered(column),
                        menuItems: [
                            {
                                title: 'Clear column filter',
                                action: () => this.projectContext.clearVariantFieldFilter(column),
                                shown: () => this.projectContext.variantsFieldIsFiltered(column)
                            }
                        ]
                    };
                }
                    break;
                case 'sampleNames': {
                    columnSettings = {
                        cellTemplate: '<div class="ui-grid-cell-contents" ng-class="COL_FIELD CUSTOM_FILTERS" >{{COL_FIELD | array}}</div>',
                        enableHiding: false,
                        field: 'sampleNames',
                        headerCellTemplate: headerCells,
                        minWidth: 50,
                        name: 'Samples',
                        width: '*',
                        enableSorting: false,
                        enableColumnMenuFn: () => this.projectContext.variantsFieldIsFiltered(column),
                        filterApplied: () => this.projectContext.variantsFieldIsFiltered(column),
                        menuItems: [
                            {
                                title: 'Clear column filter',
                                action: () => this.projectContext.clearVariantFieldFilter(column),
                                shown: () => this.projectContext.variantsFieldIsFiltered(column)
                            }
                        ]
                    };
                }
                    break;
                case 'startIndex': {
                    columnSettings = {
                        enableHiding: false,
                        field: 'startIndex',
                        filters: [
                            {
                                condition: this.uiGridConstants.filter.GREATER_THAN,
                                placeholder: 'greater than'
                            },
                            {
                                condition: this.uiGridConstants.filter.LESS_THAN,
                                placeholder: 'less than'
                            }
                        ],
                        headerCellTemplate: headerCells,
                        minWidth: 50,
                        name: 'Position',
                        width: '*',
                        filterApplied: () => this.projectContext.variantsFieldIsFiltered(column),
                        menuItems: [
                            {
                                title: 'Clear column filter',
                                action: () => this.projectContext.clearVariantFieldFilter(column),
                                shown: () => this.projectContext.variantsFieldIsFiltered(column)
                            }
                        ]
                    };
                }
                    break;
                case 'info': {
                    columnSettings = {
                        cellTemplate: infoCells,
                        enableColumnMenu: false,
                        enableSorting: false,
                        enableMove: false,
                        field: 'info',
                        headerCellTemplate: headerCells,
                        maxWidth: 60,
                        minWidth: 60,
                        name: 'Info'
                    };
                }
                    break;
                default: {
                    const [infoColumn] = this.projectContext.vcfInfo.filter(c => c.name === column);
                    if (infoColumn) {
                        const filters = [];
                        if (infoColumn.type === this.columnTypes.integer) {
                            filters.push({
                                condition: this.uiGridConstants.filter.GREATER_THAN,
                                placeholder: 'greater than'
                            });
                            filters.push({
                                condition: this.uiGridConstants.filter.LESS_THAN,
                                placeholder: 'less than'
                            });
                        }
                        columnSettings = {
                            field: infoColumn.name,
                            filters,
                            headerCellTemplate: headerCells,
                            minWidth: 50,
                            name: infoColumn.name,
                            width: '*',
                            visible: visibleColumns.indexOf(infoColumn.name) !== -1,
                            filterApplied: () => this.projectContext.variantsFieldIsFiltered(column),
                            menuItems: [
                                {
                                    title: 'Clear column filter',
                                    action: () => this.projectContext.clearVariantFieldFilter(column),
                                    shown: () => this.projectContext.variantsFieldIsFiltered(column)
                                }
                            ]
                        };
                    }
                }
                    break;
            }
            if (columnSettings) {
                if (sortDirection) {
                    columnSettings.sort = {
                        direction: sortDirection
                    };
                }
                result.push(columnSettings);
            }
        }

        return result;
    }