Ignore:
File:
1 edited

Legend:

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

    r615dcee rd1ee039  
    1 import { use, useRef, useState } from "react";
     1import { 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";
    7 import { useAuth } from "../context/authContext";
    87
    98export interface SongItemData {
     
    5150  const navigate = useNavigate();
    5251  const { play, currentSong } = usePlayer();
    53   const { user } = useAuth();
    5452  const [internalOpen, setInternalOpen] = useState(false);
    5553  const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 });
     
    167165
    168166      {/* Like button */}
    169       {user && onLikeToggle && (
     167      {onLikeToggle && (
    170168        <button
    171169          onClick={(e) => {
     
    189187
    190188      {/* Three-dot menu */}
    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                   }
     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                  });
    218214                }
    219                 setPlaylistOpen(true);
    220215              }
    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 */}
     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>
    244238    </div>
    245239  );
Note: See TracChangeset for help on using the changeset viewer.