[ARVADOS-WORKBENCH2] updated: 1.1.4-76-ga0bace1

Git user git at public.curoverse.com
Fri Jun 15 04:53:18 EDT 2018


Summary of changes:
 src/components/popover/popover.test.tsx | 69 +++++++++++++++++++++++++++++++++
 src/components/popover/popover.tsx      | 22 +++++++++--
 2 files changed, 88 insertions(+), 3 deletions(-)
 create mode 100644 src/components/popover/popover.test.tsx

       via  a0bace185804d0d263249d65af442bed2890ca7b (commit)
       via  ce3be10391676729b35aafcb8d525daf5c74ceea (commit)
      from  e25469d58a038391fa16184da4f7078a0eae805a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit a0bace185804d0d263249d65af442bed2890ca7b
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Fri Jun 15 10:53:05 2018 +0200

    Create popover tests
    
    Feature #13601
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/components/popover/popover.test.tsx b/src/components/popover/popover.test.tsx
new file mode 100644
index 0000000..fa24c0c
--- /dev/null
+++ b/src/components/popover/popover.test.tsx
@@ -0,0 +1,69 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from "react";
+import { mount, configure } from "enzyme";
+import * as Adapter from "enzyme-adapter-react-16";
+
+import Popover, { DefaultTrigger } from "./popover";
+import Button, { ButtonProps } from "@material-ui/core/Button";
+
+configure({ adapter: new Adapter() });
+
+describe("<Popover />", () => {
+    it("opens on default trigger click", () => {
+        const popover = mount(<Popover />);
+        popover.find(DefaultTrigger).simulate("click");
+        expect(popover.state().anchorEl).toBeDefined();
+    });
+
+    it("renders custom trigger", () => {
+        const popover = mount(<Popover triggerComponent={CustomTrigger} />);
+        expect(popover.find(Button).text()).toBe("Open popover");
+    });
+
+    it("opens on custom trigger click", () => {
+        const popover = mount(<Popover triggerComponent={CustomTrigger} />);
+        popover.find(CustomTrigger).simulate("click");
+        expect(popover.state().anchorEl).toBeDefined();
+    });
+
+    it("renders children when opened", () => {
+        const popover = mount(
+            <Popover>
+                <CustomTrigger />
+            </Popover>
+        );
+        popover.find(DefaultTrigger).simulate("click");
+        expect(popover.find(CustomTrigger)).toHaveLength(1);
+    });
+    
+    it("does not close if closeOnContentClick is not set", () => {
+        const popover = mount(
+            <Popover>
+                <CustomTrigger />
+            </Popover>
+        );
+        popover.find(DefaultTrigger).simulate("click");
+        popover.find(CustomTrigger).simulate("click");
+        expect(popover.state().anchorEl).toBeDefined();
+    });
+    it("closes on content click if closeOnContentClick is set", () => {
+        const popover = mount(
+            <Popover closeOnContentClick>
+                <CustomTrigger />
+            </Popover>
+        );
+        popover.find(DefaultTrigger).simulate("click");
+        popover.find(CustomTrigger).simulate("click");
+        expect(popover.state().anchorEl).toBeUndefined();
+    });
+
+});
+
+const CustomTrigger: React.SFC<ButtonProps> = (props) => (
+    <Button {...props}>
+        Open popover
+    </Button>
+);
\ No newline at end of file

commit ce3be10391676729b35aafcb8d525daf5c74ceea
Author: Michal Klobukowski <michal.klobukowski at contractors.roche.com>
Date:   Fri Jun 15 10:37:33 2018 +0200

    Add popover defaults, allow popover to close on self click
    
    Feature #13601
    
    Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski at contractors.roche.com>

diff --git a/src/components/popover/popover.tsx b/src/components/popover/popover.tsx
index b7e082b..c8d4033 100644
--- a/src/components/popover/popover.tsx
+++ b/src/components/popover/popover.tsx
@@ -6,9 +6,11 @@ import * as React from 'react';
 import { Popover as MaterialPopover } from '@material-ui/core';
 
 import { PopoverOrigin } from '@material-ui/core/Popover';
+import IconButton, { IconButtonProps } from '@material-ui/core/IconButton';
 
 export interface PopoverProps {
-    triggerComponent: React.ComponentType<{ onClick: (event: React.MouseEvent<any>) => void }>;
+    triggerComponent?: React.ComponentType<{ onClick: (event: React.MouseEvent<any>) => void }>;
+    closeOnContentClick?: boolean;
 }
 
 
@@ -24,13 +26,15 @@ class Popover extends React.Component<PopoverProps> {
     };
 
     render() {
+        const Trigger = this.props.triggerComponent || DefaultTrigger;
         return (
             <>
-                <this.props.triggerComponent onClick={this.handleClick} />
+                <Trigger onClick={this.handleTriggerClick} />
                 <MaterialPopover
                     anchorEl={this.state.anchorEl}
                     open={Boolean(this.state.anchorEl)}
                     onClose={this.handleClose}
+                    onClick={this.handleSelfClick}
                     transformOrigin={this.transformOrigin}
                     anchorOrigin={this.transformOrigin}
                 >
@@ -44,10 +48,22 @@ class Popover extends React.Component<PopoverProps> {
         this.setState({ anchorEl: undefined });
     }
 
-    handleClick = (event: React.MouseEvent<any>) => {
+    handleTriggerClick = (event: React.MouseEvent<any>) => {
         this.setState({ anchorEl: event.currentTarget });
     }
 
+    handleSelfClick = () => {
+        if (this.props.closeOnContentClick) {
+            this.handleClose();
+        }
+    }
+
 }
 
+export const DefaultTrigger: React.SFC<IconButtonProps> = (props) => (
+    <IconButton {...props}>
+        <i className="fas" />
+    </IconButton>
+);
+
 export default Popover;

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list