feat: post approval workflow, i18n completion, and multiple fixes
Deploy / deploy (push) Successful in 11s

- Add approval process to posts (approver multi-select, rejected status column)
- Reorganize PostDetailPanel into Content, Scheduling, Approval sections
- Fix save button visibility: move to fixed footer via SlidePanel footer prop
- Change date picker from datetime-local to date-only
- Complete Arabic translations across all panels (Header, Issues, Artefacts)
- Fix artefact versioning to start empty (copyFromPrevious defaults to false)
- Separate media uploads by type (image, audio, video) in PostDetailPanel
- Fix team membership save when editing own profile as superadmin
- Server: add approver_ids column to Posts, enrich GET/POST/PATCH responses

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
fahed
2026-03-05 14:17:16 +03:00
parent daf2404bda
commit 82236ecffa
12 changed files with 882 additions and 309 deletions
+196 -1
View File
@@ -30,6 +30,7 @@
"common.noResults": "No results",
"common.loading": "Loading...",
"common.unassigned": "Unassigned",
"common.close": "Close",
"common.required": "Required",
"common.saveFailed": "Failed to save. Please try again.",
"common.updateFailed": "Failed to update. Please try again.",
@@ -130,6 +131,7 @@
"posts.status.approved": "Approved",
"posts.status.scheduled": "Scheduled",
"posts.status.published": "Published",
"posts.status.rejected": "Rejected",
"tasks.title": "Tasks",
"tasks.newTask": "New Task",
"tasks.editTask": "Edit Task",
@@ -693,5 +695,198 @@
"settings.roleName": "Role name",
"settings.roleColor": "Color",
"settings.deleteRoleConfirm": "Are you sure you want to delete this role?",
"settings.noRoles": "No roles defined yet. Add your first role."
"settings.noRoles": "No roles defined yet. Add your first role.",
"header.dashboard": "Dashboard",
"header.posts": "Post Production",
"header.assets": "Assets",
"header.campaigns": "Campaigns",
"header.finance": "Finance",
"header.projects": "Projects",
"header.tasks": "My Tasks",
"header.team": "Team",
"header.users": "User Management",
"header.projectDetails": "Project Details",
"header.campaignDetails": "Campaign Details",
"header.page": "Page",
"header.superadmin": "Superadmin",
"header.manager": "Manager",
"header.contributor": "Contributor",
"header.passwordMismatch": "New passwords do not match",
"header.passwordMinLength": "New password must be at least 6 characters",
"header.passwordUpdateSuccess": "Password updated successfully",
"header.passwordUpdateFailed": "Failed to change password",
"header.userManagement": "User Management",
"header.changePassword": "Change Password",
"header.signOut": "Sign Out",
"header.currentPassword": "Current Password",
"header.newPassword": "New Password",
"header.confirmNewPassword": "Confirm New Password",
"header.updatePassword": "Update Password",
"header.saving": "Saving...",
"issues.title": "Issues",
"issues.subtitle": "Track and manage issue submissions",
"issues.searchPlaceholder": "Search issues...",
"issues.allStatuses": "All Statuses",
"issues.allCategories": "All Categories",
"issues.allTypes": "All Types",
"issues.allBrands": "All Brands",
"issues.allPriorities": "All Priorities",
"issues.clearAll": "Clear All",
"issues.noIssuesFound": "No issues found",
"issues.tryAdjustingFilters": "Try adjusting your filters",
"issues.noIssuesSubmitted": "No issues have been submitted yet",
"issues.issuesDeleted": "Issues deleted",
"issues.tableTitle": "Title",
"issues.tableSubmitter": "Submitter",
"issues.tableBrand": "Brand",
"issues.tableCategory": "Category",
"issues.tableType": "Type",
"issues.tablePriority": "Priority",
"issues.tableStatus": "Status",
"issues.tableAssignedTo": "Assigned To",
"issues.tableCreated": "Created",
"issues.typeRequest": "Request",
"issues.typeCorrection": "Correction",
"issues.typeComplaint": "Complaint",
"issues.typeSuggestion": "Suggestion",
"issues.typeOther": "Other",
"issues.priorityLow": "Low",
"issues.priorityMedium": "Medium",
"issues.priorityHigh": "High",
"issues.priorityUrgent": "Urgent",
"issues.submitterInfo": "Submitter Information",
"issues.nameLabel": "Name:",
"issues.emailLabel": "Email:",
"issues.phoneLabel": "Phone:",
"issues.submittedLabel": "Submitted:",
"issues.description": "Description",
"issues.noDescription": "No description provided",
"issues.assignedTo": "Assigned To",
"issues.unassigned": "Unassigned",
"issues.brandLabel": "Brand",
"issues.noBrand": "No brand",
"issues.internalNotes": "Internal Notes (Staff Only)",
"issues.internalNotesPlaceholder": "Internal notes not visible to submitter...",
"issues.resolutionSummary": "Resolution Summary (Public)",
"issues.resolvedOn": "Resolved on",
"issues.acknowledge": "Acknowledge",
"issues.startWork": "Start Work",
"issues.resolve": "Resolve",
"issues.decline": "Decline",
"issues.publicTrackingLink": "Public Tracking Link",
"issues.updatesTimeline": "Updates Timeline",
"issues.addUpdatePlaceholder": "Add an update...",
"issues.makePublic": "Make public (visible to submitter)",
"issues.addUpdate": "Add Update",
"issues.noUpdates": "No updates yet",
"issues.attachments": "Attachments",
"issues.clickToUpload": "Click to upload file",
"issues.uploading": "Uploading...",
"issues.download": "Download",
"issues.noAttachments": "No attachments",
"issues.resolveIssue": "Resolve Issue",
"issues.resolveSummaryHint": "Provide a resolution summary that will be visible to the submitter.",
"issues.resolutionPlaceholder": "Explain how this issue was resolved...",
"issues.markAsResolved": "Mark as Resolved",
"issues.resolving": "Resolving...",
"issues.declineIssue": "Decline Issue",
"issues.declineReasonHint": "Provide a reason for declining this issue. This will be visible to the submitter.",
"issues.declinePlaceholder": "Explain why this issue cannot be addressed...",
"issues.declining": "Declining...",
"artefacts.descriptionLabel": "Description",
"artefacts.descriptionFieldPlaceholder": "Add a description...",
"artefacts.approversLabel": "Approvers",
"artefacts.versions": "Versions",
"artefacts.newVersion": "New Version",
"artefacts.languages": "Languages",
"artefacts.addLanguage": "Add Language",
"artefacts.noLanguages": "No languages added yet",
"artefacts.imagesLabel": "Images",
"artefacts.uploadImage": "Upload Image",
"artefacts.uploading": "Uploading...",
"artefacts.noImages": "No images uploaded yet",
"artefacts.videosLabel": "Videos",
"artefacts.addVideoBtn": "Add Video",
"artefacts.noVideos": "No videos added yet",
"artefacts.comments": "Comments",
"artefacts.sendComment": "Send",
"artefacts.addCommentPlaceholder": "Add a comment...",
"artefacts.submitForReview": "Submit for Review",
"artefacts.submitting": "Submitting...",
"artefacts.reviewLinkTitle": "Review Link (expires in 7 days)",
"artefacts.feedbackTitle": "Feedback",
"artefacts.approvedByLabel": "Approved by",
"artefacts.saveDraft": "Save",
"artefacts.savingDraft": "Saving...",
"artefacts.versionNotes": "Version Notes",
"artefacts.whatChanged": "What changed in this version?",
"artefacts.copyLanguages": "Copy languages from previous version",
"artefacts.createVersion": "Create Version",
"artefacts.creatingVersion": "Creating...",
"artefacts.languageLabel": "Language",
"artefacts.contentLabel": "Content",
"artefacts.selectLanguage": "Select a language...",
"artefacts.enterContent": "Enter the content in this language...",
"artefacts.addVideoTitle": "Add Video",
"artefacts.uploadFile": "Upload File",
"artefacts.chooseVideoFile": "Choose video file",
"artefacts.videoFormats": "MP4, MOV, AVI, etc.",
"artefacts.googleDriveLink": "Google Drive Link",
"artefacts.googleDriveUrl": "Google Drive URL",
"artefacts.driveUrlPlaceholder": "https://drive.google.com/file/d/...",
"artefacts.publiclyAccessible": "Paste a Google Drive share link. Make sure the file is publicly accessible.",
"artefacts.addLink": "Add Link",
"artefacts.adding": "Adding...",
"artefacts.googleDriveVideo": "Google Drive Video",
"artefacts.deleteArtefactTooltip": "Delete artefact",
"artefacts.saveDraftTooltip": "Save draft",
"artefacts.createNewVersion": "Create New Version",
"artefacts.failedLoadVersions": "Failed to load versions",
"artefacts.failedLoadVersionData": "Failed to load version data",
"artefacts.versionCreated": "New version created",
"artefacts.failedCreateVersion": "Failed to create version",
"artefacts.languageAdded": "Language added",
"artefacts.allFieldsRequired": "All fields are required",
"artefacts.failedAddLanguage": "Failed to add language",
"artefacts.languageDeleted": "Language deleted",
"artefacts.failedDeleteLanguage": "Failed to delete language",
"artefacts.fileUploaded": "File uploaded",
"artefacts.uploadFailed": "Upload failed",
"artefacts.videoLinkAdded": "Video link added",
"artefacts.failedAddVideoLink": "Failed to add video link",
"artefacts.enterDriveUrl": "Please enter a Google Drive URL",
"artefacts.attachmentDeleted": "Attachment deleted",
"artefacts.failedDeleteAttachment": "Failed to delete attachment",
"artefacts.submittedForReview": "Submitted for review!",
"artefacts.failedSubmitReview": "Failed to submit for review",
"artefacts.linkCopied": "Link copied to clipboard",
"artefacts.commentAdded": "Comment added",
"artefacts.failedAddComment": "Failed to add comment",
"artefacts.updated": "Updated",
"artefacts.failedUpdate": "Failed to update",
"artefacts.draftSaved": "Draft saved",
"artefacts.failedSaveDraft": "Failed to save draft",
"artefacts.titleRequired": "Title is required",
"artefacts.failedDelete": "Failed to delete",
"posts.images": "Images",
"posts.audio": "Audio",
"posts.videos": "Videos",
"posts.otherFiles": "Other Files",
"posts.addImage": "Add Image",
"posts.addAudio": "Add Audio",
"posts.addVideo": "Add Video",
"posts.dragToUpload": "Drag files here to upload",
"posts.assignedTo": "Assigned To",
"posts.approval": "Approval",
"posts.approvers": "Approvers",
"posts.selectApprovers": "Select approvers...",
"posts.scheduling": "Scheduling & Assignment",
"posts.content": "Content"
}