@@ -85,6 +85,8 @@ const SUBSTITUTABLE_CSS = cssToString([
8585 */
8686export class Discovery extends HTMLElement {
8787 static observedAttributes = [ 'wallet-extension-loaded' ]
88+ private readonly DISCOVERY_LAST_USED_KEY =
89+ 'splice_wallet_discovery_last_used'
8890
8991 static styles = SUBSTITUTABLE_CSS
9092
@@ -103,6 +105,7 @@ export class Discovery extends HTMLElement {
103105 private root : HTMLElement
104106 private selectedTabId : string = 'tab-1'
105107 private verifiedKernels ?: KernelType [ ]
108+ private lastUsed ?: KernelType | undefined
106109
107110 constructor ( ) {
108111 super ( )
@@ -132,6 +135,18 @@ export class Discovery extends HTMLElement {
132135 )
133136 }
134137
138+ const cachedLastUsed = localStorage . getItem (
139+ this . DISCOVERY_LAST_USED_KEY
140+ )
141+
142+ if ( cachedLastUsed ) {
143+ try {
144+ this . lastUsed = JSON . parse ( cachedLastUsed ) as KernelType
145+ } catch {
146+ localStorage . removeItem ( this . DISCOVERY_LAST_USED_KEY )
147+ }
148+ }
149+
135150 window . addEventListener ( 'message' , ( event ) => {
136151 if ( event . data . type === 'SPLICE_WALLET_CONFIG_LOAD' ) {
137152 this . verifiedKernels = event . data . payload . map (
@@ -179,7 +194,10 @@ export class Discovery extends HTMLElement {
179194 return div
180195 }
181196
182- private renderKernelOption ( kernel : KernelType ) {
197+ private renderKernelOption (
198+ kernel : KernelType ,
199+ onClear : undefined | ( ( ) => void ) = undefined
200+ ) {
183201 const div = this . mkElement ( 'div' , '' , {
184202 class : 'kernel d-flex justify-content-space-between align-items-center flex-wrap mb-3' ,
185203 } )
@@ -211,6 +229,16 @@ export class Discovery extends HTMLElement {
211229
212230 div . appendChild ( button )
213231
232+ if ( onClear ) {
233+ const clearButton = this . mkElement ( 'button' , 'X' , {
234+ class : 'btn btn-sm btn-secondary' ,
235+ type : 'button' ,
236+ } )
237+
238+ clearButton . addEventListener ( 'click' , onClear )
239+ div . appendChild ( clearButton )
240+ }
241+
214242 return div
215243 }
216244
@@ -240,6 +268,35 @@ export class Discovery extends HTMLElement {
240268 return element
241269 }
242270
271+ private renderLastUsed ( ) {
272+ const wrapper = this . mkElement ( 'div' , '' )
273+
274+ if ( ! this . lastUsed ) return wrapper // empty div
275+
276+ wrapper . className = 'mt-4'
277+
278+ const card = this . mkElement ( 'div' , '' , { class : 'card mt-4' } )
279+ const cardHeader = this . mkElement ( 'div' , '' , { class : 'card-header' } )
280+
281+ const header = this . mkElement ( 'h5' , 'Previously connected' , {
282+ class : 'm-0' ,
283+ } )
284+ cardHeader . appendChild ( header )
285+
286+ const cardBody = this . mkElement ( 'div' , '' , { class : 'card-body' } )
287+ const k = this . renderKernelOption ( this . lastUsed , ( ) => {
288+ localStorage . removeItem ( this . DISCOVERY_LAST_USED_KEY )
289+ this . lastUsed = undefined
290+ this . render ( )
291+ } )
292+ cardBody . appendChild ( k )
293+
294+ card . append ( cardHeader , cardBody )
295+ wrapper . append ( card )
296+
297+ return wrapper
298+ }
299+
243300 render ( ) {
244301 const root = this . mkElement ( 'div' , '' , { class : 'root' } )
245302 const wrapper = this . mkElement ( 'div' , '' , { class : 'wrapper' } )
@@ -309,6 +366,11 @@ export class Discovery extends HTMLElement {
309366 button . addEventListener ( 'click' , ( ) => {
310367 const url = input . value
311368 console . log ( 'Connecting to Wallet Gateway...' + url )
369+ this . lastUsed = { name : url , rpcUrl : url , walletType : 'remote' }
370+ localStorage . setItem (
371+ this . DISCOVERY_LAST_USED_KEY ,
372+ JSON . stringify ( this . lastUsed )
373+ )
312374 this . selectKernel ( { url, walletType : 'remote' } )
313375 } )
314376 div . append ( input , button )
@@ -318,6 +380,9 @@ export class Discovery extends HTMLElement {
318380 card . append ( cardHeader , cardBody )
319381
320382 wrapper . append ( header , card )
383+ const lastUsed = this . renderLastUsed ( )
384+ wrapper . appendChild ( lastUsed )
385+
321386 root . appendChild ( wrapper )
322387
323388 // Replace the whole root (except styles), don't append
0 commit comments