Trent Larson
4 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