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 { ...@@ -7,10 +7,11 @@ import {
} from "metabase/components/MetadataInfo/TableInfoIcon/TableInfoIcon"; } from "metabase/components/MetadataInfo/TableInfoIcon/TableInfoIcon";
import AccordionList from "metabase/core/components/AccordionList"; import AccordionList from "metabase/core/components/AccordionList";
import ExternalLink from "metabase/core/components/ExternalLink"; import ExternalLink from "metabase/core/components/ExternalLink";
import { color } from "metabase/lib/colors";
import MetabaseSettings from "metabase/lib/settings"; import MetabaseSettings from "metabase/lib/settings";
import { isSyncCompleted } from "metabase/lib/syncing"; import { isSyncCompleted } from "metabase/lib/syncing";
import { isNotNull } from "metabase/lib/types"; 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 Database from "metabase-lib/v1/metadata/Database";
import type Schema from "metabase-lib/v1/metadata/Schema"; import type Schema from "metabase-lib/v1/metadata/Schema";
import type Table from "metabase-lib/v1/metadata/Table"; import type Table from "metabase-lib/v1/metadata/Table";
...@@ -18,17 +19,6 @@ 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 { DataSelectorSection as Section } from "../DataSelector.styled";
import DataSelectorSectionHeader from "../DataSelectorSectionHeader"; 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 = { type DataSelectorTablePickerProps = {
hasFiltering?: boolean; hasFiltering?: boolean;
hasInitialFocus?: boolean; hasInitialFocus?: boolean;
...@@ -120,7 +110,7 @@ const DataSelectorTablePicker = ({ ...@@ -120,7 +110,7 @@ const DataSelectorTablePicker = ({
return ( return (
<DelayGroup> <DelayGroup>
<Container> <Box component="span" w="18.75rem" style={{ overflowY: "auto" }}>
<AccordionList <AccordionList
id="TablePicker" id="TablePicker"
key="tablePicker" key="tablePicker"
...@@ -143,21 +133,28 @@ const DataSelectorTablePicker = ({ ...@@ -143,21 +133,28 @@ const DataSelectorTablePicker = ({
{isSavedQuestionList && ( {isSavedQuestionList && (
<LinkToDocsOnReferencingSavedQuestionsInQueries /> <LinkToDocsOnReferencingSavedQuestionsInQueries />
)} )}
</Container> </Box>
</DelayGroup> </DelayGroup>
); );
} else { } else {
return ( return (
<Section> <Section>
<DataSelectorSectionHeader header={header} /> <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> </Section>
); );
} }
}; };
const LinkToDocsOnReferencingSavedQuestionsInQueries = () => ( const LinkToDocsOnReferencingSavedQuestionsInQueries = () => (
<LinkToDocsContainer> <Box
p="md"
ta="center"
bg={color("bg-light")}
style={{
borderTop: `1px solid ${color("border")}`,
}}
>
{t`Is a question missing?`} {t`Is a question missing?`}
<ExternalLink <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 // 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 = () => ( ...@@ -169,7 +166,7 @@ const LinkToDocsOnReferencingSavedQuestionsInQueries = () => (
> >
{t`Learn more about nested queries`} {t`Learn more about nested queries`}
</ExternalLink> </ExternalLink>
</LinkToDocsContainer> </Box>
); );
const Header = ({ const Header = ({
...@@ -178,23 +175,25 @@ const Header = ({ ...@@ -178,23 +175,25 @@ const Header = ({
selectedDatabase, selectedDatabase,
selectedSchema, selectedSchema,
}: HeaderProps) => ( }: HeaderProps) => (
<HeaderContainer> <Flex align="center" wrap="wrap">
<HeaderClickable onClick={onBack}> <Flex align="center" style={{ cursor: "pointer" }} onClick={onBack}>
{onBack && <Icon name="chevronleft" size={18} />} {onBack && <Icon name="chevronleft" size={18} />}
<HeaderDatabaseName data-testid="source-database"> <Box component="span" ml="sm" data-testid="source-database">
{selectedDatabase.name} {selectedDatabase.name}
</HeaderDatabaseName> </Box>
</HeaderClickable> </Flex>
{selectedSchema?.name && schemas.length > 1 && ( {selectedSchema?.name && schemas.length > 1 && (
<> <>
<DataSelectorHeaderDivider>/</DataSelectorHeaderDivider> <Box component="span" mx="sm" c="text-medium">
<HeaderSchemaName data-testid="source-schema"> /
</Box>
<Box component="span" data-testid="source-schema" c="text-medium">
{selectedSchema.displayName()} {selectedSchema.displayName()}
</HeaderSchemaName> </Box>
</> </>
)} )}
</HeaderContainer> </Flex>
); );
// eslint-disable-next-line import/no-default-export -- deprecated usage // 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