Browse Source

allow loading more gives & offers & plans when limits are hit on project view

kb/add-usage-guide
Trent Larson 7 months ago
parent
commit
c1fe8216f6
  1. 7
      src/views/ContactsView.vue
  2. 150
      src/views/ProjectViewView.vue

7
src/views/ContactsView.vue

@ -68,11 +68,12 @@
> >
{{ {{
showGiveTotals showGiveTotals
? "Showing Totals" ? "Totals"
: showGiveConfirmed : showGiveConfirmed
? "Showing Confirmed Amounts" ? "Confirmed Amounts"
: "Showing Unconfirmed Amounts" : "Unconfirmed Amounts"
}} }}
<fa icon="rotate" class="fa-fw" />
</button> </button>
</div> </div>
</div> </div>

150
src/views/ProjectViewView.vue

@ -243,6 +243,9 @@
</div> </div>
</li> </li>
</ul> </ul>
<div v-if="offersHitLimit" class="text-center text-blue-500">
<button @click="loadOffers()">Load More</button>
</div>
</div> </div>
<div class="bg-slate-100 px-4 py-3 rounded-md"> <div class="bg-slate-100 px-4 py-3 rounded-md">
@ -290,12 +293,18 @@
<a @click="onClickLoadClaim(give.jwtId)"> <a @click="onClickLoadClaim(give.jwtId)">
<fa icon="file-lines" class="text-blue-500 cursor-pointer" /> <fa icon="file-lines" class="text-blue-500 cursor-pointer" />
</a> </a>
<a v-if="checkIsConfirmable(give)" @click="confirmConfirmClaim(give)"> <a
v-if="checkIsConfirmable(give)"
@click="confirmConfirmClaim(give)"
>
<fa icon="circle-check" class="text-blue-500 cursor-pointer" /> <fa icon="circle-check" class="text-blue-500 cursor-pointer" />
</a> </a>
</div> </div>
</li> </li>
</ul> </ul>
<div v-if="givesHitLimit" class="text-center text-blue-500">
<button @click="loadGives()">Load More</button>
</div>
</div> </div>
<div class="grid items-start grid-cols-1 gap-4"> <div class="grid items-start grid-cols-1 gap-4">
@ -316,6 +325,7 @@
{{ plan.name }} {{ plan.name }}
</button> </button>
</div> </div>
<div v-if="fulfillersToHitLimit" class="text-center">Load More</div>
</div> </div>
</div> </div>
@ -388,12 +398,15 @@ export default class ProjectViewView extends Vue {
expanded = false; expanded = false;
fulfilledByThis: PlanSummaryRecord | null = null; fulfilledByThis: PlanSummaryRecord | null = null;
fulfillersToThis: Array<PlanSummaryRecord> = []; fulfillersToThis: Array<PlanSummaryRecord> = [];
fulfillersToHitLimit = false;
givesToThis: Array<GiveSummaryRecord> = []; givesToThis: Array<GiveSummaryRecord> = [];
givesHitLimit = false;
issuer = ""; issuer = "";
latitude = 0; latitude = 0;
longitude = 0; longitude = 0;
name = ""; name = "";
offersToThis: Array<OfferSummaryRecord> = []; offersToThis: Array<OfferSummaryRecord> = [];
offersHitLimit = false;
projectId = localStorage.getItem("projectId") || ""; // handle ID projectId = localStorage.getItem("projectId") || ""; // handle ID
showDidCopy = false; showDidCopy = false;
startTime = ""; startTime = "";
@ -523,21 +536,32 @@ export default class ProjectViewView extends Vue {
} }
} }
const givesInUrl = this.loadGives();
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 + this.apiServer +
"/api/v2/report/givesToPlans?planIds=" + "/api/v2/report/planFulfilledByPlan?planHandleId=" +
encodeURIComponent(JSON.stringify([projectId])); encodeURIComponent(projectId);
try { try {
const resp = await this.axios.get(givesInUrl, { headers }); const resp = await this.axios.get(fulfilledByUrl, { headers });
if (resp.status === 200 && resp.data.data) { if (resp.status === 200) {
this.givesToThis = resp.data.data; this.fulfilledByThis = resp.data.data;
} else { } else {
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Failed to retrieve gives to this project.", text: "Failed to retrieve plans fulfilled by this project.",
}, },
-1, -1,
); );
@ -549,31 +573,50 @@ export default class ProjectViewView extends Vue {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Something went wrong retrieving gives to this project.", text: "Something went wrong retrieving plans fulfilled by this project.",
}, },
-1, -1,
); );
console.error( console.error(
"Error retrieving gives to this project:", "Error retrieving plans fulfilled by this project:",
serverError.message, serverError.message,
); );
} }
}
const offersToUrl = async loadGives() {
const givesUrl =
this.apiServer + this.apiServer +
"/api/v2/report/offersToPlans?planIds=" + "/api/v2/report/givesToPlans?planIds=" +
encodeURIComponent(JSON.stringify([projectId])); 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 { try {
const resp = await this.axios.get(offersToUrl, { headers }); const resp = await this.axios.get(givesInUrl, { headers });
if (resp.status === 200 && resp.data.data) { if (resp.status === 200 && resp.data.data) {
this.offersToThis = resp.data.data; this.givesToThis = this.givesToThis.concat(resp.data.data);
this.givesHitLimit = resp.data.hitLimit;
} else { } else {
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Failed to retrieve offers to this project.", text: "Failed to retrieve more gives to this project.",
}, },
-1, -1,
); );
@ -585,31 +628,50 @@ export default class ProjectViewView extends Vue {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Something went wrong retrieving offers to this project.", text: "Something went wrong retrieving more gives to this project.",
}, },
-1, -1,
); );
console.error( console.error(
"Error retrieving offers to this project:", "Something went wrong retrieving more gives to this project:",
serverError.message, serverError.message,
); );
} }
}
const fulfilledByUrl = async loadOffers() {
const offersUrl =
this.apiServer + this.apiServer +
"/api/v2/report/planFulfilledByPlan?planHandleId=" + "/api/v2/report/offersToPlans?planIds=" +
encodeURIComponent(projectId); 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 { try {
const resp = await this.axios.get(fulfilledByUrl, { headers }); const resp = await this.axios.get(offersInUrl, { headers });
if (resp.status === 200) { if (resp.status === 200 && resp.data.data) {
this.fulfilledByThis = resp.data.data; this.offersToThis = this.offersToThis.concat(resp.data.data);
this.offersHitLimit = resp.data.hitLimit;
} else { } else {
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Failed to retrieve plans fulfilled by this project.", text: "Failed to retrieve more offers to this project.",
}, },
-1, -1,
); );
@ -621,31 +683,51 @@ export default class ProjectViewView extends Vue {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Something went wrong retrieving plans fulfilled by this project.", text: "Something went wrong retrieving more offers to this project.",
}, },
-1, -1,
); );
console.error( console.error(
"Error retrieving plans fulfilled by this project:", "Something went wrong retrieving more offers to this project:",
serverError.message, serverError.message,
); );
} }
}
const fulfillersToUrl = async loadFulfillersTo() {
const fulfillsUrl =
this.apiServer + this.apiServer +
"/api/v2/report/planFulfillersToPlan?planHandleId=" + "/api/v2/report/planFulfillersToPlan?planHandleId=" +
encodeURIComponent(projectId); 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 { try {
const resp = await this.axios.get(fulfillersToUrl, { headers }); const resp = await this.axios.get(fulfillsInUrl, { headers });
if (resp.status === 200) { if (resp.status === 200) {
this.fulfillersToThis = resp.data.data; this.fulfillersToThis = this.fulfillersToThis.concat(resp.data.data);
this.fulfillersToHitLimit = resp.data.hitLimit;
} else { } else {
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Failed to retrieve plan fulfillers to this project.", text: "Failed to retrieve more plans that fullfill this project.",
}, },
-1, -1,
); );
@ -657,12 +739,12 @@ export default class ProjectViewView extends Vue {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: "Something went wrong retrieving plan fulfillers to this project.", text: "Something went wrong retrieving more plans that fulfull this project.",
}, },
-1, -1,
); );
console.error( console.error(
"Error retrieving plan fulfillers to this project:", "Something went wrong retrieving more plans that fulfill this project:",
serverError.message, serverError.message,
); );
} }

Loading…
Cancel
Save