@@ -16,11 +16,6 @@ import { NgtTweakDebounce } from './debounce';
16
16
import { NgtTweakFolder } from './folder' ;
17
17
import { NgtTweakLabel } from './label' ;
18
18
19
- export type NgtTweakBindingParams < TParams extends BindingParams > = Omit <
20
- TParams ,
21
- 'tag' | 'label' | 'disabled' | 'hidden'
22
- > ;
23
-
24
19
export const NGT_TWEAK_BINDING_AS_HOST = new InjectionToken <
25
20
true | { in : ( value : unknown ) => unknown ; out : ( value : unknown ) => unknown } | null
26
21
> ( 'hostDirective NgtTweakBinding' , { factory : ( ) => null } ) ;
@@ -47,13 +42,13 @@ export class NgtTweakBinding<TValue> {
47
42
private injector = inject ( Injector ) ;
48
43
private asHostDirective = inject ( NGT_TWEAK_BINDING_AS_HOST ) ;
49
44
50
- binding = signal < BindingApi < unknown , TValue > | null > ( null ) ;
51
45
private bindingBaseParams = computed ( ( ) => ( {
52
46
label : this . label . snapshot . label ,
53
47
tag : this . label . snapshot . tag ,
54
48
disabled : this . blade . disabled ( ) ,
55
49
hidden : this . blade . hidden ( ) ,
56
50
} ) ) ;
51
+ private bindingParams = signal < Record < string , unknown > > ( { } ) ;
57
52
58
53
private get bindableObject ( ) {
59
54
let value = untracked ( this . value ) ;
@@ -65,43 +60,64 @@ export class NgtTweakBinding<TValue> {
65
60
return { value } ;
66
61
}
67
62
63
+ private bindingApi = computed ( ( ) => {
64
+ const parent = this . parent . folder ( ) ;
65
+ if ( ! parent ) return null ;
66
+
67
+ const bindingParams = { ...this . bindingBaseParams ( ) , ...this . bindingParams ( ) } ;
68
+ return parent . addBinding ( this . bindableObject , 'value' , bindingParams ) as BindingApi < unknown , TValue > ;
69
+ } ) ;
70
+
68
71
constructor ( ) {
69
- this . blade . startChangeEffect ( this . binding ) ;
70
- this . label . startChangeEffect ( this . binding ) ;
71
- this . debounce . startDebounceEffect ( this . binding , ( ev ) => {
72
+ this . blade . startChangeEffect ( this . bindingApi ) ;
73
+ this . label . startChangeEffect ( this . bindingApi ) ;
74
+ this . debounce . startDebounceEffect ( this . bindingApi , ( ev ) => {
72
75
if ( this . asHostDirective && typeof this . asHostDirective === 'object' ) {
73
76
this . value . set ( this . asHostDirective . out ( ev . value ) as TValue ) ;
74
77
} else {
75
78
this . value . set ( ev . value ) ;
76
79
}
77
80
} ) ;
78
81
79
- if ( ! this . asHostDirective ) {
80
- this . createBindingEffect ( this . bindingBaseParams ) ;
81
- }
82
+ effect ( ( onCleanup ) => {
83
+ const bindingApi = this . bindingApi ( ) ;
84
+ if ( ! bindingApi ) return ;
85
+ onCleanup ( ( ) => {
86
+ bindingApi . dispose ( ) ;
87
+ } ) ;
88
+ } ) ;
82
89
83
90
inject ( DestroyRef ) . onDestroy ( ( ) => {
84
- this . binding ( ) ?. dispose ( ) ;
91
+ this . bindingApi ( ) ?. dispose ( ) ;
85
92
} ) ;
86
93
}
87
94
88
- createBindingEffect ( params : ( ) => BindingParams ) {
95
+ syncBindingParams ( params : ( ) => BindingParams ) {
89
96
return effect (
90
- ( onCleanup ) => {
91
- const parent = this . parent . folder ( ) ;
92
- if ( ! parent ) return ;
93
-
94
- const bindingParams = { ...this . bindingBaseParams ( ) , ...params ( ) } ;
95
- const binding = parent . addBinding ( this . bindableObject , 'value' , bindingParams ) ;
96
-
97
- this . binding . set ( binding ) ;
98
-
99
- onCleanup ( ( ) => {
100
- binding . dispose ( ) ;
101
- this . binding . set ( null ) ;
102
- } ) ;
97
+ ( ) => {
98
+ this . bindingParams . set ( params ( ) ) ;
103
99
} ,
104
100
{ injector : this . injector } ,
105
101
) ;
106
102
}
103
+
104
+ // createBindingEffect(params: () => BindingParams) {
105
+ // return effect(
106
+ // (onCleanup) => {
107
+ // const parent = this.parent.folder();
108
+ // if (!parent) return;
109
+ //
110
+ // const bindingParams = { ...this.bindingBaseParams(), ...params() };
111
+ // const binding = parent.addBinding(this.bindableObject, 'value', bindingParams);
112
+ //
113
+ // this.bindingApi.set(binding);
114
+ //
115
+ // onCleanup(() => {
116
+ // binding.dispose();
117
+ // this.bindingApi.set(null);
118
+ // });
119
+ // },
120
+ // { injector: this.injector },
121
+ // );
122
+ // }
107
123
}
0 commit comments