diff --git a/project.yaml b/project.yaml
index 447889d0..4a54171e 100644
--- a/project.yaml
+++ b/project.yaml
@@ -1,12 +1,15 @@
- top screens from img/screens.pdf milestone:2 :
- new
- - make sure to save with plan identifier if it isn't already
+ - make sure to save with plan identifier if it isn't already assignee:trent
+ - feedback to show saving
- edit
- - make sure to save with plan identifier if it isn't already
+ - make sure to save with plan identifier if it isn't already assignee:trent
+ - feedback to show saved
- view all :
- also extract plan identifier (instead of claim ID) assignee:trent
- search bar isn't highlighted & icon on right doesn't show
- no tab bar across bottom
+ - add spinner
- view one
- change lookup to pull from new /api/ext/plan with plan identifier assignee:trent
- image
diff --git a/src/views/NewEditProjectView.vue b/src/views/NewEditProjectView.vue
index 5299823b..708027af 100644
--- a/src/views/NewEditProjectView.vue
+++ b/src/views/NewEditProjectView.vue
@@ -10,7 +10,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
>
- [New/Edit] Project
+ [New/Edit] Plan
@@ -65,6 +65,14 @@ import * as didJwt from "did-jwt";
import { IIdentifier } from "@veramo/core";
import { useAppStore } from "@/store/app";
+interface VerifiableCredential {
+ "@context": string;
+ "@type": string;
+ name: string;
+ description: string;
+ identifier?: string;
+}
+
@Options({
components: {},
})
@@ -93,8 +101,8 @@ export default class NewEditProjectView extends Vue {
async LoadProject(identity: IIdentifier) {
const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url =
- endorserApiServer + "/api/plan/" + encodeURIComponent(this.projectId);
+ // eslint-disable-next-line prettier/prettier
+ const url = endorserApiServer + "/api/claim/byHandle/" + encodeURIComponent(this.projectId);
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
@@ -116,12 +124,16 @@ export default class NewEditProjectView extends Vue {
private async SaveProject(identity: IIdentifier) {
// Make a claim
- const vcClaim = {
+ const vcClaim: VerifiableCredential = {
"@context": "https://schema.org",
"@type": "PlanAction",
name: this.projectName,
description: this.description,
+ identifier: this.projectId || undefined,
};
+ if (this.projectId) {
+ vcClaim.identifier = this.projectId;
+ }
// Make a payload for the claim
const vcPayload = {
sub: "PlanAction",
diff --git a/src/views/ProjectViewView.vue b/src/views/ProjectViewView.vue
index e1022021..e13031d9 100644
--- a/src/views/ProjectViewView.vue
+++ b/src/views/ProjectViewView.vue
@@ -60,10 +60,14 @@
>
- View Project
+ View Plan
+
+ {{ errorMessage }}
+
+
@@ -158,6 +162,7 @@ export default class ProjectViewView extends Vue {
truncateLength = 40;
timeSince = "";
projectId = localStorage.getItem("projectId") || "";
+ errorMessage = "";
onEditClick() {
localStorage.setItem("projectId", this.projectId as string);
@@ -178,8 +183,8 @@ export default class ProjectViewView extends Vue {
async LoadProject(identity: IIdentifier) {
const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url =
- endorserApiServer + "/api/plan/" + encodeURIComponent(this.projectId);
+ // eslint-disable-next-line prettier/prettier
+ const url = endorserApiServer + "/api/claim/byHandle/" + encodeURIComponent(this.projectId);
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
@@ -191,15 +196,27 @@ export default class ProjectViewView extends Vue {
console.log(resp.status, resp.data);
if (resp.status === 200) {
const startTime = resp.data.startTime;
- const eventDate = new Date(startTime);
- const now = moment.now();
- this.timeSince = moment.utc(now).to(eventDate);
- this.name = resp.data.name;
- this.description = resp.data.description;
+ if (startTime != null) {
+ const eventDate = new Date(startTime);
+ const now = moment.now();
+ this.timeSince = moment.utc(now).to(eventDate);
+ }
+ this.name = resp.data.claim?.name || "(no name)";
+ this.description = resp.data.claim?.description || "(no description)";
this.truncatedDesc = this.description.slice(0, this.truncateLength);
+ } else if (resp.status === 404) {
+ // actually, axios throws an error so we never get here
+ this.errorMessage = "That project does not exist.";
+ }
+ } catch (error: any) {
+ if (error?.response?.status === 404) {
+ this.errorMessage = "That project does not exist.";
+ } else {
+ this.errorMessage =
+ "Something went wrong retrieving that project." +
+ " See logs for more info.";
+ console.log("Error retrieving project:", error);
}
- } catch (error) {
- console.log(error);
}
}
diff --git a/src/views/ProjectsView.vue b/src/views/ProjectsView.vue
index bf5637b9..96b3869f 100644
--- a/src/views/ProjectsView.vue
+++ b/src/views/ProjectsView.vue
@@ -2,7 +2,7 @@
- My Projects
+ My Plans
@@ -32,10 +32,10 @@
@@ -68,7 +68,7 @@ import { AppString } from "@/constants/app";
components: {},
})
export default class ProjectsView extends Vue {
- projects: { id: string; name: string; description: string }[] = [];
+ projects: { handleId: string; name: string; description: string }[] = [];
onClickLoadProject(id: string) {
console.log("projectId", id);
@@ -82,10 +82,7 @@ export default class ProjectsView extends Vue {
async LoadProjects(identity: IIdentifier) {
const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url =
- endorserApiServer +
- "/api/claim/?claimType=PlanAction&issuer=" +
- identity.did;
+ const url = endorserApiServer + "/api/v2/report/plansByIssuer";
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
@@ -95,15 +92,13 @@ export default class ProjectsView extends Vue {
try {
const resp = await this.axios.get(url, { headers });
if (resp.status === 200) {
- const claims = resp.data;
- console.log("All claims:", claims);
- for (let i = 0; i < claims.length; i++) {
- const claim = claims[i].claim;
+ const plans = resp.data.data;
+ for (let i = 0; i < plans.length; i++) {
+ const plan = plans[i];
const data = {
- id: claims[i].id,
- name: claim.name,
- description: claim.description,
- identifier: claim.identifier,
+ name: plan.name,
+ description: plan.description,
+ handleId: plan.fullIri,
};
this.projects.push(data);
}