From 736b9a36098fa35ef2cbc6af3e0bf920934e8a17 Mon Sep 17 00:00:00 2001 From: natreex Date: Wed, 26 Nov 2025 17:44:55 -0500 Subject: [PATCH] Add `openExternal` IPC handler and integrate with UI components - Introduce `openExternal` IPC handler in `electron/main.ts` for opening external links via the default browser or native app. - Update typings in `electron.d.ts` and `preload.ts` to include `openExternal`. - Refactor `ComposerRightBar` and `LeftBar` components to leverage `electron.openExternal` for external link actions (e.g., Facebook, Discord). - Add offline mode logic to filter navigation options in `ComposerRightBar` and `LeftBar`. - Enhance footer bar to display book titles when chapters are unavailable. --- components/ScribeFooterBar.tsx | 10 ++++++---- components/leftbar/ScribeLeftBar.tsx | 7 ++++++- components/rightbar/ComposerRightBar.tsx | 25 ++++++++++++------------ electron.d.ts | 3 +++ electron/main.ts | 7 ++++++- electron/preload.ts | 3 +++ 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/components/ScribeFooterBar.tsx b/components/ScribeFooterBar.tsx index 0c3b275..cbbd285 100644 --- a/components/ScribeFooterBar.tsx +++ b/components/ScribeFooterBar.tsx @@ -7,10 +7,12 @@ import {faBook, faChartSimple, faHeart, faSheetPlastic} from "@fortawesome/free- import {SessionContext} from "@/context/SessionContext"; import {useTranslations} from "next-intl"; import {AlertContext} from "@/context/AlertContext"; +import {BookContext} from "@/context/BookContext"; export default function ScribeFooterBar() { const t = useTranslations(); const {chapter} = useContext(ChapterContext); + const {book} = useContext(BookContext); const editor: Editor | null = useContext(EditorContext).editor; const {session} = useContext(SessionContext); const {errorMessage} = useContext(AlertContext) @@ -51,15 +53,15 @@ export default function ScribeFooterBar() {
{chapter && ( - + {chapter.chapterOrder < 0 ? t('scribeFooterBar.sheet') : `${chapter.chapterOrder}.`} )} - {chapter?.title || ( + { + chapter?.title || book?.title || ( <> {t('scribeFooterBar.madeWith')} @@ -69,7 +71,7 @@ export default function ScribeFooterBar() {
{ - chapter ? ( + chapter || book ? (
diff --git a/components/leftbar/ScribeLeftBar.tsx b/components/leftbar/ScribeLeftBar.tsx index a93cc90..6aa8d7d 100644 --- a/components/leftbar/ScribeLeftBar.tsx +++ b/components/leftbar/ScribeLeftBar.tsx @@ -9,6 +9,7 @@ import AddNewBookForm from "@/components/book/AddNewBookForm"; import ShortStoryGenerator from "@/components/ShortStoryGenerator"; import {SessionContext} from "@/context/SessionContext"; import {useTranslations} from "next-intl"; +import OfflineContext from "@/context/OfflineContext"; export default function ScribeLeftBar() { const {book} = useContext(BookContext); @@ -21,6 +22,7 @@ export default function ScribeLeftBar() { const [showAddNewBook, setShowAddNewBook] = useState(false); const [showGenerateShortModal, setShowGenerateShortModal] = useState(false) + const {isCurrentlyOffline} = useContext(OfflineContext) const editorComponents: PanelComponent[] = [ { @@ -76,7 +78,7 @@ export default function ScribeLeftBar() { return (
- {book ? editorComponents.map(component => ( + {book ? editorComponents.map((component:PanelComponent) => ( )) : ( homeComponents + .filter((component: PanelComponent):boolean => { + return !(isCurrentlyOffline() && component.id === 2); + }) .map((component: PanelComponent) => (
)}
- {book ? editorComponents.map((component: PanelComponent) => ( + {book ? editorComponents + .filter((component: PanelComponent):boolean => { + return !(isCurrentlyOffline() && component.id === 1); + }) + .map((component: PanelComponent) => (