diff --git a/src/components/ActivityListItem.vue b/src/components/ActivityListItem.vue index 82212576..82e46e7c 100644 --- a/src/components/ActivityListItem.vue +++ b/src/components/ActivityListItem.vue @@ -251,10 +251,7 @@ import { Component, Prop, Vue, Emit } from "vue-facing-decorator"; import { GiveRecordWithContactInfo } from "@/interfaces/give"; import EntityIcon from "./EntityIcon.vue"; -import { - isGiveClaimType, - notifyWhyCannotConfirm -} from "../libs/util"; +import { isGiveClaimType, notifyWhyCannotConfirm } from "../libs/util"; import { containsHiddenDid, isHiddenDid } from "../libs/endorserServer"; import ProjectIcon from "./ProjectIcon.vue"; import { createNotifyHelpers } from "@/utils/notify"; diff --git a/src/components/ContactInputForm.vue b/src/components/ContactInputForm.vue index 4e121e31..0ef2ded4 100644 --- a/src/components/ContactInputForm.vue +++ b/src/components/ContactInputForm.vue @@ -11,7 +11,7 @@ @@ -23,7 +23,7 @@ @@ -40,7 +40,7 @@ @@ -56,7 +56,7 @@ @@ -71,25 +71,55 @@ import { Component, Vue, Prop } from "vue-facing-decorator"; * * Provides a form for adding new contacts with various input formats. * Includes action buttons for invites, meetings, and QR scanning. + * Uses function props for event handling to provide better parent control. * * @author Matthew Raymer */ @Component({ name: "ContactInputForm", - emits: [ - "submit", - "show-onboard-meeting", - "registration-required", - "navigate-onboard-meeting", - "qr-scan", - "update:modelValue", - ], }) export default class ContactInputForm extends Vue { @Prop({ required: true }) isRegistered!: boolean; @Prop({ type: String, default: "" }) modelValue!: string; + /** + * Function prop for handling contact submission + * Called when the add button is clicked with the current input value + */ + @Prop({ type: Function, default: () => {} }) + onSubmit!: (value: string) => void | Promise; + + /** + * Function prop for handling onboard meeting display + * Called when the onboard meeting button is clicked for registered users + */ + @Prop({ type: Function, default: () => {} }) + onShowOnboardMeeting!: () => void | Promise; + + /** + * Function prop for handling registration required notification + * Called when invite button is clicked for unregistered users + */ + @Prop({ type: Function, default: () => {} }) + onRegistrationRequired!: () => void | Promise; + + /** + * Function prop for handling onboard meeting navigation + * Called when onboard meeting button is clicked for unregistered users + */ + @Prop({ type: Function, default: () => {} }) + onNavigateOnboardMeeting!: () => void | Promise; + + + + /** + * Function prop for handling model value updates + * Called when the input value changes for v-model binding + */ + @Prop({ type: Function, default: () => {} }) + onUpdateModelValue!: (value: string) => void; + /** * Computed property for v-model binding */ @@ -98,7 +128,48 @@ export default class ContactInputForm extends Vue { } set inputValue(value: string) { - this.$emit("update:modelValue", value); + this.onUpdateModelValue(value); + } + + /** + * Handle submit button click + * Calls the onSubmit function prop with current input value + */ + private handleSubmit(): void { + this.onSubmit(this.inputValue); + } + + /** + * Handle show onboard meeting button click + * Calls the onShowOnboardMeeting function prop + */ + private handleShowOnboardMeeting(): void { + this.onShowOnboardMeeting(); + } + + /** + * Handle registration required notification + * Calls the onRegistrationRequired function prop + */ + private handleRegistrationRequired(): void { + this.onRegistrationRequired(); + } + + /** + * Handle navigate onboard meeting button click + * Calls the onNavigateOnboardMeeting function prop + */ + private handleNavigateOnboardMeeting(): void { + this.onNavigateOnboardMeeting(); + } + + /** + * Handle QR scan button click + * Emits qr-scan event for parent handling + */ + private handleQRScan(): void { + console.log("[ContactInputForm] QR scan button clicked"); + this.$emit("qr-scan"); } } diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue index 41db35e5..4bb976b1 100644 --- a/src/views/ContactsView.vue +++ b/src/views/ContactsView.vue @@ -25,13 +25,19 @@ - +