Commit bb02c978 by Vladislav Lagunov

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

parent 36769d46
......@@ -43,7 +43,7 @@ export type CardProps<T> = {
// Опции для `createForm`
export type CreateFormOptions<T> = {
validate?(value: T): any;
validate?(value: T, instance): any;
disabled?(value: T, instance): any;
};
......@@ -51,14 +51,15 @@ export type CreateFormOptions<T> = {
export default function createForm<O extends CreateFormOptions<any>>(options: O) {
type T = O extends CreateFormOptions<infer T> ? T : never;
function bindZoom(self: React.Component<CardProps<T>>) {
function Zoom<K1 extends keyof T, C extends Any<T[K1]>>(...keys: [K1]): FieldProps<T[K1]>;
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, 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(...keys) {
function createZoom(self: React.Component<CardProps<T>>) {
function zoom(): FieldProps<T>;
function zoom<K1 extends keyof T>(...keys: [K1]): FieldProps<T[K1]>;
function zoom<K1 extends keyof T, K2 extends keyof T[K1]>(...keys: [K1, K2]): FieldProps<T[K1][K2]>;
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 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 onValueChange = (value, at: ObjectPath=[]) => dispatch({ tag: 'Change', value, at });
......@@ -70,7 +71,7 @@ export default function createForm<O extends CreateFormOptions<any>>(options: O)
onValueChange: zoomOnChange(keys, onValueChange),
};
}
return Zoom;
return zoom;
}
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)
}
// @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');
// 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;
ctx?: LocaleCtx;
type?: React.HTMLProps<HTMLInputElement>['type'];
......
......@@ -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);
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