Skip to content

Commit a31dbcb

Browse files
authored
Merge pull request #2778 from adumesny/master
memory leak Angular demo
2 parents 7f1deca + a7e58a4 commit a31dbcb

File tree

5 files changed

+37
-26
lines changed

5 files changed

+37
-26
lines changed

angular/projects/demo/src/app/app.component.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<button (click)="onShow(5)" [class.active]="show===5">Component Dynamic</button>
1010
<button (click)="onShow(6)" [class.active]="show===6">Nested Grid</button>
1111
<button (click)="onShow(7)" [class.active]="show===7">Two Grids + sidebar</button>
12+
<button (click)="onShow(8)" [class.active]="show===8">Leak Test</button>
1213
</div>
1314

1415
<div class="test-container">
@@ -99,10 +100,17 @@
99100
</div>
100101
</div>
101102

103+
<div *ngIf="show===8">
104+
<p>load() memory leak test</p>
105+
<button (click)="clearGrid()">Clear</button>
106+
<button (click)="load(sub0)">load 0</button>
107+
<button (click)="load(sub2)">load 2</button>
108+
<gridstack [options]="gridOptionsFull"></gridstack>
109+
</div>
102110

103111
<div class="grid-container"></div>
104112

105-
<div class="text-container">
113+
<div class="text-container" *ngIf="show!=8">
106114
<textarea #origTextArea cols="50" rows="50" readonly="readonly"></textarea>
107115
<textarea #textArea cols="50" rows="50" readonly="readonly"></textarea>
108116
</div>

angular/projects/demo/src/app/app.component.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export class AppComponent implements OnInit {
4040
cellHeight: 70,
4141
columnOpts: { breakpoints: [{w:768, c:1}] },
4242
}
43-
private sub0: NgGridStackWidget[] = [{x:0, y:0, selector:'app-a'}, {x:1, y:0, selector:'app-a', input: {text: 'bar'}}, {x:1, y:1, content:'plain html'}, {x:0, y:1, selector:'app-b'} ];
43+
public sub0: NgGridStackWidget[] = [{x:0, y:0, selector:'app-a'}, {x:1, y:0, selector:'app-a', input: {text: 'bar'}}, {x:1, y:1, content:'plain html'}, {x:0, y:1, selector:'app-b'} ];
4444
public gridOptionsFull: NgGridStackOptions = {
4545
...this.gridOptions,
4646
children: this.sub0,
@@ -53,8 +53,8 @@ export class AppComponent implements OnInit {
5353
acceptWidgets: true, // will accept .grid-stack-item by default
5454
margin: 5,
5555
};
56-
private sub1: NgGridStackWidget[] = [ {x:0, y:0, selector:'app-a'}, {x:1, y:0, selector:'app-b'}, {x:2, y:0, selector:'app-c'}, {x:3, y:0}, {x:0, y:1}, {x:1, y:1}];
57-
private sub2: NgGridStackWidget[] = [ {x:0, y:0}, {x:0, y:1, w:2}];
56+
public sub1: NgGridStackWidget[] = [ {x:0, y:0, selector:'app-a'}, {x:1, y:0, selector:'app-b'}, {x:2, y:0, selector:'app-c'}, {x:3, y:0}, {x:0, y:1}, {x:1, y:1}];
57+
public sub2: NgGridStackWidget[] = [ {x:0, y:0}, {x:0, y:1, w:2}];
5858
private subChildren: NgGridStackWidget[] = [
5959
{x:0, y:0, content: 'regular item'},
6060
{x:1, y:0, w:4, h:4, subGridOpts: {children: this.sub1, class: 'sub1', ...this.subOptions}},
@@ -177,6 +177,9 @@ export class AppComponent implements OnInit {
177177
{x:3, y:0, w:2, content:'new item'}, // new item
178178
]);
179179
}
180+
public load(layout: GridStackWidget[]) {
181+
this.gridComp?.grid?.load(layout);
182+
}
180183

