|
|
@ -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> |
|
|
|