{"version":3,"file":"AlbumHeader-Cx6Gg-jb.js","sources":["../../../app/javascript/entrypoints/Album/AlbumHeader.jsx"],"sourcesContent":["// AlbumHeader.js\nimport React, { useState } from \"react\";\nimport { Typography, TextField, IconButton, Button, Box } from \"@mui/material\";\nimport { useNavigate } from \"react-router-dom\";\nimport { colors } from \"../lib/theme\";\nimport RefreshLink from \"../../shared/RefreshLink\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport CheckIcon from \"@mui/icons-material/Check\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport { doc, updateDoc, deleteDoc } from \"firebase/firestore\";\nimport { db } from \"../../shared/firebase\";\nimport ConfirmDialog from '../../shared/ConfirmDialog';\n\nconst AlbumHeader = ({ albumId, title, subtitle, creatorName, userId, currentUserId, privacyLevel }) => {\n const [isEditing, setIsEditing] = useState(false);\n const [editedTitle, setEditedTitle] = useState(title);\n const [openDeleteDialog, setOpenDeleteDialog] = useState(false);\n const [isEditingSubTitle, setIsEditingSubTitle] = useState(false);\n const [editedSubTitle, setEditedSubTitle] = useState(subtitle);\n const navigate = useNavigate();\n\n const handleEditClick = () => {\n setIsEditing(true);\n setEditedTitle(title);\n };\n\n const handleSaveTitle = async () => {\n try {\n const albumRef = doc(db, \"albums\", albumId);\n await updateDoc(albumRef, {\n title: editedTitle,\n updatedAt: new Date(),\n });\n setIsEditing(false);\n } catch (error) {\n console.error(\"Error updating album title:\", error);\n alert(\"Failed to update album title. Please try again.\");\n }\n };\n\n const handleCancelEdit = () => {\n setIsEditing(false);\n setEditedTitle(title);\n };\n\n const handleDeleteClick = () => {\n setOpenDeleteDialog(true);\n };\n\n const handleCloseDeleteDialog = () => {\n setOpenDeleteDialog(false);\n };\n\n const handleConfirmDelete = async () => {\n try {\n const albumRef = doc(db, \"albums\", albumId);\n await deleteDoc(albumRef);\n handleCloseDeleteDialog();\n navigate(\"/dashboard\"); // Redirect to dashboard after deletion\n } catch (error) {\n console.error(\"Error deleting album:\", error);\n alert(\"Failed to delete album. Please try again.\");\n }\n };\n\n const handleSubTitleChange = async (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n const newSubTitle = event.target.value.trim();\n if (newSubTitle !== subtitle) {\n try {\n const albumRef = doc(db, \"albums\", albumId);\n await updateDoc(albumRef, {\n subtitle: newSubTitle,\n updatedAt: new Date(),\n });\n setEditedSubTitle(newSubTitle);\n } catch (error) {\n console.error(\"Error updating subtitle:\", error);\n alert(\"Failed to update subtitle. Please try again.\");\n }\n }\n setIsEditingSubTitle(false);\n }\n };\n\n const handleSaveSubTitle = async () => {\n if (editedSubTitle !== subtitle) {\n try {\n const albumRef = doc(db, \"albums\", albumId);\n await updateDoc(albumRef, {\n subtitle: editedSubTitle,\n updatedAt: new Date(),\n });\n } catch (error) {\n console.error(\"Error updating subtitle:\", error);\n alert(\"Failed to update subtitle. Please try again.\");\n }\n }\n setIsEditingSubTitle(false);\n };\n\n const getPrivacyMessage = () => {\n switch (privacyLevel) {\n case 0:\n return 'A private album';\n case 1:\n return 'A shared album';\n case 2:\n return 'A public album';\n default:\n return 'An album';\n }\n };\n\n return (\n <>\n {isEditing ? (\n
\n setEditedTitle(e.target.value)}\n variant=\"standard\"\n sx={{ input: { color: colors.black, fontSize: '2.125rem', fontWeight: 400 } }}\n />\n \n \n \n \n \n \n
\n ) : (\n \n {title || \"No Title\"}\n {currentUserId === userId && (\n <>\n \n \n \n \n \n \n \n )}\n \n )}\n {currentUserId === userId && (\n \n {isEditingSubTitle ? (\n <>\n setEditedSubTitle(e.target.value)}\n onKeyPress={(e) => e.key === 'Enter' && handleSaveSubTitle()}\n autoFocus\n sx={{\n input: { color: colors.black },\n width: '300px',\n mr: 1\n }}\n />\n \n \n ) : (\n setIsEditingSubTitle(true)}\n sx={{ cursor: 'pointer', '&:hover': { textDecoration: 'underline' }, color: colors.white }}\n >\n {editedSubTitle || \"Add a subtitle\"}\n \n )}\n \n )}\n {creatorName && (\n \n {`${getPrivacyMessage()} created by: `}\n \n {creatorName}\n \n \n )}\n\n \n \n );\n};\n\nexport default AlbumHeader;\n"],"names":["AlbumHeader","albumId","title","subtitle","creatorName","userId","currentUserId","privacyLevel","isEditing","setIsEditing","useState","editedTitle","setEditedTitle","openDeleteDialog","setOpenDeleteDialog","isEditingSubTitle","setIsEditingSubTitle","editedSubTitle","setEditedSubTitle","navigate","useNavigate","handleEditClick","handleSaveTitle","albumRef","doc","db","updateDoc","error","handleCancelEdit","handleDeleteClick","handleCloseDeleteDialog","handleConfirmDelete","deleteDoc","handleSaveSubTitle","getPrivacyMessage","React","TextField","e","colors","IconButton","CheckIcon","CloseIcon","Typography","EditIcon","DeleteIcon","Box","Button","RefreshLink","ConfirmDialog"],"mappings":"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"}