From 250d01c990a4f47bfdaa31ef9d3d7b79e602cb2c Mon Sep 17 00:00:00 2001 From: Pawel Kowalczyk Date: Mon, 18 Jun 2018 10:12:44 +0200 Subject: [PATCH] expand tree component after click on ARROW Feature #13618 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- .../project-tree/project-tree.test.tsx | 8 ++-- src/components/tree/tree.test.tsx | 10 ++-- src/components/tree/tree.tsx | 47 ++++++++++--------- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/components/project-tree/project-tree.test.tsx b/src/components/project-tree/project-tree.test.tsx index e88e55ada3..932a29cc16 100644 --- a/src/components/project-tree/project-tree.test.tsx +++ b/src/components/project-tree/project-tree.test.tsx @@ -34,7 +34,7 @@ describe("ProjectTree component", () => { }; const wrapper = mount( { }} />); - expect(wrapper.find(ListItemIcon).length).toEqual(1); + expect(wrapper.find(ListItemIcon)).toHaveLength(1); }); it("should render 2 ListItemIcons", () => { @@ -70,7 +70,7 @@ describe("ProjectTree component", () => { ]; const wrapper = mount( { }} />); - expect(wrapper.find(ListItemIcon).length).toEqual(2); + expect(wrapper.find(ListItemIcon)).toHaveLength(2); }); it("should render Collapse", () => { @@ -108,7 +108,7 @@ describe("ProjectTree component", () => { ]; const wrapper = mount( { }} />); - expect(wrapper.find(Collapse).length).toEqual(1); + expect(wrapper.find(Collapse)).toHaveLength(1); }); it("should render CircularProgress", () => { @@ -128,6 +128,6 @@ describe("ProjectTree component", () => { }; const wrapper = mount( { }} />); - expect(wrapper.find(CircularProgress).length).toEqual(1); + expect(wrapper.find(CircularProgress)).toHaveLength(1); }); }); diff --git a/src/components/tree/tree.test.tsx b/src/components/tree/tree.test.tsx index 0fab2f37d7..bb0499f8d1 100644 --- a/src/components/tree/tree.test.tsx +++ b/src/components/tree/tree.test.tsx @@ -13,7 +13,7 @@ import Tree, {TreeItem} from './tree'; import { Project } from '../../models/project'; Enzyme.configure({ adapter: new Adapter() }); -describe("ProjectTree component", () => { +describe("Tree component", () => { it("should render ListItem", () => { const project: TreeItem = { @@ -28,10 +28,10 @@ describe("ProjectTree component", () => { id: "3", open: true, active: true, - loading: true, + status: 1, }; const wrapper = mount(
} toggleItem={() => { }} items={[project]}/>) - expect(wrapper.find(ListItem).length).toEqual(1); + expect(wrapper.find(ListItem)).toHaveLength(1); }); it("should render arrow", () => { @@ -47,9 +47,9 @@ describe("ProjectTree component", () => { id: "3", open: true, active: true, - loading: true, + status: 1, }; const wrapper = mount(
} toggleItem={() => { }} items={[project]}/>) - expect(wrapper.find('i').length).toEqual(1); + expect(wrapper.find('i')).toHaveLength(1); }); }); diff --git a/src/components/tree/tree.tsx b/src/components/tree/tree.tsx index 936c5965e6..21c4bc7342 100644 --- a/src/components/tree/tree.tsx +++ b/src/components/tree/tree.tsx @@ -25,7 +25,7 @@ const styles: StyleRulesCallback = (theme: Theme) => ({ inactiveArrow: { position: 'absolute', }, - arrowTransition: { + arrowTransition: { transition: 'all 0.1s ease', }, arrowRotate: { @@ -38,7 +38,7 @@ const styles: StyleRulesCallback = (theme: Theme) => ({ loader: { position: 'absolute', transform: 'translate(0px)', - top: '3px' + top: '3px' } }); @@ -66,30 +66,35 @@ interface TreeProps { } class Tree extends React.Component & WithStyles, {}> { - renderArrow (status: TreeItemStatus, arrowClass: string, open: boolean){ - return + renderArrow(status: TreeItemStatus, arrowClass: string, open: boolean, id: string) { + return this.props.toggleItem(id, status)} + className={` + ${arrowClass} + ${status === TreeItemStatus.Pending ? this.props.classes.arrowVisibility : ''} + ${open ? `fas fa-caret-down ${this.props.classes.arrowTransition}` : `fas fa-caret-down ${this.props.classes.arrowRotate}`}`} /> } render(): ReactElement { const level = this.props.level ? this.props.level : 0; - const {classes, render, toggleItem, items} = this.props; - const {list, inactiveArrow, activeArrow, loader} = classes; + const { classes, render, toggleItem, items } = this.props; + const { list, inactiveArrow, activeArrow, loader } = classes; return {items && items.map((it: TreeItem, idx: number) => -
- toggleItem(it.id, it.status)} className={list} style={{paddingLeft: (level + 1) * 20}}> - {it.status === TreeItemStatus.Pending ? : null} - {it.toggled && it.items && it.items.length === 0 ? null : this.renderArrow(it.status, it.active ? activeArrow : inactiveArrow, it.open)} - {render(it, level)} - - {it.items && it.items.length > 0 && - - - } -
)} +
+ + {it.status === TreeItemStatus.Pending ? : null} + {it.toggled && it.items && it.items.length === 0 ? null : this.renderArrow(it.status, it.active ? activeArrow : inactiveArrow, it.open, it.id)} + {render(it, level)} + + {it.items && it.items.length > 0 && + + + } +
)}
} } -- 2.30.2