release-18-06-2026-hubs-and-bulk-media-upload - #1628
Merged
Conversation
- PageHeader shows hub.title as title and project name in breadcrumbs using hub.project from GET /hubs/:hid (regenerated API types) - Add 'Import new media' button and icon buttons to PageHeader - Add trash button to pending video items to remove them individually - Fix UploadModal navigating to same page not appending new uploads - Add translation keys for hub videos header meta and tooltips
…ate to 404 if not found
…r better encapsulation
…leware for better entity handling
…tyId and isHub - Updated InsightForm, InsightsDrawer, PageHeader, and Widgets to replace useParams with useOutletContext for accessing campaignId. - Modified Video components (EditTagModal, Observation, ObservationForm, PageHeader, etc.) to utilize entityId and isHub from Outlet context. - Adjusted routing and API calls to accommodate the new context structure, ensuring proper handling of campaigns and hubs. - Enhanced navigation links and breadcrumbs to reflect the new entity structure.
…ionality in Insights and Metas pages
- Updated package.json to use the latest version of @appquality/unguess-design-system. - Added new translation keys for media import modal in translation.json. - Refactored ImportMediaModal component to include file upload functionality, language selection, and error handling. - Created utility function getFileType to determine the type of uploaded files. - Enhanced user experience with loading indicators and error messages during file upload.
…ary.597.0d973bf.0
feat: update translations for video optimization status refactor: enhance video list with editing capabilities and processing status indication
…rove device handling
…chers based on hub status in Metas component
…ayout in ImportMediaModal
…d user data handling
…mpty and ImportMediaModal components
feat: integrate analytics tracking for media upload interactions in Empty and ImportMediaModal components
…evice meta rendering
Frontend Upload Video - Enhance hub management with new modals, video handling, and routing
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces Hub support alongside existing Campaign flows, enabling bulk audio/video uploads, new media list behaviors for processing/error states, and new Dashboard entry points for creating and discovering hubs. It also extends the API layer and routing so Videos/Video/Insights pages can operate against either entity type via a shared middleware + outlet context.
Changes:
- Added hub-aware routing + middleware (
CampaignsHubsMiddleware) and refactored Videos/Video/Insights pages to useentityId+isHub. - Implemented hub media management: bulk upload modal, processing/error UI states, edit-details modal, and delete confirmation flow.
- Added hub discovery/creation UX on Dashboard (Suggested Hubs + “New activity” modal), plus shared date-format utilities.
Reviewed changes
Copilot reviewed 63 out of 70 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| src/pages/Videos/utils/getFileType.ts | Adds file-type helper for upload UI file list. |
| src/pages/Videos/useVideos.ts | Refactors device grouping to new API shape + adds polling/totalVideos. |
| src/pages/Videos/parts/VideoItem.tsx | Hub-aware item rendering + processing/error/disabled navigation UI. |
| src/pages/Videos/parts/VideoContainer.tsx | Replaces list with table + actions (edit/delete) + modals. |
| src/pages/Videos/parts/DeleteVideoConfirmModal.tsx | New confirm modal for deleting hub media. |
| src/pages/Videos/PageHeader.tsx | Uses outlet context + hub/campaign-aware campaign header hook. |
| src/pages/Videos/Metas.tsx | Hub-aware metas + upload CTA + device counters + menu changes. |
| src/pages/Videos/index.tsx | Hub/campaign-aware data fetching + navigation slice updates. |
| src/pages/Videos/ImportMediaModal.tsx | New bulk media upload flow for hubs (language + uploads + cleanup). |
| src/pages/Videos/Empty.tsx | Hub-specific empty state + upload CTA. |
| src/pages/Videos/Content.tsx | Hub-aware grouping/expansion + import modal wiring. |
| src/pages/Video/index.tsx | Hub/campaign-aware workspace/entity loading + navigation slice updates. |
| src/pages/Video/components/TitleDropdownNew.tsx | Uses outlet context entity id for tagging calls. |
| src/pages/Video/components/PageHeader/VideoPagination.tsx | Hub/campaign-aware navigation paths + entity context. |
| src/pages/Video/components/PageHeader/useUsecaseWithVideos.tsx | Adapts to new video API shape for device ordering. |
| src/pages/Video/components/PageHeader/UsecaseSelect.tsx | Uses outlet context entity id and hub-aware navigation. |
| src/pages/Video/components/PageHeader/index.tsx | Hub-aware breadcrumbs + entity fetching for header. |
| src/pages/Video/components/ObservationForm.tsx | Uses entityId from outlet context for tag APIs. |
| src/pages/Video/components/Observation.tsx | Hub/campaign-aware deep link URL building. |
| src/pages/Video/components/EditTagModal.tsx | Uses entityId from outlet context for tag patching. |
| src/pages/Video/Actions.tsx | Adds edit-details button + hub-aware metadata rendering. |
| src/pages/Insights/Widgets.tsx | Uses entityId from outlet context. |
| src/pages/Insights/PageHeader.tsx | Hub-aware routes + export button + toasts. |
| src/pages/Insights/InsightsDrawer/InsightForm.tsx | Uses entityId from outlet context for tags query. |
| src/pages/Insights/InsightsDrawer/index.tsx | Uses entityId from outlet context for insights query. |
| src/pages/Insights/index.tsx | Hub/campaign-aware workspace/entity loading + navigation slice updates. |
| src/pages/Insights/FormProvider.tsx | Uses entityId from outlet context for insight create calls. |
| src/pages/Insights/Collection/Lightbox.tsx | Hub-aware observation link routing + device label updates. |
| src/pages/Insights/Collection/index.tsx | Uses entityId from outlet context for observations query. |
| src/pages/Dashboard/SuggestedHubs.tsx | New dashboard section listing hubs across workspace/projects. |
| src/pages/Dashboard/projectPageHeader.tsx | “New activity” now opens modal instead of navigating to templates. |
| src/pages/Dashboard/Project.tsx | Adds SuggestedHubs section and accounts for hubs_count in empty logic. |
| src/pages/Dashboard/Modals/steps/FormStep.tsx | New activity creation form step (project + hub name). |
| src/pages/Dashboard/Modals/steps/ChooseStep.tsx | New activity choose step (launch test vs create hub). |
| src/pages/Dashboard/Modals/NewActivityModal.tsx | New modal to create hub or navigate to templates. |
| src/pages/Dashboard/index.tsx | Adds SuggestedHubs to dashboard. |
| src/pages/Dashboard/HubItem.tsx | Hub card component for SuggestedHubs. |
| src/pages/Dashboard/headerContent.tsx | Header CTA now opens NewActivityModal. |
| src/pages/Dashboard/CampaignItem.tsx | Switches to shared API date formatting helper. |
| src/pages/Campaign/pageHeader/useCampaign.tsx | Adds useCampaignOrHub hook to support both entities. |
| src/pages/Campaign/pageHeader/Meta/WatcherList/hooks/useAvailableUsers.tsx | Attempts hub support in watcher availability lookup. |
| src/pages/Bugs/Content/BugsTable/components/CompletionTooltip.tsx | Moves styled component out of render. |
| src/locales/it/translation.json | Adds hub/media/new-activity keys (mostly empty IT strings). |
| src/locales/en/translation.json | Adds hub/media/new-activity strings and copy updates. |
| src/features/templates/CampaignsHubsMiddleware.tsx | New middleware validating entity + injecting outlet context. |
| src/features/navigation/types.d.ts | Adds hubId and isHub to navigation state type. |
| src/features/navigation/navigationSlice.ts | Adds hubId and isHub actions/state. |
| src/features/api/index.ts | Adds hub endpoints, hub assets endpoints, oauth endpoints, and video schema changes. |
| src/features/api/customEndpoints/getWorkspaceHubs.ts | New endpoint to list hubs across workspace/projects. |
| src/features/api/customEndpoints/getHubWithWorkspace.ts | New endpoint to fetch hub + workspace in one query. |
| src/features/api/customEndpoints/getCampaignWithWorkspace.ts | Minor type cleanup. |
| src/features/api/apiTags.ts | Adds “Videos” tags + invalidation for hub asset mutations. |
| src/features/api/api.ts | Adds “Videos” tag type. |
| src/common/video/getVideoDeviceLabel.ts | Adds shared device label helpers and ordering. |
| src/common/schema.ts | Updates OpenAPI schema for hubs + oauth + video model changes. |
| src/common/Pages.tsx | Adds hub routes and wraps videos/insights/video with middleware. |
| src/common/date/apiDate.ts | Adds shared API date parsing/formatting utilities. |
| src/common/components/videos/EditVideoModal.tsx | New modal to edit hub media details via PATCH hub assets API. |
| src/common/components/Pipe.tsx | Adjusts responsive display styling. |
| src/common/components/navigation/sidebar/index.tsx | Sidebar project count includes hubs_count. |
| src/common/components/inviteUsers/campaignSettings.tsx | Adds hub-aware entity loading for permissions modal. |
| src/common/components/BugDetail/Meta/index.tsx | Adds “unknown” device icon support. |
| src/common/components/BugDetail/Description.tsx | Simplifies Editor usage props. |
| src/assets/icons/pill-icon-unknown.svg | New unknown device icon asset. |
| src/assets/icons/orange-cloud-btn.svg | New activity modal illustration asset. |
| src/assets/icons/hubs-bg-icon.svg | Hub card icon asset. |
| src/assets/icons/blue-rocket-btn.svg | New activity modal illustration asset. |
| src/assets/hub-empty-state.svg | Hub empty state illustration asset. |
| package.json | Updates design-system dependency version range. |
| package-lock.json | Locks updated design-system and cosmiconfig patch update. |
Comments suppressed due to low confidence (1)
src/pages/Video/components/PageHeader/UsecaseSelect.tsx:51
handleNavigateusesnavigate,prefix, andentityIdbut theuseCallbackdependency array only includesuseUsecasesWithVideos. This can cause stale navigation targets when switching between hubs/campaigns or entities.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
feat: restrict video editing and actions to hub users only
refactor: replace useOutletContext with useLocation to determine hub status
marcbon
approved these changes
Jun 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.