@progress/kendo-angular-grid
Version:
Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.
57 lines (56 loc) • 2.27 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { DetailCollapseEvent } from './detail-collapse-event';
import { DetailExpandEvent } from './detail-expand-event';
import * as i0 from "@angular/core";
/**
* @hidden
*/
export class DetailsService {
userCallback;
changes = new Subject();
rowState = new Set();
ngOnDestroy() {
this.rowState.clear();
}
isExpanded(index, dataItem) {
if (this.userCallback) {
return this.userCallback({ index, dataItem });
}
return this.rowState.has(index);
}
toggleRow(index, dataItem) {
if (this.isExpanded(index, dataItem)) {
this.collapseRow(index, dataItem);
}
else {
this.expandRow(index, dataItem);
}
}
expandRow(index, dataItem) {
const prevented = this.emitEvent({ dataItem, index, expand: true });
if (!prevented && !this.userCallback) {
this.rowState.add(index);
}
}
collapseRow(index, dataItem) {
const prevented = this.emitEvent({ dataItem, index, expand: false });
if (!prevented && !this.userCallback) {
this.rowState.delete(index);
}
}
emitEvent(args) {
const eventArg = new (args.expand ? DetailExpandEvent : DetailCollapseEvent)(args);
this.changes.next(eventArg);
return eventArg.isDefaultPrevented();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DetailsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DetailsService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DetailsService, decorators: [{
type: Injectable
}] });