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