Show current user in ContactGiftingView #155

Merged
jose merged 13 commits from contact-gifting-current-user into master 2025-08-26 09:00:10 +00:00
4 changed files with 90 additions and 2 deletions
Showing only changes of commit bed2c7106a - Show all commits

View File

@@ -159,6 +159,10 @@ export default class EntityGrid extends Vue {
@Prop({ default: "other party" })
conflictContext!: string;
/** Whether to hide the "Show All" navigation */
@Prop({ default: false })
hideShowAll!: boolean;
trentlarson marked this conversation as resolved
Review

I see this is only ever set as false. If there are not any cases where it should be true then we can remove this and just set it to the 'false' behavior.

I see this is only ever set as false. If there are not any cases where it should be true then we can remove this and just set it to the 'false' behavior.
Review

hideShowAll is set to true via HTML attribute hide-show-all when accessing GiftedDialog from ContactGiftingView. This is used to tell GiftedDialog to hide the "Show All" link in that particular context, since "Show All" links to ContactGiftingView just the same.

`hideShowAll` is set to true via HTML attribute `hide-show-all` when accessing `GiftedDialog` from `ContactGiftingView`. This is used to tell GiftedDialog to **hide** the "Show All" link in that particular context, since "Show All" links to ContactGiftingView just the same.
Review

Ah! I see. Thanks.

Ah! I see. Thanks.
/**
* Function to determine which entities to display (allows parent control)
*
@@ -245,7 +249,9 @@ export default class EntityGrid extends Vue {
* Whether to show the "Show All" navigation
*/
get shouldShowAll(): boolean {
return this.entities.length > 0 && this.showAllRoute !== "";
return (
!this.hideShowAll && this.entities.length > 0 && this.showAllRoute !== ""
);
}
/**

View File

@@ -27,6 +27,7 @@ Matthew Raymer */
:show-all-query-params="showAllQueryParams"
:notify="notify"
:conflict-context="conflictContext"
:hide-show-all="hideShowAll"
@entity-selected="handleEntitySelected"
/>
@@ -140,6 +141,10 @@ export default class EntitySelectionStep extends Vue {
@Prop()
notify?: (notification: NotificationIface, timeout?: number) => void;
/** Whether to hide the "Show All" navigation */
@Prop({ default: false })
hideShowAll!: boolean;
/**
* CSS classes for the cancel button
*/

View File

@@ -19,6 +19,7 @@
:giver="giver"
:receiver="receiver"
:notify="$notify"
:hide-show-all="hideShowAll"
@entity-selected="handleEntitySelected"
@cancel="cancel"
/>
@@ -99,6 +100,7 @@ export default class GiftedDialog extends Vue {
@Prop() toProjectId = "";
@Prop({ default: false }) showProjects = false;
@Prop() isFromProjectView = false;
@Prop({ default: false }) hideShowAll = false;
@Watch("showProjects")
onShowProjectsChange() {

View File

@@ -17,6 +17,24 @@
<!-- Results List -->
<ul class="border-t border-slate-300">
<!-- "You" entity -->
<li v-if="shouldShowYouEntity" class="border-b border-slate-300 py-3">
<h2 class="text-base flex gap-4 items-center">
<span class="grow flex gap-2 items-center font-medium">
<font-awesome icon="hand" class="text-blue-500 text-4xl" />
<span class="text-blue-500">You</span>
</span>
<span class="text-right">
<button
type="button"
class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md"
@click="openDialog('You')"
>
<font-awesome icon="gift" class="fa-fw"></font-awesome>
</button>
</span>
</h2>
</li>
<li class="border-b border-slate-300 py-3">
<h2 class="text-base flex gap-4 items-center">
<span class="grow flex gap-2 items-center font-medium">
@@ -71,6 +89,7 @@
:to-project-id="toProjectId"
:show-projects="showProjects"
:is-from-project-view="isFromProjectView"
:hide-show-all="true"
/>
</section>
</template>
@@ -180,7 +199,7 @@ export default class ContactGiftingView extends Vue {
}
}
openDialog(contact?: GiverReceiverInputInfo | "Unnamed") {
openDialog(contact?: GiverReceiverInputInfo | "Unnamed" | "You") {
if (contact === "Unnamed") {
// Special case: Pass undefined to trigger Step 1, but with "Unnamed" pre-selected
let recipient: GiverReceiverInputInfo;
@@ -230,6 +249,55 @@ export default class ContactGiftingView extends Vue {
);
// Immediately select "Unnamed" and move to Step 2
(this.$refs.customDialog as GiftedDialog).selectGiver();
} else if (contact === "You") {
// Special case: Handle "You" entity selection
let giver: GiverReceiverInputInfo;
let recipient: GiverReceiverInputInfo;
if (this.stepType === "giver") {
// We're selecting a giver, so "You" becomes the giver
giver = { did: this.activeDid, name: "You" };
// Recipient is either a project or the current user
if (this.recipientEntityType === "project") {
recipient = {
did: this.recipientProjectHandleId,
name: this.recipientProjectName,
image: this.recipientProjectImage,
handleId: this.recipientProjectHandleId,
};
} else {
recipient = { did: this.activeDid, name: "You" };
}
} else {
// We're selecting a recipient, so "You" becomes the recipient
recipient = { did: this.activeDid, name: "You" };
// Preserve the existing giver from the context
if (this.giverEntityType === "project") {
giver = {
did: this.giverProjectHandleId,
name: this.giverProjectName,
image: this.giverProjectImage,
handleId: this.giverProjectHandleId,
};
} else if (this.giverDid) {
giver = {
did: this.giverDid,
name: this.giverProjectName || "Someone",
};
} else {
giver = { did: this.activeDid, name: "You" };
}
}
(this.$refs.customDialog as GiftedDialog).open(
giver,
recipient,
undefined,
this.stepType === "giver" ? "Given by You" : "Given to You",
this.prompt,
);
} else {
// Regular case: contact is a GiverReceiverInputInfo
let giver: GiverReceiverInputInfo;
@@ -283,5 +351,12 @@ export default class ContactGiftingView extends Vue {
);
}
}
get shouldShowYouEntity(): boolean {
return (
this.stepType === "recipient" ||
(this.stepType === "giver" && this.isFromProjectView)
);
}
}
</script>