Skip to content

Commit e80478b

Browse files
authored
Prevent database sync status element to overlap pagination (metabase#66225)
1 parent c8d87bd commit e80478b

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

frontend/src/metabase/collections/components/CollectionContent/CollectionItemsTable.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,14 @@ const CollectionItemsTableContentInner = ({
272272
onClick={onClick}
273273
visibleColumnsMap={visibleColumnsMap}
274274
/>
275-
<div className={cx(CS.flex, CS.justifyEnd, CS.my3)}>
275+
<div
276+
className={cx(
277+
CS.flex,
278+
CS.justifyEnd,
279+
CS.my3,
280+
CS.syncStatusAwarePagination,
281+
)}
282+
>
276283
{hasPagination && (
277284
<PaginationControls
278285
showTotal

frontend/src/metabase/common/components/UserCollectionList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export const UserCollectionList = () => {
7979
</Grid>
8080
)}
8181
</Box>
82-
<Flex justify="end">
82+
<Flex justify="end" className={CS.syncStatusAwarePagination}>
8383
<PaginationControls
8484
page={page}
8585
pageSize={PAGE_SIZE}

frontend/src/metabase/css/core/base.module.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,8 @@
1919
.circle {
2020
border-radius: 99px;
2121
}
22+
23+
:global(.sync-status-visible) .syncStatusAwarePagination {
24+
/* move pagination component up when database sync is in progress to avoid overlapping */
25+
margin-bottom: 6.5rem;
26+
}

frontend/src/metabase/status/components/DatabaseStatus/DatabaseStatus.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from "react";
1+
import { useEffect, useState } from "react";
22

33
import { isSyncInProgress } from "metabase/lib/syncing";
44
import type Database from "metabase-lib/v1/metadata/Database";
@@ -18,6 +18,14 @@ const DatabaseStatus = (props: DatabaseStatusProps): JSX.Element | null => {
1818
const isActive = databases.some(isSyncInProgress);
1919
const isVisible = useStatusVisibility(isActive);
2020

21+
useEffect(() => {
22+
if (isVisible) {
23+
document.body.classList.add("sync-status-visible");
24+
} else {
25+
document.body.classList.remove("sync-status-visible");
26+
}
27+
}, [isVisible]);
28+
2129
if (isVisible) {
2230
return <DatabaseStatusContent databases={databases} />;
2331
} else {

frontend/src/metabase/status/components/DatabaseStatus/DatabaseStatus.unit.spec.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,18 @@ describe("DatabaseStatus", () => {
7272

7373
expect(screen.queryByText("Syncing…")).not.toBeInTheDocument();
7474
});
75+
76+
it("assigns 'sync-status-visible' class to body element when database is in sync", () => {
77+
setup({
78+
user: createMockUser({ id: 1 }),
79+
databases: [
80+
createMockDatabase({
81+
creator_id: 1,
82+
initial_sync_status: "incomplete",
83+
}),
84+
],
85+
});
86+
87+
expect(document.body).toHaveClass("sync-status-visible");
88+
});
7589
});

0 commit comments

Comments
 (0)