mirror of
https://github.com/yusufipk/OpenFrame.git
synced 2026-09-11 09:36:08 +00:00
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:
@@ -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) {
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user