From 864d45714c3afc3dc39d0240ddea2ce50e3e715d Mon Sep 17 00:00:00 2001 From: elpatron Date: Sun, 7 Jun 2026 21:19:57 +0200 Subject: [PATCH] feat(settings): add share button next to copy button on mobile devices for public share link --- client/src/components/SettingsForm.tsx | 31 +++++++++++++++++++++++++- client/src/i18n/locales/da.json | 1 + client/src/i18n/locales/de.json | 1 + client/src/i18n/locales/en.json | 1 + client/src/i18n/locales/es.json | 1 + client/src/i18n/locales/fr.json | 1 + client/src/i18n/locales/nb.json | 1 + client/src/i18n/locales/sv.json | 1 + 8 files changed, 37 insertions(+), 1 deletion(-) diff --git a/client/src/components/SettingsForm.tsx b/client/src/components/SettingsForm.tsx index d01a1e7..2ad979e 100644 --- a/client/src/components/SettingsForm.tsx +++ b/client/src/components/SettingsForm.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react' import { useTranslation } from 'react-i18next' -import { Settings as SettingsIcon, Check, Users, Trash2, Copy, Link as LinkIcon } from 'lucide-react' +import { Settings as SettingsIcon, Check, Users, Trash2, Copy, Link as LinkIcon, Share2 } from 'lucide-react' import { ensureLogbookKey } from '../services/logbookKeys.js' import LogbookBackupPanel from './LogbookBackupPanel.tsx' import LinkQrCode from './LinkQrCode.tsx' @@ -131,6 +131,24 @@ export default function SettingsForm({ logbookId, onLogbookRestored }: SettingsF } } + const isShareSupported = typeof navigator !== 'undefined' && !!navigator.share + + const handleShareLink = async () => { + if (shareLink) { + try { + await navigator.share({ + title: t('seo.title') || 'Kapteins Daagbok', + text: t('settings.share_desc'), + url: shareLink + }) + } catch (err: unknown) { + if (err instanceof Error && err.name !== 'AbortError') { + console.error('Sharing link failed:', err) + } + } + } + } + const loadCollaborators = async () => { setLoadingCollabs(true) setCollabError(null) @@ -337,6 +355,17 @@ export default function SettingsForm({ logbookId, onLogbookRestored }: SettingsF > {shareCopied ? : } + {isShareSupported && ( + + )} diff --git a/client/src/i18n/locales/da.json b/client/src/i18n/locales/da.json index 0c2ea89..6e461eb 100644 --- a/client/src/i18n/locales/da.json +++ b/client/src/i18n/locales/da.json @@ -820,6 +820,7 @@ "share_enable": "Aktivér offentligt link", "share_copied": "Linket er kopieret!", "share_copy_btn": "Kopier link", + "share_btn": "Del link", "link_qr_hint": "QR-kode til scanning med en smartphone", "link_qr_alt": "QR-kode til linket", "danger_zone_title": "Farezone", diff --git a/client/src/i18n/locales/de.json b/client/src/i18n/locales/de.json index a373d0a..05baed6 100644 --- a/client/src/i18n/locales/de.json +++ b/client/src/i18n/locales/de.json @@ -820,6 +820,7 @@ "share_enable": "Öffentlichen Link aktivieren", "share_copied": "Link kopiert!", "share_copy_btn": "Link kopieren", + "share_btn": "Link teilen", "link_qr_hint": "QR-Code zum Scannen mit dem Smartphone", "link_qr_alt": "QR-Code für den Link", "danger_zone_title": "Gefahrenzone", diff --git a/client/src/i18n/locales/en.json b/client/src/i18n/locales/en.json index 5c6c4da..9dac614 100644 --- a/client/src/i18n/locales/en.json +++ b/client/src/i18n/locales/en.json @@ -820,6 +820,7 @@ "share_enable": "Enable Public Link", "share_copied": "Link copied!", "share_copy_btn": "Copy Link", + "share_btn": "Share Link", "link_qr_hint": "Scan this QR code with your phone", "link_qr_alt": "QR code for the link", "danger_zone_title": "Danger Zone", diff --git a/client/src/i18n/locales/es.json b/client/src/i18n/locales/es.json index 73537a6..117f9fd 100644 --- a/client/src/i18n/locales/es.json +++ b/client/src/i18n/locales/es.json @@ -820,6 +820,7 @@ "share_enable": "Activar enlace público", "share_copied": "¡Enlace copiado!", "share_copy_btn": "Copiar enlace", + "share_btn": "Compartir enlace", "link_qr_hint": "Código QR para escanear con el smartphone", "link_qr_alt": "Código QR del enlace", "danger_zone_title": "Zona de peligro", diff --git a/client/src/i18n/locales/fr.json b/client/src/i18n/locales/fr.json index 4ec5c4b..3b10751 100644 --- a/client/src/i18n/locales/fr.json +++ b/client/src/i18n/locales/fr.json @@ -820,6 +820,7 @@ "share_enable": "Activer le lien public", "share_copied": "Lien copié !", "share_copy_btn": "Copier le lien", + "share_btn": "Partager le lien", "link_qr_hint": "Code QR à scanner avec un smartphone", "link_qr_alt": "Code QR pour le lien", "danger_zone_title": "Zone dangereuse", diff --git a/client/src/i18n/locales/nb.json b/client/src/i18n/locales/nb.json index 7b6bdd5..d551e62 100644 --- a/client/src/i18n/locales/nb.json +++ b/client/src/i18n/locales/nb.json @@ -820,6 +820,7 @@ "share_enable": "Aktiver offentlig lenke", "share_copied": "Koblingen er kopiert!", "share_copy_btn": "Kopier lenken", + "share_btn": "Del lenke", "link_qr_hint": "QR-kode som kan skannes med smarttelefonen", "link_qr_alt": "QR-kode for lenken", "danger_zone_title": "Fareområde", diff --git a/client/src/i18n/locales/sv.json b/client/src/i18n/locales/sv.json index e170f2e..b597bd9 100644 --- a/client/src/i18n/locales/sv.json +++ b/client/src/i18n/locales/sv.json @@ -820,6 +820,7 @@ "share_enable": "Aktivera offentlig länk", "share_copied": "Länken har kopierats!", "share_copy_btn": "Kopiera länken", + "share_btn": "Dela länk", "link_qr_hint": "QR-kod att skanna med smarttelefonen", "link_qr_alt": "QR-kod för länken", "danger_zone_title": "Farlig zon",