Browse Source

Merge branch 'project-representative-dialog' of ssh://173.199.124.46:222/trent_larson/crowd-funder-for-time-pwa into project-representative-dialog

Jose Olarte III 5 days ago
parent
commit
65533c15d2
  1. 15
      src/components/EntityGrid.vue
  2. 23
      src/views/NewEditProjectView.vue

15
src/components/EntityGrid.vue

@ -318,7 +318,7 @@ 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)
* *
* NOTE: This assumes entities are already sorted by date added (newest first). * NOTE: This assumes entities are already sorted by date added (newest first).
* See the entities prop documentation for details on using $contactsByDateAdded(). * See the entities prop documentation for details on using $contactsByDateAdded().
@ -328,7 +328,7 @@ export default class EntityGrid extends Vue {
return []; return [];
} }
// Entities are already sorted by date added (newest first) // 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);
} }
/** /**
@ -339,16 +339,16 @@ export default class EntityGrid extends Vue {
if (this.entityType !== "people" || this.searchTerm.trim()) { if (this.entityType !== "people" || this.searchTerm.trim()) {
return []; 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 // 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) => { const sorted = [...remaining].sort((a: Contact, b: Contact) => {
// Sort alphabetically by name, falling back to DID if name is missing // Sort alphabetically by name, falling back to DID if name is missing
const nameA = (a.name || a.did).toLowerCase(); const nameA = (a.name || a.did).toLowerCase();
const nameB = (b.name || b.did).toLowerCase(); const nameB = (b.name || b.did).toLowerCase();
return nameA.localeCompare(nameB); 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); const toShow = Math.max(0, this.displayedCount - RECENT_CONTACTS_COUNT);
return sorted.slice(0, toShow); return sorted.slice(0, toShow);
} }
@ -545,9 +545,8 @@ export default class EntityGrid extends Vue {
} }
// People: check if more alphabetical contacts available // People: check if more alphabetical contacts available
// Total available = 3 recent + all alphabetical // Total available = recent + all alphabetical
const remaining = (this.entities as Contact[]).slice(RECENT_CONTACTS_COUNT); const totalAvailable = RECENT_CONTACTS_COUNT + this.entities.length;
const totalAvailable = RECENT_CONTACTS_COUNT + remaining.length;
return this.displayedCount < totalAvailable; return this.displayedCount < totalAvailable;
} }

23
src/views/NewEditProjectView.vue

@ -470,11 +470,11 @@ export default class NewEditProjectView extends Vue {
this.projectId = (this.$route.query["projectId"] as string) || ""; this.projectId = (this.$route.query["projectId"] as string) || "";
if (this.projectId) { if (this.isSavedProject()) {
if (this.numAccounts === 0) { if (this.numAccounts === 0) {
this.notify.error(NOTIFY_PROJECT_ACCOUNT_LOADING_ERROR.message); this.notify.error(NOTIFY_PROJECT_ACCOUNT_LOADING_ERROR.message);
} else { } 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 * Retrieves project information from the API and populates form fields
* @param userDid - User's decentralized identifier * @param userDid - User's decentralized identifier
*/ */
async loadProject(userDid: string) { async loadProject(userDid: string, projectId: string) {
const url = const url =
this.apiServer + this.apiServer + "/api/claim/byHandle/" + encodeURIComponent(projectId);
"/api/claim/byHandle/" +
encodeURIComponent(this.projectId);
const headers = await getHeaders(userDid); const headers = await getHeaders(userDid);
try { try {
@ -505,6 +503,12 @@ export default class NewEditProjectView extends Vue {
} }
if (this.fullClaim?.agent?.identifier) { if (this.fullClaim?.agent?.identifier) {
this.agentDid = 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) { if (this.fullClaim.startTime) {
const localDateTime = DateTime.fromISO( const localDateTime = DateTime.fromISO(
@ -609,7 +613,7 @@ export default class NewEditProjectView extends Vue {
private async saveProject() { private async saveProject() {
// Make a claim // Make a claim
const vcClaim: PlanActionClaim = this.fullClaim; const vcClaim: PlanActionClaim = this.fullClaim;
if (this.projectId) { if (this.isSavedProject()) {
vcClaim.lastClaimId = this.lastClaimJwtId; vcClaim.lastClaimId = this.lastClaimJwtId;
} }
if (this.agentDid) { if (this.agentDid) {
@ -943,6 +947,10 @@ export default class NewEditProjectView extends Vue {
this.longitude = event.latlng.lng; this.longitude = event.latlng.lng;
} }
private isSavedProject(): boolean {
return !!this.projectId;
}
/** /**
* Computed property for character count display * Computed property for character count display
* Shows current description length and maximum character limit * Shows current description length and maximum character limit
@ -958,6 +966,7 @@ export default class NewEditProjectView extends Vue {
*/ */
get shouldShowOwnershipWarning(): boolean { get shouldShowOwnershipWarning(): boolean {
return ( return (
this.isSavedProject() &&
this.activeDid !== this.projectIssuerDid && this.activeDid !== this.projectIssuerDid &&
this.agentDid !== this.projectIssuerDid this.agentDid !== this.projectIssuerDid
); );

Loading…
Cancel
Save