|  |  | @ -66,18 +66,27 @@ | 
			
		
	
		
			
				
					|  |  |  |               : "Unconfirmed" | 
			
		
	
		
			
				
					|  |  |  |           }} | 
			
		
	
		
			
				
					|  |  |  |         </button> | 
			
		
	
		
			
				
					|  |  |  |         <br /> | 
			
		
	
		
			
				
					|  |  |  |         (Only hours shown) | 
			
		
	
		
			
				
					|  |  |  |         <br /> | 
			
		
	
		
			
				
					|  |  |  |         (Only recent shown) | 
			
		
	
		
			
				
					|  |  |  |       </div> | 
			
		
	
		
			
				
					|  |  |  |     </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     <!-- Results List --> | 
			
		
	
		
			
				
					|  |  |  |     <ul v-if="contacts.length > 0" class="border-t border-slate-300"> | 
			
		
	
		
			
				
					|  |  |  |       <li | 
			
		
	
		
			
				
					|  |  |  |         class="border-b border-slate-300 py-4" | 
			
		
	
		
			
				
					|  |  |  |         class="border-b border-slate-300 pt-2.5 pb-4" | 
			
		
	
		
			
				
					|  |  |  |         v-for="contact in contacts" | 
			
		
	
		
			
				
					|  |  |  |         :key="contact.did" | 
			
		
	
		
			
				
					|  |  |  |       > | 
			
		
	
		
			
				
					|  |  |  |         <div class="grow overflow-hidden"> | 
			
		
	
		
			
				
					|  |  |  |           <h2 class="text-base font-semibold"> | 
			
		
	
		
			
				
					|  |  |  |             <EntityIcon | 
			
		
	
		
			
				
					|  |  |  |               :entityId="contact.did" | 
			
		
	
		
			
				
					|  |  |  |               :iconSize="24" | 
			
		
	
		
			
				
					|  |  |  |               class="inline-block align-text-bottom border border-slate-300 rounded" | 
			
		
	
		
			
				
					|  |  |  |             ></EntityIcon> | 
			
		
	
		
			
				
					|  |  |  |             {{ contact.name || "(no name)" }} | 
			
		
	
		
			
				
					|  |  |  |           </h2> | 
			
		
	
		
			
				
					|  |  |  |           <div class="text-sm truncate">{{ contact.did }}</div> | 
			
		
	
	
		
			
				
					|  |  | @ -135,9 +144,12 @@ | 
			
		
	
		
			
				
					|  |  |  |               <fa icon="trash-can" class="fa-fw" /> | 
			
		
	
		
			
				
					|  |  |  |             </button> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             <div v-if="!showGiveNumbers" class="ml-auto flex gap-1.5"> | 
			
		
	
		
			
				
					|  |  |  |             <div | 
			
		
	
		
			
				
					|  |  |  |               v-if="showGiveNumbers && contact.did != activeDid" | 
			
		
	
		
			
				
					|  |  |  |               class="ml-auto flex gap-1.5" | 
			
		
	
		
			
				
					|  |  |  |             > | 
			
		
	
		
			
				
					|  |  |  |               <button | 
			
		
	
		
			
				
					|  |  |  |                 class="text-sm uppercase bg-blue-600 text-white px-2 py-1.5 rounded-md" | 
			
		
	
		
			
				
					|  |  |  |                 class="text-sm bg-blue-600 text-white px-2 py-1.5 rounded-l-md" | 
			
		
	
		
			
				
					|  |  |  |                 @click="onClickAddGive(activeDid, contact.did)" | 
			
		
	
		
			
				
					|  |  |  |                 title="givenByMeDescriptions[contact.did]" | 
			
		
	
		
			
				
					|  |  |  |               > | 
			
		
	
	
		
			
				
					|  |  | @ -152,11 +164,11 @@ | 
			
		
	
		
			
				
					|  |  |  |                         : (givenByMeUnconfirmed[contact.did] || 0) | 
			
		
	
		
			
				
					|  |  |  |                   /* eslint-enable prettier/prettier */ | 
			
		
	
		
			
				
					|  |  |  |                 }} | 
			
		
	
		
			
				
					|  |  |  |                 <fa icon="plus" class="fa-fw" /> | 
			
		
	
		
			
				
					|  |  |  |                 <fa icon="plus" /> | 
			
		
	
		
			
				
					|  |  |  |               </button> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |               <button | 
			
		
	
		
			
				
					|  |  |  |                 class="text-sm uppercase bg-blue-600 text-white px-2 py-1.5 rounded-md" | 
			
		
	
		
			
				
					|  |  |  |                 class="text-sm bg-blue-600 text-white px-2 py-1.5 rounded-r-md -ml-1.5 border-l border-blue-400" | 
			
		
	
		
			
				
					|  |  |  |                 @click="onClickAddGive(contact.did, activeDid)" | 
			
		
	
		
			
				
					|  |  |  |                 title="givenToMeDescriptions[contact.did]" | 
			
		
	
		
			
				
					|  |  |  |               > | 
			
		
	
	
		
			
				
					|  |  | @ -171,7 +183,7 @@ | 
			
		
	
		
			
				
					|  |  |  |                         : (givenToMeUnconfirmed[contact.did] || 0) | 
			
		
	
		
			
				
					|  |  |  |                   /* eslint-enable prettier/prettier */ | 
			
		
	
		
			
				
					|  |  |  |                 }} | 
			
		
	
		
			
				
					|  |  |  |                 <fa icon="plus" class="fa-fw" /> | 
			
		
	
		
			
				
					|  |  |  |                 <fa icon="plus" /> | 
			
		
	
		
			
				
					|  |  |  |               </button> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |               <router-link | 
			
		
	
	
		
			
				
					|  |  | @ -214,12 +226,13 @@ import { | 
			
		
	
		
			
				
					|  |  |  | import { Component, Vue } from "vue-facing-decorator"; | 
			
		
	
		
			
				
					|  |  |  | import AlertMessage from "@/components/AlertMessage"; | 
			
		
	
		
			
				
					|  |  |  | import QuickNav from "@/components/QuickNav"; | 
			
		
	
		
			
				
					|  |  |  | import EntityIcon from "@/components/EntityIcon"; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // eslint-disable-next-line @typescript-eslint/no-var-requires | 
			
		
	
		
			
				
					|  |  |  | const Buffer = require("buffer/").Buffer; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | @Component({ | 
			
		
	
		
			
				
					|  |  |  |   components: { AlertMessage, QuickNav }, | 
			
		
	
		
			
				
					|  |  |  |   components: { AlertMessage, QuickNav, EntityIcon }, | 
			
		
	
		
			
				
					|  |  |  | }) | 
			
		
	
		
			
				
					|  |  |  | export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |   activeDid = ""; | 
			
		
	
	
		
			
				
					|  |  | @ -294,20 +307,27 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   async loadGives() { | 
			
		
	
		
			
				
					|  |  |  |     const handleResponse = (resp, descriptions, confirmed, unconfirmed) => { | 
			
		
	
		
			
				
					|  |  |  |     const handleResponse = ( | 
			
		
	
		
			
				
					|  |  |  |       resp, | 
			
		
	
		
			
				
					|  |  |  |       descriptions, | 
			
		
	
		
			
				
					|  |  |  |       confirmed, | 
			
		
	
		
			
				
					|  |  |  |       unconfirmed, | 
			
		
	
		
			
				
					|  |  |  |       useRecipient, | 
			
		
	
		
			
				
					|  |  |  |     ) => { | 
			
		
	
		
			
				
					|  |  |  |       if (resp.status === 200) { | 
			
		
	
		
			
				
					|  |  |  |         const allData = resp.data.data; | 
			
		
	
		
			
				
					|  |  |  |         for (const give of allData) { | 
			
		
	
		
			
				
					|  |  |  |           const otherDid = useRecipient ? give.recipientDid : give.agentDid; | 
			
		
	
		
			
				
					|  |  |  |           if (give.unit === "HUR") { | 
			
		
	
		
			
				
					|  |  |  |             if (give.amountConfirmed) { | 
			
		
	
		
			
				
					|  |  |  |               const prevAmount = confirmed[give.agentDid] || 0; | 
			
		
	
		
			
				
					|  |  |  |               confirmed[give.agentDid] = prevAmount + give.amount; | 
			
		
	
		
			
				
					|  |  |  |               const prevAmount = confirmed[otherDid] || 0; | 
			
		
	
		
			
				
					|  |  |  |               confirmed[otherDid] = prevAmount + give.amount; | 
			
		
	
		
			
				
					|  |  |  |             } else { | 
			
		
	
		
			
				
					|  |  |  |               const prevAmount = unconfirmed[give.agentDid] || 0; | 
			
		
	
		
			
				
					|  |  |  |               unconfirmed[give.agentDid] = prevAmount + give.amount; | 
			
		
	
		
			
				
					|  |  |  |               const prevAmount = unconfirmed[otherDid] || 0; | 
			
		
	
		
			
				
					|  |  |  |               unconfirmed[otherDid] = prevAmount + give.amount; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             if (!descriptions[give.agentDid] && give.description) { | 
			
		
	
		
			
				
					|  |  |  |               descriptions[give.agentDid] = give.description; | 
			
		
	
		
			
				
					|  |  |  |             if (!descriptions[otherDid] && give.description) { | 
			
		
	
		
			
				
					|  |  |  |               descriptions[otherDid] = give.description; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
	
		
			
				
					|  |  | @ -317,27 +337,32 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |           resp.status, | 
			
		
	
		
			
				
					|  |  |  |           resp.data, | 
			
		
	
		
			
				
					|  |  |  |         ); | 
			
		
	
		
			
				
					|  |  |  |         this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |         this.alertMessage = | 
			
		
	
		
			
				
					|  |  |  |           "Got an error retrieving your " + | 
			
		
	
		
			
				
					|  |  |  |           resp.config.url.includes("recipientDid") | 
			
		
	
		
			
				
					|  |  |  |             ? "received" | 
			
		
	
		
			
				
					|  |  |  |             : "given" + " time from the server."; | 
			
		
	
		
			
				
					|  |  |  |         this.$notify( | 
			
		
	
		
			
				
					|  |  |  |           { | 
			
		
	
		
			
				
					|  |  |  |             group: "alert", | 
			
		
	
		
			
				
					|  |  |  |             type: "danger", | 
			
		
	
		
			
				
					|  |  |  |             title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |             text: | 
			
		
	
		
			
				
					|  |  |  |               "Got an error retrieving your " + | 
			
		
	
		
			
				
					|  |  |  |               resp.config.url.includes("recipientDid") | 
			
		
	
		
			
				
					|  |  |  |                 ? "received" | 
			
		
	
		
			
				
					|  |  |  |                 : "given" + " time from the server.", | 
			
		
	
		
			
				
					|  |  |  |           }, | 
			
		
	
		
			
				
					|  |  |  |           -1, | 
			
		
	
		
			
				
					|  |  |  |         ); | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     try { | 
			
		
	
		
			
				
					|  |  |  |       const { headers, identity } = await this.getHeadersAndIdentity( | 
			
		
	
		
			
				
					|  |  |  |         this.activeDid, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |       const { headers } = await this.getHeadersAndIdentity(this.activeDid); | 
			
		
	
		
			
				
					|  |  |  |       const givenByUrl = | 
			
		
	
		
			
				
					|  |  |  |         this.apiServer + | 
			
		
	
		
			
				
					|  |  |  |         "/api/v2/report/gives?agentDid=" + | 
			
		
	
		
			
				
					|  |  |  |         encodeURIComponent(identity.did); | 
			
		
	
		
			
				
					|  |  |  |         encodeURIComponent(this.activeDid); | 
			
		
	
		
			
				
					|  |  |  |       const givenToUrl = | 
			
		
	
		
			
				
					|  |  |  |         this.apiServer + | 
			
		
	
		
			
				
					|  |  |  |         "/api/v2/report/gives?recipientDid=" + | 
			
		
	
		
			
				
					|  |  |  |         encodeURIComponent(identity.did); | 
			
		
	
		
			
				
					|  |  |  |         encodeURIComponent(this.activeDid); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       const [givenByMeResp, givenToMeResp] = await Promise.all([ | 
			
		
	
		
			
				
					|  |  |  |         this.axios.get(givenByUrl, { headers }), | 
			
		
	
	
		
			
				
					|  |  | @ -352,6 +377,7 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |         givenByMeDescriptions, | 
			
		
	
		
			
				
					|  |  |  |         givenByMeConfirmed, | 
			
		
	
		
			
				
					|  |  |  |         givenByMeUnconfirmed, | 
			
		
	
		
			
				
					|  |  |  |         true, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |       this.givenByMeDescriptions = givenByMeDescriptions; | 
			
		
	
		
			
				
					|  |  |  |       this.givenByMeConfirmed = givenByMeConfirmed; | 
			
		
	
	
		
			
				
					|  |  | @ -365,13 +391,21 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |         givenToMeDescriptions, | 
			
		
	
		
			
				
					|  |  |  |         givenToMeConfirmed, | 
			
		
	
		
			
				
					|  |  |  |         givenToMeUnconfirmed, | 
			
		
	
		
			
				
					|  |  |  |         false, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |       this.givenToMeDescriptions = givenToMeDescriptions; | 
			
		
	
		
			
				
					|  |  |  |       this.givenToMeConfirmed = givenToMeConfirmed; | 
			
		
	
		
			
				
					|  |  |  |       this.givenToMeUnconfirmed = givenToMeUnconfirmed; | 
			
		
	
		
			
				
					|  |  |  |     } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |       this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |       this.alertMessage = error as string; | 
			
		
	
		
			
				
					|  |  |  |       this.$notify( | 
			
		
	
		
			
				
					|  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |           group: "alert", | 
			
		
	
		
			
				
					|  |  |  |           type: "danger", | 
			
		
	
		
			
				
					|  |  |  |           title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |           text: error as string, | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         -1, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -464,18 +498,32 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |         try { | 
			
		
	
		
			
				
					|  |  |  |           const resp = await this.axios.post(url, payload, { headers }); | 
			
		
	
		
			
				
					|  |  |  |           if (resp.data?.success?.embeddedRecordError) { | 
			
		
	
		
			
				
					|  |  |  |             this.alertTitle = "Registration Still Unknown"; | 
			
		
	
		
			
				
					|  |  |  |             let message = "There was some problem with the registration."; | 
			
		
	
		
			
				
					|  |  |  |             if (typeof resp.data.success.embeddedRecordError == "string") { | 
			
		
	
		
			
				
					|  |  |  |               message += " " + resp.data.success.embeddedRecordError; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |             this.alertMessage = message; | 
			
		
	
		
			
				
					|  |  |  |             this.$notify( | 
			
		
	
		
			
				
					|  |  |  |               { | 
			
		
	
		
			
				
					|  |  |  |                 group: "alert", | 
			
		
	
		
			
				
					|  |  |  |                 type: "danger", | 
			
		
	
		
			
				
					|  |  |  |                 title: "Registration Still Unknown", | 
			
		
	
		
			
				
					|  |  |  |                 text: message, | 
			
		
	
		
			
				
					|  |  |  |               }, | 
			
		
	
		
			
				
					|  |  |  |               -1, | 
			
		
	
		
			
				
					|  |  |  |             ); | 
			
		
	
		
			
				
					|  |  |  |           } else if (resp.data?.success?.handleId) { | 
			
		
	
		
			
				
					|  |  |  |             contact.registered = true; | 
			
		
	
		
			
				
					|  |  |  |             db.contacts.update(contact.did, { registered: true }); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             this.alertTitle = "Registration Success"; | 
			
		
	
		
			
				
					|  |  |  |             this.alertMessage = contact.name + " has been registered."; | 
			
		
	
		
			
				
					|  |  |  |             this.$notify( | 
			
		
	
		
			
				
					|  |  |  |               { | 
			
		
	
		
			
				
					|  |  |  |                 group: "alert", | 
			
		
	
		
			
				
					|  |  |  |                 type: "info", | 
			
		
	
		
			
				
					|  |  |  |                 title: "Registration Success", | 
			
		
	
		
			
				
					|  |  |  |                 text: contact.name + " has been registered.", | 
			
		
	
		
			
				
					|  |  |  |               }, | 
			
		
	
		
			
				
					|  |  |  |               -1, | 
			
		
	
		
			
				
					|  |  |  |             ); | 
			
		
	
		
			
				
					|  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |         } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |           let userMessage = "There was an error. See logs for more info."; | 
			
		
	
	
		
			
				
					|  |  | @ -490,8 +538,15 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |             userMessage = error as string; | 
			
		
	
		
			
				
					|  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |           // Now set that error for the user to see. | 
			
		
	
		
			
				
					|  |  |  |           this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |           this.alertMessage = userMessage; | 
			
		
	
		
			
				
					|  |  |  |           this.$notify( | 
			
		
	
		
			
				
					|  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |               group: "alert", | 
			
		
	
		
			
				
					|  |  |  |               type: "danger", | 
			
		
	
		
			
				
					|  |  |  |               title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |               text: userMessage, | 
			
		
	
		
			
				
					|  |  |  |             }, | 
			
		
	
		
			
				
					|  |  |  |             -1, | 
			
		
	
		
			
				
					|  |  |  |           ); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  | @ -512,17 +567,39 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |         contact.seesMe = visibility; | 
			
		
	
		
			
				
					|  |  |  |         db.contacts.update(contact.did, { seesMe: visibility }); | 
			
		
	
		
			
				
					|  |  |  |       } else { | 
			
		
	
		
			
				
					|  |  |  |         this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |         console.error("Bad response setting visibility: ", resp.data); | 
			
		
	
		
			
				
					|  |  |  |         if (resp.data.error?.message) { | 
			
		
	
		
			
				
					|  |  |  |           this.alertMessage = resp.data.error?.message; | 
			
		
	
		
			
				
					|  |  |  |           this.$notify( | 
			
		
	
		
			
				
					|  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |               group: "alert", | 
			
		
	
		
			
				
					|  |  |  |               type: "danger", | 
			
		
	
		
			
				
					|  |  |  |               title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |               text: resp.data.error?.message, | 
			
		
	
		
			
				
					|  |  |  |             }, | 
			
		
	
		
			
				
					|  |  |  |             -1, | 
			
		
	
		
			
				
					|  |  |  |           ); | 
			
		
	
		
			
				
					|  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |           this.alertMessage = "Bad server response of " + resp.status; | 
			
		
	
		
			
				
					|  |  |  |           this.$notify( | 
			
		
	
		
			
				
					|  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |               group: "alert", | 
			
		
	
		
			
				
					|  |  |  |               type: "danger", | 
			
		
	
		
			
				
					|  |  |  |               title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |               text: "Bad server response of " + resp.status, | 
			
		
	
		
			
				
					|  |  |  |             }, | 
			
		
	
		
			
				
					|  |  |  |             -1, | 
			
		
	
		
			
				
					|  |  |  |           ); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |       this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |       this.alertMessage = err as string; | 
			
		
	
		
			
				
					|  |  |  |       this.$notify( | 
			
		
	
		
			
				
					|  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |           group: "alert", | 
			
		
	
		
			
				
					|  |  |  |           type: "danger", | 
			
		
	
		
			
				
					|  |  |  |           title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |           text: err as string, | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         -1, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -539,23 +616,52 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |         contact.seesMe = visibility; | 
			
		
	
		
			
				
					|  |  |  |         db.contacts.update(contact.did, { seesMe: visibility }); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         this.alertTitle = "Refreshed"; | 
			
		
	
		
			
				
					|  |  |  |         this.alertMessage = | 
			
		
	
		
			
				
					|  |  |  |           this.nameForContact(contact, true) + | 
			
		
	
		
			
				
					|  |  |  |           " can " + | 
			
		
	
		
			
				
					|  |  |  |           (visibility ? "" : "not ") + | 
			
		
	
		
			
				
					|  |  |  |           "see your activity."; | 
			
		
	
		
			
				
					|  |  |  |         this.$notify( | 
			
		
	
		
			
				
					|  |  |  |           { | 
			
		
	
		
			
				
					|  |  |  |             group: "alert", | 
			
		
	
		
			
				
					|  |  |  |             type: "toast", | 
			
		
	
		
			
				
					|  |  |  |             title: "Refreshed", | 
			
		
	
		
			
				
					|  |  |  |             text: | 
			
		
	
		
			
				
					|  |  |  |               this.nameForContact(contact, true) + | 
			
		
	
		
			
				
					|  |  |  |               " can " + | 
			
		
	
		
			
				
					|  |  |  |               (visibility ? "" : "not ") + | 
			
		
	
		
			
				
					|  |  |  |               "see your activity.", | 
			
		
	
		
			
				
					|  |  |  |           }, | 
			
		
	
		
			
				
					|  |  |  |           5000, | 
			
		
	
		
			
				
					|  |  |  |         ); | 
			
		
	
		
			
				
					|  |  |  |       } else { | 
			
		
	
		
			
				
					|  |  |  |         this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |         if (resp.data.error?.message) { | 
			
		
	
		
			
				
					|  |  |  |           this.alertMessage = resp.data.error?.message; | 
			
		
	
		
			
				
					|  |  |  |           this.$notify( | 
			
		
	
		
			
				
					|  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |               group: "alert", | 
			
		
	
		
			
				
					|  |  |  |               type: "danger", | 
			
		
	
		
			
				
					|  |  |  |               title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |               text: resp.data.error?.message, | 
			
		
	
		
			
				
					|  |  |  |             }, | 
			
		
	
		
			
				
					|  |  |  |             -1, | 
			
		
	
		
			
				
					|  |  |  |           ); | 
			
		
	
		
			
				
					|  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |           this.alertMessage = "Bad server response of " + resp.status; | 
			
		
	
		
			
				
					|  |  |  |           this.$notify( | 
			
		
	
		
			
				
					|  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |               group: "alert", | 
			
		
	
		
			
				
					|  |  |  |               type: "danger", | 
			
		
	
		
			
				
					|  |  |  |               title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |               text: "Bad server response of " + resp.status, | 
			
		
	
		
			
				
					|  |  |  |             }, | 
			
		
	
		
			
				
					|  |  |  |             -1, | 
			
		
	
		
			
				
					|  |  |  |           ); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } catch (err) { | 
			
		
	
		
			
				
					|  |  |  |       this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |       this.alertMessage = err as string; | 
			
		
	
		
			
				
					|  |  |  |       this.$notify( | 
			
		
	
		
			
				
					|  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |           group: "alert", | 
			
		
	
		
			
				
					|  |  |  |           type: "danger", | 
			
		
	
		
			
				
					|  |  |  |           title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |           text: err as string, | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         -1, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -594,15 +700,35 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     if (!this.isNumeric(this.hourInput)) { | 
			
		
	
		
			
				
					|  |  |  |       this.alertTitle = "Input Error"; | 
			
		
	
		
			
				
					|  |  |  |       this.alertMessage = | 
			
		
	
		
			
				
					|  |  |  |         "This is not a valid number of hours: " + this.hourInput; | 
			
		
	
		
			
				
					|  |  |  |       this.$notify( | 
			
		
	
		
			
				
					|  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |           group: "alert", | 
			
		
	
		
			
				
					|  |  |  |           type: "danger", | 
			
		
	
		
			
				
					|  |  |  |           title: "Input Error", | 
			
		
	
		
			
				
					|  |  |  |           text: "This is not a valid number of hours: " + this.hourInput, | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         -1, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } else if (!parseFloat(this.hourInput)) { | 
			
		
	
		
			
				
					|  |  |  |       this.alertTitle = "Input Error"; | 
			
		
	
		
			
				
					|  |  |  |       this.alertMessage = "Giving 0 hours does nothing."; | 
			
		
	
		
			
				
					|  |  |  |       this.$notify( | 
			
		
	
		
			
				
					|  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |           group: "alert", | 
			
		
	
		
			
				
					|  |  |  |           type: "danger", | 
			
		
	
		
			
				
					|  |  |  |           title: "Input Error", | 
			
		
	
		
			
				
					|  |  |  |           text: "Giving 0 hours does nothing.", | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         -1, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } else if (!identity) { | 
			
		
	
		
			
				
					|  |  |  |       this.alertTitle = "Status Error"; | 
			
		
	
		
			
				
					|  |  |  |       this.alertMessage = "No identity is available."; | 
			
		
	
		
			
				
					|  |  |  |       this.$notify( | 
			
		
	
		
			
				
					|  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |           group: "alert", | 
			
		
	
		
			
				
					|  |  |  |           type: "danger", | 
			
		
	
		
			
				
					|  |  |  |           title: "Status Error", | 
			
		
	
		
			
				
					|  |  |  |           text: "No identity is available.", | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         -1, | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } else { | 
			
		
	
		
			
				
					|  |  |  |       // ask to confirm amount | 
			
		
	
		
			
				
					|  |  |  |       let toFrom; | 
			
		
	
	
		
			
				
					|  |  | @ -686,8 +812,15 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |       try { | 
			
		
	
		
			
				
					|  |  |  |         const resp = await this.axios.post(url, payload, { headers }); | 
			
		
	
		
			
				
					|  |  |  |         if (resp.data?.success?.handleId) { | 
			
		
	
		
			
				
					|  |  |  |           this.alertTitle = "Done"; | 
			
		
	
		
			
				
					|  |  |  |           this.alertMessage = "Successfully logged time to the server."; | 
			
		
	
		
			
				
					|  |  |  |           this.$notify( | 
			
		
	
		
			
				
					|  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |               group: "alert", | 
			
		
	
		
			
				
					|  |  |  |               type: "success", | 
			
		
	
		
			
				
					|  |  |  |               title: "Done", | 
			
		
	
		
			
				
					|  |  |  |               text: "Successfully logged time to the server.", | 
			
		
	
		
			
				
					|  |  |  |             }, | 
			
		
	
		
			
				
					|  |  |  |             -1, | 
			
		
	
		
			
				
					|  |  |  |           ); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |           if (fromDid === identity.did) { | 
			
		
	
		
			
				
					|  |  |  |             const newList = R.clone(this.givenByMeUnconfirmed); | 
			
		
	
	
		
			
				
					|  |  | @ -712,8 +845,15 @@ export default class ContactsView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |           userMessage = error as string; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |         // Now set that error for the user to see. | 
			
		
	
		
			
				
					|  |  |  |         this.alertTitle = "Error With Server"; | 
			
		
	
		
			
				
					|  |  |  |         this.alertMessage = userMessage; | 
			
		
	
		
			
				
					|  |  |  |         this.$notify( | 
			
		
	
		
			
				
					|  |  |  |           { | 
			
		
	
		
			
				
					|  |  |  |             group: "alert", | 
			
		
	
		
			
				
					|  |  |  |             type: "danger", | 
			
		
	
		
			
				
					|  |  |  |             title: "Error With Server", | 
			
		
	
		
			
				
					|  |  |  |             text: userMessage, | 
			
		
	
		
			
				
					|  |  |  |           }, | 
			
		
	
		
			
				
					|  |  |  |           -1, | 
			
		
	
		
			
				
					|  |  |  |         ); | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  | 
 |