From 577c1278b7b6ee762a37d2b15e789220c36afb7f Mon Sep 17 00:00:00 2001 From: Spencer Murray <159931558+spalmurray-codecov@users.noreply.github.com> Date: Thu, 25 Apr 2024 14:41:27 -0400 Subject: [PATCH 1/6] Use bracket notation over array.at() (#2808) Fixes the `e.at is not a function` Sentry issues --- .../tabs/Admin/ManageAdminCard/AdminTable/AdminTable.tsx | 2 +- .../FilesChangedTab/FilesChangedTable/FilesChangedTable.tsx | 2 +- .../FilesChangedTableTeam/FilesChangedTableTeam.tsx | 2 +- .../MembersPage/MembersList/MembersTable/MembersTable.tsx | 2 +- .../FilesChanged/FilesChangedTable/FilesChangedTable.tsx | 4 ++-- .../FilesChangedTab/FilesChanged/TableTeam/TableTeam.tsx | 4 ++-- .../hooks/useIndirectChangedFilesTable.ts | 2 +- .../subroute/FileExplorer/CodeTreeTable/CodeTreeTable.tsx | 2 +- .../subroute/FileExplorer/FileListTable/FileListTable.tsx | 2 +- src/shared/ListRepo/ReposTable/ReposTable.tsx | 2 +- src/shared/ListRepo/ReposTableTeam/ReposTableTeam.tsx | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/pages/AccountSettings/tabs/Admin/ManageAdminCard/AdminTable/AdminTable.tsx b/src/pages/AccountSettings/tabs/Admin/ManageAdminCard/AdminTable/AdminTable.tsx index 05275c8a40..63234b11cd 100644 --- a/src/pages/AccountSettings/tabs/Admin/ManageAdminCard/AdminTable/AdminTable.tsx +++ b/src/pages/AccountSettings/tabs/Admin/ManageAdminCard/AdminTable/AdminTable.tsx @@ -60,7 +60,7 @@ const columns = [ ] function getOrderingDirection(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] return state ? (state.desc ? `-${state.id}` : state.id) : undefined } diff --git a/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTable/FilesChangedTable.tsx b/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTable/FilesChangedTable.tsx index 6b72f61993..4a343e76c8 100644 --- a/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTable/FilesChangedTable.tsx +++ b/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTable/FilesChangedTable.tsx @@ -34,7 +34,7 @@ const isNumericValue = (value: string) => value === 'patchPercentage' || value === 'head' || value === 'change' function getFilter(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTableTeam/FilesChangedTableTeam.tsx b/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTableTeam/FilesChangedTableTeam.tsx index 170517133c..bcf1229fce 100644 --- a/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTableTeam/FilesChangedTableTeam.tsx +++ b/src/pages/CommitDetailPage/CommitCoverage/routes/FilesChangedTab/FilesChangedTableTeam/FilesChangedTableTeam.tsx @@ -34,7 +34,7 @@ const isNumericColumn = (cellId: string) => cellId === 'missedLines' || cellId === 'patchPercentage' export function getFilter(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/pages/MembersPage/MembersList/MembersTable/MembersTable.tsx b/src/pages/MembersPage/MembersList/MembersTable/MembersTable.tsx index b16c64b9e4..20b88a912c 100644 --- a/src/pages/MembersPage/MembersList/MembersTable/MembersTable.tsx +++ b/src/pages/MembersPage/MembersList/MembersTable/MembersTable.tsx @@ -138,7 +138,7 @@ function LoadMoreTrigger({ } function getOrderingDirection(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] return state ? (state.desc ? `-${state.id}` : state.id) : undefined } diff --git a/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/FilesChangedTable/FilesChangedTable.tsx b/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/FilesChangedTable/FilesChangedTable.tsx index ea55df4fea..5ca442ba19 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/FilesChangedTable/FilesChangedTable.tsx +++ b/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/FilesChangedTable/FilesChangedTable.tsx @@ -14,7 +14,7 @@ import isEmpty from 'lodash/isEmpty' import isNumber from 'lodash/isNumber' import qs from 'qs' import { Fragment, lazy, Suspense, useEffect, useMemo, useState } from 'react' -import { useLocation , useParams } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import { ImpactedFile, @@ -40,7 +40,7 @@ const isNumericValue = (value: string) => value === 'change' export function getFilter(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/TableTeam/TableTeam.tsx b/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/TableTeam/TableTeam.tsx index 1db3029dca..20346c470d 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/TableTeam/TableTeam.tsx +++ b/src/pages/PullRequestPage/PullCoverage/routes/FilesChangedTab/FilesChanged/TableTeam/TableTeam.tsx @@ -13,7 +13,7 @@ import cs from 'classnames' import isEmpty from 'lodash/isEmpty' import qs from 'qs' import { Fragment, lazy, Suspense, useEffect, useMemo, useState } from 'react' -import { useLocation , useParams } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import { ImpactedFile, @@ -35,7 +35,7 @@ const isNumericColumn = (cellId: string) => cellId === 'missedLines' || cellId === 'patchPercentage' export function getFilter(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/pages/PullRequestPage/PullCoverage/routes/IndirectChangesTab/IndirectChangedFiles/hooks/useIndirectChangedFilesTable.ts b/src/pages/PullRequestPage/PullCoverage/routes/IndirectChangesTab/IndirectChangedFiles/hooks/useIndirectChangedFilesTable.ts index a799d4dc10..47ae4a4563 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/IndirectChangesTab/IndirectChangedFiles/hooks/useIndirectChangedFilesTable.ts +++ b/src/pages/PullRequestPage/PullCoverage/routes/IndirectChangesTab/IndirectChangedFiles/hooks/useIndirectChangedFilesTable.ts @@ -29,7 +29,7 @@ function getFilters({ flags?: ParsedQs[] | string[] components?: ParsedQs[] | string[] }) { - const state = sorting.at(0) + const state = sorting[0] const direction = state?.desc ? orderingDirection.desc : orderingDirection.asc let parameter = undefined diff --git a/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/CodeTreeTable/CodeTreeTable.tsx b/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/CodeTreeTable/CodeTreeTable.tsx index dc6844be31..6d8869ac24 100644 --- a/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/CodeTreeTable/CodeTreeTable.tsx +++ b/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/CodeTreeTable/CodeTreeTable.tsx @@ -19,7 +19,7 @@ import 'ui/Table/Table.css' const columnHelper = createColumnHelper() function getOrderingDirection(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/FileListTable/FileListTable.tsx b/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/FileListTable/FileListTable.tsx index 3d2f1429ec..c403984c01 100644 --- a/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/FileListTable/FileListTable.tsx +++ b/src/pages/RepoPage/CoverageTab/subroute/FileExplorer/FileListTable/FileListTable.tsx @@ -19,7 +19,7 @@ import 'ui/Table/Table.css' const columnHelper = createColumnHelper() function getOrderingDirection(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/shared/ListRepo/ReposTable/ReposTable.tsx b/src/shared/ListRepo/ReposTable/ReposTable.tsx index d1a42102ea..2dc0f066ea 100644 --- a/src/shared/ListRepo/ReposTable/ReposTable.tsx +++ b/src/shared/ListRepo/ReposTable/ReposTable.tsx @@ -36,7 +36,7 @@ interface ReposTableProps { } function getOrderingDirection(sorting: Array<{ id: string; desc: boolean }>) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state?.desc diff --git a/src/shared/ListRepo/ReposTableTeam/ReposTableTeam.tsx b/src/shared/ListRepo/ReposTableTeam/ReposTableTeam.tsx index 8b04603f0c..0d1f8da95e 100644 --- a/src/shared/ListRepo/ReposTableTeam/ReposTableTeam.tsx +++ b/src/shared/ListRepo/ReposTableTeam/ReposTableTeam.tsx @@ -33,7 +33,7 @@ import 'ui/Table/Table.css' export function getSortingOption( sorting: Array<{ id: string; desc: boolean }> ) { - const state = sorting.at(0) + const state = sorting[0] if (state) { const direction = state.desc From 9f18102f8d1c954ffb2d58cb739b991403d37d16 Mon Sep 17 00:00:00 2001 From: JerrySentry <142266253+JerrySentry@users.noreply.github.com> Date: Fri, 26 Apr 2024 09:46:21 -0400 Subject: [PATCH 2/6] Assortment of UI changes for coverage over time for components (#2809) - Add a link to redirect from components tab on PR page to components tab on Repo page - Add latest commit under the branch selector - Disable the branch dropdown box on the not_configured/enable/backfilling views - When clicking "Enable component analytics" button it should reload the page (which would bring it to backfilling view) - Fix padding on the dropdowns section. The padding between the vertical line and dropdown and padding between the dropdown label and dropbown - Add table headers when showing the not_configured/enable/backfilling views - Last Uploaded table header row values should align to the left - The delete component modal message is not correct - Add a aria-label = "delete-{component_id}" to the trash can icon to delete - Update the message from 24 hour to 1 hour on the backfilling view --- .../ComponentsTab/ComponentsTable.spec.jsx | 3 ++ .../routes/ComponentsTab/ComponentsTable.tsx | 13 ++++- .../routes/ComponentsTab/hooks/query.ts | 3 ++ .../hooks/useComponentComparison.spec.tsx | 6 +++ .../hooks/useComponentComparison.tsx | 5 ++ .../SyncingBanner/SyncingBanner.spec.tsx | 2 +- .../SyncingBanner/SyncingBanner.tsx | 7 ++- .../TriggerSyncBanner/TriggerSyncBanner.tsx | 5 +- .../BranchSelector/BranchSelector.spec.tsx | 14 +++--- .../Header/BranchSelector/BranchSelector.tsx | 32 ++++++++++-- .../RepoPage/ComponentsTab/Header/Header.tsx | 8 +-- .../ComponentsTable/ComponentsTable.spec.tsx | 8 ++- .../ComponentsTable/ComponentsTable.tsx | 50 ++++++++++++++++++- .../DeleteComponentModal.spec.tsx | 12 ++--- .../DeleteComponentModal.tsx | 34 +++++++++---- .../navigation/useNavLinks/useNavLinks.js | 9 +++- src/services/repo/useActivateMeasurements.tsx | 9 +++- .../ComponentsNotConfigured.tsx | 2 +- 18 files changed, 177 insertions(+), 45 deletions(-) diff --git a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.spec.jsx b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.spec.jsx index 26d4b4697e..1cfc06835b 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.spec.jsx +++ b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.spec.jsx @@ -57,6 +57,9 @@ const mockPull = { }, ], }, + head: { + branchName: 'abc', + }, }, }, }, diff --git a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.tsx b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.tsx index 43a9991152..2163a95615 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.tsx +++ b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/ComponentsTable.tsx @@ -10,6 +10,7 @@ import qs, { type ParsedQs } from 'qs' import { useMemo } from 'react' import { useLocation } from 'react-router-dom' +import A from 'ui/A' import Spinner from 'ui/Spinner' import TotalsNumber from 'ui/TotalsNumber' @@ -132,7 +133,17 @@ export default function ComponentsTable() { return ( <> -
+
+ + View components over time +
diff --git a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/query.ts b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/query.ts index 6c48f14ffb..bc87cc1930 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/query.ts +++ b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/query.ts @@ -40,6 +40,9 @@ export const query = ` message } } + head { + branchName + } } } ... on NotFoundError { diff --git a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.spec.tsx b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.spec.tsx index 5c03551b39..c8699d1a7a 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.spec.tsx +++ b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.spec.tsx @@ -28,6 +28,9 @@ const mockResponse = { }, ], }, + head: { + branchName: 'abc', + }, }, }, }, @@ -139,6 +142,9 @@ describe('useComponentComparison', () => { }, ], }, + head: { + branchName: 'abc', + }, }, }) ) diff --git a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.tsx b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.tsx index 80d5a77d5d..89788acac5 100644 --- a/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.tsx +++ b/src/pages/PullRequestPage/PullCoverage/routes/ComponentsTab/hooks/useComponentComparison.tsx @@ -51,6 +51,11 @@ const RepositorySchema = z.object({ MissingHeadCommitSchema, MissingHeadReportSchema, ]), + head: z + .object({ + branchName: z.string().nullable(), + }) + .nullable(), }) .nullable(), }) diff --git a/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.spec.tsx b/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.spec.tsx index 28a3580e86..855f31f1ef 100644 --- a/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.spec.tsx +++ b/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.spec.tsx @@ -26,7 +26,7 @@ describe('SyncingBanner', () => { it('renders heading and content components', () => { render(, { wrapper }) const historicalDataTextLong = screen.getByText( - 'It might take up to 24 hours to view your data.' + 'It might take up to 1 hour to view your data.' ) expect(historicalDataTextLong).toBeInTheDocument() }) diff --git a/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.tsx b/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.tsx index 594ba57f19..8f529d3366 100644 --- a/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.tsx +++ b/src/pages/RepoPage/ComponentsTab/BackfillBanners/SyncingBanner/SyncingBanner.tsx @@ -1,11 +1,14 @@ import Spinner from 'ui/Spinner' +import { LoadingTable } from '../../subroute/ComponentsTable/ComponentsTable' + function SyncingBanner() { return ( -
+
+
-

It might take up to 24 hours to view your data.

+

It might take up to 1 hour to view your data.

) diff --git a/src/pages/RepoPage/ComponentsTab/BackfillBanners/TriggerSyncBanner/TriggerSyncBanner.tsx b/src/pages/RepoPage/ComponentsTab/BackfillBanners/TriggerSyncBanner/TriggerSyncBanner.tsx index 3618b71faa..2dba401902 100644 --- a/src/pages/RepoPage/ComponentsTab/BackfillBanners/TriggerSyncBanner/TriggerSyncBanner.tsx +++ b/src/pages/RepoPage/ComponentsTab/BackfillBanners/TriggerSyncBanner/TriggerSyncBanner.tsx @@ -3,6 +3,8 @@ import { useParams } from 'react-router-dom' import { MEASUREMENT_TYPE, useActivateMeasurements } from 'services/repo' import Button from 'ui/Button' +import { LoadingTable } from '../../subroute/ComponentsTable/ComponentsTable' + type URLParams = { provider: string owner: string @@ -19,7 +21,8 @@ function TriggerSyncBanner() { }) return ( -
+
+

No data to display

You will need to enable components to see related coverage data.

diff --git a/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.spec.tsx b/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.spec.tsx index 493a293bce..04e3c981b9 100644 --- a/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.spec.tsx +++ b/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.spec.tsx @@ -203,7 +203,7 @@ describe('BranchSelector', () => { describe('with populated data', () => { it('renders the branch selector', async () => { const { queryClient } = setup() - render(, { + render(, { wrapper: wrapper(queryClient), }) @@ -213,7 +213,7 @@ describe('BranchSelector', () => { it('renders default branch as selected branch', async () => { const { queryClient } = setup() - render(, { + render(, { wrapper: wrapper(queryClient), }) @@ -226,7 +226,7 @@ describe('BranchSelector', () => { describe('user selects a branch', () => { it('updates params with selected branch', async () => { const { user, queryClient } = setup() - render(, { + render(, { wrapper: wrapper(queryClient), }) @@ -258,7 +258,7 @@ describe('BranchSelector', () => { isIntersecting: true, }) - render(, { + render(, { wrapper: wrapper(queryClient), }) @@ -281,7 +281,7 @@ describe('BranchSelector', () => { isIntersecting: true, }) - render(, { + render(, { wrapper: wrapper(queryClient), }) @@ -298,7 +298,7 @@ describe('BranchSelector', () => { describe('user searches for branch', () => { it('calls the api with the search value', async () => { const { mockSearching, user, queryClient } = setup() - render(, { + render(, { wrapper: wrapper(queryClient), }) @@ -319,7 +319,7 @@ describe('BranchSelector', () => { const { queryClient } = setup({ nullOverview: true, }) - render(, { + render(, { wrapper: wrapper(queryClient), }) diff --git a/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.tsx b/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.tsx index a16b25c1d2..f6b4c73d29 100644 --- a/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.tsx +++ b/src/pages/RepoPage/ComponentsTab/Header/BranchSelector/BranchSelector.tsx @@ -4,6 +4,7 @@ import { useParams } from 'react-router-dom' import { Branch, useBranch, useBranches } from 'services/branches' import { useLocationParams } from 'services/navigation' import { useRepoOverview } from 'services/repo' +import A from 'ui/A' import Icon from 'ui/Icon' import Select from 'ui/Select' @@ -21,7 +22,13 @@ const defaultQueryParams = { const getDecodedBranch = (branch?: string) => !!branch ? decodeURIComponent(branch) : undefined -const BranchSelector: React.FC = () => { +interface BranchSelectorProps { + isDisabled: boolean | undefined +} + +const BranchSelector: React.FC = ({ + isDisabled = false, +}) => { const { provider, owner, repo, branch } = useParams() const { params, updateParams } = useLocationParams(defaultQueryParams) const [branchSearchTerm, setBranchSearchTerm] = useState('') @@ -48,7 +55,10 @@ const BranchSelector: React.FC = () => { }) const decodedBranch = getDecodedBranch(branch) - const selectedBranch = decodedBranch ?? overview?.defaultBranch ?? '' + + const selectedBranch = + // @ts-expect-error + decodedBranch || params.branch || overview?.defaultBranch || '' const { data: searchBranchValue } = useBranch({ provider, @@ -70,7 +80,7 @@ const BranchSelector: React.FC = () => { } return ( -
+

@@ -97,8 +107,24 @@ const BranchSelector: React.FC = () => { } }} onSearch={(term: string) => setBranchSearchTerm(term)} + disabled={isDisabled} /> + {selection?.head?.commitid && ( +

+ Source: latest commit{' '} + + {selection?.head?.commitid.slice(0, 7)} + +

+ )}

) } diff --git a/src/pages/RepoPage/ComponentsTab/Header/Header.tsx b/src/pages/RepoPage/ComponentsTab/Header/Header.tsx index f775f6d29f..fe5e2fcfc1 100644 --- a/src/pages/RepoPage/ComponentsTab/Header/Header.tsx +++ b/src/pages/RepoPage/ComponentsTab/Header/Header.tsx @@ -60,8 +60,8 @@ const Header = ({ return (
- -
+ +

Configured components

@@ -73,7 +73,7 @@ const Header = ({ Learn more

-
+

Historical trend

@@ -91,7 +91,7 @@ const Header = ({ renderSelected={({ label }: { label: string }) => label} />
-
+

Show by

diff --git a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.spec.tsx b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.spec.tsx index 6cd633554a..ad7fb9dc11 100644 --- a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.spec.tsx +++ b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.spec.tsx @@ -275,9 +275,7 @@ describe('ComponentsTable', () => { const { user } = setup({}) render(, { wrapper: wrapper() }) - const trashIconButtons = await screen.findAllByRole('button', { - name: /trash/, - }) + const trashIconButtons = await screen.findAllByTestId('delete-component') expect(trashIconButtons).toHaveLength(3) const [firstIcon] = trashIconButtons @@ -287,8 +285,8 @@ describe('ComponentsTable', () => { } }) - const deleteComponentModalText = await screen.findByText( - 'Delete Component' + const deleteComponentModalText = await screen.findByTestId( + 'delete-component-modal' ) expect(deleteComponentModalText).toBeInTheDocument() diff --git a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx index 5938cc9dd8..a01d6efcc1 100644 --- a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx +++ b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx @@ -35,6 +35,50 @@ interface ComponentsTableHelper { delete: React.ReactElement | null } +export const LoadingTable = () => { + const data = useMemo(() => [], []) + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + }) + + return ( +
+ + + + + + + + + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + ))} + + ))} + +
+
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} +
+
+
+ ) +} + const columnHelper = createColumnHelper() const columns = [ @@ -125,7 +169,7 @@ function createTableData({ /> ), lastUploaded: ( - + {lastUploaded ? formatTimeToNow(lastUploaded) : ''} ), @@ -135,6 +179,7 @@ function createTableData({ data-testid="delete-component" onClick={() => setModalInfo({ componentId: name, showModal: true })} className="text-ds-gray-tertiary hover:text-ds-gray-senary" + aria-label={'delete ' + name} > @@ -199,7 +244,8 @@ const ComponentTable = memo(function Table({ >
{flexRender( diff --git a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.spec.tsx b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.spec.tsx index 57a8732287..49802145b2 100644 --- a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.spec.tsx +++ b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.spec.tsx @@ -70,12 +70,12 @@ describe('DeleteComponentModal', () => { const messagePartOne = await screen.findByText(/This will remove the/) expect(messagePartOne).toBeInTheDocument() const messagePartTwo = await screen.findByText( - /component from the reports in app. You will also need to remove this component in your CI and codecov.yaml to stop uploads./ + /It will take some time to reflect this deletion./ ) expect(messagePartTwo).toBeInTheDocument() - const componentId = await screen.findByText(/component-123/) - expect(componentId).toBeInTheDocument() + const componentId = await screen.findAllByText(/component-123/) + expect(componentId).toHaveLength(3) }) it('renders delete and cancel buttons', async () => { @@ -90,7 +90,7 @@ describe('DeleteComponentModal', () => { } ) const deleteButton = await screen.findByRole('button', { - name: /Delete component/, + name: /Remove/, }) expect(deleteButton).toBeInTheDocument() const cancelButton = await screen.findByRole('button', { name: /Cancel/ }) @@ -108,7 +108,7 @@ describe('DeleteComponentModal', () => { wrapper, } ) - const title = await screen.findByText(/Delete Component/) + const title = await screen.findByTestId(/remove-component-123/) expect(title).toBeInTheDocument() }) }) @@ -129,7 +129,7 @@ describe('DeleteComponentModal', () => { ) const deleteButton = await screen.findByRole('button', { - name: /Delete component/, + name: /Remove/, }) await user.click(deleteButton) await waitFor(() => expect(closeModal).toHaveBeenCalled()) diff --git a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.tsx b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.tsx index f27de16b1b..5ec3862f65 100644 --- a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.tsx +++ b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/DeleteComponentModal/DeleteComponentModal.tsx @@ -17,14 +17,29 @@ const DeleteComponentModal = ({ isOpen, closeModal, componentId }: Props) => { onClose={closeModal} hasCloseButton={true} size="small" - title={Delete Component} + title={ + + Remove {componentId} + + } body={ -

- This will remove the{' '} - {componentId} component from - the reports in app. You will also need to remove this component in - your CI and codecov.yaml to stop uploads. -

+
+

+ This will remove the historical data of{' '} + {componentId}{' '} + component in the app and we can’t retrieve the data. +

+

+

+ Action required: You’ll need + to remove{' '} + {componentId}{' '} + component in your yaml file otherwise you’ll still see it in this + table. +

+

+

It will take some time to reflect this deletion.

+
} footer={
@@ -38,7 +53,7 @@ const DeleteComponentModal = ({ isOpen, closeModal, componentId }: Props) => {
diff --git a/src/services/navigation/useNavLinks/useNavLinks.js b/src/services/navigation/useNavLinks/useNavLinks.js index b40cd5b660..9e069a0553 100644 --- a/src/services/navigation/useNavLinks/useNavLinks.js +++ b/src/services/navigation/useNavLinks/useNavLinks.js @@ -382,12 +382,17 @@ export function useNavLinks() { }, componentsTab: { path: ( - { provider = p, owner = o, repo = r } = { + { provider = p, owner = o, repo = r, branch = undefined } = { provider: p, owner: o, repo: r, } - ) => `/${provider}/${owner}/${repo}/components`, + ) => { + if (branch) { + return `/${provider}/${owner}/${repo}/components?branch=${branch}` + } + return `/${provider}/${owner}/${repo}/components` + }, isExternalLink: false, text: 'Components', }, diff --git a/src/services/repo/useActivateMeasurements.tsx b/src/services/repo/useActivateMeasurements.tsx index 5befc707b9..8768fe8fbe 100644 --- a/src/services/repo/useActivateMeasurements.tsx +++ b/src/services/repo/useActivateMeasurements.tsx @@ -94,6 +94,11 @@ export function useActivateMeasurements({ queryClient.invalidateQueries([ 'BackfillFlagMemberships', + provider, + owner, + repo, + ]) + queryClient.invalidateQueries([ 'BackfillComponentMemberships', provider, owner, @@ -101,9 +106,11 @@ export function useActivateMeasurements({ ]) }, onError: () => { + const measurementString = + measurementType === 'FLAG_COVERAGE' ? 'flag' : 'component' renderToast({ type: 'error', - title: 'Error activating flag measurements', + title: `Error activating ${measurementString} measurements`, content: 'Please try again. If the error persists please contact support', options: { diff --git a/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx b/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx index 83411e7c18..8c445afa5f 100644 --- a/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx +++ b/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx @@ -2,7 +2,7 @@ import Button from 'ui/Button' function ComponentsNotConfigured() { return ( -
+

No data to display

From 91bd64813475b7a6dfca6b0727c1486baadf5b76 Mon Sep 17 00:00:00 2001 From: Rohit Vinnakota <148245014+rohitvinnakota-codecov@users.noreply.github.com> Date: Fri, 26 Apr 2024 11:09:39 -0400 Subject: [PATCH 3/6] GitHub app installation banner update and CTA location update (#2804) --- .../GithubConfigBanner/GithubConfigBanner.jsx | 7 +- .../GithubConfigBanner.spec.jsx | 4 +- .../useNavLinks/useStaticNavLinks.js | 6 ++ .../useNavLinks/useStaticNavLinks.spec.js | 1 + src/ui/ContextSwitcher/ContextSwitcher.jsx | 56 ++++----------- .../ContextSwitcher/ContextSwitcher.spec.jsx | 70 ++++++++++--------- 6 files changed, 66 insertions(+), 78 deletions(-) diff --git a/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.jsx b/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.jsx index 9d73503491..bd85d176eb 100644 --- a/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.jsx +++ b/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.jsx @@ -20,14 +20,17 @@ const GithubConfigBanner = () => { Configure{' '} Codecov's GitHub app -

Codecov will use the integration to post statuses and comments.

+

+ Enable status posts, comments, improved rate limit handling, and + private repo management. +

diff --git a/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.spec.jsx b/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.spec.jsx index 2bec4d1b55..00337d0455 100644 --- a/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.spec.jsx +++ b/src/pages/OwnerPage/Header/HeaderBanners/GithubConfigBanner/GithubConfigBanner.spec.jsx @@ -30,7 +30,7 @@ describe('GithubConfigBanner', () => { }) const body = screen.queryByText( - /Codecov will use the integration to post statuses and comments./ + /Enable status posts, comments, improved rate limit handling, and private repo management./ ) expect(body).toBeInTheDocument() }) @@ -50,7 +50,7 @@ describe('GithubConfigBanner', () => { }) const body = screen.queryByText( - /Codecov will use the integration to post statuses and comments./ + /Enable status posts, comments, improved rate limit handling, and private repo management./ ) expect(body).not.toBeInTheDocument() }) diff --git a/src/services/navigation/useNavLinks/useStaticNavLinks.js b/src/services/navigation/useNavLinks/useStaticNavLinks.js index 07a510d5b7..7c8393ce2c 100644 --- a/src/services/navigation/useNavLinks/useStaticNavLinks.js +++ b/src/services/navigation/useNavLinks/useStaticNavLinks.js @@ -159,6 +159,12 @@ export function useStaticNavLinks() { text: 'Codecov Github App', openNewTab: true, }, + codecovGithubAppSelectTarget: { + path: () => 'https://github.com/apps/codecov/installations/select_target', + isExternalLink: true, + text: 'Codecov Github App', + openNewTab: true, + }, teamBot: { path: () => 'https://docs.codecov.com/docs/team-bot', isExternalLink: true, diff --git a/src/services/navigation/useNavLinks/useStaticNavLinks.spec.js b/src/services/navigation/useNavLinks/useStaticNavLinks.spec.js index 3791032f2e..66f3ec5a41 100644 --- a/src/services/navigation/useNavLinks/useStaticNavLinks.spec.js +++ b/src/services/navigation/useNavLinks/useStaticNavLinks.spec.js @@ -50,6 +50,7 @@ describe('useStaticNavLinks', () => { ${links.uploader} | ${'https://docs.codecov.com/docs/codecov-uploader'} ${links.integrityCheck} | ${'https://docs.codecov.com/docs/codecov-uploader#integrity-checking-the-uploader'} ${links.codecovGithubApp} | ${'https://github.com/apps/codecov'} + ${links.codecovGithubAppSelectTarget} | ${'https://github.com/apps/codecov/installations/select_target'} ${links.teamBot} | ${'https://docs.codecov.com/docs/team-bot'} ${links.runtimeInsights} | ${'https://docs.codecov.com/docs/runtime-insights'} ${links.graphAuthorization} | ${'https://docs.codecov.com/reference/authorization#about-graphs'} diff --git a/src/ui/ContextSwitcher/ContextSwitcher.jsx b/src/ui/ContextSwitcher/ContextSwitcher.jsx index 94e6ecbccd..6d2765191c 100644 --- a/src/ui/ContextSwitcher/ContextSwitcher.jsx +++ b/src/ui/ContextSwitcher/ContextSwitcher.jsx @@ -33,27 +33,6 @@ LoadMoreTrigger.propTypes = { intersectionRef: PropTypes.shape({ current: PropTypes.instanceOf(Element) }), } -function ModalSection({ ModalControl, ModalComponent }) { - const [showComponent, setShowComponent] = useState(false) - if (ModalControl && ModalComponent) { - return ( - <> - setShowComponent(true)} /> - {showComponent && ( - setShowComponent(false)} /> - )} - - ) - } - - return null -} - -ModalSection.propTypes = { - ModalComponent: PropTypes.func, - ModalControl: PropTypes.func, -} - function ContextItem({ context, defaultOrgUsername, setToggle, owner }) { const { owner: contextOwner, pageName } = context const orgUsername = contextOwner?.username @@ -141,8 +120,6 @@ function ContextSwitcher({ currentUser, isLoading, onLoadMore, - ModalControl, - ModalComponent, activeContext, }) { const { provider } = useParams() @@ -190,13 +167,18 @@ function ContextSwitcher({ role="listbox" aria-labelledby="listbox-label" > -
  • - Switch context - -
  • + {isGh ? ( +
  • + + + Add GitHub organization + +
  • + ) : ( +
  • + Switch context +
  • + )} {contexts.map((context) => ( - {isGh && ( -
  • - - - Add GitHub organization - -
  • - )}
    ) @@ -239,14 +213,12 @@ ContextSwitcher.propTypes = { currentUser: PropTypes.shape({ defaultOrgUsername: PropTypes.string, }), - onLoadMore: PropTypes.func, - isLoading: PropTypes.bool, - ModalComponent: PropTypes.func, - ModalControl: PropTypes.func, activeContext: PropTypes.shape({ avatarUrl: PropTypes.string.isRequired, username: PropTypes.string.isRequired, }), + onLoadMore: PropTypes.func, + isLoading: PropTypes.bool, } export default ContextSwitcher diff --git a/src/ui/ContextSwitcher/ContextSwitcher.spec.jsx b/src/ui/ContextSwitcher/ContextSwitcher.spec.jsx index 8d2d0a4d4a..666451c9a1 100644 --- a/src/ui/ContextSwitcher/ContextSwitcher.spec.jsx +++ b/src/ui/ContextSwitcher/ContextSwitcher.spec.jsx @@ -30,11 +30,6 @@ afterAll(() => { server.close() }) -// eslint-disable-next-line react/prop-types -const ModalComponent = ({ closeFn }) =>
    component
    -// eslint-disable-next-line react/prop-types -const ModalControl = ({ onClick }) => - const wrapper = (initialEntries = '/gh') => ({ children }) => @@ -104,8 +99,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -156,8 +149,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -217,8 +208,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -282,8 +271,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -340,8 +327,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={true} error={null} @@ -395,8 +380,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -456,8 +439,6 @@ describe('ContextSwitcher', () => { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -475,11 +456,48 @@ describe('ContextSwitcher', () => { }) }) + describe('when not on gh provider', () => { + afterEach(() => jest.restoreAllMocks()) + + it('does not render the add github org text', async () => { + setup() + render( + , + { + wrapper: wrapper('/bb'), + } + ) + + const addGhOrgText = screen.queryByText(/Add GitHub organization/) + expect(addGhOrgText).not.toBeInTheDocument() + }) + }) + describe('when custom modal component is passed', () => { afterEach(() => jest.restoreAllMocks()) it('renders the modal component', async () => { - const { user } = setup() + setup() render( { currentUser={{ defaultOrgUsername: 'spotify', }} - ModalComponent={ModalComponent} - ModalControl={ModalControl} src="imageUrl" isLoading={false} error={null} @@ -522,16 +538,6 @@ describe('ContextSwitcher', () => { wrapper: wrapper(), } ) - - const modalControlButton = await screen.findByText('display') - expect(modalControlButton).toBeInTheDocument() - await user.click(modalControlButton) - - const modalComponentText = await screen.findByText('component') - expect(modalComponentText).toBeInTheDocument() - await user.click(modalComponentText) - - await waitFor(() => expect(modalComponentText).not.toBeInTheDocument()) }) describe('when user clicks on an org', () => { From 2bd58d6ba08ce6d627ac6a4bf66cf007e680d410 Mon Sep 17 00:00:00 2001 From: nicholas-codecov Date: Fri, 26 Apr 2024 14:25:10 -0300 Subject: [PATCH 4/6] feat: Swap to avg and add in data source label (#2811) Swap to grabbing avg coverage on the analytics page, and add in label informing users that we're using the average. GH codecov/engineering-team#1066 --- src/pages/AnalyticsPage/Chart/Chart.jsx | 25 ++++--- src/pages/AnalyticsPage/Chart/Chart.spec.jsx | 68 +++++++++++++++++-- src/pages/AnalyticsPage/Chart/useCoverage.js | 6 +- .../AnalyticsPage/Chart/useCoverage.spec.js | 16 ++--- .../useReposCoverageMeasurements.spec.tsx | 16 ++--- .../charts/useReposCoverageMeasurements.ts | 4 +- 6 files changed, 100 insertions(+), 35 deletions(-) diff --git a/src/pages/AnalyticsPage/Chart/Chart.jsx b/src/pages/AnalyticsPage/Chart/Chart.jsx index 142df28bae..ba031d2127 100644 --- a/src/pages/AnalyticsPage/Chart/Chart.jsx +++ b/src/pages/AnalyticsPage/Chart/Chart.jsx @@ -2,6 +2,7 @@ import { format } from 'date-fns' import PropTypes from 'prop-types' import CoverageAreaChart from 'ui/CoverageAreaChart' +import Icon from 'ui/Icon' import { useCoverage } from './useCoverage' @@ -36,15 +37,21 @@ function Chart({ params }) { }) return ( - + <> +

    + + Data is average of selected repos +

    + + ) } diff --git a/src/pages/AnalyticsPage/Chart/Chart.spec.jsx b/src/pages/AnalyticsPage/Chart/Chart.spec.jsx index 6860714b8b..1b3b2a2db2 100644 --- a/src/pages/AnalyticsPage/Chart/Chart.spec.jsx +++ b/src/pages/AnalyticsPage/Chart/Chart.spec.jsx @@ -32,7 +32,7 @@ describe('Analytics coverage chart', () => { measurements: [ { timestamp: '2020-01-01T00:00:00Z', - max: 91.11, + avg: 91.11, }, ], }, @@ -43,11 +43,11 @@ describe('Analytics coverage chart', () => { measurements: [ { timestamp: '2020-01-01T00:00:00Z', - max: 90.0, + avg: 90.0, }, { timestamp: '2021-01-01T00:00:00Z', - max: 91.11, + avg: 91.11, }, ], }, @@ -65,7 +65,10 @@ describe('Analytics coverage chart', () => { } return res(ctx.status(200), ctx.data(mockDataPoints)) - }) + }), + graphql.query('OwnerTier', (req, res, ctx) => + res(ctx.status(200), ctx.data({ owner: { tier: 'pro' } })) + ) ) } @@ -88,12 +91,29 @@ describe('Analytics coverage chart', () => { const message = await screen.findByTitle('coverage chart') expect(message).toBeInTheDocument() }) + + it('renders data label', async () => { + setup({ hasNoData: true }) + render( + , + { + wrapper, + } + ) + + const label = await screen.findByText(/Data is average of selected repos/) + expect(label).toBeInTheDocument() + }) }) describe('One data point', () => { it('Not enough data to render', async () => { setup({ hasSingleData: true }) - render( { const message = await screen.findByText(/Not enough data to render/) expect(message).toBeInTheDocument() }) + + it('renders data label', async () => { + setup({ hasSingleData: true }) + render( + , + { + wrapper, + } + ) + + const label = await screen.findByText(/Data is average of selected repos/) + expect(label).toBeInTheDocument() + }) }) describe('Chart with data', () => { @@ -154,5 +193,24 @@ describe('Analytics coverage chart', () => { ) expect(message).toBeInTheDocument() }) + + it('renders data label', async () => { + setup({ hasNoData: false, hasSingleData: false }) + render( + , + { + wrapper, + } + ) + + const label = await screen.findByText(/Data is average of selected repos/) + expect(label).toBeInTheDocument() + }) }) }) diff --git a/src/pages/AnalyticsPage/Chart/useCoverage.js b/src/pages/AnalyticsPage/Chart/useCoverage.js index 2aee5c1183..a1b75be77c 100644 --- a/src/pages/AnalyticsPage/Chart/useCoverage.js +++ b/src/pages/AnalyticsPage/Chart/useCoverage.js @@ -28,14 +28,14 @@ export const useCoverage = ({ params, options = {} }) => { isPublic: shouldDisplayPublicReposOnly, opts: { select: (data) => { - if (data?.measurements?.[0]?.max === null) { - data.measurements[0].max = 0 + if (data?.measurements?.[0]?.avg === null) { + data.measurements[0].avg = 0 } // set prevPercent so we can reuse value if next value is null let prevPercent = data?.measurements?.[0] const coverage = data?.measurements?.map((measurement) => { - let coverage = measurement?.max ?? prevPercent + let coverage = measurement?.avg ?? prevPercent // can save on a few reassignments if (prevPercent !== coverage) { diff --git a/src/pages/AnalyticsPage/Chart/useCoverage.spec.js b/src/pages/AnalyticsPage/Chart/useCoverage.spec.js index 09b7f3e3e0..0d325a5229 100644 --- a/src/pages/AnalyticsPage/Chart/useCoverage.spec.js +++ b/src/pages/AnalyticsPage/Chart/useCoverage.spec.js @@ -15,23 +15,23 @@ const mockRepoMeasurements = { measurements: [ { timestamp: '2023-01-01T00:00:00+00:00', - max: 85, + avg: 85, }, { timestamp: '2023-01-02T00:00:00+00:00', - max: 80, + avg: 80, }, { timestamp: '2023-01-02T00:00:00+00:00', - max: null, + avg: null, }, { timestamp: '2023-01-03T00:00:00+00:00', - max: 80, + avg: 80, }, { timestamp: '2023-01-04T00:00:00+00:00', - max: 95, + avg: 95, }, ], }, @@ -42,11 +42,11 @@ const mockNullFirstValRepoMeasurements = { measurements: [ { timestamp: '2023-01-01T00:00:00+00:00', - max: null, + avg: null, }, { timestamp: '2023-01-02T00:00:00+00:00', - max: 80, + avg: 80, }, ], }, @@ -57,7 +57,7 @@ const mockPublicRepoMeasurements = { measurements: [ { timestamp: '2023-01-02T00:00:00+00:00', - max: 80, + avg: 80, }, ], }, diff --git a/src/services/charts/useReposCoverageMeasurements.spec.tsx b/src/services/charts/useReposCoverageMeasurements.spec.tsx index b1b7016634..47b6c8549f 100644 --- a/src/services/charts/useReposCoverageMeasurements.spec.tsx +++ b/src/services/charts/useReposCoverageMeasurements.spec.tsx @@ -10,19 +10,19 @@ const mockReposMeasurements = { measurements: [ { timestamp: '2023-01-01T00:00:00+00:00', - max: 85, + avg: 85, }, { timestamp: '2023-01-02T00:00:00+00:00', - max: 80, + avg: 80, }, { timestamp: '2023-01-03T00:00:00+00:00', - max: 90, + avg: 90, }, { timestamp: '2023-01-04T00:00:00+00:00', - max: 100, + avg: 100, }, ], }, @@ -78,19 +78,19 @@ describe('useReposCoverageMeasurements', () => { measurements: [ { timestamp: '2023-01-01T00:00:00+00:00', - max: 85, + avg: 85, }, { timestamp: '2023-01-02T00:00:00+00:00', - max: 80, + avg: 80, }, { timestamp: '2023-01-03T00:00:00+00:00', - max: 90, + avg: 90, }, { timestamp: '2023-01-04T00:00:00+00:00', - max: 100, + avg: 100, }, ], } diff --git a/src/services/charts/useReposCoverageMeasurements.ts b/src/services/charts/useReposCoverageMeasurements.ts index c004d845b3..e612fc012b 100644 --- a/src/services/charts/useReposCoverageMeasurements.ts +++ b/src/services/charts/useReposCoverageMeasurements.ts @@ -9,7 +9,7 @@ export const ReposCoverageMeasurementsConfig = z measurements: z.array( z.object({ timestamp: z.string(), - max: z.number().nullish(), + avg: z.number().nullish(), }) ), }) @@ -48,7 +48,7 @@ const query = ` isPublic: $isPublic ) { timestamp - max + avg } } } From d1634a55df8a3769a66d3a688119e3998cdc5d1b Mon Sep 17 00:00:00 2001 From: nicholas-codecov Date: Fri, 26 Apr 2024 14:53:39 -0300 Subject: [PATCH 5/6] fix: Small Sentry route fixes (#2812) Bump to beta 4, and update two routes to SentryRoute from Route. --- package-lock.json | 226 +++++++++--------- package.json | 2 +- .../BundleContent/BundleContent.tsx | 12 +- src/pages/RepoPage/BundlesTab/BundlesTab.tsx | 8 +- 4 files changed, 126 insertions(+), 122 deletions(-) diff --git a/package-lock.json b/package-lock.json index bef10d40e6..c5158cace7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@hookform/resolvers": "^2.8.5", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-popover": "^1.0.6", - "@sentry/react": "^8.0.0-beta.3", + "@sentry/react": "^8.0.0-beta.4", "@stripe/react-stripe-js": "^1.7.2", "@stripe/stripe-js": "^1.52.1", "@tanstack/react-query": "^4.29.5", @@ -5545,26 +5545,26 @@ "dev": true }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.0.0-beta.3.tgz", - "integrity": "sha512-mEP0yp8jIIJ8U71fq1giqvlrxkG3aeR5j6h7A4KZkirg4O4qMOikRFRpe0CCfsdGy0uUKUIn2F2JJGouI3MTkQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.0.0-beta.4.tgz", + "integrity": "sha512-Tvaj9PFW1orDBDKpgUy7HaVXyjTl/QFP+IL2uWoXZSOLcuUwI9dUk/Niar0iHW4RLe+dFrzl1tnhojgiM/zc0A==", "dependencies": { - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.0.0-beta.3.tgz", - "integrity": "sha512-qJwbjcyzQxqMV2eNixZafBHLavQuk3Dmu3DjcfuQuqKN8WoWU7dHmw54gla9CIBIRAfE7SSnvmoUgvSVIDEvPA==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.0.0-beta.4.tgz", + "integrity": "sha512-moQfr15jX7ckd/pdCJ02aDtwbveAmzcJu+efqS7MYVZyOG7aEpBGtdNZ4axU5xo8Q5atZDDkVJWTe/fg9JRaTw==", "dependencies": { - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4", "preact": "^10.19.4" }, "engines": { @@ -5572,28 +5572,28 @@ } }, "node_modules/@sentry-internal/replay": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.0.0-beta.3.tgz", - "integrity": "sha512-NWRi/uVo7C04becBgxjGBHp7FJzUcKoKnUF/8+yboTyGm+0elVNK/Pc4teZ4Tc/T0YQoxjptiKr+any/JnQkyQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.0.0-beta.4.tgz", + "integrity": "sha512-IsEwMIzhBVckjpW7lRr4AKZunmnTFa2oeB7CFWTbMwIbgB36Kjnvs0ExKckZs+i2HIzWUcxG86L3tJSr6AowrQ==", "dependencies": { - "@sentry-internal/browser-utils": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry-internal/browser-utils": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.0.0-beta.3.tgz", - "integrity": "sha512-SnBwRVZ4ZUo2QzQHla26QbF7S1nyKViSxhmXlzBS8M5Di251Q7UODzqovN05QTAIdPjXaH4/rCmV79kfxrG35g==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.0.0-beta.4.tgz", + "integrity": "sha512-Ijbp5uJmdWF89byCVACZi8JsNEz697K8rxGZvFlPsOGNwGoHOhWrqEFVUVhHS26n3dklo75eLt2ggI39pK8dsQ==", "dependencies": { - "@sentry-internal/replay": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry-internal/replay": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" }, "engines": { "node": ">=14.18" @@ -5609,17 +5609,17 @@ } }, "node_modules/@sentry/browser": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.0.0-beta.3.tgz", - "integrity": "sha512-gs+UlKQ0N4nHRQRcI7KYp8KX8tleWuen5uvuHa0/sIoG3UXTkwr7uIA8Feq02Xp0HT7WoVXZ/+MNyIFL+hDM/w==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.0.0-beta.4.tgz", + "integrity": "sha512-ZD/wIxOiUNkRBfvb00WGlBLoPGTTjxSyQfg8lwBWcmaYPsgavzIrmDQeSPoCWGsk+9aaZQtqMhnBRXWdnB8VIg==", "dependencies": { - "@sentry-internal/browser-utils": "8.0.0-beta.3", - "@sentry-internal/feedback": "8.0.0-beta.3", - "@sentry-internal/replay": "8.0.0-beta.3", - "@sentry-internal/replay-canvas": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry-internal/browser-utils": "8.0.0-beta.4", + "@sentry-internal/feedback": "8.0.0-beta.4", + "@sentry-internal/replay": "8.0.0-beta.4", + "@sentry-internal/replay-canvas": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" }, "engines": { "node": ">=14.18" @@ -5876,26 +5876,26 @@ } }, "node_modules/@sentry/core": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.0.0-beta.3.tgz", - "integrity": "sha512-ZUiICytr4dOw/ApYHYUzXB5EYbm6Imup75XusULCB0CoXE+PqZY9JAT/7OCB8Yp4kMcZGyXJLNdfhrixYlVrTQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.0.0-beta.4.tgz", + "integrity": "sha512-kWdphhCjjUQL3KvswjWoQ+u6ZU4RKcGfBkzI7nCvAozTOaA19a+UMpSTXywExPIP5TXpJ2NFYnyDDZ3+C6lO7A==", "dependencies": { - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/react": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.0.0-beta.3.tgz", - "integrity": "sha512-2bOwN0Xkjkwcr22/CklSp1lBAlOF8fdzNjtFQTFkbDk2mqrzYSC7rsdj+MN4//IvuMBXJfNdUCbSAFcDWimg3w==", - "dependencies": { - "@sentry/browser": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.0.0-beta.4.tgz", + "integrity": "sha512-27soqRzJQgPPDlhwFmdQBsSvY65k1kq0iBi91ituHBMIgmjDdU1TDsSi1jo3iBgJB87Q5wGhB73qaO43W3qxig==", + "dependencies": { + "@sentry/browser": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4", "hoist-non-react-statics": "^3.3.2" }, "engines": { @@ -5906,19 +5906,19 @@ } }, "node_modules/@sentry/types": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.0.0-beta.3.tgz", - "integrity": "sha512-9S5QPDZZgHcIxz5fu9B1kfd06smfvzVu/CKZJkrkzPrk0WjTnVeFM7lhvmDkmjNgzube0+g76zjrebNhtRHvzQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.0.0-beta.4.tgz", + "integrity": "sha512-a7/xGmR+6n+PXUyOCpDm7/FczcHP/CpYKwJIJuLZ8jAhS21MTAWssuXdJAEoIbOzkSIy/CD87QfinX4ZEzYAAg==", "engines": { "node": ">=14.18" } }, "node_modules/@sentry/utils": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.0.0-beta.3.tgz", - "integrity": "sha512-GnA4qnnQQ2XTVCThmk7sfBFgpnVITdRh2l4sHOUzDh13X8yZGAkHigSdSE81s3AHY7Ri6t47AGqGydhkKyeqQg==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.0.0-beta.4.tgz", + "integrity": "sha512-0dTSaeHO2bDbrBZ08K9PpUyhrSCxAPNLrWxsx/o+uoZ5kt7Sw86FBle7TOBiM06YpQq87sWZ6j1VtjkYlieIfg==", "dependencies": { - "@sentry/types": "8.0.0-beta.3" + "@sentry/types": "8.0.0-beta.4" }, "engines": { "node": ">=14.18" @@ -37791,46 +37791,46 @@ "dev": true }, "@sentry-internal/browser-utils": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.0.0-beta.3.tgz", - "integrity": "sha512-mEP0yp8jIIJ8U71fq1giqvlrxkG3aeR5j6h7A4KZkirg4O4qMOikRFRpe0CCfsdGy0uUKUIn2F2JJGouI3MTkQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.0.0-beta.4.tgz", + "integrity": "sha512-Tvaj9PFW1orDBDKpgUy7HaVXyjTl/QFP+IL2uWoXZSOLcuUwI9dUk/Niar0iHW4RLe+dFrzl1tnhojgiM/zc0A==", "requires": { - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" } }, "@sentry-internal/feedback": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.0.0-beta.3.tgz", - "integrity": "sha512-qJwbjcyzQxqMV2eNixZafBHLavQuk3Dmu3DjcfuQuqKN8WoWU7dHmw54gla9CIBIRAfE7SSnvmoUgvSVIDEvPA==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.0.0-beta.4.tgz", + "integrity": "sha512-moQfr15jX7ckd/pdCJ02aDtwbveAmzcJu+efqS7MYVZyOG7aEpBGtdNZ4axU5xo8Q5atZDDkVJWTe/fg9JRaTw==", "requires": { - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4", "preact": "^10.19.4" } }, "@sentry-internal/replay": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.0.0-beta.3.tgz", - "integrity": "sha512-NWRi/uVo7C04becBgxjGBHp7FJzUcKoKnUF/8+yboTyGm+0elVNK/Pc4teZ4Tc/T0YQoxjptiKr+any/JnQkyQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.0.0-beta.4.tgz", + "integrity": "sha512-IsEwMIzhBVckjpW7lRr4AKZunmnTFa2oeB7CFWTbMwIbgB36Kjnvs0ExKckZs+i2HIzWUcxG86L3tJSr6AowrQ==", "requires": { - "@sentry-internal/browser-utils": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry-internal/browser-utils": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" } }, "@sentry-internal/replay-canvas": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.0.0-beta.3.tgz", - "integrity": "sha512-SnBwRVZ4ZUo2QzQHla26QbF7S1nyKViSxhmXlzBS8M5Di251Q7UODzqovN05QTAIdPjXaH4/rCmV79kfxrG35g==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.0.0-beta.4.tgz", + "integrity": "sha512-Ijbp5uJmdWF89byCVACZi8JsNEz697K8rxGZvFlPsOGNwGoHOhWrqEFVUVhHS26n3dklo75eLt2ggI39pK8dsQ==", "requires": { - "@sentry-internal/replay": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry-internal/replay": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" } }, "@sentry/babel-plugin-component-annotate": { @@ -37840,17 +37840,17 @@ "dev": true }, "@sentry/browser": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.0.0-beta.3.tgz", - "integrity": "sha512-gs+UlKQ0N4nHRQRcI7KYp8KX8tleWuen5uvuHa0/sIoG3UXTkwr7uIA8Feq02Xp0HT7WoVXZ/+MNyIFL+hDM/w==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.0.0-beta.4.tgz", + "integrity": "sha512-ZD/wIxOiUNkRBfvb00WGlBLoPGTTjxSyQfg8lwBWcmaYPsgavzIrmDQeSPoCWGsk+9aaZQtqMhnBRXWdnB8VIg==", "requires": { - "@sentry-internal/browser-utils": "8.0.0-beta.3", - "@sentry-internal/feedback": "8.0.0-beta.3", - "@sentry-internal/replay": "8.0.0-beta.3", - "@sentry-internal/replay-canvas": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry-internal/browser-utils": "8.0.0-beta.4", + "@sentry-internal/feedback": "8.0.0-beta.4", + "@sentry-internal/replay": "8.0.0-beta.4", + "@sentry-internal/replay-canvas": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" } }, "@sentry/bundler-plugin-core": { @@ -38004,37 +38004,37 @@ "optional": true }, "@sentry/core": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.0.0-beta.3.tgz", - "integrity": "sha512-ZUiICytr4dOw/ApYHYUzXB5EYbm6Imup75XusULCB0CoXE+PqZY9JAT/7OCB8Yp4kMcZGyXJLNdfhrixYlVrTQ==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.0.0-beta.4.tgz", + "integrity": "sha512-kWdphhCjjUQL3KvswjWoQ+u6ZU4RKcGfBkzI7nCvAozTOaA19a+UMpSTXywExPIP5TXpJ2NFYnyDDZ3+C6lO7A==", "requires": { - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3" + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4" } }, "@sentry/react": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.0.0-beta.3.tgz", - "integrity": "sha512-2bOwN0Xkjkwcr22/CklSp1lBAlOF8fdzNjtFQTFkbDk2mqrzYSC7rsdj+MN4//IvuMBXJfNdUCbSAFcDWimg3w==", - "requires": { - "@sentry/browser": "8.0.0-beta.3", - "@sentry/core": "8.0.0-beta.3", - "@sentry/types": "8.0.0-beta.3", - "@sentry/utils": "8.0.0-beta.3", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.0.0-beta.4.tgz", + "integrity": "sha512-27soqRzJQgPPDlhwFmdQBsSvY65k1kq0iBi91ituHBMIgmjDdU1TDsSi1jo3iBgJB87Q5wGhB73qaO43W3qxig==", + "requires": { + "@sentry/browser": "8.0.0-beta.4", + "@sentry/core": "8.0.0-beta.4", + "@sentry/types": "8.0.0-beta.4", + "@sentry/utils": "8.0.0-beta.4", "hoist-non-react-statics": "^3.3.2" } }, "@sentry/types": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.0.0-beta.3.tgz", - "integrity": "sha512-9S5QPDZZgHcIxz5fu9B1kfd06smfvzVu/CKZJkrkzPrk0WjTnVeFM7lhvmDkmjNgzube0+g76zjrebNhtRHvzQ==" + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.0.0-beta.4.tgz", + "integrity": "sha512-a7/xGmR+6n+PXUyOCpDm7/FczcHP/CpYKwJIJuLZ8jAhS21MTAWssuXdJAEoIbOzkSIy/CD87QfinX4ZEzYAAg==" }, "@sentry/utils": { - "version": "8.0.0-beta.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.0.0-beta.3.tgz", - "integrity": "sha512-GnA4qnnQQ2XTVCThmk7sfBFgpnVITdRh2l4sHOUzDh13X8yZGAkHigSdSE81s3AHY7Ri6t47AGqGydhkKyeqQg==", + "version": "8.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.0.0-beta.4.tgz", + "integrity": "sha512-0dTSaeHO2bDbrBZ08K9PpUyhrSCxAPNLrWxsx/o+uoZ5kt7Sw86FBle7TOBiM06YpQq87sWZ6j1VtjkYlieIfg==", "requires": { - "@sentry/types": "8.0.0-beta.3" + "@sentry/types": "8.0.0-beta.4" } }, "@sentry/webpack-plugin": { diff --git a/package.json b/package.json index 7b67d4b916..acba823e24 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@hookform/resolvers": "^2.8.5", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-popover": "^1.0.6", - "@sentry/react": "^8.0.0-beta.3", + "@sentry/react": "^8.0.0-beta.4", "@stripe/react-stripe-js": "^1.7.2", "@stripe/stripe-js": "^1.52.1", "@tanstack/react-query": "^4.29.5", diff --git a/src/pages/RepoPage/BundlesTab/BundleContent/BundleContent.tsx b/src/pages/RepoPage/BundlesTab/BundleContent/BundleContent.tsx index 9144cc9230..abdfcc4af3 100644 --- a/src/pages/RepoPage/BundlesTab/BundleContent/BundleContent.tsx +++ b/src/pages/RepoPage/BundlesTab/BundleContent/BundleContent.tsx @@ -1,5 +1,7 @@ import { lazy, Suspense, useEffect } from 'react' -import { Route, Switch, useParams } from 'react-router-dom' +import { Switch, useParams } from 'react-router-dom' + +import { SentryRoute } from 'sentry' import { useBranchBundleSummary } from 'services/bundleAnalysis' import { metrics } from 'shared/utils/metrics' @@ -43,10 +45,10 @@ const BundleContent: React.FC = () => { }> {bundleType === 'BundleAnalysisReport' ? ( - + - - + { > - + ) : bundleType === undefined && !branch ? ( <> diff --git a/src/pages/RepoPage/BundlesTab/BundlesTab.tsx b/src/pages/RepoPage/BundlesTab/BundlesTab.tsx index 8f4ff0f105..5444c2322e 100644 --- a/src/pages/RepoPage/BundlesTab/BundlesTab.tsx +++ b/src/pages/RepoPage/BundlesTab/BundlesTab.tsx @@ -1,5 +1,7 @@ import { lazy, Suspense } from 'react' -import { Route, Switch, useParams } from 'react-router-dom' +import { Switch, useParams } from 'react-router-dom' + +import { SentryRoute } from 'sentry' import { useRepoOverview } from 'services/repo' import Spinner from 'ui/Spinner' @@ -37,13 +39,13 @@ const BundlesTab: React.FC = () => { return ( <> - }> - + ) From b0bea5ff4b55c9e5a9edaba607742379de0def99 Mon Sep 17 00:00:00 2001 From: JerrySentry <142266253+JerrySentry@users.noreply.github.com> Date: Fri, 26 Apr 2024 16:45:42 -0400 Subject: [PATCH 6/6] A few UI tweaks for coverage over time for components (#2813) - Change the icon in the "Get started with Components" button to white. - Have a bottom border for components table when no data state (needs configuration, activate, backfilling) - Remove the bottom border line of the header section --- src/pages/RepoPage/ComponentsTab/Header/Header.tsx | 2 +- .../subroute/ComponentsTable/ComponentsTable.tsx | 8 +++++++- .../ComponentsNotConfigured/ComponentsNotConfigured.tsx | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/RepoPage/ComponentsTab/Header/Header.tsx b/src/pages/RepoPage/ComponentsTab/Header/Header.tsx index fe5e2fcfc1..c2e7f4c3d9 100644 --- a/src/pages/RepoPage/ComponentsTab/Header/Header.tsx +++ b/src/pages/RepoPage/ComponentsTab/Header/Header.tsx @@ -58,7 +58,7 @@ const Header = ({ ) return ( -
    +
    diff --git a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx index a01d6efcc1..5dc6d10033 100644 --- a/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx +++ b/src/pages/RepoPage/ComponentsTab/subroute/ComponentsTable/ComponentsTable.tsx @@ -74,6 +74,9 @@ export const LoadingTable = () => { ))} + +
    +
    ) @@ -266,7 +269,6 @@ const ComponentTable = memo(function Table({ ))} - {isLoading ? ( @@ -285,6 +287,10 @@ const ComponentTable = memo(function Table({ )) )} + { + /* Adds an extra line beneath the header row for the special case that the table is empty */ + !tableData.length ?
    : null + }
    diff --git a/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx b/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx index 8c445afa5f..72fd573482 100644 --- a/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx +++ b/src/shared/ComponentsNotConfigured/ComponentsNotConfigured.tsx @@ -1,4 +1,5 @@ import Button from 'ui/Button' +import Icon from 'ui/Icon' function ComponentsNotConfigured() { return ( @@ -16,8 +17,10 @@ function ComponentsNotConfigured() { variant="primary" disabled={false} to={{ pageName: 'components' }} + showExternalIcon={false} > Get started with components +