igniteui-angular-sovn
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
227 lines (205 loc) • 6.04 kB
text/typescript
import { Directive, ElementRef, Renderer2, NgZone, HostBinding, TemplateRef } from '@angular/core';
import { IgxDropDirective } from '../../directives/drag-drop/drag-drop.directive';
import { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';
import { IgxGroupByAreaDirective } from '../grouping/group-by-area.directive';
import {
ColumnType,
IgxGridMasterDetailContext,
IgxGroupByRowTemplateContext,
IgxGridHeaderTemplateContext,
IgxGridRowTemplateContext,
IgxGridTemplateContext
} from '../common/grid.interface';
/**
* @hidden
*/
export class IgxGroupByRowTemplateDirective {
public static ngTemplateContextGuard(_dir: IgxGroupByRowTemplateDirective,
ctx: unknown): ctx is IgxGroupByRowTemplateContext {
return true
}
constructor(public template: TemplateRef<IgxGroupByRowTemplateContext>) { }
}
/**
* @hidden
*/
export class IgxGridDetailTemplateDirective {
public static ngTemplateContextGuard(_dir: IgxGridDetailTemplateDirective,
ctx: unknown): ctx is IgxGridMasterDetailContext {
return true
}
}
/**
* @hidden
*/
export class IgxRowExpandedIndicatorDirective {
public static ngTemplateContextGuard(_directive: IgxRowExpandedIndicatorDirective,
context: unknown): context is IgxGridRowTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxRowCollapsedIndicatorDirective {
public static ngTemplateContextGuard(_directive: IgxRowCollapsedIndicatorDirective,
context: unknown): context is IgxGridRowTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxHeaderExpandedIndicatorDirective {
public static ngTemplateContextGuard(_directive: IgxHeaderExpandedIndicatorDirective,
context: unknown): context is IgxGridTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxHeaderCollapsedIndicatorDirective {
public static ngTemplateContextGuard(_directive: IgxHeaderCollapsedIndicatorDirective,
context: unknown): context is IgxGridTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxExcelStyleHeaderIconDirective {
public static ngTemplateContextGuard(_directive: IgxExcelStyleHeaderIconDirective,
context: unknown): context is IgxGridHeaderTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxSortHeaderIconDirective {
public static ngTemplateContextGuard(_directive: IgxSortHeaderIconDirective,
context: unknown): context is IgxGridHeaderTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxSortAscendingHeaderIconDirective {
public static ngTemplateContextGuard(_directive: IgxSortAscendingHeaderIconDirective,
context: unknown): context is IgxGridHeaderTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxSortDescendingHeaderIconDirective {
public static ngTemplateContextGuard(_directive: IgxSortDescendingHeaderIconDirective,
context: unknown): context is IgxGridHeaderTemplateContext {
return true
}
}
/**
* @hidden
*/
export class IgxGroupAreaDropDirective extends IgxDropDirective {
public hovered = false;
constructor(
private groupArea: IgxGroupByAreaDirective,
private elementRef: ElementRef<HTMLElement>,
renderer: Renderer2,
zone: NgZone) {
super(elementRef, renderer, zone);
}
public override onDragEnter(event) {
const drag: IgxColumnMovingDragDirective = event.detail.owner;
const column: ColumnType = drag.column;
if (!this.columnBelongsToGrid(column)) {
return;
}
const isGrouped = this.groupArea.expressions
? this.groupArea.expressions.findIndex((item) => item.fieldName === column.field) !== -1
: false;
if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {
drag.icon.innerText = 'group_work';
this.hovered = true;
} else {
drag.icon.innerText = 'block';
this.hovered = false;
}
}
public override onDragLeave(event) {
const drag: IgxColumnMovingDragDirective = event.detail.owner;
const column: ColumnType = drag.column;
if (!this.columnBelongsToGrid(column)) {
return;
}
event.detail.owner.icon.innerText = 'block';
this.hovered = false;
}
private closestParentByAttr(elem, attr) {
return elem.hasAttribute(attr) ?
elem :
this.closestParentByAttr(elem.parentElement, attr);
}
private columnBelongsToGrid(column: ColumnType) {
const elem = this.elementRef.nativeElement;
const closestGridID = this.closestParentByAttr(elem, 'igxGroupAreaDrop').getAttribute('gridId');
if (!column) {
return false;
} else {
const grid = column.grid;
if (!grid || grid.id !== closestGridID) {
return false;
}
return true;
}
}
}