{"version":3,"file":"Track-5hJmRjzA.js","sources":["../../../app/javascript/entrypoints/Track/Track.jsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { doc, getDoc } from \"firebase/firestore\";\nimport { Box, CircularProgress, Typography } from \"@mui/material\";\nimport { useNavigate } from \"react-router-dom\";\nimport { colors } from \"../lib/theme\";\nimport { db } from \"../../shared/firebase\";\nimport { useAuth } from \"../../shared/useAuth\";\nimport AlbumCover from \"../Album/AlbumCover\";\nimport RefreshLink from \"../../shared/RefreshLink\";\nimport TrackItem from \"../Album/TrackItem\";\nimport useAudioPlayer from \"../../shared/useAudioPlayer\";\n\nconst reactRootDataset = document.getElementById(\"react-root\").dataset;\n\nconst Track = () => {\n const [track, setTrack] = useState(null);\n const [album, setAlbum] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const { user, loading: userLoading } = useAuth();\n const albumId = reactRootDataset.albumId;\n const trackId = reactRootDataset.trackId;\n const navigate = useNavigate();\n const [sharedWith, setSharedWith] = useState([]);\n\n const {\n isPlaying,\n playingTrackId,\n currentTime,\n duration,\n handlePause,\n handlePlayPause,\n handleSeek,\n selectedTrackId,\n playingSegmentIndex,\n handleDeleteSegment,\n startRecording,\n stopRecording,\n isRecording,\n recordingTrackId,\n remainingTime,\n } = useAudioPlayer(albumId, album?.userId, user, sharedWith, null, setTrack);\n\n useEffect(() => {\n const fetchTrackAndAlbum = async () => {\n console.log(\"Fetching track and album\");\n console.log(\"albumId:\", albumId, \"trackId:\", trackId);\n console.log(\"user:\", user);\n console.log(\"userLoading:\", userLoading);\n\n if (userLoading) {\n console.log(\"User loading, skipping fetch\");\n return;\n }\n\n setLoading(true);\n setError(null);\n\n if (!albumId || !trackId) {\n console.log(\"No album ID or track ID provided\");\n setError(\"No album ID or track ID provided\");\n setLoading(false);\n return;\n }\n\n try {\n const albumDoc = await getDoc(doc(db, \"albums\", albumId));\n\n if (albumDoc.exists()) {\n const albumData = { id: albumDoc.id, ...albumDoc.data() };\n console.log(\"Album data:\", albumData);\n setAlbum(albumData);\n\n // Set sharedWith here\n setSharedWith(albumData.sharedWith || []);\n\n const foundTrack = albumData.tracks.find((t) => t.id === trackId);\n\n if (foundTrack) {\n console.log(\"Found track:\", foundTrack);\n setTrack(foundTrack);\n\n console.log(\"albumData.privacyLevel:\", albumData.privacyLevel);\n console.log(\"albumData.userId:\", albumData.userId);\n console.log(\"user.uid:\", user?.uid);\n console.log(\"albumData.sharedWith:\", albumData.sharedWith);\n\n const isPublic = albumData.privacyLevel === 2;\n\n if (!isPublic && !user) {\n console.log(\n \"Non-public track, user not logged in. Redirecting to login.\"\n );\n navigate(\n `/login/?redirect_to=/album/${albumId}/track/${trackId}`\n );\n return;\n }\n\n if (!isPublic) {\n const isOwner = user && albumData.userId === user.uid;\n const isShared =\n user &&\n albumData.sharedWith &&\n albumData.sharedWith.includes(user.uid);\n\n if (!isOwner && !isShared) {\n console.log(\n \"User does not have access to this non-public track\"\n );\n navigate(\"/login\");\n return;\n }\n }\n } else {\n console.log(\"Track not found in the album\");\n setError(\"Track not found in the album\");\n }\n } else {\n console.log(\"Album not found\");\n setError(\"Album not found\");\n }\n } catch (error) {\n console.error(\"Error fetching album and track:\", error);\n setError(\"An error occurred while fetching data\");\n } finally {\n setLoading(false);\n }\n };\n\n fetchTrackAndAlbum();\n }, [albumId, trackId, user, userLoading, navigate]);\n\n const handleStopRecording = async () => {\n await stopRecording();\n };\n\n console.log(\"Rendering Track component\");\n console.log(\n \"loading:\",\n loading,\n \"error:\",\n error,\n \"track:\",\n track,\n \"album:\",\n album\n );\n\n if (loading) {\n return (\n \n \n \n );\n }\n\n if (error) {\n return {error};\n }\n\n return (\n <>\n \n {track?.title} - Golden Record\n \n \n \n \n \n \n \n {track?.title}\n \n \n From the album:{\" \"}\n \n {album?.title}\n \n \n \n \n {}}\n handleImageUpload={() => {}}\n user={null}\n userId={null}\n sharedWith={[]}\n />\n \n \n {track && album && (\n {}}\n handleSaveTrackTitle={() => {}}\n handleCancelEdit={() => {}}\n setEditingTrackTitle={() => {}}\n handleDeleteTrack={() => {}}\n handlePause={handlePause}\n albumId={album?.id}\n showTrackControls={false}\n playingSegmentIndex={playingSegmentIndex}\n handleDeleteSegment={handleDeleteSegment}\n remainingTime={remainingTime}\n />\n )}\n \n \n >\n );\n};\n\nexport default Track;\n"],"names":["reactRootDataset","Track","track","setTrack","useState","album","setAlbum","loading","setLoading","error","setError","user","userLoading","useAuth","albumId","trackId","navigate","useNavigate","sharedWith","setSharedWith","isPlaying","playingTrackId","currentTime","duration","handlePause","handlePlayPause","handleSeek","selectedTrackId","playingSegmentIndex","handleDeleteSegment","startRecording","stopRecording","isRecording","recordingTrackId","remainingTime","useAudioPlayer","useEffect","albumDoc","getDoc","doc","db","albumData","foundTrack","t","isPublic","isOwner","isShared","handleStopRecording","React","Box","CircularProgress","colors","Typography","Helmet","RefreshLink","AlbumCover","TrackItem"],"mappings":"yxDAaA,MAAMA,EAAmB,SAAS,eAAe,YAAY,EAAE,QAEzDC,GAAQ,IAAM,CAClB,KAAM,CAACC,EAAOC,CAAQ,EAAIC,WAAS,IAAI,EACjC,CAACC,EAAOC,CAAQ,EAAIF,WAAS,IAAI,EACjC,CAACG,EAASC,CAAU,EAAIJ,WAAS,EAAI,EACrC,CAACK,EAAOC,CAAQ,EAAIN,WAAS,IAAI,EACjC,CAAE,KAAAO,EAAM,QAASC,GAAgBC,EAAQ,EACzCC,EAAUd,EAAiB,QAC3Be,EAAUf,EAAiB,QAC3BgB,EAAWC,IACX,CAACC,EAAYC,CAAa,EAAIf,EAAA,SAAS,CAAE,CAAA,EAEzC,CACJ,UAAAgB,EACA,eAAAC,EACA,YAAAC,EACA,SAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,oBAAAC,EACA,eAAAC,EACA,cAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,cAAAC,CAAA,EACEC,EAAerB,EAAST,GAAA,YAAAA,EAAO,OAAQM,EAAMO,EAAY,KAAMf,CAAQ,EAE3EiC,EAAAA,UAAU,IAAM,EACa,SAAY,CAMrC,GALA,QAAQ,IAAI,0BAA0B,EACtC,QAAQ,IAAI,WAAYtB,EAAS,WAAYC,CAAO,EAC5C,QAAA,IAAI,QAASJ,CAAI,EACjB,QAAA,IAAI,eAAgBC,CAAW,EAEnCA,EAAa,CACf,QAAQ,IAAI,8BAA8B,EAC1C,MACF,CAKI,GAHJJ,EAAW,EAAI,EACfE,EAAS,IAAI,EAET,CAACI,GAAW,CAACC,EAAS,CACxB,QAAQ,IAAI,kCAAkC,EAC9CL,EAAS,kCAAkC,EAC3CF,EAAW,EAAK,EAChB,MACF,CAEI,GAAA,CACF,MAAM6B,EAAW,MAAMC,EAAOC,EAAIC,EAAI,SAAU1B,CAAO,CAAC,EAEpD,GAAAuB,EAAS,SAAU,CACf,MAAAI,EAAY,CAAE,GAAIJ,EAAS,GAAI,GAAGA,EAAS,QACzC,QAAA,IAAI,cAAeI,CAAS,EACpCnC,EAASmC,CAAS,EAGJtB,EAAAsB,EAAU,YAAc,CAAA,CAAE,EAElC,MAAAC,EAAaD,EAAU,OAAO,KAAME,GAAMA,EAAE,KAAO5B,CAAO,EAEhE,GAAI2B,EAAY,CACN,QAAA,IAAI,eAAgBA,CAAU,EACtCvC,EAASuC,CAAU,EAEX,QAAA,IAAI,0BAA2BD,EAAU,YAAY,EACrD,QAAA,IAAI,oBAAqBA,EAAU,MAAM,EACzC,QAAA,IAAI,YAAa9B,GAAA,YAAAA,EAAM,GAAG,EAC1B,QAAA,IAAI,wBAAyB8B,EAAU,UAAU,EAEnD,MAAAG,EAAWH,EAAU,eAAiB,EAExC,GAAA,CAACG,GAAY,CAACjC,EAAM,CACd,QAAA,IACN,6DAAA,EAEFK,EACE,8BAA8BF,CAAO,UAAUC,CAAO,EAAA,EAExD,MACF,CAEA,GAAI,CAAC6B,EAAU,CACb,MAAMC,EAAUlC,GAAQ8B,EAAU,SAAW9B,EAAK,IAC5CmC,EACJnC,GACA8B,EAAU,YACVA,EAAU,WAAW,SAAS9B,EAAK,GAAG,EAEpC,GAAA,CAACkC,GAAW,CAACC,EAAU,CACjB,QAAA,IACN,oDAAA,EAEF9B,EAAS,QAAQ,EACjB,MACF,CACF,CAAA,MAEA,QAAQ,IAAI,8BAA8B,EAC1CN,EAAS,8BAA8B,CACzC,MAEA,QAAQ,IAAI,iBAAiB,EAC7BA,EAAS,iBAAiB,QAErBD,EAAO,CACN,QAAA,MAAM,kCAAmCA,CAAK,EACtDC,EAAS,uCAAuC,CAAA,QAChD,CACAF,EAAW,EAAK,CAClB,CAAA,IAGiB,EAClB,CAACM,EAASC,EAASJ,EAAMC,EAAaI,CAAQ,CAAC,EAElD,MAAM+B,EAAsB,SAAY,CACtC,MAAMhB,EAAc,CAAA,EAetB,OAZA,QAAQ,IAAI,2BAA2B,EAC/B,QAAA,IACN,WACAxB,EACA,SACAE,EACA,SACAP,EACA,SACAG,CAAA,EAGEE,EAEAyC,EAAA,cAACC,EAAA,CACC,GAAI,CACF,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,OAAQ,OACV,CAAA,kBAECC,EAAiB,CAAA,GAAI,CAAE,MAAOC,EAAO,MAAQ,CAAA,EAKhD1C,EACMuC,EAAA,cAAAI,EAAA,CAAW,MAAM,OAAA,EAAS3C,CAAM,EAIxCuC,EAAA,cAAAA,EAAA,SAAA,KACGA,EAAA,cAAAK,EAAA,KACEL,EAAA,cAAA,QAAA,KAAO9C,GAAA,YAAAA,EAAO,MAAM,kBAAgB,EACrC8C,EAAA,cAAC,OAAK,CAAA,SAAS,WAAW,QAAS3C,GAAA,YAAAA,EAAO,QAAU,CAAA,EACnD2C,EAAA,cAAA,OAAA,CAAK,SAAS,WAAW,QAAS9C,GAAA,YAAAA,EAAO,KAAO,CAAA,EACjD8C,EAAA,cAAC,OAAA,CACC,SAAS,iBACT,QAAS,qBAAqB3C,GAAA,YAAAA,EAAO,KAAK,EAAA,CAE5C,EAAA2C,EAAA,cAAC,OAAA,CACC,SAAS,SACT,QAAS,sCAAsCjC,CAAO,EAAA,CACxD,EACCiC,EAAA,cAAA,OAAA,CAAK,KAAK,mBAAmB,QAAQ,mBAAoB,CAAA,CAC5D,EACAA,EAAA,cAACI,EAAW,CAAA,QAAQ,KAAK,GAAI,CAAE,MAAOD,EAAO,KAAM,GAAI,CAAE,GACtDjD,GAAA,YAAAA,EAAO,KACV,EACA8C,EAAA,cAACI,EAAW,CAAA,QAAQ,KAAK,GAAI,CAAE,MAAOD,EAAO,MAAO,GAAI,EAAK,EAAA,kBAC3C,IAChBH,EAAA,cAACM,EAAY,CAAA,GAAI,UAAUjD,GAAA,YAAAA,EAAO,EAAE,GAAI,GAAI,CAAE,MAAO8C,EAAO,IAAA,CACzD,EAAA9C,GAAA,YAAAA,EAAO,KACV,CACF,EACA2C,EAAA,cAACC,EAAA,CACC,GAAI,CACF,QAAS,OACT,cAAe,CAAE,GAAI,SAAU,GAAI,KAAM,EACzC,IAAK,CACP,CAAA,EAEAD,EAAA,cAACC,EAAI,CAAA,GAAI,CAAE,MAAO,CAAE,GAAI,OAAQ,GAAI,OAAQ,CAAA,CAC1C,EAAAD,EAAA,cAACO,EAAA,CACC,SAAUlD,GAAA,YAAAA,EAAO,SACjB,iBAAkB,IAAM,CAAC,EACzB,kBAAmB,IAAM,CAAC,EAC1B,KAAM,KACN,OAAQ,KACR,WAAY,CAAC,CAAA,CAAA,CAEjB,EACA2C,EAAA,cAACC,GAAI,GAAI,CAAE,SAAU,CAAE,GACpB/C,GAASG,GACR2C,EAAA,cAACQ,EAAA,CACC,wBAAyB,GACzB,MAAAtD,EACA,UAAAkB,EACA,eAAAC,EACA,gBAAAI,EACA,YAAAH,EACA,SAAAC,EACA,WAAAG,EACA,gBAAAC,EACA,KAAAhB,EACA,OAAQN,GAAA,YAAAA,EAAO,OACf,YAAYA,GAAA,YAAAA,EAAO,aAAc,CAAC,EAClC,YAAA2B,EACA,iBAAAC,EACA,cAAAF,EACA,eAAAD,EACA,oBAAAiB,EACA,eAAgB,KAChB,kBAAkB,GAClB,gBAAiB,IAAM,CAAC,EACxB,qBAAsB,IAAM,CAAC,EAC7B,iBAAkB,IAAM,CAAC,EACzB,qBAAsB,IAAM,CAAC,EAC7B,kBAAmB,IAAM,CAAC,EAC1B,YAAAvB,EACA,QAASnB,GAAA,YAAAA,EAAO,GAChB,kBAAmB,GACnB,oBAAAuB,EACA,oBAAAC,EACA,cAAAK,CAAA,CAAA,CAGN,CAAA,CAEJ,CAEJ"}