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

Function transformedValue

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

Source from the content-addressed store, hash-verified

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

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