@@ -59,6 +59,7 @@ type WalletState = {
5959 balanceOverview : Writable < BalanceOverview >
6060 accounts : Writable < WalletAccount [ ] >
6161 accountsLoaded : Writable < boolean >
62+ confirmedInternalMessageIds : Writable < { [ key : string ] : number } >
6263}
6364
6465type BalanceTimestamp = {
@@ -95,6 +96,7 @@ export const wallet = writable<WalletState>({
9596 } ) ,
9697 accounts : writable < WalletAccount [ ] > ( [ ] ) ,
9798 accountsLoaded : writable < boolean > ( false ) ,
99+ confirmedInternalMessageIds : writable < { [ key : string ] : number } > ( { } )
98100} )
99101
100102export const resetWallet = ( ) => {
@@ -361,12 +363,13 @@ export const initialiseListeners = () => {
361363 onSuccess ( response ) {
362364 const accounts = get ( wallet ) . accounts
363365 const account = get ( accounts ) . find ( ( account ) => account . id === response . payload . accountId )
364- const message = response . payload . message
365- const messageKey = response . payload . confirmed ? 'confirmed' : 'failed'
366366
367+ const message = response . payload . message
368+ const confirmed = response . payload . confirmed ;
367369 const essence = message . payload . data . essence
368370
369- if ( response . payload . confirmed && ! essence . data . internal ) {
371+
372+ if ( confirmed && ! essence . data . internal ) {
370373 const { balanceOverview } = get ( wallet ) ;
371374 const overview = get ( balanceOverview ) ;
372375
@@ -380,8 +383,10 @@ export const initialiseListeners = () => {
380383 ) ;
381384 }
382385
386+ // Update state
383387 const accountMessage = account . messages . find ( ( _message ) => _message . id === message . id )
384388 accountMessage . confirmed = response . payload . confirmed
389+
385390 accounts . update ( ( storedAccounts ) => {
386391 return storedAccounts . map ( ( storedAccount ) => {
387392 if ( storedAccount . id === account . id ) {
@@ -402,11 +407,57 @@ export const initialiseListeners = () => {
402407 } )
403408 } )
404409
405- const notificationMessage = localize ( `notifications.${ messageKey } ` )
406- . replace ( '{{value}}' , formatUnit ( message . payload . data . essence . data . value ) )
407- . replace ( '{{account}}' , account . alias )
410+ // Notify user
411+ const messageKey = confirmed ? 'confirmed' : 'failed'
412+
413+ const _notify = ( senderAccountAlias : string | null = null ) => {
414+ let notificationMessage
415+
416+ if ( senderAccountAlias ) {
417+ notificationMessage = localize ( `notifications.${ messageKey } Internal` )
418+ . replace ( '{{value}}' , formatUnit ( message . payload . data . essence . data . value ) )
419+ . replace ( '{{senderAccount}}' , senderAccountAlias )
420+ . replace ( '{{receiverAccount}}' , account . alias )
421+ } else {
422+ notificationMessage = localize ( `notifications.${ messageKey } ` )
423+ . replace ( '{{value}}' , formatUnit ( message . payload . data . essence . data . value ) )
424+ . replace ( '{{account}}' , account . alias )
425+ }
426+
427+ showSystemNotification ( { type : "info" , message : notificationMessage } )
428+ }
429+
430+ const { confirmedInternalMessageIds } = get ( wallet )
431+ const messageIds = get ( confirmedInternalMessageIds )
432+
433+ // If this event is emitted because a message failed, then this message will only exist on the sender account
434+ // Therefore, show the notification (no need to group).
435+ if ( ! confirmed ) {
436+ _notify ( )
437+ } else {
438+ // If this is an external message, notify (no need to group)
439+ if ( ! essence . data . internal ) {
440+ _notify ( ) ;
441+ } else {
442+ // If this is an internal message, check if we have already receive confirmation state of this message
443+ if ( Object . keys ( messageIds ) . includes ( message . id ) ) {
444+ _notify (
445+ get ( accounts ) . find ( ( account ) => account . index === messageIds [ message . id ] ) . alias
446+ ) ;
447+
448+ confirmedInternalMessageIds . update ( ( ids ) => {
449+ delete ids [ message . id ]
450+
451+ return ids ;
452+ } )
453+ } else {
454+ // Otherwise, add the message id and do not notify yet
455+ messageIds [ message . id ] = account . index
456+ }
457+ }
458+ }
459+
408460
409- showSystemNotification ( { type : "info" , message : notificationMessage } )
410461 } ,
411462 onError ( error ) {
412463 console . error ( error )
0 commit comments