File tree Expand file tree Collapse file tree 4 files changed +26
-11
lines changed
Expand file tree Collapse file tree 4 files changed +26
-11
lines changed Original file line number Diff line number Diff line change 1- export {
2- BtnDisabledDirective ,
3- ButtonState ,
4- } from './lib/button-disabled.directive' ;
1+ export { BtnDisabledDirective } from './lib/button-disabled.directive' ;
Original file line number Diff line number Diff line change 11/* eslint-disable @angular-eslint/directive-selector */
2+ import {
3+ BUTTON_STATE_PROVIDER ,
4+ ButtonState ,
5+ } from '@angular-challenges/decoupling/core' ;
26import { 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 } ,
Original file line number Diff line number Diff line change 1+ import { InjectionToken , Signal } from '@angular/core' ;
2+
13export 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+ ) ;
Original file line number Diff line number Diff line change 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 ' ;
33import {
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} )
1918export 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}
You can’t perform that action at this time.
0 commit comments