From 98271913c12c975842b916d9b0aaa4d632bc26b8 Mon Sep 17 00:00:00 2001 From: LiprikON2 <44316968+LiprikON2@users.noreply.github.com> Date: Wed, 8 May 2024 00:15:05 +0300 Subject: [PATCH] feat: add ability to manually bookmark --- .../ToggleActionIcon/ToggleActionIcon.tsx | 16 ++++--- src/renderer/scenes/AppShell/AppShell.tsx | 2 +- src/renderer/scenes/Reading/Reading.tsx | 12 +++-- .../components/BookUi/BookUi.module.css | 25 +++++++++++ .../Reading/components/BookUi/BookUi.tsx | 44 ++++++++++++++++--- 5 files changed, 85 insertions(+), 14 deletions(-) diff --git a/src/renderer/components/ToggleActionIcon/ToggleActionIcon.tsx b/src/renderer/components/ToggleActionIcon/ToggleActionIcon.tsx index 73493d3..1184bd7 100644 --- a/src/renderer/components/ToggleActionIcon/ToggleActionIcon.tsx +++ b/src/renderer/components/ToggleActionIcon/ToggleActionIcon.tsx @@ -1,11 +1,11 @@ /* eslint-disable react/display-name */ import React, { forwardRef, useEffect } from "react"; -import { ActionIcon, rem } from "@mantine/core"; +import { ActionIcon, rem, ActionIconProps } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import { type Icon } from "@tabler/icons-react"; import { observer } from "mobx-react-lite"; -type ToggleActionIconProps = { +interface ToggleActionIconProps extends ActionIconProps { OnIcon: Icon; OffIcon: Icon; on?: boolean; @@ -14,10 +14,12 @@ type ToggleActionIconProps = { offAction?: () => void; ariaLabel?: string; getAriaLabel?: () => string; + iconSize?: string; + classNames?: { icon?: string; }; -}; +} const ToggleActionIcon = observer( forwardRef( @@ -32,6 +34,9 @@ const ToggleActionIcon = observer( getAriaLabel, classNames, ariaLabel, + variant, + iconSize = "65%", + ...rest }: ToggleActionIconProps, ref: React.ForwardedRef ) => { @@ -52,7 +57,7 @@ const ToggleActionIcon = observer( const iconProps = { className: classNames?.icon, - style: { width: "65%", height: "65%" }, + style: { width: iconSize, height: iconSize }, stroke: 1.5, }; @@ -62,7 +67,8 @@ const ToggleActionIcon = observer( onClick={onClick ? onClick : handleActionIconToggle} size={rem(36)} aria-label={getAriaLabel?.() ?? ariaLabel} - variant="default-subtle" + variant={variant ?? "default-subtle"} + {...rest} > {toggled ? : } diff --git a/src/renderer/scenes/AppShell/AppShell.tsx b/src/renderer/scenes/AppShell/AppShell.tsx index 7d6c0e9..b75a677 100644 --- a/src/renderer/scenes/AppShell/AppShell.tsx +++ b/src/renderer/scenes/AppShell/AppShell.tsx @@ -79,7 +79,7 @@ export const AppShell = observer(({ layoutMarkup, children }: AppShellProps) => )} - + {layoutMarkup.scrollArea ? ( { return ( <> - {bookReadStore.isManualBookmarked ? ( + {/* {bookReadStore.isManualBookmarked ? ( ) : ( - )} - + )} */} + {!bookReadStore.isReady && "loading..."} diff --git a/src/renderer/scenes/Reading/components/BookUi/BookUi.module.css b/src/renderer/scenes/Reading/components/BookUi/BookUi.module.css index a63d444..12be1ae 100644 --- a/src/renderer/scenes/Reading/components/BookUi/BookUi.module.css +++ b/src/renderer/scenes/Reading/components/BookUi/BookUi.module.css @@ -1,3 +1,28 @@ +.top { + display: grid; + + grid-auto-flow: column; + grid-template-columns: var(--mantine-spacing-md) repeat(5, 1fr) var(--mantine-spacing-md); + grid-template-rows: rem(24); + gap: 0; +} + +.topCenter { + grid-row: 1; + grid-column: 2 / -2; +} + +.bookmark { + outline-offset: -3px; +} + +.topRight { + grid-row: 1; + grid-column: -2 / -1; + align-self: start; + justify-self: end; +} + .lineClamp { @mixin lineClamp 1; } diff --git a/src/renderer/scenes/Reading/components/BookUi/BookUi.tsx b/src/renderer/scenes/Reading/components/BookUi/BookUi.tsx index 3078ea7..62b8e3a 100644 --- a/src/renderer/scenes/Reading/components/BookUi/BookUi.tsx +++ b/src/renderer/scenes/Reading/components/BookUi/BookUi.tsx @@ -3,30 +3,64 @@ import { Box, Group, Stack, Text } from "@mantine/core"; import { observer } from "mobx-react-lite"; import classes from "./BookUi.module.css"; +import { ToggleActionIcon } from "~/renderer/components"; +import { IconBookmark, IconBookmarkFilled } from "@tabler/icons-react"; +import clsx from "clsx"; interface BookUiProps { title: string; uiState: UiState; visible?: boolean; children?: React.ReactNode; + bookmarked: boolean; + onAddBookmark?: () => void; + onRemoveBookmark?: () => void; } const BookUi = observer( // eslint-disable-next-line react/display-name forwardRef( ( - { title, uiState, visible = true, children }: BookUiProps, + { + title, + uiState, + onAddBookmark, + onRemoveBookmark, + bookmarked = false, + visible = true, + children, + }: BookUiProps, ref: React.ForwardedRef ) => { return ( - - + + {title} + - {children} - + + {children} + + {uiState.currentSectionTitle}