make compact mode more compact

This commit is contained in:
Athou
2022-11-04 11:11:37 +01:00
parent a461a72224
commit 2095a6512b
2 changed files with 23 additions and 14 deletions

View File

@@ -70,8 +70,6 @@
"groups": [ "groups": [
"useLocation", "useLocation",
"useParams", "useParams",
"useStyles",
"useMantineTheme",
"useState", "useState",
"useAppSelector", "useAppSelector",
"useAppDispatch", "useAppDispatch",

View File

@@ -17,19 +17,25 @@ interface FeedEntryProps {
onHeaderClick: (e: React.MouseEvent) => void onHeaderClick: (e: React.MouseEvent) => void
} }
const useStyles = createStyles((theme, props: FeedEntryProps) => { const useStyles = createStyles((theme, props: FeedEntryProps & { compact: boolean }) => {
let backgroundColor let backgroundColor
if (theme.colorScheme === "dark") backgroundColor = props.entry.read ? "inherit" : theme.colors.dark[5] if (theme.colorScheme === "dark") backgroundColor = props.entry.read ? "inherit" : theme.colors.dark[5]
else backgroundColor = props.entry.read && !props.expanded ? theme.colors.gray[0] : "inherit" else backgroundColor = props.entry.read && !props.expanded ? theme.colors.gray[0] : "inherit"
let marginY = theme.spacing.xs
if (props.compact) marginY = 6
let mobileMarginY = 6
if (props.compact) mobileMarginY = 4
const styles = { const styles = {
paper: { paper: {
backgroundColor, backgroundColor,
marginTop: theme.spacing.xs, marginTop: marginY,
marginBottom: theme.spacing.xs, marginBottom: marginY,
[theme.fn.smallerThan(Constants.layout.mobileBreakpoint)]: { [theme.fn.smallerThan(Constants.layout.mobileBreakpoint)]: {
marginTop: "6px", marginTop: mobileMarginY,
marginBottom: "6px", marginBottom: mobileMarginY,
}, },
}, },
body: { body: {
@@ -45,18 +51,23 @@ const useStyles = createStyles((theme, props: FeedEntryProps) => {
}) })
export function FeedEntry(props: FeedEntryProps) { export function FeedEntry(props: FeedEntryProps) {
const { classes } = useStyles(props)
const viewMode = useAppSelector(state => state.user.settings?.viewMode) const viewMode = useAppSelector(state => state.user.settings?.viewMode)
const dispatch = useAppDispatch() const compact = viewMode === "title"
const compactHeader = compact && !props.expanded
const compactHeader = viewMode === "title" && !props.expanded const { classes } = useStyles({ ...props, compact })
const dispatch = useAppDispatch()
const swipeHandlers = useSwipeable({ const swipeHandlers = useSwipeable({
onSwipedRight: () => dispatch(markEntry({ entry: props.entry, read: !props.entry.read })), onSwipedRight: () => dispatch(markEntry({ entry: props.entry, read: !props.entry.read })),
}) })
const spacing = compact ? 8 : "xs"
const borderRadius = compact ? "xs" : "sm"
return ( return (
<Paper withBorder className={classes.paper}> <Paper withBorder radius={borderRadius} className={classes.paper}>
<Anchor <Anchor
variant="text" variant="text"
href={props.entry.url} href={props.entry.url}
@@ -65,17 +76,17 @@ export function FeedEntry(props: FeedEntryProps) {
onClick={props.onHeaderClick} onClick={props.onHeaderClick}
onAuxClick={props.onHeaderClick} onAuxClick={props.onHeaderClick}
> >
<Box p="xs" {...swipeHandlers}> <Box p={spacing} {...swipeHandlers}>
{compactHeader && <FeedEntryCompactHeader entry={props.entry} />} {compactHeader && <FeedEntryCompactHeader entry={props.entry} />}
{!compactHeader && <FeedEntryHeader entry={props.entry} expanded={props.expanded} />} {!compactHeader && <FeedEntryHeader entry={props.entry} expanded={props.expanded} />}
</Box> </Box>
</Anchor> </Anchor>
{props.expanded && ( {props.expanded && (
<Box px="xs" pb="xs"> <Box px={spacing} pb={spacing}>
<Box className={classes.body} sx={{ direction: props.entry.rtl ? "rtl" : "ltr" }}> <Box className={classes.body} sx={{ direction: props.entry.rtl ? "rtl" : "ltr" }}>
<FeedEntryBody entry={props.entry} /> <FeedEntryBody entry={props.entry} />
</Box> </Box>
<Divider variant="dashed" my="xs" /> <Divider variant="dashed" my={spacing} />
<FeedEntryFooter entry={props.entry} /> <FeedEntryFooter entry={props.entry} />
</Box> </Box>
)} )}