Skip to content

Commit 4e4ba28

Browse files
guguclaude
andcommitted
Refactor S3 service to use async/await instead of RxJS
Replace Observable-based API with Promise-based async/await pattern for better integration with Angular signals. Update all S3 components and tests accordingly. Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent 91d7afc commit 4e4ba28

File tree

7 files changed

+514
-435
lines changed

7 files changed

+514
-435
lines changed
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
<div class="s3-widget">
22
<mat-form-field class="s3-widget__key" appearance="outline">
3-
<mat-label>{{normalizedLabel}}</mat-label>
4-
<input matInput type="text" name="{{label}}-{{key}}"
5-
[required]="required" [disabled]="disabled" [readonly]="readonly"
6-
attr.data-testid="record-{{label}}-s3"
7-
[(ngModel)]="value" (ngModelChange)="onFieldChange.emit($event)">
3+
<mat-label>{{normalizedLabel()}}</mat-label>
4+
<input matInput type="text" name="{{label()}}-{{key()}}"
5+
[required]="required()" [disabled]="disabled()" [readonly]="readonly()"
6+
attr.data-testid="record-{{label()}}-s3"
7+
[ngModel]="internalValue() || value()" (ngModelChange)="onValueChange($event)">
88
</mat-form-field>
99

1010
<div class="s3-widget__actions">
11-
<input type="file" #fileInput hidden [accept]="fileAccept" (change)="onFileSelected($event)">
11+
<input type="file" #fileInput hidden [accept]="fileAccept()" (change)="onFileSelected($event)">
1212
<button mat-stroked-button type="button"
13-
[disabled]="disabled || readonly || isLoading"
13+
[disabled]="disabled() || readonly() || isLoading()"
1414
(click)="fileInput.click()">
1515
<mat-icon>upload</mat-icon>
1616
Upload
1717
</button>
1818
<button mat-stroked-button type="button"
19-
*ngIf="previewUrl"
19+
*ngIf="previewUrl()"
2020
(click)="openFile()">
2121
<mat-icon>open_in_new</mat-icon>
2222
Open
2323
</button>
2424
</div>
2525

26-
<div class="s3-widget__preview" *ngIf="value">
27-
<mat-spinner *ngIf="isLoading" diameter="40"></mat-spinner>
28-
<img *ngIf="isImage && previewUrl && !isLoading"
29-
[src]="previewUrl"
26+
<div class="s3-widget__preview" *ngIf="internalValue() || value()">
27+
<mat-spinner *ngIf="isLoading()" diameter="40"></mat-spinner>
28+
<img *ngIf="isImage() && previewUrl() && !isLoading()"
29+
[src]="previewUrl()"
3030
class="s3-widget__thumbnail"
3131
alt="Preview">
32-
<div *ngIf="!isImage && previewUrl && !isLoading" class="s3-widget__file-icon">
32+
<div *ngIf="!isImage() && previewUrl() && !isLoading()" class="s3-widget__file-icon">
3333
<mat-icon>insert_drive_file</mat-icon>
34-
<span class="s3-widget__filename">{{value | slice:-30}}</span>
34+
<span class="s3-widget__filename">{{(internalValue() || value()) | slice:-30}}</span>
3535
</div>
3636
</div>
3737
</div>

0 commit comments

Comments
 (0)