allow an agent to edit a project

This commit is contained in:
2024-01-13 18:45:51 -07:00
parent 31aacb286f
commit fa72d38d18
7 changed files with 57 additions and 20 deletions

View File

@@ -29,6 +29,23 @@
v-model="fullClaim.name"
/>
<input
type="text"
placeholder="Other Authorized Representative"
class="block w-full rounded border border-slate-400 px-3 py-2"
v-model="agentDid"
/>
<div class="mb-4">
<p v-if="activeDid != projectIssuerDid && agentDid != projectIssuerDid">
<span class="text-red-500">Beware!</span>
If you save this, the original project owner will no longer be able to
edit it.
<button @click="agentDid = projectIssuerDid" class="text-blue-500">
Click here to make the original owner an authorized representative.
</button>
</p>
</div>
<textarea
placeholder="Description"
class="block w-full rounded border border-slate-400 mb-4 px-3 py-2"
@@ -57,8 +74,8 @@
</div>
<div v-if="includeLocation" style="height: 600px; width: 800px">
<div class="px-2 py-2">
For your security, we recommend you choose a location nearby but not
exactly at the place.
For your security, choose a location nearby but not exactly at the
place.
</div>
<l-map
@@ -98,7 +115,7 @@
<span :class="{ hidden: isHiddenSpinner }">
<!-- icon no worky? -->
<i class="fa-solid fa-spinner fa-spin-pulse"></i>
Saving&hellip;</span
Saving...</span
>
</button>
<button
@@ -141,6 +158,7 @@ export default class NewEditProjectView extends Vue {
$notify!: (notification: Notification, timeout?: number) => void;
activeDid = "";
agentDid = "";
apiServer = "";
errorMessage = "";
fullClaim: PlanVerifiableCredential = {
@@ -153,6 +171,7 @@ export default class NewEditProjectView extends Vue {
latitude = 0;
longitude = 0;
numAccounts = 0;
projectIssuerDid = "";
zoom = 2;
async beforeCreate() {
@@ -224,12 +243,16 @@ export default class NewEditProjectView extends Vue {
try {
const resp = await this.axios.get(url, { headers });
if (resp.status === 200) {
this.projectIssuerDid = resp.data.issuer;
this.fullClaim = resp.data.claim;
if (this.fullClaim?.location) {
this.includeLocation = true;
this.latitude = this.fullClaim.location.geo.latitude;
this.longitude = this.fullClaim.location.geo.longitude;
}
if (this.fullClaim?.agent?.identifier) {
this.agentDid = this.fullClaim.agent.identifier;
}
}
} catch (error) {
console.error("Got error retrieving that project", error);
@@ -242,6 +265,11 @@ export default class NewEditProjectView extends Vue {
if (this.projectId) {
vcClaim.identifier = this.projectId;
}
if (this.agentDid) {
vcClaim.agent = {
identifier: this.agentDid,
};
}
if (this.includeLocation) {
vcClaim.location = {
geo: {
@@ -290,18 +318,15 @@ export default class NewEditProjectView extends Vue {
// handleId is new in server v release-1.6.0; remove fullIri when that
// version shows up here: https://api.endorser.ch/api-docs/
useAppStore().setProjectId(
resp.data.success.handleId || resp.data.success.fullIri,
);
setTimeout(
function (that: NewEditProjectView) {
that.$router.push({ name: "project" });
},
2000,
this,
);
useAppStore()
.setProjectId(
resp.data.success.handleId || resp.data.success.fullIri,
)
.then(() => {
this.$router.push({ name: "project" });
});
} else {
console.log(
console.error(
"Got unexpected 'data' inside response from server",
resp,
);
@@ -321,7 +346,7 @@ export default class NewEditProjectView extends Vue {
error?: { message?: string };
}>;
if (serverError) {
console.log("Got error from server", serverError);
console.error("Got error from server", serverError);
if (Object.prototype.hasOwnProperty.call(serverError, "message")) {
userMessage = serverError.response?.data?.error?.message || ""; // This is info for the user.
this.$notify(