@strictly/react-form 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,9 @@ declare class FieldAdapterBuilder<From, To, E, ValuePath extends string, Context
7
7
  constructor(convert: AnnotatedFieldConverter<From, To, ValuePath, Context>, create: FieldValueFactory<From, ValuePath, Context>, revert?: UnreliableFieldConverter<To, From, E, ValuePath, Context> | undefined);
8
8
  chain<To2, E2 = E>(converter: AnnotatedFieldConverter<To, To2, ValuePath, Context>, reverter?: UnreliableFieldConverter<To2, To, E2, ValuePath, Context>): FieldAdapterBuilder<From, To2, E | E2, ValuePath, Context>;
9
9
  withReverter(reverter: UnreliableFieldConverter<To, From, E, ValuePath, Context>): FieldAdapterBuilder<From, To, E, ValuePath, Context>;
10
+ nullable(): FieldAdapterBuilder<From | null, To | null, E, ValuePath, Context>;
11
+ optional(): FieldAdapterBuilder<From | undefined, To | undefined, E, ValuePath, Context>;
12
+ private or;
10
13
  withIdentity(isFrom: (from: To | From) => from is From): FieldAdapterBuilder<From, To | From, E, ValuePath, Context>;
11
14
  get narrow(): FieldAdapter<From, To, E, ValuePath, Context>;
12
15
  }
