i have problem about circular dependency.
Tried to use switchMap(() => EMPTY), take(1). This solution works, but it’s not a good solution.
Example code below:
P.S. ConstructorGeneratorService create field. When field is created, i need to update draft on backend and update my local state (subject)
// api.service.ts
export class AdminDraftFacade {
private readonly adminDraft = new BehaviorSubject(null);
readonly adminDraft$ = this.responseSubject.asObservable();
readonly draft$: Observable<any> = this.adminDraft$.pipe(
map(ud => ud.draft),
);
updateAdminDraft(draftId, draft) {
this.api.updateAdminDraft(draftId, draft).pipe(
tap(draft => this.adminDraft.next(draft)),
).subscribe();
}
}
// some.component.ts
export class SomeComponent implements OnInit {
private readonly adminDraftFacade = inject(AdminDraftFacade);
private readonly adminDraft$ = this.adminDraftFacade.adminDraft$;
private readonly draft$ = this.adminDraftFacade.draft$;
ngOnInit() {
this.constructorGeneratorService.fields$
.pipe(
switchMap(field => this.updateDraft$(field)),
)
.subscribe();
}
private updateDraft$(field) {
return this.draft$.pipe(
tap(draft => {
const updatedFields = this.transformFields(this.handleFieldChange(field, draft.fields || []));
this.adminDraftFacade.updateAdminDraft(this.draftId, {
...draft,
fields: updatedFields,
}),
}),
);
};
private transformFields(fields: FieldInterface[]): FieldInterface[] {
return fields
.map(field => {
if (!field.order && field.order !== 0) {
field.order = this.order.size;
}
return field;
});
}
private handleFieldChange(field: FieldInterface, fields: FieldInterface[]): FieldInterface[] {
const idx = fields.findIndex(item => item.id === field.id);
if (((idx && idx !== -1) || idx === 0) && fields) {
fields[idx] = field;
} else {
fields.push(field);
}
return fields;
}
}
Angular 17, if signals can help, please tell me how 🙂
New contributor
nikita1nsane is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.