From 786407b971c31010c2df422c3399872b45b9f994 Mon Sep 17 00:00:00 2001 From: Oscar Reyes Date: Mon, 21 Aug 2023 10:46:40 -0600 Subject: [PATCH 1/6] feature(frontend): Adding a way to customize Tracetest header --- web/src/BaseApp.tsx | 9 +++- web/src/components/Header/Header.styled.tsx | 11 ++++- web/src/components/Header/Header.tsx | 8 +--- web/src/components/Header/index.ts | 5 +++ web/src/components/Layout/Layout.tsx | 19 +++++---- .../Layout/__tests__/Layout.test.tsx | 6 +-- .../NoTracingPopover.styled.ts | 2 +- web/src/components/Router/Router.tsx | 41 +++++++++++-------- .../RunDetailLayout/HeaderRight.tsx | 2 + web/src/components/TestHeader/TestHeader.tsx | 2 + .../TestSuiteHeader/TestSuiteHeader.tsx | 2 + .../TestSuiteRunLayout/TestSuiteRunLayout.tsx | 11 ++--- .../AutomatedTestRun/AutomatedTestRun.tsx | 13 +++--- web/src/pages/Home/Home.styled.tsx | 3 ++ web/src/pages/Home/Home.tsx | 21 ++++------ web/src/pages/Home/TestsList.tsx | 2 + web/src/pages/RunDetail/RunDetail.tsx | 25 +++++------ web/src/pages/Settings/Settings.tsx | 17 ++++---- web/src/pages/Test/Test.tsx | 9 ++-- web/src/pages/TestSuite/TestSuite.tsx | 9 ++-- .../pages/TestSuites/TestSuites.styled.tsx | 3 ++ web/src/pages/TestSuites/TestSuites.tsx | 21 ++++------ web/src/pages/TestSuites/TestSuitesList.tsx | 2 + web/src/pages/VariableSet/VariableSet.tsx | 7 +--- 24 files changed, 128 insertions(+), 122 deletions(-) diff --git a/web/src/BaseApp.tsx b/web/src/BaseApp.tsx index f7340fe151..1d0d7412c3 100644 --- a/web/src/BaseApp.tsx +++ b/web/src/BaseApp.tsx @@ -1,9 +1,14 @@ import Router from 'components/Router'; import SettingsValuesProvider from 'providers/SettingsValues'; +import {TCustomHeader} from 'components/Layout/Layout'; -const BaseApp = () => ( +interface IProps { + customHeader?: TCustomHeader; +} + +const BaseApp = ({customHeader}: IProps) => ( - + ); diff --git a/web/src/components/Header/Header.styled.tsx b/web/src/components/Header/Header.styled.tsx index 91a135cea0..2120909f41 100644 --- a/web/src/components/Header/Header.styled.tsx +++ b/web/src/components/Header/Header.styled.tsx @@ -12,6 +12,7 @@ export const Header = styled(Layout.Header)` line-height: 48px; padding: 0; padding-left: 24px; + padding-right: 24px; .ant-dropdown-trigger { display: block; @@ -29,13 +30,12 @@ export const Header = styled(Layout.Header)` export const Logo = styled.img` height: 24px; - margin-right: 24px; + margin-right: 12px; `; export const QuestionIcon = styled(QuestionCircleOutlined)` color: ${({theme}) => theme.color.primary}; font-size: ${({theme}) => theme.size.lg}; - margin: 0 24px; `; export const AppVersion = styled(Typography.Text)` @@ -44,3 +44,10 @@ export const AppVersion = styled(Typography.Text)` font-size: ${({theme}) => theme.size.sm}; } `; + +export const MenuContainer = styled.div` + display: flex; + gap: 12px; + flex-direction: row; + align-items: center; +`; diff --git a/web/src/components/Header/Header.tsx b/web/src/components/Header/Header.tsx index ded0ad305a..dae5ad9c8a 100644 --- a/web/src/components/Header/Header.tsx +++ b/web/src/components/Header/Header.tsx @@ -1,7 +1,4 @@ -import {Space} from 'antd'; - import Logo from 'assets/Logo.svg'; -import VariableSetSelector from 'components/VariableSetSelector'; import Link from 'components/Link'; import NoTracingPopover from 'components/NoTracingPopover'; import * as S from './Header.styled'; @@ -22,11 +19,10 @@ const Header = ({hasLogo = false, isNoTracingMode}: IProps) => ( )} - + {isNoTracingMode && } - - + ); diff --git a/web/src/components/Header/index.ts b/web/src/components/Header/index.ts index 3e9dde4818..18e5eff1dd 100644 --- a/web/src/components/Header/index.ts +++ b/web/src/components/Header/index.ts @@ -1,2 +1,7 @@ +import HelpMenu from './HelpMenu'; +import * as HeaderStyled from './Header.styled'; + // eslint-disable-next-line no-restricted-exports export {default} from './Header'; + +export {HelpMenu, HeaderStyled}; diff --git a/web/src/components/Layout/Layout.tsx b/web/src/components/Layout/Layout.tsx index 812b4b60e7..6a7c0822a1 100644 --- a/web/src/components/Layout/Layout.tsx +++ b/web/src/components/Layout/Layout.tsx @@ -1,7 +1,6 @@ -import {ClusterOutlined, GlobalOutlined, SettingOutlined} from '@ant-design/icons'; +import {AppstoreAddOutlined, ClusterOutlined, GlobalOutlined, SettingOutlined} from '@ant-design/icons'; import {Menu} from 'antd'; -import React from 'react'; -import {useLocation} from 'react-router-dom'; +import {Outlet, useLocation} from 'react-router-dom'; import logoAsset from 'assets/logo-white.svg'; import FileViewerModalProvider from 'components/FileViewerModal/FileViewerModal.provider'; @@ -16,8 +15,10 @@ import NotificationProvider from 'providers/Notification/Notification.provider'; import {ConfigMode} from 'types/DataStore.types'; import * as S from './Layout.styled'; +export type TCustomHeader = typeof Header; + interface IProps { - children?: React.ReactNode; + customHeader?: TCustomHeader; hasMenu?: boolean; } @@ -30,7 +31,7 @@ const menuItems = [ }, { key: '1', - icon: , + icon: , label: Test Suites, path: '/testsuites', }, @@ -51,7 +52,7 @@ const footerMenuItems = [ }, ]; -const Layout = ({children, hasMenu = false}: IProps) => { +const Layout = ({hasMenu = false, customHeader: CustomHeader = Header}: IProps) => { useRouterSync(); const {dataStoreConfig, isLoading} = useSettingsValues(); const pathname = useLocation().pathname; @@ -99,8 +100,10 @@ const Layout = ({children, hasMenu = false}: IProps) => { )} -
- {children} + + + + diff --git a/web/src/components/Layout/__tests__/Layout.test.tsx b/web/src/components/Layout/__tests__/Layout.test.tsx index bba02f557e..291bb50ac4 100644 --- a/web/src/components/Layout/__tests__/Layout.test.tsx +++ b/web/src/components/Layout/__tests__/Layout.test.tsx @@ -2,11 +2,7 @@ import {render} from 'test-utils'; import Layout from '../Layout'; it('Layout', async () => { - const {getByText, getByTestId} = render( - -

This

-
- ); + const {getByText, getByTestId} = render(); expect(getByTestId('menu-link')).toBeInTheDocument(); expect(getByText('This')).toBeTruthy(); diff --git a/web/src/components/NoTracingPopover/NoTracingPopover.styled.ts b/web/src/components/NoTracingPopover/NoTracingPopover.styled.ts index 24ee49b2e2..2ac3483df4 100644 --- a/web/src/components/NoTracingPopover/NoTracingPopover.styled.ts +++ b/web/src/components/NoTracingPopover/NoTracingPopover.styled.ts @@ -58,7 +58,7 @@ export const Trigger = styled.div` gap: 6px; align-items: center; cursor: pointer; - margin-right: 24px; + margin-right: 8px; border-radius: 12px; padding: 4px 7px; background: ${({theme}) => theme.color.backgroundDark}; diff --git a/web/src/components/Router/Router.tsx b/web/src/components/Router/Router.tsx index 9e04dfe197..18d7723d83 100644 --- a/web/src/components/Router/Router.tsx +++ b/web/src/components/Router/Router.tsx @@ -10,25 +10,32 @@ import TestSuite from 'pages/TestSuite'; import TestSuiteRunOverview from 'pages/TestSuiteRunOverview'; import TestSuiteRunAutomate from 'pages/TestSuiteRunAutomate'; import AutomatedTestRun from 'pages/AutomatedTestRun'; +import Layout, {TCustomHeader} from 'components/Layout/Layout'; -const Router = () => ( - - } /> - } /> - - } /> - - } /> +interface IProps { + customHeader?: TCustomHeader; +} - } /> - } /> - } /> - } /> - - } /> - } /> - } /> - } /> +const Router = ({customHeader}: IProps) => ( + + }> + } /> + } /> + } /> + } /> + + + }> + } /> + } /> + } /> + } /> + + } /> + } /> + } /> + } /> + } /> diff --git a/web/src/components/RunDetailLayout/HeaderRight.tsx b/web/src/components/RunDetailLayout/HeaderRight.tsx index ceeb9c3bbb..a533c16d34 100644 --- a/web/src/components/RunDetailLayout/HeaderRight.tsx +++ b/web/src/components/RunDetailLayout/HeaderRight.tsx @@ -12,6 +12,7 @@ import {useTestOutput} from 'providers/TestOutput/TestOutput.provider'; import * as S from './RunDetailLayout.styled'; import EventLogPopover from '../EventLogPopover/EventLogPopover'; import RunStatusIcon from '../RunStatusIcon/RunStatusIcon'; +import VariableSetSelector from '../VariableSetSelector/VariableSetSelector'; interface IProps { testId: string; @@ -55,6 +56,7 @@ const HeaderRight = ({testId}: IProps) => { {(isRunStateSucceeded(state) || isRunStateStopped(state)) && ( )} + {!isDraftMode && state && isRunStateFinished(state) && ( - + )} From 30505af0164e16d17f58b037ff563f8bf202c956 Mon Sep 17 00:00:00 2001 From: Oscar Reyes Date: Wed, 23 Aug 2023 12:18:25 -0600 Subject: [PATCH 6/6] updating redux toolkit --- web/package-lock.json | 62 +++++++++++++++++++++---------------------- web/package.json | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 395bf9d892..a328482397 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -17,7 +17,7 @@ "@dnd-kit/sortable": "7.0.1", "@lezer/highlight": "1.0.0", "@opentelemetry/semantic-conventions": "1.3.0", - "@reduxjs/toolkit": "1.9.1", + "@reduxjs/toolkit": "1.9.5", "@segment/analytics-next": "1.51.2", "@sentry/react": "6.19.7", "@sentry/tracing": "6.19.7", @@ -3812,14 +3812,14 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@reduxjs/toolkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", - "integrity": "sha512-HikrdY+IDgRfRYlCTGUQaiCxxDDgM1mQrRbZ6S1HFZX5ZYuJ4o8EstNmhTwHdPl2rTmLxzwSu0b3AyeyTlR+RA==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", "dependencies": { - "immer": "^9.0.16", - "redux": "^4.2.0", + "immer": "^9.0.21", + "redux": "^4.2.1", "redux-thunk": "^2.4.2", - "reselect": "^4.1.7" + "reselect": "^4.1.8" }, "peerDependencies": { "react": "^16.9.0 || ^17.0.0 || ^18", @@ -16165,9 +16165,9 @@ } }, "node_modules/immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -23239,9 +23239,9 @@ } }, "node_modules/redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -23468,9 +23468,9 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", @@ -29858,14 +29858,14 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@reduxjs/toolkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", - "integrity": "sha512-HikrdY+IDgRfRYlCTGUQaiCxxDDgM1mQrRbZ6S1HFZX5ZYuJ4o8EstNmhTwHdPl2rTmLxzwSu0b3AyeyTlR+RA==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", "requires": { - "immer": "^9.0.16", - "redux": "^4.2.0", + "immer": "^9.0.21", + "redux": "^4.2.1", "redux-thunk": "^2.4.2", - "reselect": "^4.1.7" + "reselect": "^4.1.8" } }, "@rollup/plugin-babel": { @@ -37955,9 +37955,9 @@ "optional": true }, "immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" }, "import-fresh": { "version": "3.3.0", @@ -42982,9 +42982,9 @@ } }, "redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "requires": { "@babel/runtime": "^7.9.2" } @@ -43159,9 +43159,9 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" }, "resize-observer-polyfill": { "version": "1.5.1", diff --git a/web/package.json b/web/package.json index dd16aba454..740b65fb02 100644 --- a/web/package.json +++ b/web/package.json @@ -13,7 +13,7 @@ "@dnd-kit/sortable": "7.0.1", "@lezer/highlight": "1.0.0", "@opentelemetry/semantic-conventions": "1.3.0", - "@reduxjs/toolkit": "1.9.1", + "@reduxjs/toolkit": "1.9.5", "@segment/analytics-next": "1.51.2", "@sentry/react": "6.19.7", "@sentry/tracing": "6.19.7",