|
|
@ -24,7 +24,9 @@ |
|
|
|
<div class="flex columns-3"> |
|
|
|
<h2 class="text-md font-bold w-full"> |
|
|
|
{{ |
|
|
|
capitalizeAndInsertSpacesBeforeCaps(veriClaim.claimType || "") |
|
|
|
serverUtil.capitalizeAndInsertSpacesBeforeCaps( |
|
|
|
veriClaim.claimType || "", |
|
|
|
) |
|
|
|
}} |
|
|
|
<button |
|
|
|
v-if="canEditClaim" |
|
|
@ -106,77 +108,91 @@ |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- Fullfills Links --> |
|
|
|
<div class="mt-4 empty:hidden"> |
|
|
|
<!-- fullfills links for a give --> |
|
|
|
<div v-if="detailsForGive?.fulfillsPlanHandleId"> |
|
|
|
<router-link |
|
|
|
:to=" |
|
|
|
'/project/' + |
|
|
|
encodeURIComponent(detailsForGive?.fulfillsPlanHandleId) |
|
|
|
" |
|
|
|
class="text-blue-500 mt-2" |
|
|
|
> |
|
|
|
This fulfills a bigger plan |
|
|
|
<font-awesome |
|
|
|
icon="arrow-up-right-from-square" |
|
|
|
class="fa-fw" |
|
|
|
/> |
|
|
|
</router-link> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- fullfills links for a give --> |
|
|
|
<div v-if="detailsForGive?.fulfillsPlanHandleId" class="mt-4"> |
|
|
|
<router-link |
|
|
|
:to=" |
|
|
|
'/project/' + |
|
|
|
encodeURIComponent(detailsForGive?.fulfillsPlanHandleId) |
|
|
|
" |
|
|
|
class="text-blue-500 mt-2" |
|
|
|
> |
|
|
|
Fulfills a bigger plan... |
|
|
|
</router-link> |
|
|
|
</div> |
|
|
|
<!-- if there's another, it's probably fulfilling an offer, too --> |
|
|
|
<div |
|
|
|
v-if=" |
|
|
|
detailsForGive?.fulfillsType && |
|
|
|
detailsForGive?.fulfillsType !== 'PlanAction' && |
|
|
|
detailsForGive?.fulfillsHandleId |
|
|
|
" |
|
|
|
> |
|
|
|
<!-- router-link to /claim/ only changes URL path --> |
|
|
|
<a |
|
|
|
class="text-blue-500 mt-4 cursor-pointer" |
|
|
|
@click=" |
|
|
|
showDifferentClaimPage(detailsForGive?.fulfillsHandleId) |
|
|
|
" |
|
|
|
> |
|
|
|
Fulfills |
|
|
|
{{ |
|
|
|
capitalizeAndInsertSpacesBeforeCaps( |
|
|
|
detailsForGive.fulfillsType, |
|
|
|
) |
|
|
|
}}... |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- fullfills links for an offer --> |
|
|
|
<div v-if="detailsForOffer?.fulfillsPlanHandleId"> |
|
|
|
<router-link |
|
|
|
:to=" |
|
|
|
'/project/' + |
|
|
|
encodeURIComponent(detailsForOffer?.fulfillsPlanHandleId) |
|
|
|
" |
|
|
|
class="text-blue-500 mt-4" |
|
|
|
> |
|
|
|
Offered to a bigger plan... |
|
|
|
</router-link> |
|
|
|
</div> |
|
|
|
<!-- Show offer fulfillment if this give fulfills an offer --> |
|
|
|
<div v-if="detailsForGiveOfferFulfillment?.offerHandleId"> |
|
|
|
<!-- router-link to /claim/ only changes URL path --> |
|
|
|
<a |
|
|
|
class="text-blue-500 mt-4 cursor-pointer" |
|
|
|
@click=" |
|
|
|
showDifferentClaimPage( |
|
|
|
detailsForGiveOfferFulfillment.offerHandleId, |
|
|
|
) |
|
|
|
" |
|
|
|
> |
|
|
|
This fulfills |
|
|
|
{{ |
|
|
|
serverUtil.capitalizeAndInsertSpacesBeforeCapsWithAPrefix( |
|
|
|
detailsForGiveOfferFulfillment.offerType || "Offer", |
|
|
|
) |
|
|
|
}} |
|
|
|
<font-awesome |
|
|
|
icon="arrow-up-right-from-square" |
|
|
|
class="fa-fw" |
|
|
|
/> |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- Providers --> |
|
|
|
<div v-if="providersForGive?.length > 0" class="mt-4"> |
|
|
|
<span>Other assistance provided by:</span> |
|
|
|
<ul class="ml-4"> |
|
|
|
<li |
|
|
|
v-for="provider of providersForGive" |
|
|
|
:key="provider.identifier" |
|
|
|
class="list-disc ml-4" |
|
|
|
<!-- fullfills links for an offer --> |
|
|
|
<div v-if="detailsForOffer?.fulfillsPlanHandleId"> |
|
|
|
<router-link |
|
|
|
:to=" |
|
|
|
'/project/' + |
|
|
|
encodeURIComponent(detailsForOffer?.fulfillsPlanHandleId) |
|
|
|
" |
|
|
|
class="text-blue-500 mt-4" |
|
|
|
> |
|
|
|
<div class="flex gap-4"> |
|
|
|
<div class="grow overflow-hidden"> |
|
|
|
<a |
|
|
|
class="text-blue-500 mt-4 cursor-pointer" |
|
|
|
@click="handleProviderClick(provider)" |
|
|
|
> |
|
|
|
an activity... |
|
|
|
</a> |
|
|
|
Offered to a bigger plan |
|
|
|
<font-awesome |
|
|
|
icon="arrow-up-right-from-square" |
|
|
|
class="fa-fw" |
|
|
|
/> |
|
|
|
</router-link> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- Providers --> |
|
|
|
<div v-if="providersForGive?.length > 0"> |
|
|
|
<span>Other assistance provided by:</span> |
|
|
|
<ul class="ml-4"> |
|
|
|
<li |
|
|
|
v-for="provider of providersForGive" |
|
|
|
:key="provider.identifier" |
|
|
|
class="list-disc ml-4" |
|
|
|
> |
|
|
|
<div class="flex gap-4"> |
|
|
|
<div class="grow overflow-hidden"> |
|
|
|
<a |
|
|
|
class="text-blue-500 mt-4 cursor-pointer" |
|
|
|
@click="handleProviderClick(provider)" |
|
|
|
> |
|
|
|
an activity |
|
|
|
<font-awesome |
|
|
|
icon="arrow-up-right-from-square" |
|
|
|
class="fa-fw" |
|
|
|
/> |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -556,6 +572,17 @@ export default class ClaimView extends Vue { |
|
|
|
fulfillsPlanHandleId?: string; |
|
|
|
fulfillsType?: string; |
|
|
|
fulfillsHandleId?: string; |
|
|
|
fullClaim?: { |
|
|
|
fulfills?: Array<{ |
|
|
|
"@type": string; |
|
|
|
identifier?: string; |
|
|
|
}>; |
|
|
|
}; |
|
|
|
} | null = null; |
|
|
|
// Additional offer information extracted from the fulfills array |
|
|
|
detailsForGiveOfferFulfillment: { |
|
|
|
offerHandleId?: string; |
|
|
|
offerType?: string; |
|
|
|
} | null = null; |
|
|
|
detailsForOffer: { fulfillsPlanHandleId?: string } | null = null; |
|
|
|
// Project information for fulfillsPlanHandleId |
|
|
@ -689,6 +716,7 @@ export default class ClaimView extends Vue { |
|
|
|
this.confsVisibleToIdList = []; |
|
|
|
this.detailsForGive = null; |
|
|
|
this.detailsForOffer = null; |
|
|
|
this.detailsForGiveOfferFulfillment = null; |
|
|
|
this.projectInfo = null; |
|
|
|
this.fullClaim = null; |
|
|
|
this.fullClaimDump = ""; |
|
|
@ -701,6 +729,15 @@ export default class ClaimView extends Vue { |
|
|
|
this.veriClaimDidsVisible = {}; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Extract offer fulfillment information from the fulfills array |
|
|
|
*/ |
|
|
|
extractOfferFulfillment() { |
|
|
|
this.detailsForGiveOfferFulfillment = libsUtil.extractOfferFulfillment( |
|
|
|
this.detailsForGive?.fullClaim?.fulfills |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
// ================================================= |
|
|
|
// UTILITY METHODS |
|
|
|
// ================================================= |
|
|
@ -758,13 +795,6 @@ export default class ClaimView extends Vue { |
|
|
|
this.canShare = !!navigator.share; |
|
|
|
} |
|
|
|
|
|
|
|
// insert a space before any capital letters except the initial letter |
|
|
|
// (and capitalize initial letter, just in case) |
|
|
|
capitalizeAndInsertSpacesBeforeCaps(text: string): string { |
|
|
|
if (!text) return ""; |
|
|
|
return text[0].toUpperCase() + text.substr(1).replace(/([A-Z])/g, " $1"); |
|
|
|
} |
|
|
|
|
|
|
|
totalConfirmers() { |
|
|
|
return ( |
|
|
|
this.numConfsNotVisible + |
|
|
@ -821,6 +851,8 @@ export default class ClaimView extends Vue { |
|
|
|
}); |
|
|
|
if (giveResp.status === 200 && giveResp.data.data?.length > 0) { |
|
|
|
this.detailsForGive = giveResp.data.data[0]; |
|
|
|
// Extract offer information from the fulfills array |
|
|
|
this.extractOfferFulfillment(); |
|
|
|
} else { |
|
|
|
await this.$logError( |
|
|
|
"Error getting detailed give info: " + JSON.stringify(giveResp), |
|
|
|