forked from jsnbuchanan/crowd-funder-for-time-pwa
adjust to the new profile-embedding endpoint
This commit is contained in:
@@ -328,13 +328,11 @@
|
||||
<button
|
||||
type="button"
|
||||
role="switch"
|
||||
:aria-checked="
|
||||
generateEmbedding ?? userProfileData?.generateEmbedding
|
||||
"
|
||||
:disabled="generateEmbeddingSaving || userProfileLoading"
|
||||
:aria-checked="embeddingMetadata?.generateEmbedding ?? false"
|
||||
:disabled="embeddingMetadataSaving || embeddingMetadataLoading"
|
||||
class="relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
:class="
|
||||
(generateEmbedding ?? userProfileData?.generateEmbedding)
|
||||
(embeddingMetadata?.generateEmbedding ?? false)
|
||||
? 'bg-blue-600'
|
||||
: 'bg-gray-200'
|
||||
"
|
||||
@@ -343,28 +341,24 @@
|
||||
<span
|
||||
class="pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition"
|
||||
:class="
|
||||
(generateEmbedding ?? userProfileData?.generateEmbedding)
|
||||
(embeddingMetadata?.generateEmbedding ?? false)
|
||||
? 'translate-x-5'
|
||||
: 'translate-x-1'
|
||||
"
|
||||
/>
|
||||
</button>
|
||||
<span class="text-sm text-gray-600">
|
||||
{{
|
||||
(generateEmbedding ?? userProfileData?.generateEmbedding)
|
||||
? "On"
|
||||
: "Off"
|
||||
}}
|
||||
<span v-if="userProfileLoading" class="ml-1">(loading…)</span>
|
||||
<span v-else-if="generateEmbeddingSaving" class="ml-1"
|
||||
{{ (embeddingMetadata?.generateEmbedding ?? false) ? "On" : "Off" }}
|
||||
<span v-if="embeddingMetadataLoading" class="ml-1">(loading…)</span>
|
||||
<span v-else-if="embeddingMetadataSaving" class="ml-1"
|
||||
>(saving…)</span
|
||||
>
|
||||
</span>
|
||||
<span class="text-sm text-gray-600">
|
||||
{{
|
||||
userProfileData?.embeddingIsForEmptyString == null
|
||||
embeddingMetadata?.isForEmptyString == null
|
||||
? ""
|
||||
: userProfileData?.embeddingIsForEmptyString
|
||||
: embeddingMetadata?.isForEmptyString
|
||||
? "- Embedding is for blank description"
|
||||
: "- Embedding is for non-blank description"
|
||||
}}
|
||||
@@ -519,9 +513,12 @@ export default class DIDView extends Vue {
|
||||
contactLabels: string[] = [];
|
||||
|
||||
contactYaml = "";
|
||||
generateEmbedding: boolean | null = null; // used when there is no profile
|
||||
generateEmbeddingLoading = false;
|
||||
generateEmbeddingSaving = false;
|
||||
embeddingMetadata: {
|
||||
generateEmbedding: boolean;
|
||||
isForEmptyString: boolean;
|
||||
} | null = null;
|
||||
embeddingMetadataLoading = false;
|
||||
embeddingMetadataSaving = false;
|
||||
hitEnd = false;
|
||||
isLoading = false;
|
||||
isMyDid = false;
|
||||
@@ -567,7 +564,7 @@ export default class DIDView extends Vue {
|
||||
await this.loadClaimsAbout();
|
||||
await this.checkIfOwnDID();
|
||||
if (this.showGeneralAdvanced && this.activeDid) {
|
||||
await this.loadUserProfile();
|
||||
await this.loadUserProfileEmbeddingMetadata();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -655,28 +652,17 @@ export default class DIDView extends Vue {
|
||||
if (!this.viewingDid || !this.activeDid) {
|
||||
return;
|
||||
}
|
||||
const newValue = !(this.userProfileData
|
||||
? this.userProfileData.generateEmbedding
|
||||
: this.generateEmbedding);
|
||||
this.generateEmbeddingSaving = true;
|
||||
const currentValue = this.embeddingMetadata?.generateEmbedding ?? false;
|
||||
const newValue = !currentValue;
|
||||
this.embeddingMetadataSaving = true;
|
||||
try {
|
||||
const headers = await getHeaders(this.activeDid);
|
||||
const url = `${this.partnerApiServer}/api/partner/userProfileGenerateEmbedding/${encodeURIComponent(this.viewingDid)}`;
|
||||
await this.axios.put(url, { generateEmbedding: newValue }, { headers });
|
||||
if (this.userProfileData) {
|
||||
this.userProfileData.generateEmbedding = newValue;
|
||||
this.userProfileData.embeddingIsForEmptyString = newValue; // the server should have generated it or erased it
|
||||
} else {
|
||||
this.generateEmbedding = newValue;
|
||||
if (newValue) {
|
||||
this.userProfileData = {
|
||||
description: "",
|
||||
issuerDid: this.viewingDid,
|
||||
generateEmbedding: newValue,
|
||||
embeddingIsForEmptyString: true,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh embedding metadata from the dedicated endpoint
|
||||
await this.loadUserProfileEmbeddingMetadata();
|
||||
|
||||
this.notify.success(
|
||||
newValue
|
||||
? "Contact tagged to always generate embedding."
|
||||
@@ -696,7 +682,7 @@ export default class DIDView extends Vue {
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
this.generateEmbeddingSaving = false;
|
||||
this.embeddingMetadataSaving = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -736,6 +722,39 @@ export default class DIDView extends Vue {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads embedding metadata (generateEmbedding, isForEmptyString) for the viewing DID
|
||||
* from the partner API userProfileEmbeddingMetadata endpoint.
|
||||
*/
|
||||
async loadUserProfileEmbeddingMetadata() {
|
||||
if (!this.viewingDid || !this.activeDid) return;
|
||||
this.embeddingMetadataLoading = true;
|
||||
this.embeddingMetadata = null;
|
||||
try {
|
||||
const headers = await getHeaders(this.activeDid);
|
||||
const url = `${this.partnerApiServer}/api/partner/userProfileEmbeddingMetadata/${encodeURIComponent(this.viewingDid)}`;
|
||||
const response = await this.axios.get(url, { headers });
|
||||
const data = response.data?.data;
|
||||
if (data && typeof data.generateEmbedding === "boolean") {
|
||||
this.embeddingMetadata = {
|
||||
generateEmbedding: data.generateEmbedding,
|
||||
isForEmptyString: !!data.isForEmptyString,
|
||||
};
|
||||
} else {
|
||||
this.embeddingMetadata = null;
|
||||
}
|
||||
} catch (err: unknown) {
|
||||
const axiosErr = err as { response?: { status?: number } };
|
||||
if (axiosErr.response?.status === 404) {
|
||||
this.embeddingMetadata = null;
|
||||
} else {
|
||||
logger.error("Failed to load user profile embedding metadata:", err);
|
||||
}
|
||||
} finally {
|
||||
this.embeddingMetadataLoading = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the user profile for the viewing DID from the partner API.
|
||||
* Shows profile content or a message if the DID has no profile or it is not visible.
|
||||
|
||||
Reference in New Issue
Block a user