diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue index 26c8fa7b..6b6d54cb 100644 --- a/src/views/ContactsView.vue +++ b/src/views/ContactsView.vue @@ -68,11 +68,12 @@ > {{ showGiveTotals - ? "Showing Totals" + ? "Totals" : showGiveConfirmed - ? "Showing Confirmed Amounts" - : "Showing Unconfirmed Amounts" + ? "Confirmed Amounts" + : "Unconfirmed Amounts" }} + diff --git a/src/views/ProjectViewView.vue b/src/views/ProjectViewView.vue index ef0fb0b3..d4597ec1 100644 --- a/src/views/ProjectViewView.vue +++ b/src/views/ProjectViewView.vue @@ -243,6 +243,9 @@ +
+ +
@@ -290,12 +293,18 @@ - +
+
+ +
@@ -316,6 +325,7 @@ {{ plan.name }}
+
Load More
@@ -388,12 +398,15 @@ export default class ProjectViewView extends Vue { expanded = false; fulfilledByThis: PlanSummaryRecord | null = null; fulfillersToThis: Array = []; + fulfillersToHitLimit = false; givesToThis: Array = []; + givesHitLimit = false; issuer = ""; latitude = 0; longitude = 0; name = ""; offersToThis: Array = []; + offersHitLimit = false; projectId = localStorage.getItem("projectId") || ""; // handle ID showDidCopy = false; startTime = ""; @@ -523,78 +536,17 @@ export default class ProjectViewView extends Vue { } } - const givesInUrl = - this.apiServer + - "/api/v2/report/givesToPlans?planIds=" + - encodeURIComponent(JSON.stringify([projectId])); - try { - const resp = await this.axios.get(givesInUrl, { headers }); - if (resp.status === 200 && resp.data.data) { - this.givesToThis = resp.data.data; - } else { - this.$notify( - { - group: "alert", - type: "danger", - title: "Error", - text: "Failed to retrieve gives to this project.", - }, - -1, - ); - } - } catch (error: unknown) { - const serverError = error as AxiosError; - this.$notify( - { - group: "alert", - type: "danger", - title: "Error", - text: "Something went wrong retrieving gives to this project.", - }, - -1, - ); - console.error( - "Error retrieving gives to this project:", - serverError.message, - ); - } + this.loadGives(); - const offersToUrl = - this.apiServer + - "/api/v2/report/offersToPlans?planIds=" + - encodeURIComponent(JSON.stringify([projectId])); - try { - const resp = await this.axios.get(offersToUrl, { headers }); - if (resp.status === 200 && resp.data.data) { - this.offersToThis = resp.data.data; - } else { - this.$notify( - { - group: "alert", - type: "danger", - title: "Error", - text: "Failed to retrieve offers to this project.", - }, - -1, - ); - } - } catch (error: unknown) { - const serverError = error as AxiosError; - this.$notify( - { - group: "alert", - type: "danger", - title: "Error", - text: "Something went wrong retrieving offers to this project.", - }, - -1, - ); - console.error( - "Error retrieving offers to this project:", - serverError.message, - ); - } + this.loadOffers(); + this.loadFulfillersTo(); + + // now load fulfilled-by, a single project + if (identity) { + const token = await accessToken(identity); + headers["Authorization"] = "Bearer " + token; + } const fulfilledByUrl = this.apiServer + "/api/v2/report/planFulfilledByPlan?planHandleId=" + @@ -630,22 +582,41 @@ export default class ProjectViewView extends Vue { serverError.message, ); } + } - const fulfillersToUrl = + async loadGives() { + const givesUrl = this.apiServer + - "/api/v2/report/planFulfillersToPlan?planHandleId=" + - encodeURIComponent(projectId); + "/api/v2/report/givesToPlans?planIds=" + + encodeURIComponent(JSON.stringify([this.projectId])); + let postfix = ""; + if (this.givesToThis.length > 0) { + postfix = + "&beforeId=" + this.givesToThis[this.givesToThis.length - 1].jwtId; + } + const givesInUrl = givesUrl + postfix; + + const headers: RawAxiosRequestHeaders = { + "Content-Type": "application/json", + }; + const identity = await this.getIdentity(this.activeDid); + if (identity) { + const token = await accessToken(identity); + headers["Authorization"] = "Bearer " + token; + } + try { - const resp = await this.axios.get(fulfillersToUrl, { headers }); - if (resp.status === 200) { - this.fulfillersToThis = resp.data.data; + const resp = await this.axios.get(givesInUrl, { headers }); + if (resp.status === 200 && resp.data.data) { + this.givesToThis = this.givesToThis.concat(resp.data.data); + this.givesHitLimit = resp.data.hitLimit; } else { this.$notify( { group: "alert", type: "danger", title: "Error", - text: "Failed to retrieve plan fulfillers to this project.", + text: "Failed to retrieve more gives to this project.", }, -1, ); @@ -657,12 +628,123 @@ export default class ProjectViewView extends Vue { group: "alert", type: "danger", title: "Error", - text: "Something went wrong retrieving plan fulfillers to this project.", + text: "Something went wrong retrieving more gives to this project.", }, -1, ); console.error( - "Error retrieving plan fulfillers to this project:", + "Something went wrong retrieving more gives to this project:", + serverError.message, + ); + } + } + + async loadOffers() { + const offersUrl = + this.apiServer + + "/api/v2/report/offersToPlans?planIds=" + + encodeURIComponent(JSON.stringify([this.projectId])); + let postfix = ""; + if (this.offersToThis.length > 0) { + postfix = + "&beforeId=" + this.offersToThis[this.offersToThis.length - 1].jwtId; + } + const offersInUrl = offersUrl + postfix; + + const headers: RawAxiosRequestHeaders = { + "Content-Type": "application/json", + }; + const identity = await this.getIdentity(this.activeDid); + if (identity) { + const token = await accessToken(identity); + headers["Authorization"] = "Bearer " + token; + } + + try { + const resp = await this.axios.get(offersInUrl, { headers }); + if (resp.status === 200 && resp.data.data) { + this.offersToThis = this.offersToThis.concat(resp.data.data); + this.offersHitLimit = resp.data.hitLimit; + } else { + this.$notify( + { + group: "alert", + type: "danger", + title: "Error", + text: "Failed to retrieve more offers to this project.", + }, + -1, + ); + } + } catch (error: unknown) { + const serverError = error as AxiosError; + this.$notify( + { + group: "alert", + type: "danger", + title: "Error", + text: "Something went wrong retrieving more offers to this project.", + }, + -1, + ); + console.error( + "Something went wrong retrieving more offers to this project:", + serverError.message, + ); + } + } + + async loadFulfillersTo() { + const fulfillsUrl = + this.apiServer + + "/api/v2/report/planFulfillersToPlan?planHandleId=" + + encodeURIComponent(this.projectId); + let postfix = ""; + if (this.fulfillersToThis.length > 0) { + postfix = + "&beforeId=" + + this.fulfillersToThis[this.fulfillersToThis.length - 1].jwtId; + } + const fulfillsInUrl = fulfillsUrl + postfix; + + const headers: RawAxiosRequestHeaders = { + "Content-Type": "application/json", + }; + const identity = await this.getIdentity(this.activeDid); + if (identity) { + const token = await accessToken(identity); + headers["Authorization"] = "Bearer " + token; + } + + try { + const resp = await this.axios.get(fulfillsInUrl, { headers }); + if (resp.status === 200) { + this.fulfillersToThis = this.fulfillersToThis.concat(resp.data.data); + this.fulfillersToHitLimit = resp.data.hitLimit; + } else { + this.$notify( + { + group: "alert", + type: "danger", + title: "Error", + text: "Failed to retrieve more plans that fullfill this project.", + }, + -1, + ); + } + } catch (error: unknown) { + const serverError = error as AxiosError; + this.$notify( + { + group: "alert", + type: "danger", + title: "Error", + text: "Something went wrong retrieving more plans that fulfull this project.", + }, + -1, + ); + console.error( + "Something went wrong retrieving more plans that fulfill this project:", serverError.message, ); }