feat(NewActivityView): enhance "See all" links to mark offers as read before navigation #198
@@ -32,9 +32,9 @@
|
||||
@click="expandOffersToUserAndMarkRead()"
|
||||
/>
|
||||
</div>
|
||||
<router-link to="/recent-offers-to-user" class="text-blue-500">
|
||||
<a class="text-blue-500 cursor-pointer" @click="handleSeeAllOffersToUser">
|
||||
See all
|
||||
</router-link>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div v-if="showOffersDetails" class="ml-4 mt-4">
|
||||
@@ -99,9 +99,12 @@
|
||||
@click="expandOffersToUserProjectsAndMarkRead()"
|
||||
/>
|
||||
</div>
|
||||
<router-link to="/recent-offers-to-user-projects" class="text-blue-500">
|
||||
<a
|
||||
class="text-blue-500 cursor-pointer"
|
||||
@click="handleSeeAllOffersToUserProjects"
|
||||
>
|
||||
See all
|
||||
</router-link>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div v-if="showOffersToUserProjectsDetails" class="ml-4 mt-4">
|
||||
@@ -246,7 +249,7 @@ export default class NewActivityView extends Vue {
|
||||
|
||||
async expandOffersToUserAndMarkRead() {
|
||||
this.showOffersDetails = !this.showOffersDetails;
|
||||
if (this.showOffersDetails) {
|
||||
if (this.showOffersDetails && this.newOffersToUser.length > 0) {
|
||||
await this.$updateSettings({
|
||||
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
|
||||
});
|
||||
@@ -283,7 +286,10 @@ export default class NewActivityView extends Vue {
|
||||
async expandOffersToUserProjectsAndMarkRead() {
|
||||
this.showOffersToUserProjectsDetails =
|
||||
!this.showOffersToUserProjectsDetails;
|
||||
if (this.showOffersToUserProjectsDetails) {
|
||||
if (
|
||||
this.showOffersToUserProjectsDetails &&
|
||||
this.newOffersToUserProjects.length > 0
|
||||
) {
|
||||
await this.$updateSettings({
|
||||
lastAckedOfferToUserProjectsJwtId:
|
||||
this.newOffersToUserProjects[0].jwtId,
|
||||
@@ -291,7 +297,7 @@ export default class NewActivityView extends Vue {
|
||||
// note that we don't update this.lastAckedOfferToUserProjectsJwtId in case
|
||||
// they later choose the last one to keep the offers as new
|
||||
this.notify.info(
|
||||
"The offers are now marked as viewed. Click in the list to keep them as new.",
|
||||
"The offers are marked as viewed. Click in the list to keep them as new.",
|
||||
TIMEOUTS.LONG,
|
||||
);
|
||||
}
|
||||
@@ -319,5 +325,13 @@ export default class NewActivityView extends Vue {
|
||||
TIMEOUTS.STANDARD,
|
||||
);
|
||||
}
|
||||
|
||||
async handleSeeAllOffersToUser() {
|
||||
this.$router.push("/recent-offers-to-user");
|
||||
}
|
||||
|
||||
async handleSeeAllOffersToUserProjects() {
|
||||
this.$router.push("/recent-offers-to-user-projects");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -32,20 +32,20 @@
|
||||
</div>
|
||||
|
||||
<InfiniteScroll @reached-bottom="loadMoreOffersToUserProjects">
|
||||
<ul
|
||||
data-testId="listRecentOffersToUserProjects"
|
||||
class="border-t border-slate-300"
|
||||
>
|
||||
<ul data-testId="listRecentOffersToUserProjects">
|
||||
<li
|
||||
v-for="offer in newOffersToUserProjects"
|
||||
:key="offer.jwtId"
|
||||
class="mt-4 relative group"
|
||||
>
|
||||
<!-- Last viewed separator -->
|
||||
<div
|
||||
v-if="offer.jwtId == lastAckedOfferToUserProjectsJwtId"
|
||||
class="border-b border-slate-300 text-orange-400 pb-2 mb-2 font-bold text-sm"
|
||||
class="border-b border-dashed border-slate-300 text-orange-400 mt-4 mb-6 font-bold text-sm"
|
||||
>
|
||||
<span class="block w-fit mx-auto -mb-2.5 bg-white px-2">
|
||||
You've already seen all the following
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span>{{
|
||||
@@ -147,6 +147,14 @@ export default class RecentOffersToUserView extends Vue {
|
||||
this.newOffersToUserProjects = offersToUserProjectsData.data;
|
||||
this.newOffersToUserProjectsAtEnd = !offersToUserProjectsData.hitLimit;
|
||||
|
||||
// Mark offers as read after data is loaded
|
||||
if (this.newOffersToUserProjects.length > 0) {
|
||||
await this.$updateSettings({
|
||||
lastAckedOfferToUserProjectsJwtId:
|
||||
this.newOffersToUserProjects[0].jwtId,
|
||||
});
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
} catch (err: any) {
|
||||
logger.error("Error retrieving settings & contacts:", err);
|
||||
|
||||
@@ -27,20 +27,20 @@
|
||||
</p>
|
||||
</div>
|
||||
<InfiniteScroll @reached-bottom="loadMoreOffersToUser">
|
||||
<ul
|
||||
data-testId="listRecentOffersToUser"
|
||||
class="border-t border-slate-300"
|
||||
>
|
||||
<ul data-testId="listRecentOffersToUser">
|
||||
<li
|
||||
v-for="offer in newOffersToUser"
|
||||
:key="offer.jwtId"
|
||||
class="mt-4 relative group"
|
||||
>
|
||||
<!-- Last viewed separator -->
|
||||
<div
|
||||
v-if="offer.jwtId == lastAckedOfferToUserJwtId"
|
||||
class="border-b border-slate-300 text-orange-400 pb-2 mb-2 font-bold text-sm"
|
||||
class="border-b border-dashed border-slate-300 text-orange-400 mt-4 mb-6 font-bold text-sm"
|
||||
>
|
||||
<span class="block w-fit mx-auto -mb-2.5 bg-white px-2">
|
||||
You've already seen all the following
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span>{{
|
||||
@@ -138,6 +138,13 @@ export default class RecentOffersToUserView extends Vue {
|
||||
this.newOffersToUser = offersToUserData.data;
|
||||
this.newOffersToUserAtEnd = !offersToUserData.hitLimit;
|
||||
|
||||
// Mark offers as read after data is loaded
|
||||
if (this.newOffersToUser.length > 0) {
|
||||
await this.$updateSettings({
|
||||
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
|
||||
});
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
} catch (err: any) {
|
||||
logger.error("Error retrieving settings & contacts:", err);
|
||||
|
||||
Reference in New Issue
Block a user