@@ -17,5 +20,6 @@ export declare function adapterFromTwoWayConverter<From, To, E, ValuePath extend
17
20
  export declare function adapterFromPrototype<From, To, ValuePath extends string, Context>(converter: AnnotatedFieldConverter<From, To, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, never, ValuePath, Context>;
18
21
  export declare function adapterFromPrototype<From, To, E, ValuePath extends string, Context>(converter: TwoWayFieldConverter<From, To, E, ValuePath, Context>, prototype: From): FieldAdapterBuilder<From, To, E, ValuePath, Context>;
19
22
  export declare function identityAdapter<V, ValuePath extends string, Context>(prototype: V, required?: boolean): FieldAdapterBuilder<V, V, never, ValuePath, Context>;
23
+ export declare function trimmingStringAdapter<ValuePath extends string, Context>(): FieldAdapterBuilder<string, string, never, ValuePath, Context>;
20
24
  export declare function listAdapter<E, ValuePath extends string, Context>(): FieldAdapterBuilder<readonly E[], readonly E[], never, ValuePath, Context>;
21
25
  export {};
@@ -1,7 +1,9 @@
1
1
  import { chainAnnotatedFieldConverter, chainUnreliableFieldConverter, } from 'field_converters/chain_field_converter';
2
2
  import { annotatedIdentityConverter, unreliableIdentityConverter, } from 'field_converters/identity_converter';
3
3
  import { MaybeIdentityConverter } from 'field_converters/maybe_identity_converter';
4
+ import { TrimmingStringConverter } from 'field_converters/trimming_string_converter';
4
5
  import { prototypingFieldValueFactory } from 'field_value_factories/prototyping_field_value_factory';
6
+ import { UnreliableFieldConversionType, } from 'types/field_converters';
5
7
  class FieldAdapterBuilder {
6
8
  convert;
7
9
  create;
@@ -17,6 +19,32 @@ class FieldAdapterBuilder {
17
19
  withReverter(reverter) {
18
20
  return new FieldAdapterBuilder(this.convert, this.create, reverter);
19
21
  }
22
+ nullable() {
23
+ return this.or(null);
24
+ }
25
+ optional() {
26
+ return this.or(undefined);
27
+ }
28
+ or(proto) {
29
+ function isFrom(v) {
30
+ return v !== proto;
31
+ }
32
+ function isTo(v) {
33
+ return v !== proto;
34
+ }
35
+ return new FieldAdapterBuilder((v, valuePath, context) => isFrom(v)
36
+ ? this.convert(v, valuePath, context)
37
+ : {
38
+ value: v,
39
+ readonly: false,
40
+ required: false,
41
+ }, this.create, (v, valuePath, context) => isTo(v) && this.revert
42
+ ? this.revert(v, valuePath, context)
43
+ : {
44
+ type: UnreliableFieldConversionType.Success,
45
+ value: proto,
46
+ });
47
+ }
20
48
  withIdentity(isFrom) {
21
49
  const identityConverter = new MaybeIdentityConverter({
22
50
  convert: this.convert,
@@ -46,6 +74,9 @@ export function adapterFromPrototype(converter, prototype) {
46
74
  export function identityAdapter(prototype, required) {
47
75
  return new FieldAdapterBuilder(annotatedIdentityConverter(required), prototypingFieldValueFactory(prototype), unreliableIdentityConverter());
48
76
  }
77
+ export function trimmingStringAdapter() {
78
+ return adapterFromTwoWayConverter(new TrimmingStringConverter(), prototypingFieldValueFactory(''));
79
+ }
49
80
  export function listAdapter() {
50
81
  return new FieldAdapterBuilder(annotatedIdentityConverter(false), prototypingFieldValueFactory([]), unreliableIdentityConverter());
51
82
  }
@@ -4,11 +4,11 @@ import { type FormPresenter } from './form_presenter';
4
4
  import { type ValuePathsOfPresenter } from './types';
5
5
  type ValueOfPresenter<P extends FormPresenter<any, any, any, any>> = P extends FormPresenter<infer T, any, any, any> ? ValueOfType<ReadonlyTypeOfType<T>> : never;
6
6
  type ModelOfPresenter<P extends FormPresenter<any, any, any, any>> = ReturnType<P['createModel']>;
7
- export declare function useDefaultMobxFormHooks<P extends FormPresenter<any, any, any, any>>(presenter: P, value: ValueOfPresenter<P>, { onValidFieldSubmit, onValidFormSubmit, }: {
7
+ export declare function useDefaultMobxFormHooks<P extends FormPresenter<any, any, any, any>>(presenter: P, value: ValueOfPresenter<P>, { onValidFieldSubmit, onValidFormSubmit, }?: {
8
8
  onValidFieldSubmit?: <Path extends ValuePathsOfPresenter<P>>(model: ModelOfPresenter<P>, valuePath: Path) => void;
9
9
  onValidFormSubmit?: (model: ModelOfPresenter<P>, value: ValueOfPresenter<P>) => void;
10
10
  }): {
11
11
  model: ModelOfPresenter<P>;
12
- onFormSubmit?: (value: ValueOfPresenter<P>) => void;
12
+ onFormSubmit?: () => void;
13
13
  } & Omit<FieldsViewProps<ModelOfPresenter<P>['fields']>, 'fields'>;
14
14
  export {};
@@ -1,6 +1,6 @@
1
1
  import { useCallback, useMemo, } from 'react';
2
2
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3
- export function useDefaultMobxFormHooks(presenter, value, { onValidFieldSubmit, onValidFormSubmit, }) {
3
+ export function useDefaultMobxFormHooks(presenter, value, { onValidFieldSubmit, onValidFormSubmit, } = {}) {
4
4
  const model = useMemo(function () {
5
5
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
6
6
  return presenter.createModel(value);
@@ -40,12 +40,12 @@ export function chainUnreliableFieldConverter(from, to) {
40
40
  }
41
41
  export function chainAnnotatedFieldConverter(from, to) {
42
42
  return function (value, valuePath, context) {
43
- const { required: intermediateRequired, readonly: intermediateDisabled, value: intermediateValue, } = from(value, valuePath, context);
44
- const { required: finalRequired, readonly: finalDisabled, value: finalValue, } = to(intermediateValue, valuePath, context);
43
+ const { required: intermediateRequired, readonly: intermediateReadonly, value: intermediateValue, } = from(value, valuePath, context);
44
+ const { required: finalRequired, readonly: finalReadonly, value: finalValue, } = to(intermediateValue, valuePath, context);
45
45
  return {
46
46
  value: finalValue,
47
47
  required: intermediateRequired || finalRequired,
48
- readonly: intermediateDisabled || finalDisabled,
48
+ readonly: intermediateReadonly || finalReadonly,
49
49
  };
50
50
  };
51
51
  }
@@ -1,6 +1,10 @@
1
1
  import { type ComponentType } from 'react';
2
- export type ErrorRendererProps<E> = {
2
+ import { type ErrorOfField } from 'types/error_of_field';
3
+ import { type Fields } from 'types/field';
4
+ type InternalErrorRendererProps<E> = {
3
5
  error: E;
4
6
  };
5
- export type ErrorRenderer<E = any> = ComponentType<ErrorRendererProps<E>>;
6
- export declare function DefaultErrorRenderer({ error, }: ErrorRendererProps<any>): string;
7
+ export type ErrorRendererProps<F extends Fields, K extends keyof Fields> = InternalErrorRendererProps<ErrorOfField<F[K]>>;
8
+ export type ErrorRenderer<E = any> = ComponentType<InternalErrorRendererProps<E>>;
9
+ export declare function DefaultErrorRenderer({ error, }: InternalErrorRendererProps<any>): string;
10
+ export {};