From 12c8267b12787f1dc265d76d6a1b6193cf0448ab Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Thu, 29 Nov 2018 14:12:33 -0500 Subject: [PATCH] update organizations structure and add unstyled sub routes and breadcrumbs --- .../Organizations/Organization.add.test.jsx | 24 +++ .../Organizations/Organization.view.test.jsx | 32 ++++ .../Organizations.list.test.jsx} | 6 +- .../DataListToolbar/DataListToolbar.jsx | 93 +++++++----- .../components/OrganizationBreadcrumb.jsx | 78 ++++++++++ .../components/OrganizationDetail.jsx | 140 ++++++++++++++++++ .../components/OrganizationEdit.jsx | 29 ++++ .../components/OrganizationListItem.jsx | 36 ++++- src/pages/Organizations/index.jsx | 16 ++ src/pages/Organizations/tabs.scss | 18 +++ src/pages/Organizations/utils.jsx | 17 +++ .../Organizations/views/Organization.add.jsx | 21 +++ .../Organizations/views/Organization.view.jsx | 120 +++++++++++++++ .../views/Organizations.list.jsx} | 17 ++- 14 files changed, 594 insertions(+), 53 deletions(-) create mode 100644 __tests__/pages/Organizations/Organization.add.test.jsx create mode 100644 __tests__/pages/Organizations/Organization.view.test.jsx rename __tests__/pages/{Organizations.jsx => Organizations/Organizations.list.test.jsx} (93%) create mode 100644 src/pages/Organizations/components/OrganizationBreadcrumb.jsx create mode 100644 src/pages/Organizations/components/OrganizationDetail.jsx create mode 100644 src/pages/Organizations/components/OrganizationEdit.jsx rename src/{ => pages/Organizations}/components/OrganizationListItem.jsx (59%) create mode 100644 src/pages/Organizations/index.jsx create mode 100644 src/pages/Organizations/tabs.scss create mode 100644 src/pages/Organizations/utils.jsx create mode 100644 src/pages/Organizations/views/Organization.add.jsx create mode 100644 src/pages/Organizations/views/Organization.view.jsx rename src/pages/{Organizations.jsx => Organizations/views/Organizations.list.jsx} (91%) diff --git a/__tests__/pages/Organizations/Organization.add.test.jsx b/__tests__/pages/Organizations/Organization.add.test.jsx new file mode 100644 index 0000000000..e45b381a7b --- /dev/null +++ b/__tests__/pages/Organizations/Organization.add.test.jsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { mount } from 'enzyme'; +import { API_ORGANIZATIONS } from '../../../src/endpoints'; +import OrganizationAdd from '../../../src/pages/Organizations/Organization.add'; + +describe('', () => { + let pageWrapper; + + beforeEach(() => { + pageWrapper = mount(); + }); + + afterEach(() => { + pageWrapper.unmount(); + }); + + test('initially renders without crashing', () => { + expect(pageWrapper.length).toBe(1); + }); + + test('API Organization endpoint is valid', () => { + expect(API_ORGANIZATIONS).toBeDefined(); + }); +}); diff --git a/__tests__/pages/Organizations/Organization.view.test.jsx b/__tests__/pages/Organizations/Organization.view.test.jsx new file mode 100644 index 0000000000..a6fccea001 --- /dev/null +++ b/__tests__/pages/Organizations/Organization.view.test.jsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { mount } from 'enzyme'; +import { API_ORGANIZATIONS } from '../../../src/endpoints'; +import OrganizationView from '../../../src/pages/Organizations/Organization.view'; + +describe('', () => { + let pageWrapper; + + beforeEach(() => { + pageWrapper = mount( + + + + ); + }); + + afterEach(() => { + pageWrapper.unmount(); + }); + + test('initially renders without crashing', () => { + expect(pageWrapper.length).toBe(1); + }); + + test('API Organization endpoint is valid', () => { + expect(API_ORGANIZATIONS).toBeDefined(); + }); +}); diff --git a/__tests__/pages/Organizations.jsx b/__tests__/pages/Organizations/Organizations.list.test.jsx similarity index 93% rename from __tests__/pages/Organizations.jsx rename to __tests__/pages/Organizations/Organizations.list.test.jsx index fdbc219cc8..4162bae9f4 100644 --- a/__tests__/pages/Organizations.jsx +++ b/__tests__/pages/Organizations/Organizations.list.test.jsx @@ -3,9 +3,9 @@ import { HashRouter } from 'react-router-dom'; import { mount } from 'enzyme'; -import api from '../../src/api'; -import { API_ORGANIZATIONS } from '../../src/endpoints'; -import Organizations from '../../src/pages/Organizations'; +import api from '../../../src/api'; +import { API_ORGANIZATIONS } from '../../../src/endpoints'; +import Organizations from '../../../src/pages/Organizations'; describe('', () => { let pageWrapper; diff --git a/src/components/DataListToolbar/DataListToolbar.jsx b/src/components/DataListToolbar/DataListToolbar.jsx index a3fbb80d92..7707dd5575 100644 --- a/src/components/DataListToolbar/DataListToolbar.jsx +++ b/src/components/DataListToolbar/DataListToolbar.jsx @@ -6,8 +6,6 @@ import { DropdownPosition, DropdownToggle, DropdownItem, - FormGroup, - KebabToggle, Level, LevelItem, TextInput, @@ -24,11 +22,14 @@ import { SortNumericUpIcon, TrashAltIcon, } from '@patternfly/react-icons'; +import { + Link +} from 'react-router-dom'; import Tooltip from '../Tooltip'; class DataListToolbar extends React.Component { - constructor(props) { + constructor (props) { super(props); const { sortedColumnKey } = this.props; @@ -72,15 +73,15 @@ class DataListToolbar extends React.Component { this.setState({ isSearchDropdownOpen: false, searchKey: key }); }; - onActionToggle = isActionDropdownOpen => { - this.setState({ isActionDropdownOpen }); - }; + // onActionToggle = isActionDropdownOpen => { + // this.setState({ isActionDropdownOpen }); + // }; - onActionSelect = ({ target }) => { - this.setState({ isActionDropdownOpen: false }); - }; + // onActionSelect = () => { + // this.setState({ isActionDropdownOpen: false }); + // }; - render() { + render () { const { up } = DropdownPosition; const { columns, @@ -90,9 +91,10 @@ class DataListToolbar extends React.Component { onSort, sortedColumnKey, sortOrder, + addUrl } = this.props; const { - isActionDropdownOpen, + // isActionDropdownOpen, isSearchDropdownOpen, isSortDropdownOpen, searchKey, @@ -107,19 +109,29 @@ class DataListToolbar extends React.Component { .filter(({ key }) => key === sortedColumnKey); const sortedColumnName = sortedColumn.name; const isSortNumeric = sortedColumn.isNumeric; + const displayedSortIcon = () => { + let icon; + if (sortOrder === 'ascending') { + icon = isSortNumeric ? () : (); + } else { + icon = isSortNumeric ? () : (); + } + return icon; + }; return (
- + + id="select-all" + /> @@ -132,10 +144,12 @@ class DataListToolbar extends React.Component { isOpen={isSearchDropdownOpen} toggle={( + onToggle={this.onSearchDropdownToggle} + > { searchColumnName } - )}> + )} + > {columns.filter(({ key }) => key !== searchKey).map(({ key, name }) => ( { name } @@ -146,12 +160,14 @@ class DataListToolbar extends React.Component { type="search" aria-label="search text input" value={searchValue} - onChange={this.handleSearchInputChange}/> + onChange={this.handleSearchInputChange} + />