Commit bb02c978 by Vladislav Lagunov

Переименование bindZoom -> createZoom

parent 36769d46
...@@ -43,7 +43,7 @@ export type CardProps<T> = { ...@@ -43,7 +43,7 @@ export type CardProps<T> = {
// Опции для `createForm` // Опции для `createForm`
export type CreateFormOptions<T> = { export type CreateFormOptions<T> = {
validate?(value: T): any; validate?(value: T, instance): any;
disabled?(value: T, instance): any; disabled?(value: T, instance): any;
}; };
...@@ -51,14 +51,15 @@ export type CreateFormOptions<T> = { ...@@ -51,14 +51,15 @@ export type CreateFormOptions<T> = {
export default function createForm<O extends CreateFormOptions<any>>(options: O) { export default function createForm<O extends CreateFormOptions<any>>(options: O) {
type T = O extends CreateFormOptions<infer T> ? T : never; type T = O extends CreateFormOptions<infer T> ? T : never;
function bindZoom(self: React.Component<CardProps<T>>) { function createZoom(self: React.Component<CardProps<T>>) {
function Zoom<K1 extends keyof T, C extends Any<T[K1]>>(...keys: [K1]): FieldProps<T[K1]>; function zoom(): FieldProps<T>;
function Zoom<K1 extends keyof T, K2 extends keyof T[K1], C extends Any<T[K1][K2]>>(...keys: [K1, K2]): FieldProps<T[K1][K2]>; function zoom<K1 extends keyof T>(...keys: [K1]): FieldProps<T[K1]>;
function Zoom<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2], C extends Any<T[K1][K2][K3]>>(...keys: [K1, K2, K3]): FieldProps<T[K1][K2][K3]>; function zoom<K1 extends keyof T, K2 extends keyof T[K1]>(...keys: [K1, K2]): FieldProps<T[K1][K2]>;
function Zoom(...keys) { function zoom<K1 extends keyof T, K2 extends keyof T[K1], K3 extends keyof T[K1][K2]>(...keys: [K1, K2, K3]): FieldProps<T[K1][K2][K3]>;
function zoom(...keys) {
const { dispatch, ctx } = self.props; const { dispatch, ctx } = self.props;
const value = self.props.model.modified || self.props.model.initial; const value = self.props.model.modified || self.props.model.initial;
const error = options.validate ? options.validate(value) : {}; const error = options.validate ? options.validate(value, self) : {};
const disabled = options.disabled ? options.disabled(value, self) : {}; const disabled = options.disabled ? options.disabled(value, self) : {};
const onValueChange = (value, at: ObjectPath=[]) => dispatch({ tag: 'Change', value, at }); const onValueChange = (value, at: ObjectPath=[]) => dispatch({ tag: 'Change', value, at });
...@@ -70,7 +71,7 @@ export default function createForm<O extends CreateFormOptions<any>>(options: O) ...@@ -70,7 +71,7 @@ export default function createForm<O extends CreateFormOptions<any>>(options: O)
onValueChange: zoomOnChange(keys, onValueChange), onValueChange: zoomOnChange(keys, onValueChange),
}; };
} }
return Zoom; return zoom;
} }
function set<M extends CardProps<T>['model']>(model: M, form: T): M { function set<M extends CardProps<T>['model']>(model: M, form: T): M {
...@@ -88,7 +89,7 @@ export default function createForm<O extends CreateFormOptions<any>>(options: O) ...@@ -88,7 +89,7 @@ export default function createForm<O extends CreateFormOptions<any>>(options: O)
} }
// @ts-ignore // @ts-ignore
return { ...options, bindZoom, set, get, modify } as { bindZoom: typeof bindZoom, set: typeof set, get: typeof get, modify: typeof modify } & O; return { ...options, createZoom, set, get, modify } as { createZoom: typeof createZoom, set: typeof set, get: typeof get, modify: typeof modify } & O;
} }
......
...@@ -10,7 +10,7 @@ const eyeSlash = require('./eye-slash.svg'); ...@@ -10,7 +10,7 @@ const eyeSlash = require('./eye-slash.svg');
// Props // Props
export type Props = StandardProps<React.HTMLProps<HTMLInputElement>, ClassKey, 'ref'|'disabled'> & FieldProps<string> & { export type Props = StandardProps<React.HTMLProps<HTMLInputElement>, ClassKey, 'ref'|'disabled'|'value'> & FieldProps<string> & {
__: Gettext; __: Gettext;
ctx?: LocaleCtx; ctx?: LocaleCtx;
type?: React.HTMLProps<HTMLInputElement>['type']; type?: React.HTMLProps<HTMLInputElement>['type'];
......
...@@ -7,4 +7,5 @@ export default function findMap<A, B>(xs: A[], f: (a: A) => B|undefined): B|unde ...@@ -7,4 +7,5 @@ export default function findMap<A, B>(xs: A[], f: (a: A) => B|undefined): B|unde
const b_or_undefined = f(x); const b_or_undefined = f(x);
if (b_or_undefined !== undefined) return b_or_undefined; if (b_or_undefined !== undefined) return b_or_undefined;
} }
return;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment