Close Options flyout when clicking an item

This commit is contained in:
Jason Miller
2020-12-10 23:44:48 -05:00
parent 76ef6294f3
commit ce3d94297d
2 changed files with 19 additions and 6 deletions

View File

@@ -18,7 +18,7 @@ type Direction = 'left' | 'right' | 'up' | 'down';
const has = (haystack: string | string[] | undefined, needle: string) =>
Array.isArray(haystack) ? haystack.includes(needle) : haystack === needle;
interface Props extends ComponentProps<'aside'> {
interface Props extends Omit<ComponentProps<'aside'>, 'ref'> {
showing?: boolean;
direction?: Direction | Direction[];
anchor?: Anchor;
@@ -53,16 +53,24 @@ export default class Flyout extends Component<Props, State> {
this.setShowing(false);
};
hide = () => {
this.setShowing(false);
};
show = () => {
this.setShowing(true);
};
toggle = () => {
this.setShowing(!this.state.showing);
};
private setShowing = (showing?: boolean) => {
this.shown = Date.now();
if (showing) this.setState({ showing: true, hasShown: true });
else this.setState({ showing: false });
};
private toggle = () => {
this.setShowing(!this.state.showing);
};
private reposition = () => {
const menu = this.menu.current;
const wrap = this.wrap.current;

View File

@@ -1,4 +1,4 @@
import { h, Component } from 'preact';
import { h, Component, createRef } from 'preact';
import * as style from './style.css';
import 'add-css:./style.css';
@@ -65,6 +65,8 @@ export default class Options extends Component<Props, State> {
supportedEncoderMap: undefined,
};
menu = createRef<Flyout>();
constructor() {
super();
supportedEncoderMapP.then((supportedEncoderMap) =>
@@ -111,10 +113,12 @@ export default class Options extends Component<Props, State> {
private onCopyCliClick = () => {
this.props.onCopyCliClick(this.props.index);
if (this.menu.current) this.menu.current.hide();
};
private onCopyToOtherSideClick = () => {
this.props.onCopyToOtherSideClick(this.props.index);
if (this.menu.current) this.menu.current.hide();
};
render(
@@ -139,6 +143,7 @@ export default class Options extends Component<Props, State> {
<h3 class={style.optionsTitle}>
Edit
<Flyout
ref={this.menu}
class={style.menu}
direction={['up', 'left']}
anchor="right"