From 6161c14a7bb3ed4d6f6564795c279c5d0faf1bef Mon Sep 17 00:00:00 2001 From: Daniel Volz Date: Wed, 25 Feb 2026 00:04:35 +0100 Subject: [PATCH] fix: logo optimization, deprecated meta tag, and clipboard copy fallback (#306) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace 2 MB favicon.svg (base64-PNG-in-SVG) with optimized 43 KB app-logo.png (256x256) - Update AppHeader and AboutModal references to use new logo - Remove SVG favicon link from index.html (PNG/ICO favicons remain) - Fix deprecated apple-mobile-web-app-capable → mobile-web-app-capable meta tag - Add clipboard copy fallback for non-secure contexts (LAN IP over HTTP) Closes #303 --- frontend/index.html | 3 +- frontend/public/app-logo.png | Bin 0 -> 42608 bytes frontend/public/favicon.svg | 3 -- frontend/src/components/AboutModal.tsx | 2 +- frontend/src/components/AppHeader.tsx | 2 +- frontend/src/hooks/useShare.ts | 38 ++++++++++++++++++++--- frontend/src/test/hooks/useShare.test.ts | 4 +-- 7 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 frontend/public/app-logo.png delete mode 100755 frontend/public/favicon.svg diff --git a/frontend/index.html b/frontend/index.html index 5d05918..4d5a586 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -6,7 +6,6 @@ MedAssist-ng - @@ -14,7 +13,7 @@ - + diff --git a/frontend/public/app-logo.png b/frontend/public/app-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..45e608c673194ebe5f4e4434cb3d5338fad50f24 GIT binary patch literal 42608 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�}Xgf0joh~HS25IAW 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�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 \ No newline at end of file diff --git a/frontend/src/components/AboutModal.tsx b/frontend/src/components/AboutModal.tsx index ff37a68..28c4cb4 100644 --- a/frontend/src/components/AboutModal.tsx +++ b/frontend/src/components/AboutModal.tsx @@ -73,7 +73,7 @@ export default function AboutModal({ isOpen, onClose }: AboutModalProps) {
- MedAssist-ng + MedAssist-ng

{t("about.appName", "MedAssist-ng")}

{t("about.description", "Personal medication tracking and reminder app")}

diff --git a/frontend/src/components/AppHeader.tsx b/frontend/src/components/AppHeader.tsx index cc7a213..0ac47ec 100644 --- a/frontend/src/components/AppHeader.tsx +++ b/frontend/src/components/AppHeader.tsx @@ -73,7 +73,7 @@ export function AppHeader({ onOpenProfile, onOpenAbout }: AppHeaderProps) { return (
- MedAssist-ng + MedAssist-ng

{pageInfo.eyebrow}

{pageInfo.title}

diff --git a/frontend/src/hooks/useShare.ts b/frontend/src/hooks/useShare.ts index 8308f0e..40b079b 100644 --- a/frontend/src/hooks/useShare.ts +++ b/frontend/src/hooks/useShare.ts @@ -106,10 +106,40 @@ export function useShare(): UseShareReturn { const copyShareLink = useCallback(() => { if (shareLink) { - navigator.clipboard.writeText(shareLink); - setShareCopied(true); - log.debug("[ShareDialog] Share link copied to clipboard"); - setTimeout(() => setShareCopied(false), 2000); + if (navigator.clipboard?.writeText) { + navigator.clipboard.writeText(shareLink).then( + () => { + setShareCopied(true); + log.debug("[ShareDialog] Share link copied to clipboard"); + setTimeout(() => setShareCopied(false), 2000); + }, + () => { + // Clipboard API blocked (non-secure context / permissions) + fallbackCopyToClipboard(shareLink); + } + ); + } else { + fallbackCopyToClipboard(shareLink); + } + } + + function fallbackCopyToClipboard(text: string) { + const textarea = document.createElement("textarea"); + textarea.value = text; + textarea.style.position = "fixed"; + textarea.style.opacity = "0"; + document.body.appendChild(textarea); + textarea.select(); + try { + document.execCommand("copy"); + setShareCopied(true); + log.debug("[ShareDialog] Share link copied via fallback"); + setTimeout(() => setShareCopied(false), 2000); + } catch { + log.warn("[ShareDialog] Clipboard copy failed — not in secure context"); + } finally { + document.body.removeChild(textarea); + } } }, [shareLink]); diff --git a/frontend/src/test/hooks/useShare.test.ts b/frontend/src/test/hooks/useShare.test.ts index 76146c1..494de38 100644 --- a/frontend/src/test/hooks/useShare.test.ts +++ b/frontend/src/test/hooks/useShare.test.ts @@ -14,7 +14,7 @@ describe("useShare", () => { mockAlert = vi.fn(); global.alert = mockAlert; - mockClipboard = { writeText: vi.fn() }; + mockClipboard = { writeText: vi.fn().mockResolvedValue(undefined) }; Object.defineProperty(navigator, "clipboard", { value: mockClipboard, writable: true, @@ -237,7 +237,7 @@ describe("useShare", () => { result.current.setShareLink("http://localhost:5173/share/test-token"); }); - act(() => { + await act(async () => { result.current.copyShareLink(); });