From 4b1acb8f45d8c8e000228510baaa834d902bcfe2 Mon Sep 17 00:00:00 2001 From: Simon Larsen Date: Sun, 12 Jun 2022 14:04:21 +0100 Subject: [PATCH 1/7] refactor topbar buttons --- .../src/Components/Basic/Button/Button.css | 0 .../src/Components/Basic/Button/Button.tsx | 48 +++++++-------- .../Basic/Button/DropdownButton.tsx | 37 ------------ .../Components/Basic/Button/DropdownItem.tsx | 23 -------- .../Components/Basic/Button/IconButton.tsx | 29 ++++++++++ .../MenuButton.scss} | 0 .../Basic/Button/MenuButton/MenuButton.tsx | 34 +++++++++++ .../Basic/Button/MenuButton/MenuItem.tsx | 30 ++++++++++ .../Basic/Button/MenuButton/MenuLegend.tsx | 17 ++++++ .../Button}/TopbarMenu/MenuItem.scss | 0 .../Button}/TopbarMenu/MenuItem.tsx | 0 .../Button}/TopbarMenu/MenuLink.scss | 0 .../Button}/TopbarMenu/MenuLinkItem.tsx | 0 .../Button}/TopbarMenu/TopbarMenu.tsx | 0 .../Button}/TopbarMenuButton/MenuButton.scss | 0 .../Button}/TopbarMenuButton/MenuButton.tsx | 0 CommonUI/src/Components/Basic/Icon/Icon.tsx | 6 +- .../TopBar}/UserProfile/UserInfo.tsx | 0 Dashboard/src/Components/CreateButton.tsx | 58 ------------------- Dashboard/src/Components/HelpButton.tsx | 53 ----------------- .../src/Components/Monitor/MonitorTable.tsx | 30 +++------- .../ProjectPicker/CurrentProject.tsx | 2 +- .../src/Components/TopBar/CreateButton.tsx | 20 +++++++ .../src/Components/TopBar/HelpButton.tsx | 21 +++++++ .../Components/TopBar/NotificationButton.tsx | 21 +++++++ Dashboard/src/Components/TopBar/TopBar.tsx | 11 ++-- .../Components/TopBar/UserProfileButton.tsx | 17 ++++++ .../UserProfile/UserProfileButton.tsx | 41 ------------- 28 files changed, 230 insertions(+), 268 deletions(-) delete mode 100644 CommonUI/src/Components/Basic/Button/Button.css delete mode 100644 CommonUI/src/Components/Basic/Button/DropdownButton.tsx delete mode 100644 CommonUI/src/Components/Basic/Button/DropdownItem.tsx create mode 100644 CommonUI/src/Components/Basic/Button/IconButton.tsx rename CommonUI/src/Components/Basic/Button/{DropdownButton.scss => MenuButton/MenuButton.scss} (100%) create mode 100644 CommonUI/src/Components/Basic/Button/MenuButton/MenuButton.tsx create mode 100644 CommonUI/src/Components/Basic/Button/MenuButton/MenuItem.tsx create mode 100644 CommonUI/src/Components/Basic/Button/MenuButton/MenuLegend.tsx rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenu/MenuItem.scss (100%) rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenu/MenuItem.tsx (100%) rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenu/MenuLink.scss (100%) rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenu/MenuLinkItem.tsx (100%) rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenu/TopbarMenu.tsx (100%) rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenuButton/MenuButton.scss (100%) rename CommonUI/src/Components/{Dashboard/TopBar => Basic/Button}/TopbarMenuButton/MenuButton.tsx (100%) rename {Dashboard/src/Components => CommonUI/src/Components/Dashboard/TopBar}/UserProfile/UserInfo.tsx (100%) delete mode 100644 Dashboard/src/Components/CreateButton.tsx delete mode 100644 Dashboard/src/Components/HelpButton.tsx create mode 100644 Dashboard/src/Components/TopBar/CreateButton.tsx create mode 100644 Dashboard/src/Components/TopBar/HelpButton.tsx create mode 100644 Dashboard/src/Components/TopBar/NotificationButton.tsx create mode 100644 Dashboard/src/Components/TopBar/UserProfileButton.tsx delete mode 100644 Dashboard/src/Components/UserProfile/UserProfileButton.tsx diff --git a/CommonUI/src/Components/Basic/Button/Button.css b/CommonUI/src/Components/Basic/Button/Button.css deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/CommonUI/src/Components/Basic/Button/Button.tsx b/CommonUI/src/Components/Basic/Button/Button.tsx index 50dd5672d6..e36477bba3 100644 --- a/CommonUI/src/Components/Basic/Button/Button.tsx +++ b/CommonUI/src/Components/Basic/Button/Button.tsx @@ -7,23 +7,24 @@ export interface ComponentProps { title: string; onClick?: MouseOnClick; disabled?: boolean; - id: string; + id?: string; shortcutKey?: ShortcutKey; type?: ButtonType; isLoading?: boolean; } -const Button: FunctionComponent = ( - props: ComponentProps -): ReactElement => { - // props validation - if (!props.type) { - props.type = ButtonType.Button; - } - +const Button: FunctionComponent = ({ + title, + onClick, + disabled, + id, + shortcutKey, + type = ButtonType.Button, + isLoading = false, +}: ComponentProps): ReactElement => { useEffect(() => { // componentDidMount - if (props.shortcutKey) { + if (shortcutKey) { window.addEventListener('keydown', (e: KeyboardEventProp) => { return handleKeyboard(e); }); @@ -31,7 +32,7 @@ const Button: FunctionComponent = ( // componentDidUnmount return () => { - if (props.shortcutKey) { + if (shortcutKey) { window.removeEventListener( 'keydown', (e: KeyboardEventProp) => { @@ -46,12 +47,12 @@ const Button: FunctionComponent = ( if ( event.target instanceof HTMLBodyElement && event.key && - props.shortcutKey + shortcutKey ) { switch (event.key) { - case props.shortcutKey.toUpperCase(): - case props.shortcutKey.toLowerCase(): - props.onClick && props.onClick(); + case shortcutKey.toUpperCase(): + case shortcutKey.toLowerCase(): + onClick && onClick(); return; default: return; @@ -60,28 +61,23 @@ const Button: FunctionComponent = ( }; return ( - ); }; diff --git a/CommonUI/src/Components/Basic/Button/DropdownButton.tsx b/CommonUI/src/Components/Basic/Button/DropdownButton.tsx deleted file mode 100644 index e97199efde..0000000000 --- a/CommonUI/src/Components/Basic/Button/DropdownButton.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React, { - MouseEventHandler, - ReactElement, - FunctionComponent, -} from 'react'; -import { faChevronDown } from '@fortawesome/free-solid-svg-icons'; -import './DropdownButton.scss'; -import { MenuOutlineButton } from '../../Dashboard/TopBar/TopbarMenuButton/MenuButton'; - -export interface ComponentProps { - showDropdown?: boolean; - onClick?: MouseEventHandler; - children?: Array; - title: string; -} - -const DropdownButton: FunctionComponent = ({ - onClick, - title, - children, - showDropdown, -}: ComponentProps): ReactElement => { - return ( -
- - {showDropdown && ( -
{children}
- )} -
- ); -}; - -export default DropdownButton; diff --git a/CommonUI/src/Components/Basic/Button/DropdownItem.tsx b/CommonUI/src/Components/Basic/Button/DropdownItem.tsx deleted file mode 100644 index fdff373480..0000000000 --- a/CommonUI/src/Components/Basic/Button/DropdownItem.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React, { - FunctionComponent, - MouseEventHandler, - ReactElement, -} from 'react'; - -export interface ComponentProps { - title: string; - action?: MouseEventHandler; -} - -const DropdownItem: FunctionComponent = ({ - action, - title, -}: ComponentProps): ReactElement => { - return ( -
- {title} -
- ); -}; - -export default DropdownItem; diff --git a/CommonUI/src/Components/Basic/Button/IconButton.tsx b/CommonUI/src/Components/Basic/Button/IconButton.tsx new file mode 100644 index 0000000000..9648e4d7ff --- /dev/null +++ b/CommonUI/src/Components/Basic/Button/IconButton.tsx @@ -0,0 +1,29 @@ +import React, { + ReactElement, + MouseEventHandler, + FunctionComponent, +} from 'react'; +import Icon, { IconProp } from '../Icon/Icon'; + +export interface ComponentProps { + icon?: IconProp; + onClick?: MouseEventHandler; + children: ReactElement | Array; +} + +const IconButton: FunctionComponent = ({ + icon, + onClick, + children, +}: ComponentProps): ReactElement => { + return ( +
+
+ {icon && } +
+
{children}
+
+ ); +}; + +export default IconButton; diff --git a/CommonUI/src/Components/Basic/Button/DropdownButton.scss b/CommonUI/src/Components/Basic/Button/MenuButton/MenuButton.scss similarity index 100% rename from CommonUI/src/Components/Basic/Button/DropdownButton.scss rename to CommonUI/src/Components/Basic/Button/MenuButton/MenuButton.scss diff --git a/CommonUI/src/Components/Basic/Button/MenuButton/MenuButton.tsx b/CommonUI/src/Components/Basic/Button/MenuButton/MenuButton.tsx new file mode 100644 index 0000000000..dece380b82 --- /dev/null +++ b/CommonUI/src/Components/Basic/Button/MenuButton/MenuButton.tsx @@ -0,0 +1,34 @@ +import React, { ReactElement, FunctionComponent } from 'react'; +import './MenuButton.scss'; +import Button from '../Button'; +import useComponentOutsideClick from '../../../../Types/UseComponentOutsideClick'; + +export interface ComponentProps { + children?: ReactElement | Array; + title: string; +} + +const MenuButton: FunctionComponent = ({ + title, + children, +}: ComponentProps): ReactElement => { + const { ref, isComponentVisible, setIsComponentVisible } = + useComponentOutsideClick(false); + + return ( +
+
+ ); +}; + +export default MenuButton; diff --git a/CommonUI/src/Components/Basic/Button/MenuButton/MenuItem.tsx b/CommonUI/src/Components/Basic/Button/MenuButton/MenuItem.tsx new file mode 100644 index 0000000000..78e09fd0a9 --- /dev/null +++ b/CommonUI/src/Components/Basic/Button/MenuButton/MenuItem.tsx @@ -0,0 +1,30 @@ +import Route from 'Common/Types/API/Route'; +import React, { + FunctionComponent, + MouseEventHandler, + ReactElement, +} from 'react'; +import Navigation from '../../../../Utils/Navigation'; + +export interface ComponentProps { + title: string; + onClick?: MouseEventHandler; + route?: Route; +} + +const MenuItem: FunctionComponent = ({ + onClick, + title, + route +}: ComponentProps): ReactElement => { + return ( +
{ + Navigation.navigate(route); + } : onClick + }> + {title} +
+ ); +}; + +export default MenuItem; diff --git a/CommonUI/src/Components/Basic/Button/MenuButton/MenuLegend.tsx b/CommonUI/src/Components/Basic/Button/MenuButton/MenuLegend.tsx new file mode 100644 index 0000000000..35946af2ea --- /dev/null +++ b/CommonUI/src/Components/Basic/Button/MenuButton/MenuLegend.tsx @@ -0,0 +1,17 @@ +import React, { FunctionComponent, ReactElement } from 'react'; + +export interface ComponentProps { + title: string; +} + +const MenuLegend: FunctionComponent = ({ + title, +}: ComponentProps): ReactElement => { + return ( +
+

{title}

+
+ ); +}; + +export default MenuLegend; diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuItem.scss b/CommonUI/src/Components/Basic/Button/TopbarMenu/MenuItem.scss similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuItem.scss rename to CommonUI/src/Components/Basic/Button/TopbarMenu/MenuItem.scss diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuItem.tsx b/CommonUI/src/Components/Basic/Button/TopbarMenu/MenuItem.tsx similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuItem.tsx rename to CommonUI/src/Components/Basic/Button/TopbarMenu/MenuItem.tsx diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuLink.scss b/CommonUI/src/Components/Basic/Button/TopbarMenu/MenuLink.scss similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuLink.scss rename to CommonUI/src/Components/Basic/Button/TopbarMenu/MenuLink.scss diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuLinkItem.tsx b/CommonUI/src/Components/Basic/Button/TopbarMenu/MenuLinkItem.tsx similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuLinkItem.tsx rename to CommonUI/src/Components/Basic/Button/TopbarMenu/MenuLinkItem.tsx diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/TopbarMenu.tsx b/CommonUI/src/Components/Basic/Button/TopbarMenu/TopbarMenu.tsx similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/TopbarMenu.tsx rename to CommonUI/src/Components/Basic/Button/TopbarMenu/TopbarMenu.tsx diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenuButton/MenuButton.scss b/CommonUI/src/Components/Basic/Button/TopbarMenuButton/MenuButton.scss similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenuButton/MenuButton.scss rename to CommonUI/src/Components/Basic/Button/TopbarMenuButton/MenuButton.scss diff --git a/CommonUI/src/Components/Dashboard/TopBar/TopbarMenuButton/MenuButton.tsx b/CommonUI/src/Components/Basic/Button/TopbarMenuButton/MenuButton.tsx similarity index 100% rename from CommonUI/src/Components/Dashboard/TopBar/TopbarMenuButton/MenuButton.tsx rename to CommonUI/src/Components/Basic/Button/TopbarMenuButton/MenuButton.tsx diff --git a/CommonUI/src/Components/Basic/Icon/Icon.tsx b/CommonUI/src/Components/Basic/Icon/Icon.tsx index e8e382399e..525acc1292 100644 --- a/CommonUI/src/Components/Basic/Icon/Icon.tsx +++ b/CommonUI/src/Components/Basic/Icon/Icon.tsx @@ -11,11 +11,15 @@ export enum SizeProp { export enum IconProp { File = 'file', + User = 'user', + Settings = 'cog', + Notification = 'bell', + Help = 'question', } export interface ComponentProps { icon: IconProp; - size: SizeProp; + size?: SizeProp; } const Icon: FunctionComponent = ({ diff --git a/Dashboard/src/Components/UserProfile/UserInfo.tsx b/CommonUI/src/Components/Dashboard/TopBar/UserProfile/UserInfo.tsx similarity index 100% rename from Dashboard/src/Components/UserProfile/UserInfo.tsx rename to CommonUI/src/Components/Dashboard/TopBar/UserProfile/UserInfo.tsx diff --git a/Dashboard/src/Components/CreateButton.tsx b/Dashboard/src/Components/CreateButton.tsx deleted file mode 100644 index 6c656ee356..0000000000 --- a/Dashboard/src/Components/CreateButton.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { - ReactElement, - FunctionComponent, - useState, - MouseEventHandler, -} from 'react'; -import { MenuOutlineButton } from 'CommonUI/src/Components/Dashboard/TopBar/TopbarMenuButton/MenuButton'; -import TopbarMenu from 'CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/TopbarMenu'; -import MenuItem from 'CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuItem'; -import { - faChevronDown, - faFileInvoice, - faRecycle, - faLink, -} from '@fortawesome/free-solid-svg-icons'; - -const CreateButton: FunctionComponent = (): ReactElement => { - const [showList, setShowList] = useState(false); - const toggle: Function = () => { - return setShowList(!showList); - }; - - return ( - , - , - , - ]} - /> - } - /> - ); -}; - -export default CreateButton; diff --git a/Dashboard/src/Components/HelpButton.tsx b/Dashboard/src/Components/HelpButton.tsx deleted file mode 100644 index 4f693a18d6..0000000000 --- a/Dashboard/src/Components/HelpButton.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React, { - FunctionComponent, - MouseEventHandler, - ReactElement, - useState, -} from 'react'; - -import MenuButton from 'CommonUI/src/Components/Dashboard/TopBar/TopbarMenuButton/MenuButton'; -import MenuLinkItem from 'CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/MenuLinkItem'; -import { faQuestionCircle } from '@fortawesome/free-solid-svg-icons'; -import TopbarMenu from 'CommonUI/src/Components/Dashboard/TopBar/TopbarMenu/TopbarMenu'; - -const HelpButton: FunctionComponent = (): ReactElement => { - const [showList, setShowList] = useState(false); - const toggle: Function = () => { - return setShowList(!showList); - }; - - return ( - - , - , - , - ]} - /> -
- ]} - /> - - } - /> - ); -}; - -export default HelpButton; diff --git a/Dashboard/src/Components/Monitor/MonitorTable.tsx b/Dashboard/src/Components/Monitor/MonitorTable.tsx index 9285063aa0..82b962589c 100644 --- a/Dashboard/src/Components/Monitor/MonitorTable.tsx +++ b/Dashboard/src/Components/Monitor/MonitorTable.tsx @@ -1,24 +1,15 @@ -import React, { - FunctionComponent, - MouseEventHandler, - ReactElement, - useState, -} from 'react'; +import React, { FunctionComponent, ReactElement } from 'react'; import Container from 'CommonUI/src/Components/Dashboard/Container/Container/Container'; import Pagination from 'CommonUI/src/Components/Dashboard/Container/Container/Pagination'; import Table from 'CommonUI/src/Components/Dashboard/Table/Table'; import Button from 'CommonUI/src/Components/Basic/Button/Button'; import ButtonTypes from 'CommonUI/src/Components/Basic/Button/ButtonTypes'; -import DropdownButton from 'CommonUI/src/Components/Basic/Button/DropdownButton'; -import DropdownItem from 'CommonUI/src/Components/Basic/Button/DropdownItem'; +import MenuButton from 'CommonUI/src/Components/Basic/Button/MenuButton/MenuButton'; +import MenuItem from 'CommonUI/src/Components/Basic/Button/MenuButton/MenuItem'; import ShortcutKey from 'CommonUI/src/Components/Basic/ShortcutKey/ShortcutKey'; import { ColumnSort } from 'CommonUI/src/Components/Dashboard/Table/Type/Table'; const MonitorTable: FunctionComponent = (): ReactElement => { - const [showList, setShowList] = useState(false); - const toggleDropdown: Function = (): void => { - setShowList(!showList); - }; return ( { } headerButtons={[ - - - - - , + + + + + ,