From 9ff24f825887ca6874d9f4ed919ffcae6d9b9876 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 7 Nov 2025 18:11:11 -0700 Subject: [PATCH 1/2] fix: in project-edit view, don't show agent warning on new one, and automatically switch if they're changing --- src/views/NewEditProjectView.vue | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/views/NewEditProjectView.vue b/src/views/NewEditProjectView.vue index 1d006d4894..8f93aa4b3a 100644 --- a/src/views/NewEditProjectView.vue +++ b/src/views/NewEditProjectView.vue @@ -470,11 +470,11 @@ export default class NewEditProjectView extends Vue { this.projectId = (this.$route.query["projectId"] as string) || ""; - if (this.projectId) { + if (this.isSavedProject()) { if (this.numAccounts === 0) { this.notify.error(NOTIFY_PROJECT_ACCOUNT_LOADING_ERROR.message); } else { - this.loadProject(this.activeDid); + this.loadProject(this.activeDid, this.projectId); } } } @@ -484,11 +484,9 @@ export default class NewEditProjectView extends Vue { * Retrieves project information from the API and populates form fields * @param userDid - User's decentralized identifier */ - async loadProject(userDid: string) { + async loadProject(userDid: string, projectId: string) { const url = - this.apiServer + - "/api/claim/byHandle/" + - encodeURIComponent(this.projectId); + this.apiServer + "/api/claim/byHandle/" + encodeURIComponent(projectId); const headers = await getHeaders(userDid); try { @@ -505,6 +503,12 @@ export default class NewEditProjectView extends Vue { } if (this.fullClaim?.agent?.identifier) { this.agentDid = this.fullClaim.agent.identifier; + if (this.activeDid !== this.projectIssuerDid) { + this.agentDid = this.projectIssuerDid; + this.notify.warning( + "You were previously the agent, so the agent has been set to the previous owner. You can change it.", + ); + } } if (this.fullClaim.startTime) { const localDateTime = DateTime.fromISO( @@ -609,7 +613,7 @@ export default class NewEditProjectView extends Vue { private async saveProject() { // Make a claim const vcClaim: PlanActionClaim = this.fullClaim; - if (this.projectId) { + if (this.isSavedProject()) { vcClaim.lastClaimId = this.lastClaimJwtId; } if (this.agentDid) { @@ -943,6 +947,10 @@ export default class NewEditProjectView extends Vue { this.longitude = event.latlng.lng; } + private isSavedProject(): boolean { + return !!this.projectId; + } + /** * Computed property for character count display * Shows current description length and maximum character limit @@ -958,6 +966,7 @@ export default class NewEditProjectView extends Vue { */ get shouldShowOwnershipWarning(): boolean { return ( + this.isSavedProject() && this.activeDid !== this.projectIssuerDid && this.agentDid !== this.projectIssuerDid ); From b1fa6ac458ee3ca38d67a5fb116fd21c9799c9cf Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 7 Nov 2025 18:27:05 -0700 Subject: [PATCH 2/2] feat: show the recent contacts in the alphabetical section of choosers --- src/components/EntityGrid.vue | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/EntityGrid.vue b/src/components/EntityGrid.vue index 6c84eb7b47..42d93eeda1 100644 --- a/src/components/EntityGrid.vue +++ b/src/components/EntityGrid.vue @@ -307,14 +307,14 @@ export default class EntityGrid extends Vue { } /** - * Get the 3 most recently added contacts (when showing contacts and not searching) + * Get the most recently added contacts (when showing contacts and not searching) */ get recentContacts(): Contact[] { if (this.entityType !== "people" || this.searchTerm.trim()) { return []; } // Entities are already sorted by date added (newest first) - return (this.entities as Contact[]).slice(0, 3); + return (this.entities as Contact[]).slice(0, RECENT_CONTACTS_COUNT); } /** @@ -325,16 +325,16 @@ export default class EntityGrid extends Vue { if (this.entityType !== "people" || this.searchTerm.trim()) { return []; } - // Skip the first 3 (recent contacts) and sort the rest alphabetically + // Skip the first few (recent contacts) and sort the rest alphabetically // Create a copy to avoid mutating the original array - const remaining = (this.entities as Contact[]).slice(RECENT_CONTACTS_COUNT); + const remaining = this.entities as Contact[]; const sorted = [...remaining].sort((a: Contact, b: Contact) => { // Sort alphabetically by name, falling back to DID if name is missing const nameA = (a.name || a.did).toLowerCase(); const nameB = (b.name || b.did).toLowerCase(); return nameA.localeCompare(nameB); }); - // Apply infinite scroll: show based on displayedCount (minus the 3 recent) + // Apply infinite scroll: show based on displayedCount (minus the recent contacts) const toShow = Math.max(0, this.displayedCount - RECENT_CONTACTS_COUNT); return sorted.slice(0, toShow); } @@ -531,9 +531,8 @@ export default class EntityGrid extends Vue { } // People: check if more alphabetical contacts available - // Total available = 3 recent + all alphabetical - const remaining = (this.entities as Contact[]).slice(RECENT_CONTACTS_COUNT); - const totalAvailable = RECENT_CONTACTS_COUNT + remaining.length; + // Total available = recent + all alphabetical + const totalAvailable = RECENT_CONTACTS_COUNT + this.entities.length; return this.displayedCount < totalAvailable; }