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