diff --git a/bookie/src/app/sales/modifiers/modifiers.component.html b/bookie/src/app/sales/modifiers/modifiers.component.html
index c3d626b..1685aac 100644
--- a/bookie/src/app/sales/modifiers/modifiers.component.html
+++ b/bookie/src/app/sales/modifiers/modifiers.component.html
@@ -1,6 +1,6 @@
- @for (item of list | async; track item.id) {
+ @for (item of list(); track item.id) {
{{ item.name }}
@@ -19,8 +19,8 @@
class="flex-col square-button"
matRipple
(click)="select(m)"
- [class.primary]="selectedIds.indexOf(m.id) === -1"
- [class.strong-primary]="selectedIds.indexOf(m.id) !== -1"
+ [class.primary]="selectedIds().indexOf(m.id) === -1"
+ [class.strong-primary]="selectedIds().indexOf(m.id) !== -1"
>
{{ m.name }}
@@ -31,5 +31,5 @@
-
+
diff --git a/bookie/src/app/sales/modifiers/modifiers.component.ts b/bookie/src/app/sales/modifiers/modifiers.component.ts
index c1bf412..a74816b 100644
--- a/bookie/src/app/sales/modifiers/modifiers.component.ts
+++ b/bookie/src/app/sales/modifiers/modifiers.component.ts
@@ -1,6 +1,6 @@
import { CdkScrollable } from '@angular/cdk/scrolling';
-import { AsyncPipe } from '@angular/common';
-import { Component, inject } from '@angular/core';
+import { Component, inject, signal, computed } from '@angular/core';
+import { toSignal } from '@angular/core/rxjs-interop';
import { MatBadgeModule } from '@angular/material/badge';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
@@ -18,7 +18,6 @@ import { ModifierCategory } from '../../core/modifier-category';
templateUrl: './modifiers.component.html',
styleUrls: ['./modifiers.component.sass'],
imports: [
- AsyncPipe,
CdkScrollable,
MatBadgeModule,
MatButtonModule,
@@ -35,25 +34,17 @@ export class ModifiersComponent {
selected: Modifier[];
}>(MAT_DIALOG_DATA);
- list: Observable;
- selected: Modifier[];
- selectedIds: (string | undefined)[];
-
- constructor() {
- const data = this.data;
-
- this.list = data.list;
- this.selected = data.selected;
- this.selectedIds = this.selected.map((e) => e.id);
- }
+ list = toSignal(this.data.list, { initialValue: [] });
+ selected = signal(this.data.selected ? [...this.data.selected] : []);
+ selectedIds = computed(() => this.selected().map((e) => e.id));
select(m: Modifier) {
- const index = this.selectedIds.indexOf(m.id);
- if (index === -1) {
- this.selected.push(m);
- } else {
- this.selected.splice(index, 1);
- }
- this.selectedIds = this.selected.map((e) => e.id);
+ this.selected.update((list) => {
+ const index = list.findIndex((e) => e.id === m.id);
+ if (index === -1) {
+ return [...list, m];
+ }
+ return list.filter((e) => e.id !== m.id);
+ });
}
}