1
- import { ChangeDetectionStrategy , Component , signal } from '@angular/core' ;
1
+ import { ChangeDetectionStrategy , Component , signal } from '@angular/core' ; // Removed inject
2
+ import { CommonModule } from '@angular/common' ;
2
3
import { MatFormField , MatInput } from '@angular/material/input' ;
4
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner' ;
3
5
4
- import { restResource } from '@angular-experts/resource' ;
5
-
6
+ import { restResource } from '@angular-experts/resource' ; // Added back
6
7
import { Todo } from '../../../model/todo.model' ;
7
8
import { TodoItemComponent } from '../../../ui/todo-item/todo-item.component' ;
8
9
import { TodoSkeletonComponent } from '../../../ui/todo-skeleton/todo-skeleton.component' ;
9
10
10
11
@Component ( {
11
12
selector : 'showcase-basic' ,
12
- imports : [ MatInput , MatFormField , TodoItemComponent , TodoSkeletonComponent ] ,
13
+ imports : [
14
+ CommonModule ,
15
+ MatInput ,
16
+ MatFormField ,
17
+ TodoItemComponent ,
18
+ TodoSkeletonComponent ,
19
+ MatProgressSpinnerModule ,
20
+ ] ,
13
21
template : `
14
22
<h2>Basic</h2>
15
23
<div class="mt-8 flex flex-col gap-8">
@@ -24,22 +32,32 @@ import { TodoSkeletonComponent } from '../../../ui/todo-skeleton/todo-skeleton.c
24
32
[value]="newTodo()"
25
33
(input)="newTodo.set(todoDescriptionInputRef.value)"
26
34
(keyup.enter)="createTodo()"
35
+ [disabled]="todos.loading()"
27
36
/>
28
37
</mat-form-field>
29
38
30
- <div class="flex flex-col gap-4">
39
+ <div class="relative flex flex-col gap-4">
40
+ <!-- Spinner for non-initial loads -->
41
+ @if (todos.loading() && !todos.loadingInitial()) {
42
+ <div class="absolute inset-0 flex items-center justify-center bg-white bg-opacity-50 z-10">
43
+ <mat-progress-spinner diameter="24" mode="indeterminate"></mat-progress-spinner>
44
+ </div>
45
+ }
46
+
31
47
@if (todos.loadingInitial()) {
32
48
<showcase-todo-skeleton [repeat]="4" />
33
49
} @else {
34
50
@for (todo of todos.values(); track todo.id) {
35
51
<showcase-todo-item
36
- [disabled]="todos.loading()"
52
+ [disabled]="todos.loading() && !todos.loadingInitial() "
37
53
[todo]="todo"
38
54
(toggle)="handleToggle(todo)"
39
55
(remove)="handleRemove(todo)"
40
56
/>
41
57
} @empty {
42
- <span>No todos found, create some...</span>
58
+ @if (!todos.loadingInitial()) {
59
+ <span>No todos found, create some...</span>
60
+ }
43
61
}
44
62
}
45
63
</div>
@@ -54,27 +72,26 @@ import { TodoSkeletonComponent } from '../../../ui/todo-skeleton/todo-skeleton.c
54
72
changeDetection : ChangeDetectionStrategy . OnPush ,
55
73
} )
56
74
export class BasicComponent {
57
- todos = restResource < Todo , string > ( 'todos' , {
75
+ todos = restResource < Todo , string > ( 'todos' , { // Added back local restResource
58
76
create : {
59
77
strategy : 'incremental'
60
78
}
61
79
} ) ;
62
-
63
80
newTodo = signal ( '' ) ;
64
81
65
82
createTodo ( ) {
66
- const newTodo = this . newTodo ( ) ;
67
- if ( newTodo . length > 0 ) {
68
- this . todos . create ( { description : newTodo , completed : false } ) ;
83
+ const newTodoValue = this . newTodo ( ) ;
84
+ if ( newTodoValue . length > 0 ) {
85
+ this . todos . create ( { description : newTodoValue , completed : false } ) ; // Changed to todos.create
69
86
}
70
87
this . newTodo . set ( '' ) ;
71
88
}
72
89
73
90
handleToggle ( todo : Todo ) {
74
- this . todos . update ( { ...todo , completed : ! todo . completed } ) ;
91
+ this . todos . update ( { ...todo , completed : ! todo . completed } ) ; // Changed to todos.update
75
92
}
76
93
77
94
handleRemove ( todo : Todo ) {
78
- this . todos . remove ( todo ) ;
95
+ this . todos . remove ( todo ) ; // Changed to todos.remove
79
96
}
80
97
}
0 commit comments