Skip to content

Commit 1d12d01

Browse files
committed
feature(wysiwyg): set values to selection model from component
1 parent 0049afe commit 1d12d01

File tree

4 files changed

+16
-20
lines changed

4 files changed

+16
-20
lines changed

apps/codelab/src/app/admin/content/presentation-editor/side-panel/side-panel.component.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
cdkDropList
88
multiselectList
99
[msModel]="selectionModel"
10-
[msItems]="slideIds"
1110
>
1211
<div
1312
(cdkDragDropped)="dropped()"

apps/codelab/src/app/admin/content/presentation-editor/side-panel/side-panel.component.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export class SidePanelComponent implements OnInit, OnChanges {
4040
@Input() presentationId!: string;
4141

4242
public dragging: DragRef = null;
43-
public sidePanelInFocus = false;
43+
public elementHasFocus = false;
4444
public selectionModel: MultiselectModel<string> = new MultiselectModel();
4545
public slideIds: string[] = [];
4646

@@ -61,7 +61,7 @@ export class SidePanelComponent implements OnInit, OnChanges {
6161
if (changes.slides) {
6262
this.slideIds = slideIdsMapper(changes.slides.currentValue);
6363

64-
this.resetSelected();
64+
this.selectionModel.setValues(this.slideIds);
6565
}
6666
}
6767

@@ -75,23 +75,23 @@ export class SidePanelComponent implements OnInit, OnChanges {
7575

7676
@HostListener('document:keydown.arrowdown', ['$event'])
7777
nextSlide(event: KeyboardEvent) {
78-
if (this.sidePanelInFocus) {
78+
if (this.elementHasFocus) {
7979
this.navigationService.nextSlide(this.presentationId);
8080
event.preventDefault();
8181
}
8282
}
8383

8484
@HostListener('document:keydown.arrowup', ['$event'])
8585
prevSlide(event: KeyboardEvent) {
86-
if (this.sidePanelInFocus) {
86+
if (this.elementHasFocus) {
8787
this.navigationService.previousSlide(this.presentationId);
8888
event.preventDefault();
8989
}
9090
}
9191

9292
@HostListener('document:keydown', ['$event'])
9393
private handleKeyboardEvent(event: KeyboardEvent) {
94-
if (!this.sidePanelInFocus) {
94+
if (!this.elementHasFocus) {
9595
return;
9696
}
9797

@@ -112,7 +112,7 @@ export class SidePanelComponent implements OnInit, OnChanges {
112112

113113
@HostListener('document:click', ['$event'])
114114
private handleClickEvent(event: MouseEvent) {
115-
this.sidePanelInFocus = this.el.nativeElement.contains(event.target);
115+
this.elementHasFocus = this.el.nativeElement.contains(event.target);
116116
}
117117

118118
dragStarted(event: CdkDragStart) {

apps/codelab/src/app/multiselect/multiselect-list.directive.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Directive, ElementRef, HostListener, InjectionToken, Input, OnChanges, SimpleChanges } from '@angular/core';
1+
import { Directive, ElementRef, HostListener, InjectionToken, Input } from '@angular/core';
22

33
import { MultiselectModel } from './multiselect-model';
44

@@ -13,10 +13,9 @@ export const MULTISELECT_LIST = new InjectionToken<MultiselectListDirective<any>
1313
},
1414
]
1515
})
16-
export class MultiselectListDirective<T> implements OnChanges {
16+
export class MultiselectListDirective<T> {
1717
elementHasFocus = false;
1818

19-
@Input() msItems = [];
2019
@Input() msModel: MultiselectModel<T>;
2120

2221
constructor(
@@ -37,16 +36,10 @@ export class MultiselectListDirective<T> implements OnChanges {
3736
}
3837

3938
if (event.key === 'a' && (event.ctrlKey || event.metaKey)) {
40-
this.msModel.toggleAllItems(this.msItems, true);
39+
this.msModel.selectAllItems();
4140

4241
event.preventDefault();
4342
}
4443
}
4544

46-
ngOnChanges(changes: SimpleChanges) {
47-
if (changes.msItems) {
48-
this.msModel.setValues(changes.msItems.currentValue);
49-
}
50-
}
51-
5245
}

apps/codelab/src/app/multiselect/multiselect-model.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ export class MultiselectModel<T> {
1414
return Array.from(this.selection.values());
1515
}
1616

17-
setValues(values: T[]) {
17+
setValues(values: T[]): void {
1818
this.values = values;
1919
}
2020

21-
findBetween(item1: T, item2: T) {
21+
findBetween(item1: T, item2: T): T[] {
2222
const index1 = this.values.indexOf(item1);
2323
const index2 = this.values.indexOf(item2);
2424

@@ -28,7 +28,7 @@ export class MultiselectModel<T> {
2828
return this.values.slice(firstIndex, firstIndex + numberOfItems);
2929
}
3030

31-
toggleAllItems(items: T[], shouldSelect: boolean) {
31+
toggleAllItems(items: T[], shouldSelect: boolean): void {
3232
for (const item of items) {
3333
if (shouldSelect) {
3434
this.selection.add(item);
@@ -58,6 +58,10 @@ export class MultiselectModel<T> {
5858
this.stack.push(item);
5959
}
6060

61+
selectAllItems(): void {
62+
this.toggleAllItems(this.values, true);
63+
}
64+
6165
selectSingle(item: T): void {
6266
this.selection.clear();
6367

0 commit comments

Comments
 (0)