7
7
getPlaylistAlbums ,
8
8
getPlaylistTracks ,
9
9
playlistSearch ,
10
+ populatePlaylist ,
10
11
updatePlaylist ,
11
12
} from "../api" ;
12
13
import { useQuery } from "@tanstack/react-query" ;
@@ -16,6 +17,7 @@ import { TrackList } from "./TrackList/TrackList";
16
17
import { usePlaybackContext } from "../hooks/usePlaybackContext" ;
17
18
import { Track } from "../interfaces/Track" ;
18
19
import InputWithLabelPlaceholder from "../components/Inputs/InputWithLabelPlaceholder" ;
20
+ import ButtonAsync from "../components/ButtonAsync" ;
19
21
20
22
enum ViewMode {
21
23
ALBUM = "album" ,
@@ -63,86 +65,87 @@ export const PlaylistExplorer: FC = () => {
63
65
const { playbackInfo } = usePlaybackContext ( ) ;
64
66
65
67
return (
66
- < div className = "flex flex-col h-full space-y-1 " >
67
- < div className = "m-2 text-sm sm:text-base" >
68
- < Form
69
- onSubmit = { ( ) => {
70
- updatePlaylist ( getValues ( ) ) ;
71
- } }
72
- control = { control }
73
- >
74
- < div className = "flex flex-col my-4 space-y-2" >
75
- < InputWithLabelPlaceholder
76
- register = { register ( "name" ) }
77
- type = "text"
78
- name = "name"
79
- placeholder = { "Title" }
80
- defaultValue = { playlist . name }
81
- />
82
- < InputWithLabelPlaceholder
83
- register = { register ( "description" ) }
84
- type = "text"
85
- name = "description"
86
- placeholder = { "Description" }
87
- defaultValue = { playlist . description }
88
- />
68
+ < div className = "m-2 text-sm sm:text-base space-y-4" >
69
+ < Form
70
+ onSubmit = { ( ) => {
71
+ updatePlaylist ( getValues ( ) ) ;
72
+ } }
73
+ control = { control }
74
+ >
75
+ < div className = "flex flex-col my-4 space-y-2" >
76
+ < InputWithLabelPlaceholder
77
+ register = { register ( "name" ) }
78
+ type = "text"
79
+ name = "name"
80
+ placeholder = { "Title" }
81
+ defaultValue = { playlist . name }
82
+ />
83
+ < InputWithLabelPlaceholder
84
+ register = { register ( "description" ) }
85
+ type = "text"
86
+ name = "description"
87
+ placeholder = { "Description" }
88
+ defaultValue = { playlist . description }
89
+ />
90
+ </ div >
91
+ < div className = "flex flex-row space-x-4 justify-end sm:justify-start mx-2" >
92
+ < Button className = "flex" type = "submit" >
93
+ Update details
94
+ </ Button >
95
+ < div className = "flex my-auto" >
96
+ < Link to = { `/` } > Back</ Link >
89
97
</ div >
90
- < div className = "flex flex-row space-x-4 justify-end sm:justify-start mx-2" >
91
- < Button className = "flex" type = "submit" >
92
- Submit
93
- </ Button >
94
- < div className = "flex my-auto" >
95
- < Link to = { `/` } > Back</ Link >
96
- </ div >
97
- </ div >
98
- </ Form >
99
- < >
100
- < div className = " mt-2" >
101
- < button
102
- className = "border-solid rounded-md border border-primary-500 w-full flex justify-between overflow-hidden"
103
- disabled = { ! playlistAlbums }
104
- onClick = { ( ) => {
105
- if ( viewMode === ViewMode . ALBUM ) {
106
- setViewMode ( ViewMode . TRACK ) ;
107
- } else {
108
- setViewMode ( ViewMode . ALBUM ) ;
109
- }
110
- } }
98
+ </ div >
99
+ </ Form >
100
+ < ButtonAsync className = "flex" onClick = { ( ) => populatePlaylist ( playlist . id ) } >
101
+ Sync new playlist data
102
+ </ ButtonAsync >
103
+ < >
104
+ < div className = " mt-2" >
105
+ < button
106
+ className = "border-solid rounded-md border border-primary-500 w-full flex justify-between overflow-hidden"
107
+ disabled = { ! playlistAlbums }
108
+ onClick = { ( ) => {
109
+ if ( viewMode === ViewMode . ALBUM ) {
110
+ setViewMode ( ViewMode . TRACK ) ;
111
+ } else {
112
+ setViewMode ( ViewMode . ALBUM ) ;
113
+ }
114
+ } }
115
+ >
116
+ < h2
117
+ className = { `p-2 flex grow text-right ${
118
+ viewMode === ViewMode . ALBUM ? "bg-primary-darker" : ""
119
+ } ${ ! playlistAlbums ? "opacity-50 disabled" : "" } `}
111
120
>
112
- < h2
113
- className = { `p-2 flex grow text-right ${
114
- viewMode === ViewMode . ALBUM ? "bg-primary-darker" : ""
115
- } ${ ! playlistAlbums ? "opacity-50 disabled" : "" } `}
116
- >
117
- Album View
118
- </ h2 >
119
- < h2
120
- className = { `p-2 flex grow ${
121
- viewMode === ViewMode . TRACK ? "bg-primary-darker" : ""
122
- } `}
123
- >
124
- Track View
125
- </ h2 >
126
- </ button >
127
- </ div >
128
- < div className = "my-2" >
129
- { viewMode == ViewMode . ALBUM && playlistAlbums && (
130
- < AlbumList
131
- albumList = { playlistAlbums }
132
- activeAlbumId = { playbackInfo ?. album_id }
133
- contextPlaylist = { playlist }
134
- associatedPlaylists = { associatedPlaylists }
135
- />
136
- ) }
137
- { viewMode == ViewMode . TRACK && playlistTracks && (
138
- < TrackList
139
- trackList = { playlistTracks }
140
- activeTrackId = { playbackInfo ?. track_id }
141
- />
142
- ) }
143
- </ div >
144
- </ >
145
- </ div >
121
+ Album View
122
+ </ h2 >
123
+ < h2
124
+ className = { `p-2 flex grow ${
125
+ viewMode === ViewMode . TRACK ? "bg-primary-darker" : ""
126
+ } `}
127
+ >
128
+ Track View
129
+ </ h2 >
130
+ </ button >
131
+ </ div >
132
+ < div className = "my-2" >
133
+ { viewMode == ViewMode . ALBUM && playlistAlbums && (
134
+ < AlbumList
135
+ albumList = { playlistAlbums }
136
+ activeAlbumId = { playbackInfo ?. album_id }
137
+ contextPlaylist = { playlist }
138
+ associatedPlaylists = { associatedPlaylists }
139
+ />
140
+ ) }
141
+ { viewMode == ViewMode . TRACK && playlistTracks && (
142
+ < TrackList
143
+ trackList = { playlistTracks }
144
+ activeTrackId = { playbackInfo ?. track_id }
145
+ />
146
+ ) }
147
+ </ div >
148
+ </ >
146
149
</ div >
147
150
) ;
148
151
} ;
0 commit comments