MCPcopy Create free account
hub / github.com/angular/angular / transformedValue

Function transformedValue

packages/forms/signals/src/api/transformed_value.ts:121–157  ·  view source on GitHub ↗
(
  value: ModelSignal<TValue>,
  options: TransformedValueOptions<TValue, TRaw>,
)

Source from the content-addressed store, hash-verified

119
120 */
121export function transformedValue<TValue, TRaw>(
122 value: ModelSignal<TValue>,
123 options: TransformedValueOptions<TValue, TRaw>,
124): TransformedValueSignal<TRaw> {
125 const {parse, format} = options;
126 const parser = createParser(value, value.set, parse);
127
128 // Create the result signal with overridden set/update and a `parseErrors` property.
129 const rawValue = linkedSignal(() => format(value()));
130 const result = rawValue as WritableSignal<TRaw> & {
131 parseErrors: Signal<readonly ValidationError.WithoutFieldTree[]>;
132 };
133 result.parseErrors = parser.errors;
134 const originalSet = result.set.bind(result);
135
136 // Wire up the integration with the form control (parse errors and reset handling).
137 const integration = inject(FORM_CONTROL_INTEGRATION, {self: true, optional: true});
138 if (integration) {
139 integration.setParseErrors(parser.errors);
140 integration.onReset = (resetValue) => {
141 parser.reset();
142 const modelValue = resetValue !== undefined ? resetValue : value();
143 originalSet(format(modelValue));
144 };
145 }
146
147 // Notify the parser when `set` or `update` is called on the raw value
148 result.set = (newRawValue: TRaw) => {
149 parser.setRawValue(newRawValue);
150 originalSet(newRawValue);
151 };
152 result.update = (updateFn: (value: TRaw) => TRaw) => {
153 result.set(updateFn(rawValue()));
154 };
155
156 return result;
157}

Callers 4

LegacyParsingInputClass · 0.90
CustomControlClass · 0.85
TestCmpClass · 0.85
TestNumberInputClass · 0.85

Calls 8

createParserFunction · 0.90
linkedSignalFunction · 0.90
injectFunction · 0.90
valueFunction · 0.85
setParseErrorsMethod · 0.80
bindMethod · 0.65
resetMethod · 0.65
setMethod · 0.65

Tested by

no test coverage detected