181184
/**
182185
* ngFor case: TEST TEMPLATE operations - NOT recommended unless you have no GS creating/re-parenting

angular/projects/demo/src/app/app.module.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ import { GridstackModule, GridstackComponent } from 'gridstack/dist/angular';
1818
GridstackModule,
1919
],
2020
declarations: [
21-
AngularNgForCmdTestComponent,
22-
AngularNgForTestComponent,
23-
AngularSimpleComponent,
24-
AppComponent,
25-
AComponent,
26-
BComponent,
27-
CComponent,
21+
AngularNgForCmdTestComponent,
22+
AngularNgForTestComponent,
23+
AngularSimpleComponent,
24+
AppComponent,
25+
AComponent,
26+
BComponent,
27+
CComponent,
2828
],
2929
exports: [
3030
],

angular/projects/lib/src/lib/gridstack.component.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -186,18 +186,18 @@ export class GridstackComponent implements OnInit, AfterContentInit, OnDestroy {
186186
private hookEvents(grid?: GridStack) {
187187
if (!grid) return;
188188
grid
189-
.on('added', (event: Event, nodes: GridStackNode[]) => { this.checkEmpty(); this.addedCB.emit({event, nodes}); })
190-
.on('change', (event: Event, nodes: GridStackNode[]) => this.changeCB.emit({event, nodes}))
191-
.on('disable', (event: Event) => this.disableCB.emit({event}))
192-
.on('drag', (event: Event, el: GridItemHTMLElement) => this.dragCB.emit({event, el}))
193-
.on('dragstart', (event: Event, el: GridItemHTMLElement) => this.dragStartCB.emit({event, el}))
194-
.on('dragstop', (event: Event, el: GridItemHTMLElement) => this.dragStopCB.emit({event, el}))
195-
.on('dropped', (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => this.droppedCB.emit({event, previousNode, newNode}))
196-
.on('enable', (event: Event) => this.enableCB.emit({event}))
197-
.on('removed', (event: Event, nodes: GridStackNode[]) => { this.checkEmpty(); this.removedCB.emit({event, nodes}); })
198-
.on('resize', (event: Event, el: GridItemHTMLElement) => this.resizeCB.emit({event, el}))
199-
.on('resizestart', (event: Event, el: GridItemHTMLElement) => this.resizeStartCB.emit({event, el}))
200-
.on('resizestop', (event: Event, el: GridItemHTMLElement) => this.resizeStopCB.emit({event, el}))
189+
.on('added', (event: Event, nodes: GridStackNode[]) => { this.checkEmpty(); this.addedCB.emit({event, nodes}); })
190+
.on('change', (event: Event, nodes: GridStackNode[]) => this.changeCB.emit({event, nodes}))
191+
.on('disable', (event: Event) => this.disableCB.emit({event}))
192+
.on('drag', (event: Event, el: GridItemHTMLElement) => this.dragCB.emit({event, el}))
193+
.on('dragstart', (event: Event, el: GridItemHTMLElement) => this.dragStartCB.emit({event, el}))
194+
.on('dragstop', (event: Event, el: GridItemHTMLElement) => this.dragStopCB.emit({event, el}))
195+
.on('dropped', (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => this.droppedCB.emit({event, previousNode, newNode}))
196+
.on('enable', (event: Event) => this.enableCB.emit({event}))
197+
.on('removed', (event: Event, nodes: GridStackNode[]) => { this.checkEmpty(); this.removedCB.emit({event, nodes}); })
198+
.on('resize', (event: Event, el: GridItemHTMLElement) => this.resizeCB.emit({event, el}))
199+
.on('resizestart', (event: Event, el: GridItemHTMLElement) => this.resizeStartCB.emit({event, el}))
200+
.on('resizestop', (event: Event, el: GridItemHTMLElement) => this.resizeStopCB.emit({event, el}))
201201
}
202202
}
203203

src/dd-gridstack.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,17 @@ export class DDGridStack {
118118

119119
/** true if element is droppable */
120120
public isDroppable(el: DDElementHost): boolean {
121-
return !!(el && el.ddElement && el.ddElement.ddDroppable && !el.ddElement.ddDroppable.disabled);
121+
return !!(el?.ddElement?.ddDroppable && !el.ddElement.ddDroppable.disabled);
122122
}
123123

124124
/** true if element is draggable */
125125
public isDraggable(el: DDElementHost): boolean {
126-
return !!(el && el.ddElement && el.ddElement.ddDraggable && !el.ddElement.ddDraggable.disabled);
126+
return !!(el?.ddElement?.ddDraggable && !el.ddElement.ddDraggable.disabled);
127127
}
128128

129129
/** true if element is draggable */
130130
public isResizable(el: DDElementHost): boolean {
131-
return !!(el && el.ddElement && el.ddElement.ddResizable && !el.ddElement.ddResizable.disabled);
131+
return !!(el?.ddElement?.ddResizable && !el.ddElement.ddResizable.disabled);
132132
}
133133

134134
public on(el: GridItemHTMLElement, name: string, callback: DDCallback): DDGridStack {

0 commit comments

Comments
 (0)