Task #709: إخفاء رابط الحجز العام وإضافة زر فتح
- شريط "رابط الحجز العام (للمشاركة مع الضيوف)" في صفحة المراسم:
- أُزيل عرض نص الرابط الكامل (بقي العنوان والأيقونة فقط).
- أُضيف زر "فتح" (ExternalLink) بجانب زر "نسخ الرابط" يفتح
publicBookingUrl في تبويب جديد عبر window.open مع noopener,noreferrer.
- زر النسخ يعمل كما هو دون تغيير.
- مفاتيح ترجمة جديدة: protocol.bookings.openLink (ar: "فتح", en: "Open").
- لا تغييرات في الخادم. tsc نظيف. مراجعة architect: Pass.
This commit is contained in:
@@ -1824,7 +1824,8 @@
|
||||
"position": "المنصب",
|
||||
"addRow": "إضافة صف",
|
||||
"removeRow": "حذف الصف"
|
||||
}
|
||||
},
|
||||
"openLink": "فتح"
|
||||
},
|
||||
"external": {
|
||||
"new": "لقاء جديد",
|
||||
|
||||
@@ -1677,7 +1677,8 @@
|
||||
"position": "Position",
|
||||
"addRow": "Add row",
|
||||
"removeRow": "Remove row"
|
||||
}
|
||||
},
|
||||
"openLink": "Open"
|
||||
},
|
||||
"external": {
|
||||
"new": "New meeting",
|
||||
|
||||
@@ -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" && (
|
||||
|
||||
Reference in New Issue
Block a user