Feature: notify on click why entity is disabled

This commit is contained in:
Jose Olarte III
2025-07-04 19:12:56 +08:00
parent 17721ea448
commit 993aa005fa
5 changed files with 103 additions and 7 deletions

View File

@@ -14,6 +14,8 @@ projects, and special entities with selection. * * @author Matthew Raymer */
:selectable="youSelectable"
:conflicted="youConflicted"
:entity-data="youEntityData"
:notify="notify"
:conflict-context="conflictContext"
@entity-selected="handleEntitySelected"
/>
@@ -23,6 +25,8 @@ projects, and special entities with selection. * * @author Matthew Raymer */
label="Unnamed"
icon="circle-question"
:entity-data="unnamedEntityData"
:notify="notify"
:conflict-context="conflictContext"
@entity-selected="handleEntitySelected"
/>
</template>
@@ -38,23 +42,27 @@ projects, and special entities with selection. * * @author Matthew Raymer */
<!-- Entity cards (people or projects) -->
<template v-if="entityType === 'people'">
<PersonCard
v-for="person in displayedEntities"
v-for="person in displayedEntities as Contact[]"
:key="person.did"
:person="person"
:conflicted="isPersonConflicted(person.did)"
:show-time-icon="true"
:notify="notify"
:conflict-context="conflictContext"
@person-selected="handlePersonSelected"
/>
</template>
<template v-else-if="entityType === 'projects'">
<ProjectCard
v-for="project in displayedEntities"
v-for="project in displayedEntities as PlanData[]"
:key="project.handleId"
:project="project"
:active-did="activeDid"
:all-my-dids="allMyDids"
:all-contacts="allContacts"
:notify="notify"
:conflict-context="conflictContext"
@project-selected="handleProjectSelected"
/>
</template>
@@ -77,6 +85,7 @@ import SpecialEntityCard from "./SpecialEntityCard.vue";
import ShowAllCard from "./ShowAllCard.vue";
import { Contact } from "../db/tables/contacts";
import { PlanData } from "../interfaces/records";
import { NotificationIface } from "../constants/app";
/**
* EntityGrid - Unified grid layout for displaying people or projects
@@ -88,6 +97,7 @@ import { PlanData } from "../interfaces/records";
* - Empty state messaging
* - Show All navigation
* - Event delegation for entity selection
* - Warning notifications for conflicted entities
*/
@Component({
components: {
@@ -142,6 +152,14 @@ export default class EntityGrid extends Vue {
@Prop({ default: () => ({}) })
showAllQueryParams!: Record<string, string>;
/** Notification function from parent component */
@Prop()
notify?: (notification: NotificationIface, timeout?: number) => void;
/** Context for conflict messages (e.g., "giver", "recipient") */
@Prop({ default: "other party" })
conflictContext!: string;
/**
* Computed CSS classes for the grid layout
*/
@@ -241,7 +259,7 @@ export default class EntityGrid extends Vue {
handleEntitySelected(event: {
type: string;
entityType: string;
data: any;
data: { did?: string; name: string };
}): void {
this.emitEntitySelected({
type: "special",
@@ -253,7 +271,15 @@ export default class EntityGrid extends Vue {
// Emit methods using @Emit decorator
@Emit("entity-selected")
emitEntitySelected(data: any): any {
emitEntitySelected(data: {
type: "person" | "project" | "special";
entityType?: string;
data: Contact | PlanData | { did?: string; name: string };
}): {
type: "person" | "project" | "special";
entityType?: string;
data: Contact | PlanData | { did?: string; name: string };
} {
return data;
}
}