Task #709: إخفاء رابط الحجز العام وإضافة زر فتح

- شريط "رابط الحجز العام (للمشاركة مع الضيوف)" في صفحة المراسم:
  - أُزيل عرض نص الرابط الكامل (بقي العنوان والأيقونة فقط).
  - أُضيف زر "فتح" (ExternalLink) بجانب زر "نسخ الرابط" يفتح
    publicBookingUrl في تبويب جديد عبر window.open مع noopener,noreferrer.
  - زر النسخ يعمل كما هو دون تغيير.
- مفاتيح ترجمة جديدة: protocol.bookings.openLink (ar: "فتح", en: "Open").
- لا تغييرات في الخادم. tsc نظيف. مراجعة architect: Pass.
This commit is contained in:
Replit Agent
2026-07-08 19:58:29 +00:00
parent 2465c6a641
commit 57bb2e83cc
3 changed files with 30 additions and 29 deletions
+2 -1
View File
@@ -1824,7 +1824,8 @@
"position": "المنصب", "position": "المنصب",
"addRow": "إضافة صف", "addRow": "إضافة صف",
"removeRow": "حذف الصف" "removeRow": "حذف الصف"
} },
"openLink": "فتح"
}, },
"external": { "external": {
"new": "لقاء جديد", "new": "لقاء جديد",
+2 -1
View File
@@ -1677,7 +1677,8 @@
"position": "Position", "position": "Position",
"addRow": "Add row", "addRow": "Add row",
"removeRow": "Remove row" "removeRow": "Remove row"
} },
"openLink": "Open"
}, },
"external": { "external": {
"new": "New meeting", "new": "New meeting",
+10 -11
View File
@@ -26,6 +26,7 @@ import {
Search as SearchIcon, Search as SearchIcon,
Link2, Link2,
Copy, Copy,
ExternalLink,
Upload, Upload,
Loader2, Loader2,
Download, Download,
@@ -1471,25 +1472,22 @@ export default function ProtocolPage() {
<div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between"> <div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
<div className="flex min-w-0 items-center gap-2"> <div className="flex min-w-0 items-center gap-2">
<Link2 size={16} className="shrink-0 text-sky-600" /> <Link2 size={16} className="shrink-0 text-sky-600" />
<div className="min-w-0">
<p className="text-xs font-medium text-slate-700"> <p className="text-xs font-medium text-slate-700">
{t("protocol.bookings.shareLinkTitle")} {t("protocol.bookings.shareLinkTitle")}
</p> </p>
<p
dir="ltr"
className="truncate text-xs text-slate-500 text-start"
title={publicBookingUrl}
>
{publicBookingUrl}
</p>
</div>
</div> </div>
<div className="flex shrink-0 items-center gap-2 self-start sm:self-auto">
<Button <Button
size="sm" size="sm"
variant="outline" variant="outline"
onClick={copyBookingLink} onClick={() =>
className="shrink-0 self-start sm:self-auto" window.open(publicBookingUrl, "_blank", "noopener,noreferrer")
}
> >
<ExternalLink size={16} className="me-1" />
{t("protocol.bookings.openLink")}
</Button>
<Button size="sm" variant="outline" onClick={copyBookingLink}>
{linkCopied ? ( {linkCopied ? (
<Check size={16} className="me-1 text-emerald-600" /> <Check size={16} className="me-1 text-emerald-600" />
) : ( ) : (
@@ -1501,6 +1499,7 @@ export default function ProtocolPage() {
</Button> </Button>
</div> </div>
</div> </div>
</div>
{bookingsView === "list" && ( {bookingsView === "list" && (
<div className="relative"> <div className="relative">
<SearchIcon <SearchIcon