Skip to content

Commit 31a90a5

Browse files
committed
Improve queue list UI
1 parent 6e80d95 commit 31a90a5

File tree

4 files changed

+36
-13
lines changed

4 files changed

+36
-13
lines changed

src/core/queue/TrackQueue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export class TrackQueue {
5151
return this.observables.get(slug)
5252
}
5353

54-
private getTrack(slug: string): Track | undefined {
54+
getTrack(slug: string): Track | undefined {
5555
return this.getSubject(slug)?.value
5656
}
5757

src/ui/components/StateButton.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,7 @@ export class StateButton extends Spicetify.React.Component<StateButtonProps, Sta
6767
if (this.props.onClick) {
6868
this.props.onClick(this.state.track)
6969
} else {
70-
Spicetify.showReactModal({
71-
title: "Beat Saber - Search results",
72-
children: <TrackPage track={this.state.track} />,
73-
okLabel: "OK",
74-
className: "bs-modal",
75-
})
70+
TrackPage.showAsModal(this.state.track)
7671
}
7772
}
7873

src/ui/pages/PopupPage.tsx

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Subscription } from "rxjs"
22
import { QueueRequest } from "../../core/queue/requests/QueueRequest"
3+
import { TrackPage } from "./TrackPage"
34

45
type QueueButtonState = {
56
items: QueueRequest[]
@@ -66,6 +67,12 @@ export class PopupPage extends Spicetify.React.Component<unknown, QueueButtonSta
6667
return true
6768
}
6869

70+
handleItemClick(request: QueueRequest) {
71+
const track = BeatSaber.TrackQueue.getTrack(request.slug)
72+
if (!track) return
73+
TrackPage.showAsModal(track)
74+
}
75+
6976
render() {
7077
const settings = {
7178
"blockQueue": "Block queue",
@@ -120,19 +127,31 @@ export class PopupPage extends Spicetify.React.Component<unknown, QueueButtonSta
120127
)}
121128

122129
<ul>
123-
{this.state.items.map(request => (
124-
<li>
125-
<button className="ConnectPopup__device ConnectPopup__device--available ConnectPopup__device--active">
126-
<span className="ConnectPopup__device-image spoticon-device-computer-32"></span>
130+
{this.state.items.map(request => {
131+
let icon = "airplay";
132+
switch (request.type) {
133+
case "MapsRequest":
134+
icon = "search"
135+
break
136+
case "DetailsRequest":
137+
icon = "album"
138+
break
139+
case "ArtistImageRequest":
140+
icon = "artist"
141+
break
142+
}
143+
return (<li onClick={this.handleItemClick.bind(this, request)}>
144+
<button className="ConnectPopup__device ConnectPopup__device--available ConnectPopup__device--active-no">
145+
<span className={`ConnectPopup__device-image spoticon-${icon}-32`}></span>
127146
<div className="ConnectPopup__device-body">
128147
<p className="ConnectPopup__device-title">{request.type}</p>
129148
<p className="ConnectPopup__device-info">
130149
<code>{request.slug}</code>
131150
</p>
132151
</div>
133152
</button>
134-
</li>
135-
))}
153+
</li>)
154+
})}
136155
</ul>
137156
</div>
138157
</div>

src/ui/pages/TrackPage.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ export class TrackPage extends Spicetify.React.Component<TrackPageProps, TrackPa
3939
}
4040
}
4141

42+
static showAsModal(track: Track) {
43+
Spicetify.showReactModal({
44+
title: "Beat Saber - Search results",
45+
children: <TrackPage track={track} />,
46+
okLabel: "OK",
47+
className: "bs-modal",
48+
})
49+
}
50+
4251
private log(...data: unknown[]) {
4352
if (BeatSaber.Settings.logTrackPage) {
4453
console.log(...data)

0 commit comments

Comments
 (0)