6 changed files with 270 additions and 76 deletions
@ -0,0 +1,174 @@ |
|||||
|
<template> |
||||
|
<div |
||||
|
v-if="isOpen" |
||||
|
class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50" |
||||
|
> |
||||
|
<div class="bg-white rounded-lg p-6 max-w-2xl w-full mx-4"> |
||||
|
<!-- Header --> |
||||
|
<div class="flex justify-between items-center mb-4"> |
||||
|
<h2 class="text-xl font-bold capitalize">{{ roleName }} Details</h2> |
||||
|
<button @click="close" class="text-gray-500 hover:text-gray-700"> |
||||
|
<fa icon="times" /> |
||||
|
</button> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Content --> |
||||
|
<!-- This is somewhat similar to ClaimView.vue and ConfirmGiftView.vue --> |
||||
|
<div class="mb-4"> |
||||
|
<p class="mb-4"> |
||||
|
<span v-if="R.isEmpty(visibleToDids)"> |
||||
|
The {{ roleName }} is not visible to you or any of your contacts. |
||||
|
</span> |
||||
|
<span v-else> |
||||
|
The {{ roleName }} is not visible to you. |
||||
|
</span> |
||||
|
</p> |
||||
|
|
||||
|
<div v-if="R.isEmpty(visibleToDids)"> |
||||
|
<p class="mt-2"> |
||||
|
You can ask one of your contacts to take a look and see if their |
||||
|
contacts can see more details. Someone is connected to people closer |
||||
|
to them; if you don't know who to ask, try the person who registered |
||||
|
you. |
||||
|
</p> |
||||
|
</div> |
||||
|
|
||||
|
<div v-else> |
||||
|
<p class="mb-2"> |
||||
|
They are visible to some of your contacts. If you'd like an |
||||
|
introduction, ask them if they'll tell you more. |
||||
|
</p> |
||||
|
|
||||
|
<div class="ml-4"> |
||||
|
<ul> |
||||
|
<li |
||||
|
v-for="(visDid, idx) of visibleToDids" |
||||
|
:key="idx" |
||||
|
class="list-disc ml-4 mb-2" |
||||
|
> |
||||
|
<div class="text-sm"> |
||||
|
<span> |
||||
|
{{ didInfo(visDid) }} |
||||
|
<span v-if="!serverUtil.isEmptyOrHiddenDid(visDid)"> |
||||
|
<a :href="`/did/${visDid}`" target="_blank" class="text-blue-500"> |
||||
|
<fa icon="arrow-up-right-from-square" class="fa-fw" /> |
||||
|
</a> |
||||
|
</span> |
||||
|
</span> |
||||
|
</div> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="mt-4"> |
||||
|
<span v-if="canShare"> |
||||
|
If you'd like an introduction, |
||||
|
<a @click="onClickShareClaim()" class="text-blue-500" |
||||
|
>click here to share the information with them and ask if they'll |
||||
|
tell you more about the {{ roleName }}.</a |
||||
|
> |
||||
|
</span> |
||||
|
<span v-else> |
||||
|
If you'd like an introduction, |
||||
|
<a |
||||
|
@click="copyToClipboard('A link to this page', windowLocation)" |
||||
|
class="text-blue-500" |
||||
|
>click here to copy this page, paste it into a message, and ask |
||||
|
if they'll tell you more about the {{ roleName }}.</a |
||||
|
> |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Footer --> |
||||
|
<div class="flex justify-end"> |
||||
|
<button |
||||
|
@click="close" |
||||
|
class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600" |
||||
|
> |
||||
|
Close |
||||
|
</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script lang="ts"> |
||||
|
import { Component, Vue } from "vue-facing-decorator"; |
||||
|
import * as R from "ramda"; |
||||
|
import { useClipboard } from "@vueuse/core"; |
||||
|
import { Contact } from "@/db/tables/contacts"; |
||||
|
import * as serverUtil from "@/libs/endorserServer"; |
||||
|
import { NotificationIface } from "@/constants/app"; |
||||
|
|
||||
|
@Component |
||||
|
export default class HiddenDidDialog extends Vue { |
||||
|
$notify!: (notification: NotificationIface, timeout?: number) => void; |
||||
|
|
||||
|
isOpen = false; |
||||
|
roleName = ""; |
||||
|
visibleToDids: string[] = []; |
||||
|
allContacts: Array<Contact> = []; |
||||
|
activeDid = ""; |
||||
|
allMyDids: Array<string> = []; |
||||
|
canShare = false; |
||||
|
windowLocation = window.location.href; |
||||
|
|
||||
|
R = R; |
||||
|
serverUtil = serverUtil; |
||||
|
|
||||
|
created() { |
||||
|
// When Chrome compatibility is fixed https://developer.mozilla.org/en-US/docs/Web/API/Web_Share_API#api.navigator.canshare |
||||
|
// then use this truer check: navigator.canShare && navigator.canShare() |
||||
|
this.canShare = !!navigator.share; |
||||
|
} |
||||
|
|
||||
|
open(roleName: string, visibleToDids: string[], allContacts: Array<Contact>, activeDid: string, allMyDids: Array<string>) { |
||||
|
this.roleName = roleName; |
||||
|
this.visibleToDids = visibleToDids; |
||||
|
this.allContacts = allContacts; |
||||
|
this.activeDid = activeDid; |
||||
|
this.allMyDids = allMyDids; |
||||
|
this.isOpen = true; |
||||
|
} |
||||
|
|
||||
|
close() { |
||||
|
this.isOpen = false; |
||||
|
} |
||||
|
|
||||
|
didInfo(did: string) { |
||||
|
return serverUtil.didInfo( |
||||
|
did, |
||||
|
this.activeDid, |
||||
|
this.allMyDids, |
||||
|
this.allContacts, |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
copyToClipboard(name: string, text: string) { |
||||
|
useClipboard() |
||||
|
.copy(text) |
||||
|
.then(() => { |
||||
|
this.$notify( |
||||
|
{ |
||||
|
group: "alert", |
||||
|
type: "toast", |
||||
|
title: "Copied", |
||||
|
text: (name || "That") + " was copied to the clipboard.", |
||||
|
}, |
||||
|
2000, |
||||
|
); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
onClickShareClaim() { |
||||
|
this.copyToClipboard("A link to this page", this.windowLocation); |
||||
|
window.navigator.share({ |
||||
|
title: "Help Connect Me", |
||||
|
text: "I'm trying to find the people who recorded this. Can you help me?", |
||||
|
url: this.windowLocation, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
</script> |
Loading…
Reference in new issue