Refactor registration and dashboard features to support invite codes and Bunny uploads

- Moved registration logic to a new client component for better separation of concerns.
- Integrated invite code requirement based on feature flags in the registration process.
- Enhanced dashboard functionality to conditionally enable Bunny uploads based on feature flags.
- Updated various components and API routes to check for Bunny uploads and Stripe billing feature flags.
- Added new feature flag utilities for managing feature toggles in the application.
This commit is contained in:
Yusuf İpek
2026-04-08 18:46:12 +03:00
parent 6f22b0bf8b
commit b1b1715578
29 changed files with 430 additions and 282 deletions
+7
View File
@@ -158,6 +158,13 @@ export function VideoDragDropUploader({
}
}, [canUpload, needsProjectSelection, projectOptions, workspaceId]);
useEffect(() => {
if (!canUpload) {
setDialogOpen(false);
setDroppedFile(null);
}
}, [canUpload]);
useEffect(() => {
hasLoadedProjectsRef.current = false;
if (projectOptions && projectOptions.length > 0) {
+9 -1
View File
@@ -67,9 +67,15 @@ interface VideoPageContentProps {
mode: VideoPageMode;
videoId: string;
projectId?: string;
bunnyUploadsEnabled?: boolean;
}
export function VideoPageContent({ mode, videoId, projectId: propProjectId }: VideoPageContentProps) {
export function VideoPageContent({
mode,
videoId,
projectId: propProjectId,
bunnyUploadsEnabled = true,
}: VideoPageContentProps) {
const iframeRef = useRef<HTMLIFrameElement>(null);
const videoRef = useRef<HTMLVideoElement>(null);
const bunnyViewportRef = useRef<HTMLDivElement>(null);
@@ -193,6 +199,7 @@ export function VideoPageContent({ mode, videoId, projectId: propProjectId }: Vi
} = useVersionActions({
projectId: propProjectId,
videoId,
bunnyUploadsEnabled,
setVideo,
activeVersionId,
setActiveVersionId,
@@ -676,6 +683,7 @@ export function VideoPageContent({ mode, videoId, projectId: propProjectId }: Vi
onDownload={headerActions.onDownload}
projectId={projectId}
videoId={videoId}
bunnyUploadsEnabled={bunnyUploadsEnabled}
showVersionDialog={showVersionDialog}
setShowVersionDialog={setShowVersionDialog}
newVersionMode={newVersionMode}
@@ -16,6 +16,7 @@ interface UseVersionActionsParams extends VersionActionsConfig {
export function useVersionActions({
projectId,
videoId,
bunnyUploadsEnabled = true,
setVideo,
activeVersionId,
setActiveVersionId,
@@ -76,6 +77,7 @@ export function useVersionActions({
finalThumbnailUrl = getThumbnailUrl(newVersionSource, 'large');
finalDuration = meta?.duration || null;
} else {
if (!bunnyUploadsEnabled) throw new Error('Direct uploads are disabled by this host');
if (!newVersionFile) throw new Error('No file selected');
let title = newVersionFile.name;
if (newVersionLabel.trim()) {
+1
View File
@@ -184,6 +184,7 @@ export interface CommentActionsConfig {
export interface VersionActionsConfig {
projectId?: string;
videoId: string;
bunnyUploadsEnabled?: boolean;
}
export interface VideoPageHeaderActions {
@@ -13,6 +13,7 @@ import type { VideoSource } from '@/lib/video-providers';
interface VersionActionsDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
bunnyUploadsEnabled: boolean;
newVersionMode: 'url' | 'file';
onNewVersionModeChange: (mode: 'url' | 'file') => void;
newVersionUrl: string;
@@ -33,6 +34,7 @@ interface VersionActionsDialogProps {
export const VersionActionsDialog = memo(function VersionActionsDialog({
open,
onOpenChange,
bunnyUploadsEnabled,
newVersionMode,
onNewVersionModeChange,
newVersionUrl,
@@ -66,9 +68,9 @@ export const VersionActionsDialog = memo(function VersionActionsDialog({
</DialogHeader>
<div className="space-y-4 mt-2">
<Tabs value={newVersionMode} onValueChange={(v) => onNewVersionModeChange(v as 'url' | 'file')} className="mb-2">
<TabsList className="grid w-full grid-cols-2">
<TabsList className={`grid w-full ${bunnyUploadsEnabled ? 'grid-cols-2' : 'grid-cols-1'}`}>
<TabsTrigger value="url">Link URL</TabsTrigger>
<TabsTrigger value="file">Upload File</TabsTrigger>
{bunnyUploadsEnabled ? <TabsTrigger value="file">Upload File</TabsTrigger> : null}
</TabsList>
</Tabs>
@@ -43,6 +43,7 @@ interface VideoPageHeaderProps {
onDownload: (preference?: BunnyDownloadPreference) => void;
projectId?: string;
videoId: string;
bunnyUploadsEnabled: boolean;
showVersionDialog: boolean;
setShowVersionDialog: (open: boolean) => void;
newVersionMode: 'url' | 'file';
@@ -90,6 +91,7 @@ export const VideoPageHeader = memo(function VideoPageHeader({
onDownload,
projectId,
videoId,
bunnyUploadsEnabled,
showVersionDialog,
setShowVersionDialog,
newVersionMode,
@@ -227,6 +229,7 @@ export const VideoPageHeader = memo(function VideoPageHeader({
<VersionActionsDialog
open={showVersionDialog}
onOpenChange={setShowVersionDialog}
bunnyUploadsEnabled={bunnyUploadsEnabled}
newVersionMode={newVersionMode}
onNewVersionModeChange={setNewVersionMode}
newVersionUrl={newVersionUrl}