1+ import { ChangeEvent } from "react"
12import { Subscription } from "rxjs"
23import { TrackQueueRequest } from "../../core/queue/base/TrackQueueRequest"
34import { QueueState } from "../../core/queue/TrackQueue"
@@ -67,19 +68,41 @@ export class PopupPage extends Spicetify.React.Component<
6768 return true
6869 }
6970
71+ handleInputChange (
72+ key : string ,
73+ event : ChangeEvent < HTMLInputElement >
74+ ) : boolean {
75+ BeatSaber . Settings [ key ] = event . target . value
76+ BeatSaber . saveSettings ( )
77+ this . forceUpdate ( )
78+ return true
79+ }
80+
7081 handleItemClick ( request : TrackQueueRequest ) {
7182 const track = BeatSaber . TrackQueue . getTrack ( request . slug )
7283 if ( ! track ) return
7384 TrackPage . showAsModal ( track )
7485 }
7586
7687 render ( ) {
77- const settings = {
88+ const toggles = {
7889 blockQueue : "Block queue" ,
79- logQueue : "Enable TrackQueue logging" ,
80- logStateButton : "Enable StateButton logging" ,
81- logTrackPage : "Enable TrackPage logging" ,
82- logWatchers : "Enable UI watchers logging" ,
90+ logQueue : "Debug TrackQueue" ,
91+ logMapQueue : "Debug MapQueue" ,
92+ logStateButton : "Debug StateButton" ,
93+ logTrackPage : "Debug TrackPage" ,
94+ logWatchers : "Debug UI watchers" ,
95+ }
96+
97+ const inputsBsaber = {
98+ bsaberUsername : "Username (profile name)" ,
99+ bsaberLogin : "Login (e-mail or login username)" ,
100+ bsaberPassword : "Password" ,
101+ }
102+
103+ const inputsBackend = {
104+ backendHostname : "Hostname (domain:port)" ,
105+ backendAuth : "Authentication" ,
83106 }
84107
85108 let requests = this . state . enqueued
@@ -119,7 +142,53 @@ export class PopupPage extends Spicetify.React.Component<
119142 </ div >
120143
121144 < div className = "ConnectPopup__content" >
122- { Object . entries ( settings ) . flatMap ( ( [ key , value ] ) => [
145+ < GlueSectionDivider
146+ title = "Settings"
147+ description = "BeastSaber login"
148+ />
149+ { Object . entries ( inputsBsaber ) . map ( ( [ key , value ] ) => (
150+ < div className = "form-group" >
151+ < label htmlFor = { key } > { value } </ label >
152+ < br />
153+ < input
154+ placeholder = { value }
155+ className = "form-control"
156+ type = {
157+ key . toLowerCase ( ) . includes ( "password" )
158+ ? "password"
159+ : "text"
160+ }
161+ name = { key }
162+ value = { BeatSaber . Settings [ key ] }
163+ onChange = { this . handleInputChange . bind (
164+ this ,
165+ key
166+ ) }
167+ />
168+ </ div >
169+ ) ) }
170+
171+ < GlueSectionDivider description = "Backend config" />
172+ { Object . entries ( inputsBackend ) . map ( ( [ key , value ] ) => (
173+ < div className = "form-group" >
174+ < label htmlFor = { key } > { value } </ label >
175+ < br />
176+ < input
177+ placeholder = { value }
178+ className = "form-control"
179+ type = "text"
180+ name = { key }
181+ value = { BeatSaber . Settings [ key ] }
182+ onChange = { this . handleInputChange . bind (
183+ this ,
184+ key
185+ ) }
186+ />
187+ </ div >
188+ ) ) }
189+
190+ < GlueSectionDivider description = "Debugging" />
191+ { Object . entries ( toggles ) . flatMap ( ( [ key , value ] ) => [
123192 < GlueToggle
124193 onChange = { this . handleSettingChange . bind (
125194 this ,
@@ -131,6 +200,8 @@ export class PopupPage extends Spicetify.React.Component<
131200 < br /> ,
132201 ] ) }
133202
203+ < GlueSectionDivider title = "Queue" />
204+
134205 { requests . length == 0 && (
135206 < div className = "ConnectPopup__info" >
136207 < p > The queue is currenty empty.</ p >
0 commit comments