Commit e2ed0fac by Vladislav Lagunov

Исправлена реакция AutoComplete на клики мыши

parent c34b92b3
...@@ -63,8 +63,8 @@ export default class AutoComplete<A=string> extends React.Component<Props<A>, St ...@@ -63,8 +63,8 @@ export default class AutoComplete<A=string> extends React.Component<Props<A>, St
// Выполнение действий из ST // Выполнение действий из ST
dispatch = (action: ST.Action<A>) => { dispatch = (action: ST.Action<A>) => {
const { ctx, openOnFocus, source } = this.props; const { ctx, openOnFocus, openOnClick, source } = this.props;
const acCtx = { ...ctx, options: { openOnFocus, source } }; const acCtx = { ...ctx, options: { openOnFocus, openOnClick, source } };
this.setState(prev => { this.setState(prev => {
const [next, command] = ST.update(acCtx, action, prev); const [next, command] = ST.update(acCtx, action, prev);
command.subscribe(ethr => ethr.tag === 'Right' && this.dispatch(ethr.value)); command.subscribe(ethr => ethr.tag === 'Right' && this.dispatch(ethr.value));
...@@ -98,9 +98,7 @@ export default class AutoComplete<A=string> extends React.Component<Props<A>, St ...@@ -98,9 +98,7 @@ export default class AutoComplete<A=string> extends React.Component<Props<A>, St
}; };
handleClick = (e?: React.SyntheticEvent) => { handleClick = (e?: React.SyntheticEvent) => {
const { openOnClick } = this.props; this.dispatch({ tag: 'Click' });
const { open } = this.state;
if (openOnClick && !open) this.dispatch({ tag: 'Open' });
}; };
handleToggleVisibility = () => { handleToggleVisibility = () => {
......
...@@ -15,6 +15,7 @@ export type Options<A> = { ...@@ -15,6 +15,7 @@ export type Options<A> = {
printItem?(x: A): string; printItem?(x: A): string;
limit?: number; limit?: number;
openOnFocus?: boolean; openOnFocus?: boolean;
openOnClick?: boolean;
}; };
...@@ -57,6 +58,7 @@ export type Action<A> = ...@@ -57,6 +58,7 @@ export type Action<A> =
| { tag: 'Blur' } | { tag: 'Blur' }
| { tag: 'Close' } | { tag: 'Close' }
| { tag: 'Open' } | { tag: 'Open' }
| { tag: 'Click' }
// State // State
...@@ -131,7 +133,9 @@ export function update<A>(ctx: Ctx<A>, action: Action<A>, state: State<A>): [Sta ...@@ -131,7 +133,9 @@ export function update<A>(ctx: Ctx<A>, action: Action<A>, state: State<A>): [Sta
return [state, cmd.of<Action<A>>({ tag: 'Query', query: { ...state.query, search: action.value } })]; return [state, cmd.of<Action<A>>({ tag: 'Query', query: { ...state.query, search: action.value } })];
} }
case 'Focus': { case 'Focus': {
if (ctx.options.openOnFocus) { if (ctx.options.openOnFocus && !ctx.options.openOnClick) {
// Не открываем попап на фокусе если указан
// `ctx.options.openOnClick`, тк он откроется на клике
return [state, cmd.of<Action<A>>({ tag: 'Query', query: state.query })]; return [state, cmd.of<Action<A>>({ tag: 'Query', query: state.query })];
} }
return [state, noop]; return [state, noop];
...@@ -146,6 +150,13 @@ export function update<A>(ctx: Ctx<A>, action: Action<A>, state: State<A>): [Sta ...@@ -146,6 +150,13 @@ export function update<A>(ctx: Ctx<A>, action: Action<A>, state: State<A>): [Sta
if (state.open) return [state, noop]; if (state.open) return [state, noop];
return [state, cmd.of<Action<A>>({ tag: 'Query', query: defaultQuery })]; return [state, cmd.of<Action<A>>({ tag: 'Query', query: defaultQuery })];
} }
case 'Click': {
if (ctx.options.openOnClick) {
if (state.open) return [{ ...state, open: false }, noop];
return [state, cmd.of<Action<A>>({ tag: 'Query', query: defaultQuery })];
}
return [state, noop];
}
} }
} }
......
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