Trent Larson
3 weeks ago
8 changed files with 199 additions and 31 deletions
@ -0,0 +1,111 @@ |
|||
<template> |
|||
<QuickNav selected="Home"></QuickNav> |
|||
<!-- CONTENT --> |
|||
<section id="Content" class="p-6 pb-24 max-w-3xl mx-auto"> |
|||
<!-- Breadcrumb --> |
|||
<div id="ViewBreadcrumb" class="mb-8"> |
|||
<h1 class="text-lg text-center font-light relative px-7" > |
|||
<!-- Back --> |
|||
<fa |
|||
icon="chevron-left" |
|||
@click="$router.back()" |
|||
class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1" |
|||
/> |
|||
New Activity For You |
|||
</h1> |
|||
</div> |
|||
|
|||
<!-- Display a single row with the name of "New Offers To You" with a count. --> |
|||
<div class="new-offers-row flex justify-between items-center mb-4"> |
|||
<div class="flex justify-between items-center"> |
|||
<span class="text-lg font-medium">New Offers To You</span> |
|||
<fa |
|||
:icon="showOffersDetails ? 'chevron-down' : 'chevron-right'" |
|||
class="cursor-pointer ml-4" |
|||
@click="showOffersDetails = !showOffersDetails" |
|||
/> |
|||
</div> |
|||
<span class="text-lg font-medium">{{ newOffersToUser.length }}</span> |
|||
</div> |
|||
|
|||
<div v-if="showOffersDetails" class="ml-4"> |
|||
<ul> |
|||
<li v-for="offer in newOffersToUser" :key="offer.id" class="mt-2"> |
|||
<span>{{ didInfo(offer.offeredByDid, activeDid, allMyDids, allContacts) }}</span> |
|||
offers |
|||
<span v-if="offer.description">{{ offer.description }}</span> |
|||
<span v-if="offer.amount">{{ displayAmount(offer.unit, offer.amount) }}</span> |
|||
<router-link :to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }" class="text-blue-500"> |
|||
<fa icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" /> |
|||
</router-link> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</section> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { Component, Vue } from "vue-facing-decorator"; |
|||
import { Router } from "vue-router"; |
|||
|
|||
import GiftedDialog from "@/components/GiftedDialog.vue"; |
|||
import QuickNav from "@/components/QuickNav.vue"; |
|||
import EntityIcon from "@/components/EntityIcon.vue"; |
|||
import { NotificationIface } from "@/constants/app"; |
|||
import { accountsDB, db, retrieveSettingsForActiveAccount } from "@/db/index"; |
|||
import { Contact } from "@/db/tables/contacts"; |
|||
import { didInfo,displayAmount, getNewOffersToUser, OfferSummaryRecord } from "@/libs/endorserServer"; |
|||
|
|||
@Component({ |
|||
components: { GiftedDialog, QuickNav, EntityIcon }, |
|||
}) |
|||
export default class NewActivityView extends Vue { |
|||
$notify!: (notification: NotificationIface, timeout?: number) => void; |
|||
|
|||
activeDid = ""; |
|||
allContacts: Array<Contact> = []; |
|||
allMyDids: string[] = []; |
|||
apiServer = ""; |
|||
lastAckedOfferToUserJwtId = ""; |
|||
newOffersToUser: Array<OfferSummaryRecord> = []; |
|||
|
|||
showOffersDetails = false; |
|||
|
|||
didInfo = didInfo; |
|||
displayAmount = displayAmount; |
|||
|
|||
async created() { |
|||
try { |
|||
const settings = await retrieveSettingsForActiveAccount(); |
|||
this.apiServer = settings.apiServer || ""; |
|||
this.activeDid = settings.activeDid || ""; |
|||
this.lastAckedOfferToUserJwtId = settings.lastAckedOfferToUserJwtId || ""; |
|||
|
|||
this.allContacts = await db.contacts.toArray(); |
|||
|
|||
await accountsDB.open(); |
|||
const allAccounts = await accountsDB.accounts.toArray(); |
|||
if (allAccounts.length > 0) { |
|||
this.allMyDids = allAccounts.map((acc) => acc.did); |
|||
} |
|||
this.newOffersToUser = |
|||
await getNewOffersToUser(this.axios, this.apiServer, this.activeDid, this.lastAckedOfferToUserJwtId); |
|||
|
|||
// eslint-disable-next-line @typescript-eslint/no-explicit-any |
|||
} catch (err: any) { |
|||
console.error("Error retrieving settings & contacts:", err); |
|||
this.$notify( |
|||
{ |
|||
group: "alert", |
|||
type: "danger", |
|||
title: "Error", |
|||
text: |
|||
err.message || |
|||
"There was an error retrieving your activity.", |
|||
}, |
|||
5000, |
|||
); |
|||
} |
|||
} |
|||
} |
|||
</script> |
Loading…
Reference in new issue