Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1065,7 +1065,7 @@ export class IgxForOfDirective<T, U extends T[] = T[]> extends IgxForOfToken<T,U
this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)
|| embView.rootNodes[0].nextElementSibling);
const view = container.detach(0);

view.detectChanges();
this.updateTemplateContext(embView.context, i);
container.insert(view);
this._embeddedViews.push(embView);
Expand All @@ -1085,7 +1085,7 @@ export class IgxForOfDirective<T, U extends T[] = T[]> extends IgxForOfToken<T,U
this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)
|| embView.rootNodes[0].nextElementSibling);
const view = container.detach(container.length - 1);

view.detectChanges();
this.updateTemplateContext(embView.context, i);
container.insert(view, 0);
this._embeddedViews.unshift(embView);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,3 +276,8 @@
<ng-content select="igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip"></ng-content>
<ng-content select="igx-row-island,igc-row-island"></ng-content>
}

<!-- Lifecycle placeholder used to determine when the grid gets connected/disconnected from the DOM, for example as a result of virtualization or caching. -->
<igc-hgrid-lifecycle-placeholder (igcConnected)="onLifecyclePlaceholderConnected()"
(igcDisconnected)="onLifecyclePlaceholderDisconnected()">
</igc-hgrid-lifecycle-placeholder>
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { IgxPaginatorToken } from 'igniteui-angular/paginator';
import { IgxGridCellMergePipe, IgxGridComponent, IgxGridFilteringPipe, IgxGridSortingPipe, IgxGridUnmergeActivePipe } from 'igniteui-angular/grids/grid';

let NEXT_ID = 0;
const HGRID_LIFECYCLE_PLACEHOLDER_TAG = 'igc-hgrid-lifecycle-placeholder';

/**
* @hidden @internal
Expand Down Expand Up @@ -662,6 +663,7 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti
* @hidden
*/
public override ngOnInit() {
this.registerLifecyclePlaceholderElement();
// this.expansionStatesChange.pipe(takeUntil(this.destroy$)).subscribe((value: Map<any, boolean>) => {
// const res = Array.from(value.entries()).filter(({1: v}) => v === true).map(([k]) => k);
// });
Expand All @@ -674,6 +676,26 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti
super.ngOnInit();
}

// Event that triggers when element gets connected back to the DOM.
// Used to determine when to reopen a previously closed row editing overlay.
protected onLifecyclePlaceholderConnected(): void {
if (this.rowEditable && this.crudService.rowInEditMode && this.rowEditingOverlay &&
this.rowEditingOverlay.collapsed) {
// Row is in edit mode, but overlay is closed - reopen.
this.openRowOverlay(this.crudService.rowInEditMode.id);
}

}

// Event that triggers when element gets disconnected from the DOM, for example as a result of virtualization or caching.
// Used to determine when to close the row editing overlay.
protected onLifecyclePlaceholderDisconnected(): void {
if (this.rowEditable && this.crudService.rowInEditMode && this.rowEditingOverlay) {
// disconnected from DOM (possibly cached) & row was in edit mode - close overlay.
this.closeRowEditingOverlay();
}
}

/**
* @hidden
*/
Expand Down Expand Up @@ -720,6 +742,24 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti
this.parentIsland.showExpandAll : this.rootGrid.showExpandAll;
}

private registerLifecyclePlaceholderElement(): void {
if (!this.platform.isBrowser || typeof customElements === 'undefined' || customElements.get(HGRID_LIFECYCLE_PLACEHOLDER_TAG)) {
return;
}

class IgxHierarchicalGridLifecyclePlaceholderElement extends HTMLElement {
public connectedCallback(): void {
this.dispatchEvent(new CustomEvent('igcConnected', { bubbles: true, composed: true }));
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With this specific usage, I think the events don't need to bubble at all (and even less be composed)

}

public disconnectedCallback(): void {
this.dispatchEvent(new CustomEvent('igcDisconnected', { bubbles: true, composed: true }));
}
}

customElements.define(HGRID_LIFECYCLE_PLACEHOLDER_TAG, IgxHierarchicalGridLifecyclePlaceholderElement);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also wouldn't mind this being shortened a bit (the name) and possibly be in a self contained file, but that's not critical

}

/**
* @hidden
*/
Expand Down Expand Up @@ -1232,15 +1272,15 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti
{
name: null,
fields: filterableFields.map(f => ({
field: f.field,
dataType: f.dataType,
header: f.header,
editorOptions: f.editorOptions,
filters: f.filters,
pipeArgs: f.pipeArgs,
defaultTimeFormat: f.defaultTimeFormat,
defaultDateTimeFormat: f.defaultDateTimeFormat
})) as FieldType[]
field: f.field,
dataType: f.dataType,
header: f.header,
editorOptions: f.editorOptions,
filters: f.filters,
pipeArgs: f.pipeArgs,
defaultTimeFormat: f.defaultTimeFormat,
defaultDateTimeFormat: f.defaultDateTimeFormat
})) as FieldType[]
}
];

Expand All @@ -1249,7 +1289,7 @@ export class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirecti
this.data[0][rowIsland.key][0] : null;
return acc.concat(this.generateChildEntity(rowIsland, childFirstRowData));
}
, []);
, []);
}

return entities;
Expand Down
6 changes: 3 additions & 3 deletions src/app/hierarchical-grid/hierarchical-grid.sample.html
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,12 @@ <h4 class="sample-title">Sample two</h4>
<igx-grid-toolbar-exporter></igx-grid-toolbar-exporter>
</igx-grid-toolbar-actions>
</igx-grid-toolbar>
<igx-row-island [key]="'childData'" [autoGenerate]="true" [rowSelection]='selectionMode' [batchEditing]="true" [rowEditable]="true"
<igx-row-island [rowEditable]="true" [primaryKey]="'ID'" [key]="'childData'" [autoGenerate]="true" [rowSelection]='selectionMode' [batchEditing]="true" [rowEditable]="true"
[allowFiltering]="true">
<igx-row-island [key]="'childData'" [autoGenerate]="true" [rowSelection]='selectionMode' [batchEditing]="true" [rowEditable]="true"
<igx-row-island [rowEditable]="true" [primaryKey]="'ID'" [key]="'childData'" [autoGenerate]="true" [rowSelection]='selectionMode' [batchEditing]="true" [rowEditable]="true"
[allowFiltering]="true"></igx-row-island>
</igx-row-island>
<igx-row-island [key]="'childData2'" [autoGenerate]="true" [allowFiltering]="true"></igx-row-island>
<igx-row-island [rowEditable]="true" [primaryKey]="'ID'" [key]="'childData2'" [autoGenerate]="true" [allowFiltering]="true"></igx-row-island>
</igx-hierarchical-grid>


Expand Down
Loading