|  |  | @ -16,26 +16,26 @@ | 
			
		
	
		
			
				
					|  |  |  |     </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> | 
			
		
	
		
			
				
					|  |  |  |     <div class="mb-4"> | 
			
		
	
		
			
				
					|  |  |  |       <span class="text-lg font-medium">{{ newOffersToUser.length }}</span> | 
			
		
	
		
			
				
					|  |  |  |       <span class="text-lg font-medium ml-4" | 
			
		
	
		
			
				
					|  |  |  |         >New Offer{{ newOffersToUser.length === 1 ? "" : "s" }} To You</span | 
			
		
	
		
			
				
					|  |  |  |       > | 
			
		
	
		
			
				
					|  |  |  |       <fa | 
			
		
	
		
			
				
					|  |  |  |         :icon="showOffersDetails ? 'chevron-down' : 'chevron-right'" | 
			
		
	
		
			
				
					|  |  |  |         class="cursor-pointer ml-4 text-lg" | 
			
		
	
		
			
				
					|  |  |  |         @click="expandOffersToUserAndMarkRead()" | 
			
		
	
		
			
				
					|  |  |  |       /> | 
			
		
	
		
			
				
					|  |  |  |     </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     <div v-if="showOffersDetails" class="ml-4"> | 
			
		
	
		
			
				
					|  |  |  |       <ul> | 
			
		
	
		
			
				
					|  |  |  |         <li v-for="offer in newOffersToUser" :key="offer.id" class="mt-2"> | 
			
		
	
		
			
				
					|  |  |  |       <ul class="list-disc ml-4"> | 
			
		
	
		
			
				
					|  |  |  |         <li v-for="offer in newOffersToUser" :key="offer.id" class="mt-4 relative group"> | 
			
		
	
		
			
				
					|  |  |  |           <span>{{ | 
			
		
	
		
			
				
					|  |  |  |             didInfo(offer.offeredByDid, activeDid, allMyDids, allContacts) | 
			
		
	
		
			
				
					|  |  |  |           }}</span> | 
			
		
	
		
			
				
					|  |  |  |           offers | 
			
		
	
		
			
				
					|  |  |  |           <span v-if="offer.description">{{ offer.description }}</span> | 
			
		
	
		
			
				
					|  |  |  |           <span v-if="offer.objectDescription">{{ offer.objectDescription }}</span> | 
			
		
	
		
			
				
					|  |  |  |           <span v-if="offer.amount">{{ | 
			
		
	
		
			
				
					|  |  |  |             displayAmount(offer.unit, offer.amount) | 
			
		
	
		
			
				
					|  |  |  |           }}</span> | 
			
		
	
	
		
			
				
					|  |  | @ -45,6 +45,14 @@ | 
			
		
	
		
			
				
					|  |  |  |           > | 
			
		
	
		
			
				
					|  |  |  |             <fa icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" /> | 
			
		
	
		
			
				
					|  |  |  |           </router-link> | 
			
		
	
		
			
				
					|  |  |  |           <!-- New line that appears on hover --> | 
			
		
	
		
			
				
					|  |  |  |           <div | 
			
		
	
		
			
				
					|  |  |  |             @click="markOffersAsReadStartingWith(offer.jwtId)" | 
			
		
	
		
			
				
					|  |  |  |             class="absolute left-0 w-full text-left text-gray-500 text-sm hidden group-hover:flex cursor-pointer items-center" | 
			
		
	
		
			
				
					|  |  |  |           > | 
			
		
	
		
			
				
					|  |  |  |             <span class="inline-block w-8 h-px bg-gray-500 mr-2" /> | 
			
		
	
		
			
				
					|  |  |  |             Click to keep all above as new offers | 
			
		
	
		
			
				
					|  |  |  |           </div> | 
			
		
	
		
			
				
					|  |  |  |         </li> | 
			
		
	
		
			
				
					|  |  |  |       </ul> | 
			
		
	
		
			
				
					|  |  |  |     </div> | 
			
		
	
	
		
			
				
					|  |  | @ -58,7 +66,7 @@ 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 { accountsDB, db, retrieveSettingsForActiveAccount, updateAccountSettings } from "@/db/index"; | 
			
		
	
		
			
				
					|  |  |  | import { Contact } from "@/db/tables/contacts"; | 
			
		
	
		
			
				
					|  |  |  | import { | 
			
		
	
		
			
				
					|  |  |  |   didInfo, | 
			
		
	
	
		
			
				
					|  |  | @ -120,5 +128,49 @@ export default class NewActivityView extends Vue { | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   async expandOffersToUserAndMarkRead() { | 
			
		
	
		
			
				
					|  |  |  |     this.showOffersDetails = !this.showOffersDetails; | 
			
		
	
		
			
				
					|  |  |  |     if (this.newOffersToUser.length > 0) { | 
			
		
	
		
			
				
					|  |  |  |       await updateAccountSettings(this.activeDid, { | 
			
		
	
		
			
				
					|  |  |  |         lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId, | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |       // note that we don't update this.lastAckedOfferToUserJwtId in case they | 
			
		
	
		
			
				
					|  |  |  |       // later choose the last one to keep the offers as new | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     this.$notify( | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         group: "alert", | 
			
		
	
		
			
				
					|  |  |  |         type: "info", | 
			
		
	
		
			
				
					|  |  |  |         title: "Marked as Read", | 
			
		
	
		
			
				
					|  |  |  |         text: "The offers are marked as viewed. Click in the list to keep them as new.", | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       5000, | 
			
		
	
		
			
				
					|  |  |  |     ); | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   async markOffersAsReadStartingWith(jwtId: string) { | 
			
		
	
		
			
				
					|  |  |  |     const index = this.newOffersToUser.findIndex(offer => offer.jwtId === jwtId); | 
			
		
	
		
			
				
					|  |  |  |     if (index !== -1 && index < this.newOffersToUser.length - 1) { | 
			
		
	
		
			
				
					|  |  |  |       // Set to the next offer's jwtId | 
			
		
	
		
			
				
					|  |  |  |       await updateAccountSettings(this.activeDid, { | 
			
		
	
		
			
				
					|  |  |  |         lastAckedOfferToUserJwtId: this.newOffersToUser[index + 1].jwtId, | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |     } else { | 
			
		
	
		
			
				
					|  |  |  |       // it's the last entry (or not found), so just keep it the same | 
			
		
	
		
			
				
					|  |  |  |       await updateAccountSettings(this.activeDid, { | 
			
		
	
		
			
				
					|  |  |  |         lastAckedOfferToUserJwtId: this.lastAckedOfferToUserJwtId, | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     this.$notify( | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |         group: "alert", | 
			
		
	
		
			
				
					|  |  |  |         type: "info", | 
			
		
	
		
			
				
					|  |  |  |         title: "Marked as Unread", | 
			
		
	
		
			
				
					|  |  |  |         text: "All offers above that one are marked as unread.", | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       3000, | 
			
		
	
		
			
				
					|  |  |  |     ); | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | </script> | 
			
		
	
	
		
			
				
					|  |  | 
 |