1- import { createSignal , Show , For } from "solid-js" ;
1+ import { createSignal , Show , For , createEffect , Accessor } from "solid-js" ;
22import { cache , createAsync } from "@solidjs/router" ;
33import { getAccount } from "~/lib/auth" ;
44import { Octokit } from "@octokit/rest" ;
@@ -14,7 +14,7 @@ const getPackages = cache(async () => {
1414 await ok . packages . listPackagesForAuthenticatedUser ( {
1515 package_type : "container" ,
1616 } ) ;
17- const packagesWithVersions = Promise . all (
17+ const packagesWithVersions = await Promise . all (
1818 packages . map ( async ( pkg ) => {
1919 const { data : versions } =
2020 await ok . packages . getAllPackageVersionsForPackageOwnedByAuthenticatedUser (
@@ -48,7 +48,14 @@ const sourceOptions = [
4848export const SourceInput = ( { data } ) => {
4949 const [ source , setSource ] = createSignal ( "manual" as Source ) ;
5050 const packages = createAsync ( ( ) => getPackages ( ) ) ;
51- const [ pkg , setPkg ] = createSignal ( null as null | number ) ;
51+ type Package = typeof packages extends Accessor < ( infer U ) [ ] | undefined >
52+ ? U
53+ : never ;
54+ const [ pkg , setPkg ] = createSignal ( undefined as Package | undefined ) ;
55+
56+ createEffect ( ( ) => {
57+ setPkg ( packages ( ) ?. [ 0 ] ) ;
58+ } ) ;
5259
5360 return (
5461 < >
@@ -87,39 +94,55 @@ export const SourceInput = ({ data }) => {
8794 </ label >
8895 </ Show >
8996 < Show when = { source ( ) === "ghcr" } >
90- < label class = "form-control w-full" >
91- < div class = "label" >
92- < span class = "label-text" > Container Image</ span >
93- </ div >
94- < select
95- name = "ghPackage"
96- class = "select select-bordered w-full"
97- onchange = { ( e ) => setPkg ( Number ( e . target . value ) ) }
98- >
99- < For each = { packages ( ) } >
100- { ( p ) => (
101- < option value = { p . id } >
102- { p . name } ({ p . repository ?. full_name } )
103- </ option >
104- ) }
105- </ For >
106- </ select >
107- < input
108- type = "hidden"
109- name = "ghPackageName"
110- value = { packages ( ) ?. find ( ( p ) => p . id === pkg ( ) ) ?. name }
111- />
112- < input
113- type = "hidden"
114- name = "ghPackageOwner"
115- value = { packages ( ) ?. find ( ( p ) => p . id === pkg ( ) ) ?. owner ?. login }
116- />
117- < select name = "ghPackageTag" class = "select select-bordered w-full" >
118- < For each = { packages ( ) ?. find ( ( p ) => p . id === pkg ( ) ) ?. tags } >
119- { ( t ) => < option value = { t } > { t } </ option > }
120- </ For >
121- </ select >
122- </ label >
97+ < Show when = { packages ( ) } >
98+ { ( pkgs ) => (
99+ < >
100+ < label class = "form-control w-full" >
101+ < div class = "label" >
102+ < span class = "label-text" > Container Image</ span >
103+ </ div >
104+ < div class = "join" >
105+ < select
106+ name = "ghPackage"
107+ class = "select select-bordered w-full join-item"
108+ onInput = { ( e ) =>
109+ setPkg (
110+ pkgs ( ) . find ( ( p ) => p . id === Number ( e . target . value ) )
111+ )
112+ }
113+ >
114+ < For each = { pkgs ( ) } >
115+ { ( p ) => (
116+ < option value = { p . id } >
117+ { p . name } ({ p . repository ?. full_name } )
118+ </ option >
119+ ) }
120+ </ For >
121+ </ select >
122+ < select
123+ name = "ghPackageTag"
124+ class = "select select-bordered join-item"
125+ >
126+ < For each = { pkg ( ) ?. tags } >
127+ { ( t ) => < option value = { t } > { t } </ option > }
128+ </ For >
129+ </ select >
130+ </ div >
131+ </ label >
132+ < input type = "hidden" name = "ghPackageName" value = { pkg ( ) ?. name } />
133+ < input
134+ type = "hidden"
135+ name = "ghPackageOwner"
136+ value = { pkg ( ) ?. owner ?. login }
137+ />
138+ < input
139+ type = "hidden"
140+ name = "ghPackageRepo"
141+ value = { pkg ( ) ?. repository ?. name }
142+ />
143+ </ >
144+ ) }
145+ </ Show >
123146 </ Show >
124147 </ >
125148 ) ;
0 commit comments