@@ -15,6 +15,7 @@ import {
1515 Select ,
1616 SelectContent ,
1717 SelectItem ,
18+ SELECT_NONE_VALUE ,
1819 SelectTrigger ,
1920 SelectValue ,
2021} from "../../components/ui/select"
@@ -40,13 +41,16 @@ export function EditDeckDialog({
4041 const [ name , setName ] = useState ( "" )
4142 const [ format , setFormat ] = useState < ( typeof DECK_FORMATS ) [ number ] > ( "commander" )
4243 const [ status , setStatus ] = useState < ( typeof DECK_STATUSES ) [ number ] > ( "brewing" )
44+ const [ coverDeckCardId , setCoverDeckCardId ] = useState < string | null > ( null )
4345 const [ error , setError ] = useState < string | null > ( null )
46+ const deckCards = deck && "deckCards" in deck ? deck . deckCards : null
4447
4548 useEffect ( ( ) => {
4649 if ( ! deck || ! isOpen ) return
4750 setName ( deck . name )
4851 setFormat ( deckFormatValue ( deck . format ) )
4952 setStatus ( deckStatusValue ( deck . status ) )
53+ setCoverDeckCardId ( deck . coverDeckCardId )
5054 setError ( null )
5155 } , [ deck , isOpen ] )
5256
@@ -63,7 +67,12 @@ export function EditDeckDialog({
6367 void updateDeckMutation ( {
6468 variables : {
6569 id : deck . id ,
66- input : { name : name . trim ( ) , format, status } ,
70+ input : {
71+ name : name . trim ( ) ,
72+ format,
73+ status,
74+ ...( deckCards ? { coverDeckCardId } : { } ) ,
75+ } ,
6776 } ,
6877 onCompleted : ( ) => {
6978 void refetchActiveQueries ( client )
@@ -101,15 +110,18 @@ export function EditDeckDialog({
101110 < DialogHeader >
102111 < div >
103112 < DialogTitle id = "edit-deck-title" > Edit deck</ DialogTitle >
104- < p className = "mt-1 text-sm text-base-content/60 " > Update deck metadata.</ p >
113+ < p className = "mt-1 text-sm text-base-content/75 " > Update deck metadata.</ p >
105114 </ div >
106- < DialogClose onClose = { close } />
115+ < DialogClose className = "h-11 w-11" onClose = { close } />
107116 </ DialogHeader >
108117
109118 < form className = "space-y-5 p-5" onSubmit = { submit } >
110119 < label className = "block space-y-2" >
111- < span className = "text-xs font-black uppercase tracking-[0.18em] text-accent" > Name</ span >
120+ < span className = "text-xs font-black uppercase tracking-[0.18em] text-base-content/80" >
121+ Name
122+ </ span >
112123 < Input
124+ className = "min-h-11"
113125 value = { name }
114126 onChange = { ( event ) => setName ( event . target . value ) }
115127 placeholder = "Deck name"
@@ -119,11 +131,11 @@ export function EditDeckDialog({
119131
120132 < div className = "grid gap-4 sm:grid-cols-2" >
121133 < label className = "block space-y-2" >
122- < span className = "text-xs font-black uppercase tracking-[0.18em] text-accent " >
134+ < span className = "text-xs font-black uppercase tracking-[0.18em] text-base-content/80 " >
123135 Format
124136 </ span >
125137 < Select value = { format } onValueChange = { ( value ) => setFormat ( deckFormatValue ( value ) ) } >
126- < SelectTrigger className = "bg-base-100 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" >
138+ < SelectTrigger className = "min-h-11 bg-base-100 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" >
127139 < SelectValue />
128140 </ SelectTrigger >
129141 < SelectContent >
@@ -137,11 +149,11 @@ export function EditDeckDialog({
137149 </ label >
138150
139151 < label className = "block space-y-2" >
140- < span className = "text-xs font-black uppercase tracking-[0.18em] text-accent " >
152+ < span className = "text-xs font-black uppercase tracking-[0.18em] text-base-content/80 " >
141153 Status
142154 </ span >
143155 < Select value = { status } onValueChange = { ( value ) => setStatus ( deckStatusValue ( value ) ) } >
144- < SelectTrigger className = "bg-base-100 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" >
156+ < SelectTrigger className = "min-h-11 bg-base-100 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" >
145157 < SelectValue />
146158 </ SelectTrigger >
147159 < SelectContent >
@@ -155,17 +167,56 @@ export function EditDeckDialog({
155167 </ label >
156168 </ div >
157169
170+ { deckCards ? (
171+ < label className = "block space-y-2" >
172+ < span className = "text-xs font-black uppercase tracking-[0.18em] text-base-content/80" >
173+ Cover card
174+ </ span >
175+ < Select
176+ value = { coverDeckCardId || SELECT_NONE_VALUE }
177+ onValueChange = { ( value ) =>
178+ setCoverDeckCardId ( value === SELECT_NONE_VALUE ? null : value )
179+ }
180+ >
181+ < SelectTrigger
182+ aria-label = "Cover card"
183+ className = "min-h-11 bg-base-100 focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20"
184+ >
185+ < SelectValue />
186+ </ SelectTrigger >
187+ < SelectContent >
188+ < SelectItem value = { SELECT_NONE_VALUE } > Automatic (commander first)</ SelectItem >
189+ { deckCards . map ( ( deckCard ) => (
190+ < SelectItem key = { deckCard . id } value = { deckCard . id } >
191+ { deckCard . card ?. name || "Unknown card" } ·{ " " }
192+ { titleize ( deckCard . zone || "mainboard" ) }
193+ </ SelectItem >
194+ ) ) }
195+ </ SelectContent >
196+ </ Select >
197+ < span className = "block text-sm text-base-content/75" >
198+ Uses the commander by default. Choose any card in this deck to override it.
199+ </ span >
200+ </ label >
201+ ) : null }
202+
158203 { error ? (
159204 < p className = "rounded-box border border-error/30 bg-error/10 px-3 py-2 text-sm text-error" >
160205 { error }
161206 </ p >
162207 ) : null }
163208
164209 < div className = "flex flex-wrap justify-end gap-2 border-t border-base-300 pt-4" >
165- < Button type = "button" variant = "ghost" onClick = { close } disabled = { updateDeck . isPending } >
210+ < Button
211+ type = "button"
212+ variant = "ghost"
213+ className = "min-h-11"
214+ onClick = { close }
215+ disabled = { updateDeck . isPending }
216+ >
166217 Cancel
167218 </ Button >
168- < Button type = "submit" disabled = { updateDeck . isPending } >
219+ < Button type = "submit" className = "min-h-11" disabled = { updateDeck . isPending } >
169220 < Edit3 className = "h-4 w-4" />
170221 { updateDeck . isPending ? "Saving..." : "Save deck" }
171222 </ Button >
0 commit comments