Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • frontend/src/components/SongItem.tsx

    rd1ee039 r615dcee  
    1 import { useRef, useState } from "react";
     1import { use, useRef, useState } from "react";
    22import { useNavigate } from "react-router-dom";
    33import { baseURL } from "../api/axiosInstance";
     
    55import { toEmbedUrl } from "../utils/utils";
    66import PlaylistDropdown from "./playlist/PlaylistDropdown";
     7import { useAuth } from "../context/authContext";
    78
    89export interface SongItemData {
     
    5051  const navigate = useNavigate();
    5152  const { play, currentSong } = usePlayer();
     53  const { user } = useAuth();
    5254  const [internalOpen, setInternalOpen] = useState(false);
    5355  const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 });
     
    165167
    166168      {/* Like button */}
    167       {onLikeToggle && (
     169      {user && onLikeToggle && (
    168170        <button
    169171          onClick={(e) => {
     
    187189
    188190      {/* Three-dot menu */}
    189       <div className="relative">
    190         <button
    191           ref={buttonRef}
    192           onClick={(e) => {
    193             e.stopPropagation();
    194             if (playlistOpen) {
    195               setPlaylistOpen(false);
    196             } else {
    197               if (buttonRef.current) {
    198                 const rect = buttonRef.current.getBoundingClientRect();
    199                 const spaceBelow = window.innerHeight - rect.bottom;
    200                 const dropdownHeight = 260;
    201 
    202                 if (spaceBelow < dropdownHeight) {
    203                   setDropdownDirection("above");
    204                   setDropdownPosition({
    205                     top: rect.top - 8,
    206                     left: rect.right - 224,
    207                   });
    208                 } else {
    209                   setDropdownDirection("below");
    210                   setDropdownPosition({
    211                     top: rect.bottom + 8,
    212                     left: rect.right - 224,
    213                   });
     191      {user && (
     192        <div className="relative">
     193          <button
     194            ref={buttonRef}
     195            onClick={(e) => {
     196              e.stopPropagation();
     197              if (playlistOpen) {
     198                setPlaylistOpen(false);
     199              } else {
     200                if (buttonRef.current) {
     201                  const rect = buttonRef.current.getBoundingClientRect();
     202                  const spaceBelow = window.innerHeight - rect.bottom;
     203                  const dropdownHeight = 260;
     204
     205                  if (spaceBelow < dropdownHeight) {
     206                    setDropdownDirection("above");
     207                    setDropdownPosition({
     208                      top: rect.top - 8,
     209                      left: rect.right - 224,
     210                    });
     211                  } else {
     212                    setDropdownDirection("below");
     213                    setDropdownPosition({
     214                      top: rect.bottom + 8,
     215                      left: rect.right - 224,
     216                    });
     217                  }
    214218                }
     219                setPlaylistOpen(true);
    215220              }
    216               setPlaylistOpen(true);
    217             }
    218           }}
    219           className="p-2 hover:bg-white/10 rounded-full transition-colors cursor-pointer text-gray-400 hover:text-white"
    220           aria-label="More options"
    221         >
    222           <svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
    223             <circle cx="12" cy="5" r="1.5" />
    224             <circle cx="12" cy="12" r="1.5" />
    225             <circle cx="12" cy="19" r="1.5" />
    226           </svg>
    227         </button>
    228 
    229         <PlaylistDropdown
    230           songId={song.id}
    231           isOpen={playlistOpen}
    232           onClose={() => setPlaylistOpen(false)}
    233           position={dropdownPosition}
    234           usePortal={true}
    235           direction={dropdownDirection}
    236         />
    237       </div>
     221            }}
     222            className="p-2 hover:bg-white/10 rounded-full transition-colors cursor-pointer text-gray-400 hover:text-white"
     223            aria-label="More options"
     224          >
     225            <svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
     226              <circle cx="12" cy="5" r="1.5" />
     227              <circle cx="12" cy="12" r="1.5" />
     228              <circle cx="12" cy="19" r="1.5" />
     229            </svg>
     230          </button>
     231
     232          <PlaylistDropdown
     233            songId={song.id}
     234            isOpen={playlistOpen}
     235            onClose={() => setPlaylistOpen(false)}
     236            position={dropdownPosition}
     237            usePortal={true}
     238            direction={dropdownDirection}
     239          />
     240        </div>
     241      )}
     242
     243      {/* Three-dot menu */}
    238244    </div>
    239245  );
Note: See TracChangeset for help on using the changeset viewer.