From da41aae9183c3002bbb5befdce454dd4711e2310 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Wed, 12 Nov 2025 02:32:36 +0000 Subject: [PATCH] completionId: cgen-d29e81294a25433d82ae66d0afb377e5 cgen-d29e81294a25433d82ae66d0afb377e5 --- client/pages/ethos/ArtistSettings.tsx | 65 ++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/client/pages/ethos/ArtistSettings.tsx b/client/pages/ethos/ArtistSettings.tsx index ce398acf..855ff50e 100644 --- a/client/pages/ethos/ArtistSettings.tsx +++ b/client/pages/ethos/ArtistSettings.tsx @@ -220,8 +220,69 @@ export default function ArtistSettings() { }; const handleFileSelected = (file: File) => { - setCurrentFile(file); - setShowMetadataForm(true); + // Show ecosystem license modal on first upload if not already accepted + if (!profile.ecosystem_license_accepted) { + setCurrentFile(file); + setShowLicenseModal(true); + } else { + setCurrentFile(file); + setShowMetadataForm(true); + } + }; + + const handleAcceptEcosystemLicense = async () => { + if (!user) return; + + setIsAcceptingLicense(true); + try { + // Update profile to accept ecosystem license + const res = await fetch(`/api/ethos/artists`, { + method: "PUT", + headers: { + "x-user-id": user.id, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + ...profile, + ecosystem_license_accepted: true, + }), + }); + + if (res.ok) { + setProfile((prev) => ({ + ...prev, + ecosystem_license_accepted: true, + })); + toast.success({ + title: "License accepted", + description: "You can now upload tracks to the Ethos Library", + }); + + // Continue with metadata form + setShowLicenseModal(false); + setShowMetadataForm(true); + } else { + throw new Error("Failed to accept license"); + } + } catch (error) { + console.error("License acceptance error:", error); + toast.error({ + title: "Error", + description: "Failed to accept ecosystem license", + }); + } finally { + setIsAcceptingLicense(false); + } + }; + + const handleRejectLicense = () => { + setShowLicenseModal(false); + setCurrentFile(null); + toast.info({ + title: "Upload cancelled", + description: + "You must accept the Ecosystem License to upload tracks. You can still license commercially outside of AeThex.", + }); }; const handleMetadataSubmit = async (metadata: any) => {