{"version":3,"file":"CreateAlbum-D-9E2dBD.js","sources":["../../../app/javascript/entrypoints/CreateAlbum/CreateAlbum.jsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Box, Button, TextField, Typography, Accordion, AccordionSummary, AccordionDetails, CircularProgress, Alert } from \"@mui/material\";\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { db } from \"../../shared/firebase\";\nimport { collection, addDoc, doc, getDoc } from \"firebase/firestore\";\nimport { useAuth } from \"../../shared/useAuth\";\nimport ContainerBox from \"../../shared/ContainerBox\";\nimport { Helmet } from \"react-helmet\";\nimport axios from \"axios\";\nimport QuestionnaireForm from \"../Questionnaire/QuestionnaireForm\";\nimport { colors } from \"../lib/theme\";\nimport { Link } from \"react-router-dom\";\n\nconst relationshipOptions = [\n { us: \"Mom\", uk: \"Mum\" },\n { us: \"Dad\", uk: \"Dad\" },\n { us: \"Spouse\", uk: \"Spouse\" },\n { us: \"Grandma\", uk: \"Nan\" },\n { us: \"Grandpa\", uk: \"Grandad\" },\n { us: \"Partner\", uk: \"Partner\" },\n { us: \"Sibling\", uk: \"Sibling\" },\n { us: \"Son\", uk: \"Son\" },\n { us: \"Daughter\", uk: \"Daughter\" },\n { us: \"Niece\", uk: \"Niece\" },\n { us: \"Nephew\", uk: \"Nephew\" },\n { us: \"Cousin\", uk: \"Cousin\" },\n { us: \"Uncle\", uk: \"Uncle\" },\n { us: \"Aunt\", uk: \"Auntie\" },\n { us: \"Good Friend\", uk: \"Good Friend\" },\n { us: \"Other\", uk: \"Other\" },\n];\n\nconst occasionOptions = [\n \"Birthday\",\n \"Anniversary\",\n \"Graduation\",\n \"Retirement\",\n \"Holiday\",\n \"Just Because\",\n \"Other\",\n];\n\nconst CreateAlbum = ({ config }) => {\n const { user, loading } = useAuth();\n const [newAlbumTitle, setNewAlbumTitle] = useState(\"\");\n const [isGeneratingTracks, setIsGeneratingTracks] = useState(false);\n const [generatedTracks, setGeneratedTracks] = useState([]);\n const [error, setError] = useState(null);\n\n const [openaiApiKey, setOpenaiApiKey] = useState(\"\");\n const [relationship, setRelationship] = useState(\"\");\n const [occasion, setOccasion] = useState(\"\");\n const [location, setLocation] = useState(\"US\");\n const [favoriteMemory, setFavoriteMemory] = useState(\"\");\n const [hobbiesInterests, setHobbiesInterests] = useState(\"\");\n const [accordionExpanded, setAccordionExpanded] = useState(false);\n const [subscriptionLevel, setSubscriptionLevel] = useState(0);\n\n useEffect(() => {\n console.log(\"Config received:\", config);\n if (config?.openaiApiKey) {\n console.log(\"Setting OpenAI API key:\", config.openaiApiKey);\n setOpenaiApiKey(config.openaiApiKey);\n } else {\n console.error(\"OpenAI API key is missing from the configuration\");\n setError(\"OpenAI API key is missing. Please check your configuration.\");\n }\n }, [config]);\n\n useEffect(() => {\n console.log(\"Current openaiApiKey state:\", openaiApiKey);\n }, [openaiApiKey]);\n\n useEffect(() => {\n const fetchUserData = async () => {\n if (user) {\n try {\n const userDoc = await getDoc(doc(db, \"users\", user.uid));\n const userData = userDoc.data();\n setSubscriptionLevel(userData?.subscriptionLevel || 0);\n } catch (error) {\n console.error(\"Error fetching user data:\", error);\n }\n }\n };\n\n fetchUserData();\n }, [user]);\n\n const handleCreateNewAlbum = async () => {\n if (newAlbumTitle.trim()) {\n try {\n const newAlbumRef = await addDoc(collection(db, \"albums\"), {\n title: newAlbumTitle.trim(),\n userId: user.uid,\n createdAt: new Date(),\n updatedAt: new Date(),\n privacyLevel: 0,\n tracks: generatedTracks,\n });\n window.location.href = `/album/${newAlbumRef.id}`;\n } catch (error) {\n console.error(\"Error creating new album: \", error);\n setError(\"Failed to create album. Please try again.\");\n }\n }\n };\n\n const generateTracks = async () => {\n if (subscriptionLevel === 0) {\n return;\n }\n\n console.log(\"Generating tracks. API Key:\", openaiApiKey);\n setIsGeneratingTracks(true);\n setError(null);\n try {\n if (!openaiApiKey) {\n throw new Error(\"OpenAI API key is missing\");\n }\n const response = await axios.post(\n \"https://api.openai.com/v1/chat/completions\",\n {\n model: \"gpt-4o-2024-08-06\",\n messages: [\n {\n role: \"user\",\n content: `We're creating a gift for ${relationship} that requires the recipient to answer 10 questions about themselves on the occasion of ${occasion}.\n Generate 10 questions for a ${relationship}.\n Please only generate 10 questions. You should count them to ensure that there are only 10.\n Basic instructions: should include 10 questions that are core to interview and 5 that are specific/relevant to the additional context of the user's favorite memory of ${favoriteMemory} and their interest in ${hobbiesInterests}.\n 10 questions to earn more about them as a person as it relates to ${hobbiesInterests} (format: \"1. [question1] 2. [question2] ...\")`\n },\n ],\n temperature: 0.5,\n },\n {\n headers: {\n Authorization: `Bearer ${openaiApiKey}`,\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n const content = response.data.choices[0].message.content;\n console.log(\"Raw content:\", content);\n const tracks = content\n .split('\\n')\n .filter(line => line.trim() !== '')\n .map(line => {\n const match = line.match(/^\\d+\\.\\s*(.+)/);\n return {\n title: match ? match[1].trim() : line.trim(),\n updatedAt: new Date(),\n };\n });\n console.log(\"Extracted tracks:\", tracks);\n setGeneratedTracks(tracks);\n } catch (error) {\n console.error(\"Error generating tracks:\", error);\n setError(\"Failed to generate tracks. Please check your API key and try again.\");\n } finally {\n setIsGeneratingTracks(false);\n }\n };\n\n const handleRemoveQuestions = () => {\n setGeneratedTracks([]);\n setAccordionExpanded(false);\n };\n\n if (loading) {\n return (\n \n \n \n \n \n );\n }\n\n return (\n \n \n Create Album - Golden Record\n \n \n \n \n Create New Album\n \n setNewAlbumTitle(e.target.value)}\n sx={{ mb: 3 }}\n />\n\n setAccordionExpanded(isExpanded)}>\n } sx={{ backgroundColor: colors.navy, color: \"white\" }}>\n ✨ Let us help you generate the questions (Optional)\n \n \n \n \n \n \n\n {subscriptionLevel === 0 && (\n \n AI-generated tracks is a premium feature.\n \n Upgrade your account\n to use this feature.\n \n )}\n\n {generatedTracks.length > 0 && (\n \n Generated Questions (You can edit these later):\n {generatedTracks.map((track, index) => (\n {index + 1}. {track.title}\n ))}\n \n \n )}\n \n \n\n {error && (\n \n {error}\n \n )}\n\n \n \n \n );\n};\n\nexport default CreateAlbum;\n"],"names":["relationshipOptions","occasionOptions","CreateAlbum","config","user","loading","useAuth","newAlbumTitle","setNewAlbumTitle","useState","isGeneratingTracks","setIsGeneratingTracks","generatedTracks","setGeneratedTracks","error","setError","openaiApiKey","setOpenaiApiKey","relationship","setRelationship","occasion","setOccasion","location","setLocation","favoriteMemory","setFavoriteMemory","hobbiesInterests","setHobbiesInterests","accordionExpanded","setAccordionExpanded","subscriptionLevel","setSubscriptionLevel","useEffect","userData","getDoc","doc","db","handleCreateNewAlbum","newAlbumRef","addDoc","collection","generateTracks","content","axios","tracks","line","match","handleRemoveQuestions","React","ContainerBox","Box","CircularProgress","colors","Helmet","Typography","TextField","e","Accordion","isExpanded","AccordionSummary","ExpandMoreIcon","AccordionDetails","QuestionnaireForm","Button","Alert","Link","track","index"],"mappings":"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"}