Skip to content

Commit 3ee2298

Browse files
committed
fix(renderer): fixed incorrect typings
- added AnyObject type for extensible props - fixed component mapper expecting string instead of react component - fixed useFieldApi return type to accept other props that input and meta - fixed missing component type in form template - fixed SormSpy not being exported as component - added form template render props - fixed wrong return type of useFormApi hook - fixed field validator type schema definition
1 parent 296a847 commit 3ee2298

File tree

10 files changed

+47
-19
lines changed

10 files changed

+47
-19
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface AnyObject {
2+
[key: string]: any;
3+
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
export interface ExtendedMapperComponent extends Object {
2-
component: string;
1+
import { AnyObject } from "./common";
2+
3+
export interface ExtendedMapperComponent extends AnyObject {
4+
component: React.ComponentType | React.FunctionComponent | React.ElementType;
35
}
46

57
interface ComponentMapper {
6-
[key: string]: string | ExtendedMapperComponent;
8+
[key: string]: React.ComponentType | React.FunctionComponent | React.ElementType | ExtendedMapperComponent;
79
}
810

911
export default ComponentMapper;

packages/react-form-renderer/src/files/field.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { Validator } from "./validators";
22
import { ConditionDefinition } from './condition';
33
import { DataType } from "./data-types";
4+
import { AnyObject } from "./common";
45

56
export type FieldAction = [string, ...any[]];
67

7-
interface Field extends Object {
8+
interface Field extends AnyObject {
89
name: string;
910
component: string;
1011
validate?: Validator[];

packages/react-form-renderer/src/files/form-renderer.d.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import { ComponentType } from 'react';
1+
import { ComponentType, FunctionComponent } from 'react';
22
import { FormApi } from 'final-form';
33
import Schema from './schema';
44
import ComponentMapper from './component-mapper';
55
import ValidatorMapper from './validator-mapper';
66
import ActionMapper from './action-mapper';
77
import SchemaValidatorMapper from './schema-validator-mapper';
8+
import { FormTemplateRenderProps } from '../../dist/cjs';
89

910
export interface FormSubscription {
1011
[key: string]: boolean;
@@ -20,7 +21,7 @@ export interface FormRendererProps {
2021
subscription?: FormSubscription;
2122
clearedValue?: any;
2223
componentMapper: ComponentMapper;
23-
FormTemplate: ComponentType;
24+
FormTemplate: ComponentType<FormTemplateRenderProps> | FunctionComponent<FormTemplateRenderProps>;
2425
validatorMapper?: ValidatorMapper;
2526
actionMapper?: ActionMapper;
2627
schemaValidatorMapper?: SchemaValidatorMapper;
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import { ComponentType } from 'react';
12
import { FormSpyProps } from 'react-final-form';
23

3-
export default FormSpyProps;
4+
declare const FormSpy: ComponentType<FormSpyProps>;
5+
6+
export default FormSpy;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { ComponentType, ElementType } from "react";
2+
import Schema from "./schema";
3+
4+
export interface FormTemplateRenderProps {
5+
formFields: ElementType[];
6+
schema: Schema;
7+
}
8+
9+
export default FormTemplateRenderProps;

packages/react-form-renderer/src/files/renderer-context.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import { ReactNode } from 'react';
22
import { FormApi } from 'final-form';
3+
import { FormRenderProps } from 'react-final-form';
34
import ComponentMapper from './component-mapper';
45
import ValidatorMapper from './validator-mapper';
56
import ActionMapper from './action-mapper';
67
import Field from './field';
8+
import { AnyObject } from './common';
79

810
export interface FormOptions extends FormApi {
911
registerInputFile?: (name: string) => void;
1012
unRegisterInputFile?: (name: string) => void;
1113
onCancel?: (values: object, ...args: any[]) => void;
1214
onReset?: () => void;
15+
handleSubmit: () => Promise<AnyObject | undefined> | undefined;
1316
clearedValue?: any;
1417
renderForm: (fields: Field[]) => ReactNode[];
1518
}
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
import { ReactNode } from 'react';
2-
import { FieldInputProps, FieldMetaState } from 'react-final-form';
2+
import { FieldMetaState, FieldInputProps } from 'react-final-form';
3+
import { AnyObject } from './common';
34

45
export interface ValidatorType extends Object {
56
type: string;
67
message?: ReactNode;
78
}
89

9-
export interface UseFieldApiConfig extends Object {
10+
export interface UseFieldApiConfig extends AnyObject {
1011
name: string;
1112
component: string;
1213
validate?: ValidatorType[];
1314
}
1415

15-
export interface UseFieldApiProps extends Object {
16-
input: FieldInputProps<any>;
17-
meta: FieldMetaState<any>;
16+
export interface UseFieldApiProps<
17+
FieldValue,
18+
T extends HTMLElement = HTMLElement> extends AnyObject {
19+
input: FieldInputProps<FieldValue, T>;
20+
meta: FieldMetaState<FieldValue>;
1821
}
1922

20-
export default function(options: UseFieldApiConfig): UseFieldApiProps;
23+
export default function(options: UseFieldApiConfig): UseFieldApiProps<string>;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import { RendererContextValue } from './renderer-context';
1+
import { FormOptions } from './renderer-context';
22

3-
export default function(): RendererContextValue;
3+
export default function(): FormOptions;

packages/react-form-renderer/src/files/validators.d.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import { ReactNode } from 'react';
2+
import { AnyObject } from './common';
23

34
export type DataTypeValidators = "string" | "integer" | "boolean" | "number" | "float";
45

56
export type ValidatorFunction = (value: any, allValues?: object) => Promise<any> | ReactNode | undefined;
67

7-
export interface Validator extends Object {
8+
export interface ValidatorConfiguration extends AnyObject {
9+
type: string;
810
message?: string;
911
msg?: string;
1012
}
1113

12-
export interface LenghtOptions extends Validator {
14+
export type Validator = ValidatorConfiguration | ValidatorFunction;
15+
export interface LenghtOptions extends ValidatorConfiguration {
1316
'='?: string;
1417
is?: number;
1518
max?: number;
@@ -18,12 +21,12 @@ export interface LenghtOptions extends Validator {
1821
minimum?: number;
1922
}
2023

21-
export interface PatternOptions extends Validator {
24+
export interface PatternOptions extends ValidatorConfiguration {
2225
pattern?: string | RegExp;
2326
flags?: string;
2427
}
2528

26-
export interface NumericalityOptions extends Validator {
29+
export interface NumericalityOptions extends ValidatorConfiguration {
2730
even?: boolean;
2831
odd?: boolean;
2932
equalTo?: number;

0 commit comments

Comments
 (0)