Merge branch 'project-representative-dialog' of ssh://173.199.124.46:222/trent_larson/crowd-funder-for-time-pwa into project-representative-dialog
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user