feat: bulk delete, team dispatch, calendar views, timeline colors
Deploy / deploy (push) Successful in 11s

- Multi-select bulk delete in all 5 list views (Artefacts, Posts, Tasks,
  Issues, Assets) with cascade deletes and confirmation modals
- Team-based issue dispatch: team picker on public issue form, team filter
  on Issues page, copy public link from Team page and Issues header,
  team assignment in IssueDetailPanel
- Month/Week toggle on PostCalendar and TaskCalendarView
- Month/Week/Day zoom on project and campaign timelines (InteractiveTimeline)
  and ProjectDetail GanttView, with Month as default
- Custom timeline bar colors: clickable color dot with 12-color palette
  popover on project, campaign, and task timeline bars
- Artefacts default view changed to list
- BulkSelectBar reusable component
- i18n keys for all new features (en + ar)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
fahed
2026-03-01 14:55:36 +03:00
parent 20d76dea8b
commit 42a5f17d0b
40 changed files with 3050 additions and 1625 deletions
+158 -1
View File
@@ -486,5 +486,162 @@
"artefacts.sortRecentlyUpdated": "آخر تحديث",
"artefacts.sortNewest": "الأحدث أولاً",
"artefacts.sortOldest": "الأقدم أولاً",
"artefacts.sortTitleAZ": "العنوان أ-ي"
"artefacts.sortTitleAZ": "العنوان أ-ي",
"login.initialSetup": "الإعداد الأولي",
"login.initialSetupDesc": "أنشئ حساب المسؤول للبدء",
"login.createAccount": "إنشاء حساب",
"login.signIn": "تسجيل الدخول",
"login.fullName": "الاسم الكامل",
"login.fullNamePlaceholder": "اسمك",
"login.email": "البريد الإلكتروني",
"login.password": "كلمة المرور",
"login.passwordPlaceholder": "اختر كلمة مرور قوية",
"login.confirmPassword": "تأكيد كلمة المرور",
"login.confirmPasswordPlaceholder": "أعد إدخال كلمة المرور",
"login.passwordMismatch": "كلمات المرور غير متطابقة",
"login.setupFailed": "فشل الإعداد",
"login.accountCreated": "تم إنشاء الحساب. يمكنك الآن تسجيل الدخول.",
"login.welcomeBack": "مرحباً بعودتك",
"login.signInDesc": "سجل الدخول للمتابعة",
"login.invalidCredentials": "البريد الإلكتروني أو كلمة المرور غير صحيحة",
"login.creatingAccount": "جاري إنشاء الحساب...",
"users.title": "إدارة المستخدمين",
"users.addUser": "إضافة مستخدم",
"users.addNewUser": "إضافة مستخدم جديد",
"users.editUser": "تعديل المستخدم",
"users.deleteUser": "حذف المستخدم",
"users.deleteUserConfirmTitle": "حذف المستخدم؟",
"users.deleteConfirm": "هل أنت متأكد من حذف هذا المستخدم؟ لا يمكن التراجع.",
"users.userSingular": "مستخدم",
"users.usersPlural": "مستخدمين",
"users.noUsers": "لم يتم العثور على مستخدمين",
"users.you": "أنت",
"users.name": "الاسم",
"users.fullNamePlaceholder": "الاسم الكامل",
"users.email": "البريد الإلكتروني",
"users.password": "كلمة المرور",
"users.confirmPassword": "تأكيد كلمة المرور",
"users.role": "الدور",
"users.created": "تاريخ الإنشاء",
"users.actions": "الإجراءات",
"users.leaveBlankToKeep": "اتركه فارغاً للإبقاء على الحالي",
"users.saveChanges": "حفظ التغييرات",
"users.passwordMismatch": "كلمات المرور غير متطابقة",
"users.passwordRequired": "كلمة المرور مطلوبة للمستخدمين الجدد",
"users.saveFailed": "فشل في حفظ المستخدم",
"users.deleteFailed": "فشل في حذف المستخدم",
"settings.saveFailed": "فشل في الحفظ",
"settings.restartTutorialFailed": "فشل في إعادة تشغيل البرنامج التعليمي",
"artefacts.title": "القطع الإبداعية",
"artefacts.subtitle": "سير عمل الموافقة على المحتوى مع إدارة الإصدارات",
"artefacts.newArtefact": "محتوى جديد",
"artefacts.createArtefact": "إنشاء محتوى",
"artefacts.searchArtefacts": "البحث في المحتوى...",
"artefacts.allBrands": "جميع العلامات التجارية",
"artefacts.allStatuses": "جميع الحالات",
"artefacts.allTypes": "جميع الأنواع",
"artefacts.noArtefacts": "لم يتم العثور على محتوى",
"artefacts.titleLabel": "العنوان",
"artefacts.titlePlaceholder": "عنوان المحتوى",
"artefacts.type": "النوع",
"artefacts.status": "الحالة",
"artefacts.brand": "العلامة التجارية",
"artefacts.creator": "المنشئ",
"artefacts.approvers": "المعتمدون",
"artefacts.version": "الإصدار",
"artefacts.updated": "آخر تحديث",
"artefacts.description": "الوصف",
"artefacts.descriptionPlaceholder": "وصف مختصر",
"artefacts.titleRequired": "العنوان مطلوب",
"artefacts.created": "تم إنشاء المحتوى",
"artefacts.createFailed": "فشل في إنشاء المحتوى",
"artefacts.deleted": "تم حذف المحتوى",
"artefacts.deleteFailed": "فشل في حذف المحتوى",
"artefacts.loadFailed": "فشل في تحميل المحتوى",
"artefacts.creating": "جاري الإنشاء...",
"artefacts.status.draft": "مسودة",
"artefacts.status.pendingReview": "بانتظار المراجعة",
"artefacts.status.approved": "مُعتمد",
"artefacts.status.rejected": "مرفوض",
"artefacts.status.revisionRequested": "مطلوب تعديل",
"review.contentReview": "مراجعة المحتوى",
"review.yourReview": "مراجعتك",
"review.approve": "موافقة",
"review.reject": "رفض",
"review.requestRevision": "طلب تعديل",
"review.reviewer": "المراجع",
"review.selectYourName": "اختر اسمك...",
"review.enterYourName": "أدخل اسمك",
"review.feedbackOptional": "ملاحظات (اختياري)",
"review.feedbackPlaceholder": "شارك أفكارك أو اقتراحاتك أو التغييرات المطلوبة...",
"review.thankYou": "شكراً لك!",
"review.notAvailable": "المراجعة غير متاحة",
"review.alreadyReviewed": "تمت مراجعة هذا المحتوى بالفعل.",
"review.statusLabel": "الحالة",
"review.reviewedBy": "تمت المراجعة بواسطة",
"review.poweredBy": "مدعوم بواسطة Samaya Digital Hub",
"review.loadFailed": "فشل في تحميل المحتوى",
"review.actionFailed": "فشل الإجراء",
"review.actionCompleted": "تم الإجراء بنجاح",
"review.enterName": "يرجى اختيار أو إدخال اسمك",
"review.confirmApprove": "هل تريد الموافقة على هذا المحتوى؟",
"review.confirmReject": "هل تريد رفض هذا المحتوى؟",
"review.feedbackRequired": "يرجى تقديم ملاحظات لطلب التعديل",
"review.contentLanguages": "لغات المحتوى",
"review.content": "المحتوى",
"review.designFiles": "ملفات التصميم",
"review.videos": "الفيديوهات",
"review.googleDriveVideo": "فيديو Google Drive",
"review.attachments": "المرفقات",
"review.previousComments": "التعليقات السابقة",
"review.version": "الإصدار",
"common.failedToSave": "فشل في الحفظ",
"common.copiedToClipboard": "تم النسخ إلى الحافظة!",
"team.failedToSaveTeam": "فشل في حفظ الفريق",
"posts.canOnlyEditOwn": "يمكنك فقط تعديل منشوراتك الخاصة",
"assets.uploadFailed": "فشل في الرفع",
"assets.failedToDelete": "فشل في حذف الملف",
"issues.failedToAddComment": "فشل في إضافة التعليق",
"issues.failedToUploadFile": "فشل في رفع الملف",
"issues.failedToSubmit": "فشل في إرسال المشكلة. حاول مجدداً.",
"issues.failedToUpdateStatus": "فشل في تحديث الحالة",
"issues.failedToResolve": "فشل في حل المشكلة",
"issues.failedToDecline": "فشل في رفض المشكلة",
"issues.failedToUpdateAssignment": "فشل في تحديث التعيين",
"issues.failedToSaveNotes": "فشل في حفظ الملاحظات",
"issues.failedToAddUpdate": "فشل في إضافة التحديث",
"issues.failedToDeleteAttachment": "فشل في حذف المرفق",
"issues.trackingLinkCopied": "تم نسخ رابط التتبع!",
"issues.deleteAttachment": "حذف المرفق؟",
"issues.deleteAttachmentDesc": "لا يمكن التراجع عن هذا الإجراء.",
"artefacts.deleteLanguage": "حذف هذه اللغة؟",
"artefacts.deleteLanguageDesc": "سيتم إزالة المحتوى لهذه اللغة.",
"artefacts.deleteAttachment": "حذف هذا المرفق؟",
"artefacts.deleteAttachmentDesc": "لا يمكن التراجع عن هذا الإجراء.",
"artefacts.deleteArtefact": "حذف هذا المحتوى؟",
"artefacts.deleteArtefactDesc": "لا يمكن التراجع عن هذا الإجراء.",
"review.confirmApproveDesc": "هل أنت متأكد من الموافقة على هذا المحتوى؟",
"review.confirmRejectDesc": "هل أنت متأكد من رفض هذا المحتوى؟",
"common.selected": "محدد",
"common.deleteSelected": "حذف المحدد",
"common.clearSelection": "إلغاء التحديد",
"common.bulkDeleteConfirm": "حذف {count} عناصر؟",
"common.bulkDeleteDesc": "لا يمكن التراجع عن هذا الإجراء.",
"common.selectAll": "تحديد الكل",
"issues.team": "الفريق",
"issues.allTeams": "جميع الفرق",
"issues.copyPublicLink": "نسخ الرابط العام",
"issues.linkCopied": "تم نسخ الرابط!",
"issues.selectTeam": "اختر فريقاً",
"issues.publicSubmitTeam": "أي فريق يجب أن يتولى مشكلتك؟",
"team.copyIssueLink": "نسخ رابط المشكلة",
"team.copyGenericIssueLink": "نسخ رابط المشاكل العام"
}
+158 -1
View File
@@ -486,5 +486,162 @@
"artefacts.sortRecentlyUpdated": "Recently Updated",
"artefacts.sortNewest": "Newest First",
"artefacts.sortOldest": "Oldest First",
"artefacts.sortTitleAZ": "Title A-Z"
"artefacts.sortTitleAZ": "Title A-Z",
"login.initialSetup": "Initial Setup",
"login.initialSetupDesc": "Create your admin account to get started",
"login.createAccount": "Create Account",
"login.signIn": "Sign In",
"login.fullName": "Full Name",
"login.fullNamePlaceholder": "Your name",
"login.email": "Email",
"login.password": "Password",
"login.passwordPlaceholder": "Choose a strong password",
"login.confirmPassword": "Confirm Password",
"login.confirmPasswordPlaceholder": "Re-enter your password",
"login.passwordMismatch": "Passwords do not match",
"login.setupFailed": "Setup failed",
"login.accountCreated": "Account created. You can now log in.",
"login.welcomeBack": "Welcome Back",
"login.signInDesc": "Sign in to continue",
"login.invalidCredentials": "Invalid email or password",
"login.creatingAccount": "Creating account...",
"users.title": "User Management",
"users.addUser": "Add User",
"users.addNewUser": "Add New User",
"users.editUser": "Edit User",
"users.deleteUser": "Delete User",
"users.deleteUserConfirmTitle": "Delete User?",
"users.deleteConfirm": "Are you sure you want to delete this user? This action cannot be undone.",
"users.userSingular": "user",
"users.usersPlural": "users",
"users.noUsers": "No users found",
"users.you": "You",
"users.name": "Name",
"users.fullNamePlaceholder": "Full name",
"users.email": "Email",
"users.password": "Password",
"users.confirmPassword": "Confirm Password",
"users.role": "Role",
"users.created": "Created",
"users.actions": "Actions",
"users.leaveBlankToKeep": "leave blank to keep current",
"users.saveChanges": "Save Changes",
"users.passwordMismatch": "Passwords do not match",
"users.passwordRequired": "Password is required for new users",
"users.saveFailed": "Failed to save user",
"users.deleteFailed": "Failed to delete user",
"settings.saveFailed": "Failed to save",
"settings.restartTutorialFailed": "Failed to restart tutorial",
"artefacts.title": "Artefacts",
"artefacts.subtitle": "Content approval workflow with versioning",
"artefacts.newArtefact": "New Artefact",
"artefacts.createArtefact": "Create Artefact",
"artefacts.searchArtefacts": "Search artefacts...",
"artefacts.allBrands": "All Brands",
"artefacts.allStatuses": "All Statuses",
"artefacts.allTypes": "All Types",
"artefacts.noArtefacts": "No artefacts found",
"artefacts.titleLabel": "Title",
"artefacts.titlePlaceholder": "Artefact title",
"artefacts.type": "Type",
"artefacts.status": "Status",
"artefacts.brand": "Brand",
"artefacts.creator": "Creator",
"artefacts.approvers": "Approvers",
"artefacts.version": "Version",
"artefacts.updated": "Updated",
"artefacts.description": "Description",
"artefacts.descriptionPlaceholder": "Brief description",
"artefacts.titleRequired": "Title is required",
"artefacts.created": "Artefact created",
"artefacts.createFailed": "Failed to create artefact",
"artefacts.deleted": "Artefact deleted",
"artefacts.deleteFailed": "Failed to delete artefact",
"artefacts.loadFailed": "Failed to load artefacts",
"artefacts.creating": "Creating...",
"artefacts.status.draft": "Draft",
"artefacts.status.pendingReview": "Pending Review",
"artefacts.status.approved": "Approved",
"artefacts.status.rejected": "Rejected",
"artefacts.status.revisionRequested": "Revision Requested",
"review.contentReview": "Content Review",
"review.yourReview": "Your Review",
"review.approve": "Approve",
"review.reject": "Reject",
"review.requestRevision": "Request Revision",
"review.reviewer": "Reviewer",
"review.selectYourName": "Select your name...",
"review.enterYourName": "Enter your name",
"review.feedbackOptional": "Feedback (optional)",
"review.feedbackPlaceholder": "Share your thoughts, suggestions, or required changes...",
"review.thankYou": "Thank You!",
"review.notAvailable": "Review Not Available",
"review.alreadyReviewed": "This artefact has already been reviewed.",
"review.statusLabel": "Status",
"review.reviewedBy": "Reviewed by",
"review.poweredBy": "Powered by Samaya Digital Hub",
"review.loadFailed": "Failed to load artefact",
"review.actionFailed": "Action failed",
"review.actionCompleted": "Action completed successfully",
"review.enterName": "Please select or enter your name",
"review.confirmApprove": "Approve this artefact?",
"review.confirmReject": "Reject this artefact?",
"review.feedbackRequired": "Please provide feedback for revision request",
"review.contentLanguages": "Content Languages",
"review.content": "Content",
"review.designFiles": "Design Files",
"review.videos": "Videos",
"review.googleDriveVideo": "Google Drive Video",
"review.attachments": "Attachments",
"review.previousComments": "Previous Comments",
"review.version": "Version",
"common.failedToSave": "Failed to save",
"common.copiedToClipboard": "Copied to clipboard!",
"team.failedToSaveTeam": "Failed to save team",
"posts.canOnlyEditOwn": "You can only edit your own posts",
"assets.uploadFailed": "Upload failed",
"assets.failedToDelete": "Failed to delete asset",
"issues.failedToAddComment": "Failed to add comment",
"issues.failedToUploadFile": "Failed to upload file",
"issues.failedToSubmit": "Failed to submit issue. Please try again.",
"issues.failedToUpdateStatus": "Failed to update status",
"issues.failedToResolve": "Failed to resolve issue",
"issues.failedToDecline": "Failed to decline issue",
"issues.failedToUpdateAssignment": "Failed to update assignment",
"issues.failedToSaveNotes": "Failed to save notes",
"issues.failedToAddUpdate": "Failed to add update",
"issues.failedToDeleteAttachment": "Failed to delete attachment",
"issues.trackingLinkCopied": "Tracking link copied to clipboard!",
"issues.deleteAttachment": "Delete attachment?",
"issues.deleteAttachmentDesc": "This action cannot be undone.",
"artefacts.deleteLanguage": "Delete this language?",
"artefacts.deleteLanguageDesc": "The content for this language will be removed.",
"artefacts.deleteAttachment": "Delete this attachment?",
"artefacts.deleteAttachmentDesc": "This action cannot be undone.",
"artefacts.deleteArtefact": "Delete this artefact?",
"artefacts.deleteArtefactDesc": "This action cannot be undone.",
"review.confirmApproveDesc": "Are you sure you want to approve this artefact?",
"review.confirmRejectDesc": "Are you sure you want to reject this artefact?",
"common.selected": "selected",
"common.deleteSelected": "Delete Selected",
"common.clearSelection": "Clear selection",
"common.bulkDeleteConfirm": "Delete {count} items?",
"common.bulkDeleteDesc": "This action cannot be undone.",
"common.selectAll": "Select all",
"issues.team": "Team",
"issues.allTeams": "All Teams",
"issues.copyPublicLink": "Copy Public Link",
"issues.linkCopied": "Link copied!",
"issues.selectTeam": "Select a team",
"issues.publicSubmitTeam": "Which team should handle your issue?",
"team.copyIssueLink": "Copy Issue Link",
"team.copyGenericIssueLink": "Copy Public Issue Link"
}