1- import { ChangeDetectionStrategy , Component , signal } from '@angular/core' ;
1+ import { ChangeDetectionStrategy , Component , signal } from '@angular/core' ; // Removed inject
2+ import { CommonModule } from '@angular/common' ;
23import { MatFormField , MatInput } from '@angular/material/input' ;
4+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner' ;
35
4- import { restResource } from '@angular-experts/resource' ;
5-
6+ import { restResource } from '@angular-experts/resource' ; // Added back
67import { Todo } from '../../../model/todo.model' ;
78import { TodoItemComponent } from '../../../ui/todo-item/todo-item.component' ;
89import { TodoSkeletonComponent } from '../../../ui/todo-skeleton/todo-skeleton.component' ;
910
1011@Component ( {
1112 selector : 'showcase-basic' ,
12- imports : [ MatInput , MatFormField , TodoItemComponent , TodoSkeletonComponent ] ,
13+ imports : [
14+ CommonModule ,
15+ MatInput ,
16+ MatFormField ,
17+ TodoItemComponent ,
18+ TodoSkeletonComponent ,
19+ MatProgressSpinnerModule ,
20+ ] ,
1321 template : `
1422 <h2>Basic</h2>
1523 <div class="mt-8 flex flex-col gap-8">
@@ -24,22 +32,32 @@ import { TodoSkeletonComponent } from '../../../ui/todo-skeleton/todo-skeleton.c
2432 [value]="newTodo()"
2533 (input)="newTodo.set(todoDescriptionInputRef.value)"
2634 (keyup.enter)="createTodo()"
35+ [disabled]="todos.loading()"
2736 />
2837 </mat-form-field>
2938
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+
3147 @if (todos.loadingInitial()) {
3248 <showcase-todo-skeleton [repeat]="4" />
3349 } @else {
3450 @for (todo of todos.values(); track todo.id) {
3551 <showcase-todo-item
36- [disabled]="todos.loading()"
52+ [disabled]="todos.loading() && !todos.loadingInitial() "
3753 [todo]="todo"
3854 (toggle)="handleToggle(todo)"
3955 (remove)="handleRemove(todo)"
4056 />
4157 } @empty {
42- <span>No todos found, create some...</span>
58+ @if (!todos.loadingInitial()) {
59+ <span>No todos found, create some...</span>
60+ }
4361 }
4462 }
4563 </div>
@@ -54,27 +72,26 @@ import { TodoSkeletonComponent } from '../../../ui/todo-skeleton/todo-skeleton.c
5472 changeDetection : ChangeDetectionStrategy . OnPush ,
5573} )
5674export class BasicComponent {
57- todos = restResource < Todo , string > ( 'todos' , {
75+ todos = restResource < Todo , string > ( 'todos' , { // Added back local restResource
5876 create : {
5977 strategy : 'incremental'
6078 }
6179 } ) ;
62-
6380 newTodo = signal ( '' ) ;
6481
6582 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
6986 }
7087 this . newTodo . set ( '' ) ;
7188 }
7289
7390 handleToggle ( todo : Todo ) {
74- this . todos . update ( { ...todo , completed : ! todo . completed } ) ;
91+ this . todos . update ( { ...todo , completed : ! todo . completed } ) ; // Changed to todos.update
7592 }
7693
7794 handleRemove ( todo : Todo ) {
78- this . todos . remove ( todo ) ;
95+ this . todos . remove ( todo ) ; // Changed to todos.remove
7996 }
8097}
0 commit comments