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": "المنصب",
"addRow": "إضافة صف",
"removeRow": "حذف الصف"
}
},
"openLink": "فتح"
},
"external": {
"new": "لقاء جديد",
+2 -1
View File
@@ -1677,7 +1677,8 @@
"position": "Position",
"addRow": "Add row",
"removeRow": "Remove row"
}
},
"openLink": "Open"
},
"external": {
"new": "New meeting",
+26 -27
View File
@@ -26,6 +26,7 @@ import {
Search as SearchIcon,
Link2,
Copy,
ExternalLink,
Upload,
Loader2,
Download,
@@ -1471,34 +1472,32 @@ export default function ProtocolPage() {
<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">
<Link2 size={16} className="shrink-0 text-sky-600" />
<div className="min-w-0">
<p className="text-xs font-medium text-slate-700">
{t("protocol.bookings.shareLinkTitle")}
</p>
<p
dir="ltr"
className="truncate text-xs text-slate-500 text-start"
title={publicBookingUrl}
>
{publicBookingUrl}
</p>
</div>
<p className="text-xs font-medium text-slate-700">
{t("protocol.bookings.shareLinkTitle")}
</p>
</div>
<div className="flex shrink-0 items-center gap-2 self-start sm:self-auto">
<Button
size="sm"
variant="outline"
onClick={() =>
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 ? (
<Check size={16} className="me-1 text-emerald-600" />
) : (
<Copy size={16} className="me-1" />
)}
{linkCopied
? t("protocol.bookings.linkCopied")
: t("protocol.bookings.copyLink")}
</Button>
</div>
<Button
size="sm"
variant="outline"
onClick={copyBookingLink}
className="shrink-0 self-start sm:self-auto"
>
{linkCopied ? (
<Check size={16} className="me-1 text-emerald-600" />
) : (
<Copy size={16} className="me-1" />
)}
{linkCopied
? t("protocol.bookings.linkCopied")
: t("protocol.bookings.copyLink")}
</Button>
</div>
</div>
{bookingsView === "list" && (