|
|
|
|
@@ -93,6 +93,16 @@
|
|
|
|
|
class="inline-block align-text-bottom border border-slate-300 rounded"
|
|
|
|
|
></EntityIcon>
|
|
|
|
|
{{ contact.name || "(no name)" }}
|
|
|
|
|
<button
|
|
|
|
|
class="text-sm uppercase bg-slate-500 text-white px-1 rounded-md"
|
|
|
|
|
@click="
|
|
|
|
|
contactEdit = contact;
|
|
|
|
|
contactNewName = contact.name;
|
|
|
|
|
"
|
|
|
|
|
title="Edit"
|
|
|
|
|
>
|
|
|
|
|
<fa icon="pen" class="fa-fw" />
|
|
|
|
|
</button>
|
|
|
|
|
</h2>
|
|
|
|
|
<div class="text-sm truncate">{{ contact.did }}</div>
|
|
|
|
|
<div class="text-sm truncate" v-if="contact.publicKeyBase64">
|
|
|
|
|
@@ -209,6 +219,31 @@
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<p v-else>This identity has no contacts.</p>
|
|
|
|
|
|
|
|
|
|
<div v-if="contactEdit !== null" class="dialog-overlay">
|
|
|
|
|
<div class="dialog">
|
|
|
|
|
<h1 class="text-xl font-bold text-center mb-4">Edit Name</h1>
|
|
|
|
|
<input
|
|
|
|
|
type="text"
|
|
|
|
|
class="block w-full rounded border border-slate-400 mb-2 px-3 py-2"
|
|
|
|
|
placeholder="Name"
|
|
|
|
|
v-model="contactNewName"
|
|
|
|
|
/>
|
|
|
|
|
<button
|
|
|
|
|
class="text-sm bg-blue-600 text-white px-2 py-1.5 rounded -ml-1.5 border-l border-blue-400"
|
|
|
|
|
@click="onClickSaveName(contactEdit, contactNewName)"
|
|
|
|
|
>
|
|
|
|
|
<fa icon="save" />
|
|
|
|
|
</button>
|
|
|
|
|
<span class="inline-block w-2" />
|
|
|
|
|
<button
|
|
|
|
|
class="text-sm bg-blue-600 text-white px-2 py-1.5 rounded -ml-1.5 border-l border-blue-400"
|
|
|
|
|
@click="onClickCancelName()"
|
|
|
|
|
>
|
|
|
|
|
<fa icon="ban" />
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
@@ -251,6 +286,8 @@ export default class ContactsView extends Vue {
|
|
|
|
|
contacts: Array<Contact> = [];
|
|
|
|
|
contactEndorserUrl = localStorage.getItem("contactEndorserUrl") || "";
|
|
|
|
|
contactInput = "";
|
|
|
|
|
contactEdit: Contact | null = null;
|
|
|
|
|
contactNewName = "";
|
|
|
|
|
// { "did:...": concatenated-descriptions } entry for each contact
|
|
|
|
|
givenByMeDescriptions: Record<string, string> = {};
|
|
|
|
|
// { "did:...": amount } entry for each contact
|
|
|
|
|
@@ -961,6 +998,18 @@ export default class ContactsView extends Vue {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async onClickCancelName() {
|
|
|
|
|
this.contactEdit = null;
|
|
|
|
|
this.contactNewName = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async onClickSaveName(contact: Contact, newName: string) {
|
|
|
|
|
contact.name = newName;
|
|
|
|
|
return db.contacts
|
|
|
|
|
.update(contact.did, { name: newName })
|
|
|
|
|
.then(() => (this.contactEdit = null));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public toggleShowGiveTotals() {
|
|
|
|
|
if (this.showGiveTotals) {
|
|
|
|
|
this.showGiveTotals = false;
|
|
|
|
|
@@ -985,6 +1034,26 @@ export default class ContactsView extends Vue {
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
.dialog-overlay {
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
padding: 1.5rem;
|
|
|
|
|
}
|
|
|
|
|
.dialog {
|
|
|
|
|
background-color: white;
|
|
|
|
|
padding: 1rem;
|
|
|
|
|
border-radius: 0.5rem;
|
|
|
|
|
width: 100%;
|
|
|
|
|
max-width: 500px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Tooltip from https://www.w3schools.com/css/css_tooltip.asp */
|
|
|
|
|
/* Tooltip container */
|
|
|
|
|
.tooltip {
|
|
|
|
|
@@ -992,7 +1061,6 @@ export default class ContactsView extends Vue {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
border-bottom: 1px dotted black; /* If you want dots under the hoverable text */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Tooltip text */
|
|
|
|
|
.tooltip .tooltiptext {
|
|
|
|
|
visibility: hidden;
|
|
|
|
|
|