Skip to content

Commit c5aa440

Browse files
committed
v3.0.0
1 parent 120a78e commit c5aa440

29 files changed

+99
-41
lines changed

CrazyMusicLibrary/src/GlobalAudioProvider.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ export const AudioPlayerProvider = ({ children }) => {
922922
setEditingAlbum({
923923
id: playlistInfos.id,
924924
type : "playlist",
925-
coverURL: `${apiBase}/covers/${playlistInfos.cover}`,
925+
coverURL: playlistInfos.cover ? `${apiBase}/covers/${playlistInfos.cover}` : null,
926926
name: playlistInfos.title,
927927
description: playlistInfos.description,
928928
collaborators : collaborators

CrazyMusicLibrary/src/components/AddMusic.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@
1313
top:0;
1414
z-index: 20;
1515
}
16+
.addMusicRoot[data-minimized="true"]{
17+
display: none;
18+
}
19+
#upload-progress-tiny{
20+
position: absolute;
21+
bottom : -30px;
22+
padding : 2px 7px;
23+
border-radius: 10px;
24+
background-color:var(--cards-background);
25+
text-align: center;
26+
}
27+
1628
.addMusicContainer{
1729
--width: 820px;
1830
--height: 700px;

CrazyMusicLibrary/src/components/AddMusic.jsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,8 @@ const AddMusic = ({ closeOverlay, uploadPercent, uploadProgress, uploadFinished,
479479
setActiveIndex(0);
480480
setEditingAlbum(null);
481481
setPercentageUpload(0);
482-
console.log("Closing overlay");
483482
emit("musicUploaded");
484-
closeOverlay();
483+
485484
}, 750);
486485

487486
}
@@ -520,8 +519,8 @@ const AddMusic = ({ closeOverlay, uploadPercent, uploadProgress, uploadFinished,
520519
}
521520
}
522521
return (
523-
<div className='addMusicRoot'>
524-
<div className="addMusicContainer" style={(isMinimize) ? { display: "none" } : {}}>
522+
<div className='addMusicRoot' data-minimized={isMinimize}>
523+
<div className="addMusicContainer">
525524
<AddMusicContext.Provider value={{ albums, moveTrackToNewAlbum, editingAlbum, moveTrackToAlbum, setEditingAlbum }}>
526525
<IconX className="buttonRound closeOverlay" onClick={handleClose} />
527526
<h2>Add Music</h2>

CrazyMusicLibrary/src/components/AddMusic/AlbumCard.css

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
:root{
22
--card-border-radius: 15px;
33
}
4-
54
.album-card{
65
display: flex;
76
flex-direction: column;
@@ -12,7 +11,21 @@
1211
position: relative;
1312
box-shadow: var(--box-shadow-small);
1413
}
15-
14+
.skeleton-loader-album{
15+
background-color: var(--cards-background);
16+
width: 100%;
17+
aspect-ratio:1;
18+
border-radius: 10px;
19+
animation: loadAlbum 0.4s ease-in-out alternate infinite;
20+
}
21+
@keyframes loadAlbum{
22+
from{
23+
opacity: 0.8;
24+
}
25+
to{
26+
opacity: 1;
27+
}
28+
}
1629
.album-card[context="add"]{
1730
width: 150px;
1831
}
@@ -76,7 +89,7 @@
7689
width: 100%;
7790
height: auto;
7891
aspect-ratio: 1;
79-
border-radius: var( --card-border-radius) ;
92+
border-radius: var( --card-border-radius) var( --card-border-radius) 0px 0px;
8093
}
8194

8295
.album-card-overview-button{

CrazyMusicLibrary/src/components/AudioControls.jsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ const AudioControls = ({context}) => {
1717
playPreviousSong();
1818
}
1919
return(
20-
<div className="audio-controls" data-mobile-context={context.mobile}>
20+
<div className="audio-controls" data-mobile-context={context.mobile}
21+
data-preserv-width={context.preserv}>
2122
{(!context.mobile || context.maximize) ? <SvgHoverToggle iconHovered={IconPlayerTrackPrevFilled}
2223
iconDefault={IconPlayerTrackPrev} onClick={handlePreviousNextSong}/> : null}
2324
<SvgHoverToggle iconHovered={ (isPlaying) ? IconPlayerPauseFilled : IconPlayerPlayFilled}
2425
iconDefault={(isPlaying) ? IconPlayerPause : IconPlayerPlay}
2526
onClick={handleToggleTrackPaused}/>
26-
<SvgHoverToggle iconHovered={IconPlayerTrackNextFilled} iconDefault={IconPlayerTrackNext}
27-
onClick={handlePlayNextSong}/>
27+
{!(context.radio && context.mobile) && <SvgHoverToggle iconHovered={IconPlayerTrackNextFilled} iconDefault={IconPlayerTrackNext}
28+
onClick={handlePlayNextSong}/>}
2829
</div>
2930
)
3031
}

CrazyMusicLibrary/src/components/CreatePlaylist.jsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ const CreatePlaylist = ({closeOverlay, applyCanges, editPlaylistClass}) => { //p
1212
const [playlistClass, setPlaylistClass] = useState((editPlaylistClass) ? editPlaylistClass : {id : uuidv4()});
1313
const [possibleCollaborators, setPossibleCollaborators] = useState([])
1414
const [collaborators, setCollaborators] = useState([]);
15+
// const []
1516

1617
//only load when the playlistClass is set
1718
useEffect(() => {
1819
if (playlistClass) {
19-
setCoverURL(playlistClass.coverURL);
20+
// const isValid = playlistClass.coverURL.split('/').pop() !== "null";
21+
setCoverURL(playlistClass.coverUR);
2022

2123
}
2224
if(playlistClass.collaborators){
@@ -90,7 +92,8 @@ const CreatePlaylist = ({closeOverlay, applyCanges, editPlaylistClass}) => { //p
9092
</div>
9193
<form className="albumDetails" id='editAlbumInfos' >
9294
<label htmlFor="playlistName">Playlist name</label>
93-
<input type="text" id="playlistName" placeholder="Enter playlist name" defaultValue={playlistClass?.name} />
95+
<input type="text" id="playlistName" placeholder="Enter playlist name"
96+
defaultValue={playlistClass.name ? playlistClass.name : ''} />
9497
<div className="albumTypeOption">
9598
<label htmlFor="description">Description</label>
9699
<textarea id="description"

CrazyMusicLibrary/src/components/Header.css

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@
111111
flex-direction: row;
112112
gap: 10px;
113113
}
114+
.audio-controls[data-preserv-width="true"]{
115+
min-width: 80px;
116+
}
114117
.audio-controls > div {
115118
height: 35px;
116119
}
@@ -229,7 +232,7 @@
229232
}
230233
#add-radio-fav{
231234
position: absolute;
232-
top: 20px;
235+
top: 16px;
233236
right:20px;
234237
cursor: pointer;
235238
}

CrazyMusicLibrary/src/components/Header.jsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ const Header = () => {
8686
}, []);
8787

8888
const onUploadFished = () => {
89+
setIsAddMusicMinimized(false);
90+
closeNewMusic();
8991

9092
}
9193
const handleClicNewMusic = () => {
@@ -150,7 +152,7 @@ const Header = () => {
150152
: <SmallFFTVisualizer/>}
151153
<div className='trackinfo-mobile'>
152154
<span id="songTitle">{currentTrackData.title}</span>
153-
<AudioControls context={{mobile : true}}/>
155+
<AudioControls context={{mobile : true, radio : currentTrackData?.type === "radio" , preserv : true}}/>
154156
</div>
155157
</div>
156158

@@ -186,8 +188,7 @@ const Header = () => {
186188
<RadialProgressBar percent={uploadPercent} size={44} useText={false} style={{position: "absolute", transform:"translate(-1px, -5.5px)"}}/>}
187189
<IconMusicPlus style={{zIndex:"10", position: "relative"}}className="addMusicButton buttonRound" onClick={handleClicNewMusic}/>
188190

189-
{(uploadProgress) && <span
190-
style={{position: "absolute", bottom : "-30px", padding : "2px 7px", borderRadius: "10px",backgroundColor:"rgba(255, 255, 255, 0.7)", textAlign : "center"}}>{uploadProgress.done}/{uploadProgress.total}</span>
191+
{(uploadProgress) && <span id="upload-progress-tiny">{uploadProgress.done}/{uploadProgress.total}</span>
191192
}
192193
</div>
193194
<UserDropdown />
@@ -197,7 +198,7 @@ const Header = () => {
197198
uploadFinished={onUploadFished}
198199
uploadProgress={setUploadProgress}
199200
isMinimize={isAddMusicMinimized}
200-
setMinimized={ setIsAddMusicMinimized}
201+
setMinimized={setIsAddMusicMinimized}
201202
closeOverlay={closeNewMusic} />) }
202203

203204
</header>

CrazyMusicLibrary/src/components/LibAlbumCard.jsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,35 @@ import {trimString} from '../../lib';
44
import './AddMusic/AlbumCard.css';
55
import { useNavigate } from 'react-router-dom';
66
import CML_logo from './CML_logo';
7-
import { useEffect, useState } from 'react';
7+
import { useEffect, useRef, useState } from 'react';
88
const LibAlbumCard = ({album, hideArtist = false}) => {
99
const navigate = useNavigate();
1010
const [artists, setArtists] = useState([]);
11+
const [imgLoaded, setImgLoaded] = useState(false);
12+
const imgRef = useRef(null);
1113
const viewAlbum = (id) => {
1214
navigate(`/albums/${id}`);
1315
}
1416
useEffect(() => {
1517
if(!album.artists){ return;}
1618
setArtists(JSON.parse(album.artists).map((artist) => artist.name));
1719
},[album]);
20+
1821
return(
1922
<div className="album-card" onClick={()=> viewAlbum(album.id)}>
2023
{(album.cover)?
21-
<img src={`${apiBase}/covers/${album.cover}`} alt={`${trimString(album.title, 25)} cover`} className="album-card-cover" />
24+
<div className="">
25+
{!imgLoaded && <div className="skeleton-loader-album" />}
26+
<img
27+
className='album-card-cover'
28+
ref={imgRef}
29+
src={`${apiBase}/covers/${album.cover}`}
30+
onLoad={() => setImgLoaded(true)}
31+
alt={album.title}
32+
style={{ display: imgLoaded ? "block" : "none" }}
33+
/>
34+
</div>
35+
2236
: <CML_logo className="cover-image" />}
2337
<h3 className="album-name">{trimString(album.title, 40)}</h3>
2438
{!hideArtist && <p className="album-artist">{ trimString(artists.toString().replace(/,/g, ', '), 25) || "No artist"}</p>}

CrazyMusicLibrary/src/components/LibArtistsCard.jsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,22 @@ import apiBase from '../../APIbase';
22
// import './AddMusic/artistCard.css';
33
import { useNavigate } from 'react-router-dom';
44
import CML_logo from './CML_logo';
5+
import { useState } from 'react';
56
const LibArtistsCard = ({artist}) => {
67
const navigate = useNavigate();
8+
const [imgLoaded, setImgLoaded] = useState(false);
9+
710
const viewArtist = (id) => {
811
navigate(`/artists/${id}`);
912
}
1013
return(
1114
<div className="artist-card" onClick={()=> viewArtist(artist.id)}>
12-
{(artist.picture)?
13-
<img src={`${apiBase}/covers/artists/${artist.picture}`} alt={`${artist.name} cover`} className="artist-card-cover" />
15+
{(artist.picture)?<>
16+
{!imgLoaded && <div className="skeleton-loader-album" />}
17+
<img src={`${apiBase}/covers/artists/${artist.picture}`}
18+
alt={`${artist.name} cover`}
19+
onLoad={() => setImgLoaded(true)}
20+
className="artist-card-cover" /></>
1421
: <CML_logo className="cover-image" />}
1522
<h3 className="artist-name">{artist.name}</h3>
1623
</div>

0 commit comments

Comments
 (0)