Skip to content

Commit 7b174d6

Browse files
committed
fix: decoupling components
1 parent 543770b commit 7b174d6

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

libs/decoupling/brain/src/index.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1 @@
1-
export {
2-
BtnDisabledDirective,
3-
ButtonState,
4-
} from './lib/button-disabled.directive';
1+
export { BtnDisabledDirective } from './lib/button-disabled.directive';

libs/decoupling/brain/src/lib/button-disabled.directive.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
/* eslint-disable @angular-eslint/directive-selector */
2+
import {
3+
BUTTON_STATE_PROVIDER,
4+
ButtonState,
5+
} from '@angular-challenges/decoupling/core';
26
import { Directive, signal, WritableSignal } from '@angular/core';
37

4-
export type ButtonState = 'enabled' | 'disabled';
5-
68
@Directive({
79
selector: 'button[btnDisabled]',
10+
providers: [
11+
{
12+
provide: BUTTON_STATE_PROVIDER,
13+
useExisting: BtnDisabledDirective,
14+
},
15+
],
816
host: {
917
'(click)': 'toggleState()',
1018
},

libs/decoupling/core/src/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,13 @@
1+
import { InjectionToken, Signal } from '@angular/core';
2+
13
export const DECOUPLING_CORE = 'DECOUPLING_CORE';
4+
5+
export type ButtonState = 'enabled' | 'disabled';
6+
7+
export interface ButtonStateProvider {
8+
state: Signal<ButtonState>;
9+
}
10+
11+
export const BUTTON_STATE_PROVIDER = new InjectionToken<ButtonStateProvider>(
12+
'BUTTON_STATE_PROVIDER',
13+
);
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
/* eslint-disable @angular-eslint/directive-selector */
2-
import { BtnDisabledDirective } from '@angular-challenges/decoupling/brain';
2+
import { BUTTON_STATE_PROVIDER } from '@angular-challenges/decoupling/core';
33
import {
44
Directive,
55
effect,
66
ElementRef,
77
inject,
88
Renderer2,
9-
signal,
109
} from '@angular/core';
1110

1211
@Directive({
@@ -17,16 +16,15 @@ import {
1716
},
1817
})
1918
export class BtnHelmetDirective {
20-
btnState = inject(BtnDisabledDirective, { self: true });
21-
public state = this.btnState?.state ?? signal('disabled').asReadonly();
19+
private btnState = inject(BUTTON_STATE_PROVIDER, { self: true });
2220
private renderer = inject(Renderer2);
2321
private element = inject(ElementRef);
2422

2523
private rendererEffect = effect(() => {
2624
this.renderer.setAttribute(
2725
this.element.nativeElement,
2826
'data-state',
29-
this.state(),
27+
this.btnState.state(),
3028
);
3129
});
3230
}

0 commit comments

Comments
 (0)