Commit 76ef8386 authored by tom's avatar tom

styles for filter tags

parent a6df70d4
import { Tag as ChakraTag } from '@chakra-ui/react'; import { chakra, Tag as ChakraTag } from '@chakra-ui/react';
import * as React from 'react'; import * as React from 'react';
import { nbsp } from 'lib/html-entities';
import TruncatedTextTooltip from 'ui/shared/TruncatedTextTooltip'; import TruncatedTextTooltip from 'ui/shared/TruncatedTextTooltip';
import { CloseButton } from './close-button';
import { Skeleton } from './skeleton'; import { Skeleton } from './skeleton';
export interface TagProps extends ChakraTag.RootProps { export interface TagProps extends ChakraTag.RootProps {
startElement?: React.ReactNode; startElement?: React.ReactNode;
endElement?: React.ReactNode; endElement?: React.ReactNode;
endElementProps?: ChakraTag.EndElementProps; endElementProps?: ChakraTag.EndElementProps;
label?: string;
onClose?: VoidFunction; onClose?: VoidFunction;
closable?: boolean; closable?: boolean;
truncated?: boolean; truncated?: boolean;
...@@ -22,6 +25,7 @@ export const Tag = React.forwardRef<HTMLSpanElement, TagProps>( ...@@ -22,6 +25,7 @@ export const Tag = React.forwardRef<HTMLSpanElement, TagProps>(
startElement, startElement,
endElement, endElement,
endElementProps, endElementProps,
label,
onClose, onClose,
closable = Boolean(onClose), closable = Boolean(onClose),
children, children,
...@@ -31,11 +35,15 @@ export const Tag = React.forwardRef<HTMLSpanElement, TagProps>( ...@@ -31,11 +35,15 @@ export const Tag = React.forwardRef<HTMLSpanElement, TagProps>(
...rest ...rest
} = props; } = props;
const labelElement = truncated ? ( const labelElement = label ? (
<chakra.span color="text.secondary">{ label }:{ nbsp }</chakra.span>
) : null;
const contentElement = truncated ? (
<TruncatedTextTooltip label={ children }> <TruncatedTextTooltip label={ children }>
<ChakraTag.Label>{ children }</ChakraTag.Label> <ChakraTag.Label>{ labelElement }{ children }</ChakraTag.Label>
</TruncatedTextTooltip> </TruncatedTextTooltip>
) : <ChakraTag.Label>{ children }</ChakraTag.Label>; ) : <ChakraTag.Label>{ labelElement }{ children }</ChakraTag.Label>;
return ( return (
<Skeleton loading={ loading } asChild> <Skeleton loading={ loading } asChild>
...@@ -47,13 +55,15 @@ export const Tag = React.forwardRef<HTMLSpanElement, TagProps>( ...@@ -47,13 +55,15 @@ export const Tag = React.forwardRef<HTMLSpanElement, TagProps>(
{ startElement && ( { startElement && (
<ChakraTag.StartElement _empty={{ display: 'none' }}>{ startElement }</ChakraTag.StartElement> <ChakraTag.StartElement _empty={{ display: 'none' }}>{ startElement }</ChakraTag.StartElement>
) } ) }
{ labelElement } { contentElement }
{ endElement && ( { endElement && (
<ChakraTag.EndElement { ...endElementProps }>{ endElement }</ChakraTag.EndElement> <ChakraTag.EndElement { ...endElementProps }>{ endElement }</ChakraTag.EndElement>
) } ) }
{ closable && ( { closable && (
<ChakraTag.EndElement> <ChakraTag.EndElement>
<ChakraTag.CloseTrigger onClick={ onClose }/> <ChakraTag.CloseTrigger onClick={ onClose } asChild>
<CloseButton/>
</ChakraTag.CloseTrigger>
</ChakraTag.EndElement> </ChakraTag.EndElement>
) } ) }
</ChakraTag.Root> </ChakraTag.Root>
......
...@@ -376,6 +376,9 @@ const semanticTokens: ThemingConfig['semanticTokens'] = { ...@@ -376,6 +376,9 @@ const semanticTokens: ThemingConfig['semanticTokens'] = {
bg: { value: { _light: '{colors.gray.100}', _dark: '{colors.gray.800}' } }, bg: { value: { _light: '{colors.gray.100}', _dark: '{colors.gray.800}' } },
fg: { value: { _light: '{colors.blackAlpha.800}', _dark: '{colors.whiteAlpha.800}' } }, fg: { value: { _light: '{colors.blackAlpha.800}', _dark: '{colors.whiteAlpha.800}' } },
}, },
filter: {
bg: { value: { _light: '{colors.blue.50}', _dark: '{colors.blue.800}' } },
},
select: { select: {
bg: { bg: {
DEFAULT: { value: { _light: '{colors.gray.100}', _dark: '{colors.gray.800}' } }, DEFAULT: { value: { _light: '{colors.gray.100}', _dark: '{colors.gray.800}' } },
...@@ -384,9 +387,6 @@ const semanticTokens: ThemingConfig['semanticTokens'] = { ...@@ -384,9 +387,6 @@ const semanticTokens: ThemingConfig['semanticTokens'] = {
fg: { value: { _light: '{colors.gray.500}', _dark: '{colors.whiteAlpha.800}' } }, fg: { value: { _light: '{colors.gray.500}', _dark: '{colors.whiteAlpha.800}' } },
}, },
}, },
closeTrigger: {
color: { value: { _light: '{colors.gray.400}', _dark: '{colors.gray.500}' } },
},
}, },
table: { table: {
header: { header: {
......
...@@ -29,7 +29,7 @@ export const recipe = defineSlotRecipe({ ...@@ -29,7 +29,7 @@ export const recipe = defineSlotRecipe({
justifyContent: 'center', justifyContent: 'center',
outline: '0', outline: '0',
borderRadius: 'none', borderRadius: 'none',
color: 'tag.closeTrigger.color', color: 'closeButton.fg',
focusVisibleRing: 'inside', focusVisibleRing: 'inside',
focusRingWidth: '2px', focusRingWidth: '2px',
_hover: { _hover: {
...@@ -118,6 +118,14 @@ export const recipe = defineSlotRecipe({ ...@@ -118,6 +118,14 @@ export const recipe = defineSlotRecipe({
}, },
}, },
}, },
filter: {
root: {
bgColor: 'tag.root.filter.bg',
'&:not([data-loading], [aria-busy=true])': {
bgColor: 'tag.root.filter.bg',
},
},
},
select: { select: {
root: { root: {
cursor: 'pointer', cursor: 'pointer',
......
...@@ -5,7 +5,7 @@ import React from 'react'; ...@@ -5,7 +5,7 @@ import React from 'react';
import type { AddressMudRecordsFilter, AddressMudRecordsSorting } from 'types/api/address'; import type { AddressMudRecordsFilter, AddressMudRecordsSorting } from 'types/api/address';
import useIsMobile from 'lib/hooks/useIsMobile'; import useIsMobile from 'lib/hooks/useIsMobile';
import { apos, nbsp } from 'lib/html-entities'; import { apos } from 'lib/html-entities';
import getQueryParamString from 'lib/router/getQueryParamString'; import getQueryParamString from 'lib/router/getQueryParamString';
import { Tag } from 'toolkit/chakra/tag'; import { Tag } from 'toolkit/chakra/tag';
import ActionBar, { ACTION_BAR_HEIGHT_DESKTOP } from 'ui/shared/ActionBar'; import ActionBar, { ACTION_BAR_HEIGHT_DESKTOP } from 'ui/shared/ActionBar';
...@@ -89,21 +89,14 @@ const AddressMudTable = ({ scrollRef, tableId, isQueryEnabled = true }: Props) = ...@@ -89,21 +89,14 @@ const AddressMudTable = ({ scrollRef, tableId, isQueryEnabled = true }: Props) =
const index = key as FilterKeys === 'filter_key0' ? 0 : 1; const index = key as FilterKeys === 'filter_key0' ? 0 : 1;
return ( return (
<Tag <Tag
display="inline-flex"
key={ key } key={ key }
maxW="360px" variant="filter"
// TODO @tom2drum style filter tags label={ getNameTypeText(data?.schema.key_names[index] || '', data?.schema.key_types[index] || '') }
colorScheme="blue"
closable closable
onClose={ onRemoveFilterClick(key as FilterKeys) } onClose={ onRemoveFilterClick(key as FilterKeys) }
maxW="360px"
> >
<chakra.span color="text.secondary" >{
getNameTypeText(data?.schema.key_names[index] || '', data?.schema.key_types[index] || '') }
</chakra.span>
<chakra.span color="text" overflow="hidden" textOverflow="ellipsis" whiteSpace="nowrap">
{ nbsp }
{ value } { value }
</chakra.span>
</Tag> </Tag>
); );
}) } }) }
......
...@@ -66,6 +66,7 @@ const AddressFilterInput = ({ address, mode, onModeChange, onChange, onClear, is ...@@ -66,6 +66,7 @@ const AddressFilterInput = ({ address, mode, onModeChange, onChange, onClear, is
onValueChange={ onModeChange } onValueChange={ onModeChange }
portalled={ false } portalled={ false }
w="105px" w="105px"
flexShrink={ 0 }
mr={ 3 } mr={ 3 }
/> />
<InputGroup <InputGroup
......
...@@ -132,7 +132,7 @@ const AssetFilter = ({ value = [], handleFilterChange }: Props) => { ...@@ -132,7 +132,7 @@ const AssetFilter = ({ value = [], handleFilterChange }: Props) => {
variant="select" variant="select"
> >
<Flex flexGrow={ 1 } alignItems="center"> <Flex flexGrow={ 1 } alignItems="center">
{ token.address === NATIVE_TOKEN.address ? <NativeTokenIcon boxSize={ 5 }/> : <TokenEntity.Icon token={ token }/> } { token.address === NATIVE_TOKEN.address ? <NativeTokenIcon boxSize={ 5 } mr={ 2 }/> : <TokenEntity.Icon token={ token }/> }
{ token.symbol || token.name || token.address } { token.symbol || token.name || token.address }
</Flex> </Flex>
</Tag> </Tag>
......
...@@ -228,20 +228,17 @@ const AdvancedFilter = () => { ...@@ -228,20 +228,17 @@ const AdvancedFilter = () => {
</Flex> </Flex>
<HStack gap={ 2 } flexWrap="wrap" mb={ 6 }> <HStack gap={ 2 } flexWrap="wrap" mb={ 6 }>
{ filterTags.map(t => ( { filterTags.map(t => (
<Tag key={ t.name } colorScheme="blue" display="inline-flex" onClose={ onClearFilter(t.key) } closable> <Tag key={ t.name } variant="filter" onClose={ onClearFilter(t.key) } closable label={ t.name }>
<chakra.span color="text.secondary">{ t.name }: </chakra.span> { t.value }
<chakra.span color="text">{ t.value }</chakra.span>
</Tag> </Tag>
)) } )) }
{ filterTags.length === 0 && ( { filterTags.length === 0 && (
<> <>
<Tag colorScheme="blue" display="inline-flex"> <Tag variant="filter" label="Type">
<chakra.span color="text.secondary">Type: </chakra.span> All
<chakra.span color="text">All</chakra.span>
</Tag> </Tag>
<Tag colorScheme="blue" display="inline-flex"> <Tag variant="filter" label="Age">
<chakra.span color="text.secondary">Age: </chakra.span> 7d
<chakra.span color="text">7d</chakra.span>
</Tag> </Tag>
</> </>
) } ) }
......
...@@ -7,7 +7,6 @@ import EntityTag from 'ui/shared/EntityTags/EntityTag'; ...@@ -7,7 +7,6 @@ import EntityTag from 'ui/shared/EntityTags/EntityTag';
import { Section, Container, SectionHeader, SamplesStack, Sample, SectionSubHeader } from './parts'; import { Section, Container, SectionHeader, SamplesStack, Sample, SectionSubHeader } from './parts';
const TagShowcase = () => { const TagShowcase = () => {
// TODO @tom2drum filtered tags
return ( return (
<Container value="tag"> <Container value="tag">
<Section> <Section>
...@@ -19,6 +18,9 @@ const TagShowcase = () => { ...@@ -19,6 +18,9 @@ const TagShowcase = () => {
<Sample label="variant: clickable"> <Sample label="variant: clickable">
<Tag variant="clickable">My tag</Tag> <Tag variant="clickable">My tag</Tag>
</Sample> </Sample>
<Sample label="variant: filter">
<Tag variant="filter">My tag</Tag>
</Sample>
<Sample label="variant: select"> <Sample label="variant: select">
<Tag variant="select">Default</Tag> <Tag variant="select">Default</Tag>
<Tag variant="select" selected>Selected</Tag> <Tag variant="select" selected>Selected</Tag>
...@@ -87,7 +89,13 @@ const TagShowcase = () => { ...@@ -87,7 +89,13 @@ const TagShowcase = () => {
</SamplesStack> </SamplesStack>
<SectionSubHeader>Filter tags</SectionSubHeader> <SectionSubHeader>Filter tags</SectionSubHeader>
<span>TODO</span> <SamplesStack>
<Sample>
<Tag variant="filter" label="Type">All</Tag>
<Tag variant="filter" label="Address" truncated maxW="150px" closable>0x1234567890123456789012345678901234567890</Tag>
<Tag variant="filter" label="Type" loading>All</Tag>
</Sample>
</SamplesStack>
</Section> </Section>
</Container> </Container>
); );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment