@@ -779,6 +779,11 @@ private Div heldSelector() {
779779 String value = event .getValue ();
780780 if (value != null && !value .isBlank ()) {
781781 selectedHeldDid = value ;
782+ heldArea .clear ();
783+ updateHeldSelectionState ();
784+ } else {
785+ selectedHeldDid = null ;
786+ heldArea .clear ();
782787 updateHeldSelectionState ();
783788 }
784789 });
@@ -2054,6 +2059,7 @@ private void updateIssued() {
20542059 return ;
20552060 }
20562061 issuedOriginal = json ;
2062+ resetHeldSelection ();
20572063 showSuccess ("Credential updated" );
20582064 } catch (Exception e ) {
20592065 showError (e .getMessage ());
@@ -2073,6 +2079,7 @@ private void revokeIssued() {
20732079 return ;
20742080 }
20752081 refreshIssued ();
2082+ resetHeldSelection ();
20762083 showSuccess ("Credential revoked" );
20772084 } catch (Exception e ) {
20782085 showError (e .getMessage ());
@@ -2358,6 +2365,13 @@ private void updateIssuedSelectionState() {
23582365 setButtonsEnabledOnValue (selected , issuedCopyButton );
23592366 }
23602367
2368+ private void resetHeldSelection () {
2369+ heldSelect .clear ();
2370+ selectedHeldDid = null ;
2371+ heldArea .clear ();
2372+ updateHeldSelectionState ();
2373+ }
2374+
23612375 private void setButtonsEnabledOnValue (String value , Button ... buttons ) {
23622376 boolean enabled = value != null && !value .isBlank ();
23632377 for (Button button : buttons ) {
@@ -3018,17 +3032,29 @@ private void updateHeldSelectionState() {
30183032 boolean hasSelection = did != null && !did .isBlank ();
30193033
30203034 heldResolveSelectedButton .setEnabled (hasSelection );
3021- heldDecryptSelectedButton .setEnabled (hasSelection );
30223035 heldCopyButton .setEnabled (hasSelection );
30233036
30243037 if (!hasSelection ) {
3038+ heldDecryptSelectedButton .setEnabled (false );
30253039 heldRemoveButton .setEnabled (false );
30263040 heldPublishButton .setEnabled (false );
30273041 heldRevealButton .setEnabled (false );
30283042 heldUnpublishButton .setEnabled (false );
30293043 return ;
30303044 }
30313045
3046+ boolean deactivatedEmpty = isDeactivatedEmptyCredential (did );
3047+ if (deactivatedEmpty ) {
3048+ boolean unpublished = credentialUnpublished (did );
3049+ heldDecryptSelectedButton .setEnabled (false );
3050+ heldPublishButton .setEnabled (false );
3051+ heldRevealButton .setEnabled (false );
3052+ heldRemoveButton .setEnabled (true );
3053+ heldUnpublishButton .setEnabled (!unpublished );
3054+ return ;
3055+ }
3056+
3057+ heldDecryptSelectedButton .setEnabled (true );
30323058 boolean unpublished = credentialUnpublished (did );
30333059 boolean published = credentialPublished (did );
30343060 boolean revealed = credentialRevealed (did );
@@ -3070,6 +3096,28 @@ private boolean credentialUnpublished(String did) {
30703096 return !manifest .containsKey (did );
30713097 }
30723098
3099+ private boolean isDeactivatedEmptyCredential (String did ) {
3100+ try {
3101+ MdipDocument doc = keymasterService .resolveDID (did );
3102+ if (doc == null || doc .didDocumentMetadata == null ) {
3103+ return false ;
3104+ }
3105+ if (!Boolean .TRUE .equals (doc .didDocumentMetadata .deactivated )) {
3106+ return false ;
3107+ }
3108+ Object data = doc .didDocumentData ;
3109+ if (data == null ) {
3110+ return true ;
3111+ }
3112+ if (data instanceof java .util .Map <?, ?>) {
3113+ return ((java .util .Map <?, ?>) data ).isEmpty ();
3114+ }
3115+ return false ;
3116+ } catch (Exception e ) {
3117+ return false ;
3118+ }
3119+ }
3120+
30733121 private void updateSchemaCreateState () {
30743122 String name = schemaNameField .getValue ();
30753123 schemaCreateButton .setEnabled (name != null && !name .isBlank ());
0 commit comments