Skip to content
Snippets Groups Projects
Unverified Commit 53e220cb authored by Nemanja Glumac's avatar Nemanja Glumac Committed by GitHub
Browse files

Use Mantine for DataSelector table picker (#40105)

parent d01a7c8e
No related branches found
No related tags found
No related merge requests found
import styled from "@emotion/styled";
import { color } from "metabase/lib/colors";
import { space } from "metabase/styled-components/theme";
export const DataSelectorTablePickerContainer = styled.div`
overflow-y: auto;
width: 300px;
`;
export const DataSelectorTablePickerHeaderContainer = styled.div`
align-items: center;
display: flex;
flex-wrap: wrap;
`;
type Props = {
onClick?: () => void;
};
export const DataSelectorTablePickerHeaderClickable = styled.span<Props>`
align-items: center;
display: flex;
cursor: pointer;
`;
export const DataSelectorTablePickerHeaderDatabaseName = styled.span`
flex-wrap: wrap;
margin-inline-start: ${space(1)};
`;
export const DataSelectorTablePickerHeaderSchemaName = styled.span`
color: ${color("text-medium")};
flex-wrap: wrap;
`;
export const LinkToDocsContainer = styled.div`
background-color: ${color("bg-light")};
border-top: 1px solid ${color("border")};
padding: ${space(2)};
text-align: center;
`;
export const NoTablesFound = styled.div`
padding: ${space(4)};
text-align: center;
`;
export const DataSelectorHeaderDivider = styled.span`
color: ${color("text-medium")};
display: inline-block;
margin-inline: ${space(1)};
`;
......@@ -7,10 +7,11 @@ import {
} from "metabase/components/MetadataInfo/TableInfoIcon/TableInfoIcon";
import AccordionList from "metabase/core/components/AccordionList";
import ExternalLink from "metabase/core/components/ExternalLink";
import { color } from "metabase/lib/colors";
import MetabaseSettings from "metabase/lib/settings";
import { isSyncCompleted } from "metabase/lib/syncing";
import { isNotNull } from "metabase/lib/types";
import { Icon, DelayGroup } from "metabase/ui";
import { Box, Icon, DelayGroup, Flex } from "metabase/ui";
import type Database from "metabase-lib/v1/metadata/Database";
import type Schema from "metabase-lib/v1/metadata/Schema";
import type Table from "metabase-lib/v1/metadata/Table";
......@@ -18,17 +19,6 @@ import type Table from "metabase-lib/v1/metadata/Table";
import { DataSelectorSection as Section } from "../DataSelector.styled";
import DataSelectorSectionHeader from "../DataSelectorSectionHeader";
import {
DataSelectorTablePickerContainer as Container,
DataSelectorTablePickerHeaderContainer as HeaderContainer,
DataSelectorTablePickerHeaderClickable as HeaderClickable,
DataSelectorTablePickerHeaderDatabaseName as HeaderDatabaseName,
DataSelectorTablePickerHeaderSchemaName as HeaderSchemaName,
LinkToDocsContainer,
NoTablesFound,
DataSelectorHeaderDivider,
} from "./DataSelectorTablePicker.styled";
type DataSelectorTablePickerProps = {
hasFiltering?: boolean;
hasInitialFocus?: boolean;
......@@ -120,7 +110,7 @@ const DataSelectorTablePicker = ({
return (
<DelayGroup>
<Container>
<Box component="span" w="18.75rem" style={{ overflowY: "auto" }}>
<AccordionList
id="TablePicker"
key="tablePicker"
......@@ -143,21 +133,28 @@ const DataSelectorTablePicker = ({
{isSavedQuestionList && (
<LinkToDocsOnReferencingSavedQuestionsInQueries />
)}
</Container>
</Box>
</DelayGroup>
);
} else {
return (
<Section>
<DataSelectorSectionHeader header={header} />
<NoTablesFound>{t`No tables found in this database.`}</NoTablesFound>
<Box p="4rem" ta="center">{t`No tables found in this database.`}</Box>
</Section>
);
}
};
const LinkToDocsOnReferencingSavedQuestionsInQueries = () => (
<LinkToDocsContainer>
<Box
p="md"
ta="center"
bg={color("bg-light")}
style={{
borderTop: `1px solid ${color("border")}`,
}}
>
{t`Is a question missing?`}
<ExternalLink
// eslint-disable-next-line no-unconditional-metabase-links-render -- It's hard to tell if this is still used in the app. Please see https://metaboat.slack.com/archives/C505ZNNH4/p1703243785315819
......@@ -169,7 +166,7 @@ const LinkToDocsOnReferencingSavedQuestionsInQueries = () => (
>
{t`Learn more about nested queries`}
</ExternalLink>
</LinkToDocsContainer>
</Box>
);
const Header = ({
......@@ -178,23 +175,25 @@ const Header = ({
selectedDatabase,
selectedSchema,
}: HeaderProps) => (
<HeaderContainer>
<HeaderClickable onClick={onBack}>
<Flex align="center" wrap="wrap">
<Flex align="center" style={{ cursor: "pointer" }} onClick={onBack}>
{onBack && <Icon name="chevronleft" size={18} />}
<HeaderDatabaseName data-testid="source-database">
<Box component="span" ml="sm" data-testid="source-database">
{selectedDatabase.name}
</HeaderDatabaseName>
</HeaderClickable>
</Box>
</Flex>
{selectedSchema?.name && schemas.length > 1 && (
<>
<DataSelectorHeaderDivider>/</DataSelectorHeaderDivider>
<HeaderSchemaName data-testid="source-schema">
<Box component="span" mx="sm" c="text-medium">
/
</Box>
<Box component="span" data-testid="source-schema" c="text-medium">
{selectedSchema.displayName()}
</HeaderSchemaName>
</Box>
</>
)}
</HeaderContainer>
</Flex>
);
// eslint-disable-next-line import/no-default-export -- deprecated usage
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment