|
@ -68,9 +68,9 @@ |
|
|
class="inline-block text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md" |
|
|
class="inline-block text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md" |
|
|
@click=" |
|
|
@click=" |
|
|
() => |
|
|
() => |
|
|
($refs.userNameDialog as UserNameDialog).open( |
|
|
($refs.userNameDialog as UserNameDialog).open((name) => { |
|
|
(name) => (givenName = name), |
|
|
if (name) givenName = name; |
|
|
) |
|
|
}) |
|
|
" |
|
|
" |
|
|
> |
|
|
> |
|
|
Set Your Name |
|
|
Set Your Name |
|
@ -437,7 +437,7 @@ |
|
|
<b>{{ endorserLimits?.maxClaimsPerWeek || "?" }}</b> for this week. |
|
|
<b>{{ endorserLimits?.maxClaimsPerWeek || "?" }}</b> for this week. |
|
|
Your claims counter resets at |
|
|
Your claims counter resets at |
|
|
<b class="whitespace-nowrap">{{ |
|
|
<b class="whitespace-nowrap">{{ |
|
|
readableDate(endorserLimits?.nextWeekBeginDateTime) |
|
|
readableDate(endorserLimits?.nextWeekBeginDateTime ?? "") |
|
|
}}</b> |
|
|
}}</b> |
|
|
</p> |
|
|
</p> |
|
|
<p class="mt-3 text-sm"> |
|
|
<p class="mt-3 text-sm"> |
|
@ -454,7 +454,7 @@ |
|
|
<i>(You cannot register anyone on your first day.)</i> |
|
|
<i>(You cannot register anyone on your first day.)</i> |
|
|
Your registration counter resets at |
|
|
Your registration counter resets at |
|
|
<b class="whitespace-nowrap"> |
|
|
<b class="whitespace-nowrap"> |
|
|
{{ readableDate(endorserLimits?.nextMonthBeginDateTime) }} |
|
|
{{ readableDate(endorserLimits?.nextMonthBeginDateTime ?? "") }} |
|
|
</b> |
|
|
</b> |
|
|
</p> |
|
|
</p> |
|
|
<p class="mt-3 text-sm"> |
|
|
<p class="mt-3 text-sm"> |
|
@ -463,7 +463,7 @@ |
|
|
<b>{{ imageLimits?.maxImagesPerWeek || "?" }}</b> for this week. Your |
|
|
<b>{{ imageLimits?.maxImagesPerWeek || "?" }}</b> for this week. Your |
|
|
image counter resets at |
|
|
image counter resets at |
|
|
<b class="whitespace-nowrap">{{ |
|
|
<b class="whitespace-nowrap">{{ |
|
|
readableDate(imageLimits?.nextWeekBeginDateTime) |
|
|
readableDate(imageLimits?.nextWeekBeginDateTime ?? "") |
|
|
}}</b> |
|
|
}}</b> |
|
|
</p> |
|
|
</p> |
|
|
</div> |
|
|
</div> |
|
@ -976,11 +976,10 @@ import Dexie from "dexie"; |
|
|
import "dexie-export-import"; |
|
|
import "dexie-export-import"; |
|
|
// @ts-expect-error - they aren't exporting it but it's there |
|
|
// @ts-expect-error - they aren't exporting it but it's there |
|
|
import { ImportProgress } from "dexie-export-import"; |
|
|
import { ImportProgress } from "dexie-export-import"; |
|
|
import { LeafletMouseEvent } from "leaflet"; |
|
|
|
|
|
import * as R from "ramda"; |
|
|
import * as R from "ramda"; |
|
|
import { IIdentifier } from "@veramo/core"; |
|
|
import { IIdentifier } from "@veramo/core"; |
|
|
import { ref } from "vue"; |
|
|
import { ref } from "vue"; |
|
|
import { Component, Vue } from "vue-facing-decorator"; |
|
|
import { Component, Vue, Hook } from "vue-facing-decorator"; |
|
|
import { RouteLocationNormalizedLoaded, Router } from "vue-router"; |
|
|
import { RouteLocationNormalizedLoaded, Router } from "vue-router"; |
|
|
import { useClipboard } from "@vueuse/core"; |
|
|
import { useClipboard } from "@vueuse/core"; |
|
|
import { LMap, LMarker, LTileLayer } from "@vue-leaflet/vue-leaflet"; |
|
|
import { LMap, LMarker, LTileLayer } from "@vue-leaflet/vue-leaflet"; |
|
@ -1016,15 +1015,14 @@ import { |
|
|
import * as databaseUtil from "../db/databaseUtil"; |
|
|
import * as databaseUtil from "../db/databaseUtil"; |
|
|
import { |
|
|
import { |
|
|
clearPasskeyToken, |
|
|
clearPasskeyToken, |
|
|
EndorserRateLimits, |
|
|
|
|
|
ErrorResponse, |
|
|
|
|
|
errorStringForLog, |
|
|
errorStringForLog, |
|
|
fetchEndorserRateLimits, |
|
|
fetchEndorserRateLimits, |
|
|
fetchImageRateLimits, |
|
|
fetchImageRateLimits, |
|
|
getHeaders, |
|
|
getHeaders, |
|
|
ImageRateLimits, |
|
|
|
|
|
tokenExpiryTimeDescription, |
|
|
tokenExpiryTimeDescription, |
|
|
} from "../libs/endorserServer"; |
|
|
} from "../libs/endorserServer"; |
|
|
|
|
|
import { EndorserRateLimits, ImageRateLimits } from "../interfaces/limits"; |
|
|
|
|
|
import { ErrorResponse } from "../interfaces/common"; |
|
|
import { |
|
|
import { |
|
|
DAILY_CHECK_TITLE, |
|
|
DAILY_CHECK_TITLE, |
|
|
DIRECT_PUSH_TITLE, |
|
|
DIRECT_PUSH_TITLE, |
|
@ -1040,7 +1038,6 @@ const inputImportFileNameRef = ref<Blob>(); |
|
|
components: { |
|
|
components: { |
|
|
EntityIcon, |
|
|
EntityIcon, |
|
|
ImageMethodDialog, |
|
|
ImageMethodDialog, |
|
|
LeafletMouseEvent, |
|
|
|
|
|
LMap, |
|
|
LMap, |
|
|
LMarker, |
|
|
LMarker, |
|
|
LTileLayer, |
|
|
LTileLayer, |
|
@ -1117,8 +1114,11 @@ export default class AccountViewView extends Vue { |
|
|
* |
|
|
* |
|
|
* @throws Will display specific messages to the user based on different errors. |
|
|
* @throws Will display specific messages to the user based on different errors. |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
@Hook("mounted") |
|
|
async mounted() { |
|
|
async mounted() { |
|
|
try { |
|
|
try { |
|
|
|
|
|
// eslint-disable-next-line no-console |
|
|
|
|
|
console.log("[AccountViewView] -- mounted", process.env.VITE_PLATFORM); |
|
|
// Initialize component state with values from the database or defaults |
|
|
// Initialize component state with values from the database or defaults |
|
|
await this.initializeState(); |
|
|
await this.initializeState(); |
|
|
await this.processIdentity(); |
|
|
await this.processIdentity(); |
|
@ -1145,7 +1145,12 @@ export default class AccountViewView extends Vue { |
|
|
throw Error("Unable to load profile."); |
|
|
throw Error("Unable to load profile."); |
|
|
} |
|
|
} |
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
if (error.status === 404) { |
|
|
if ( |
|
|
|
|
|
error && |
|
|
|
|
|
typeof error === "object" && |
|
|
|
|
|
"status" in error && |
|
|
|
|
|
error.status === 404 |
|
|
|
|
|
) { |
|
|
// this is ok: the profile is not yet created |
|
|
// this is ok: the profile is not yet created |
|
|
} else { |
|
|
} else { |
|
|
databaseUtil.logConsoleAndDb( |
|
|
databaseUtil.logConsoleAndDb( |
|
@ -1676,7 +1681,9 @@ export default class AccountViewView extends Vue { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
async uploadImportFile(event: Event) { |
|
|
async uploadImportFile(event: Event) { |
|
|
inputImportFileNameRef.value = (event.target as EventTarget).files[0]; |
|
|
inputImportFileNameRef.value = ( |
|
|
|
|
|
event.target as HTMLInputElement |
|
|
|
|
|
).files?.[0]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
showContactImport() { |
|
|
showContactImport() { |
|
@ -1886,6 +1893,11 @@ export default class AccountViewView extends Vue { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
async onClickSaveApiServer() { |
|
|
async onClickSaveApiServer() { |
|
|
|
|
|
console.log("[AccountViewView] -- Starting API server update", { |
|
|
|
|
|
current: this.apiServer, |
|
|
|
|
|
new: this.apiServerInput, |
|
|
|
|
|
component: "AccountViewView", |
|
|
|
|
|
}); |
|
|
logger.debug("[AccountViewView] Starting API server update", { |
|
|
logger.debug("[AccountViewView] Starting API server update", { |
|
|
current: this.apiServer, |
|
|
current: this.apiServer, |
|
|
new: this.apiServerInput, |
|
|
new: this.apiServerInput, |
|
@ -2123,6 +2135,7 @@ export default class AccountViewView extends Vue { |
|
|
const headers = await getHeaders(this.activeDid); |
|
|
const headers = await getHeaders(this.activeDid); |
|
|
const payload: UserProfile = { |
|
|
const payload: UserProfile = { |
|
|
description: this.userProfileDesc, |
|
|
description: this.userProfileDesc, |
|
|
|
|
|
issuerDid: this.activeDid, |
|
|
}; |
|
|
}; |
|
|
if (this.userProfileLatitude && this.userProfileLongitude) { |
|
|
if (this.userProfileLatitude && this.userProfileLongitude) { |
|
|
payload.locLat = this.userProfileLatitude; |
|
|
payload.locLat = this.userProfileLatitude; |
|
@ -2164,11 +2177,14 @@ export default class AccountViewView extends Vue { |
|
|
if (USE_DEXIE_DB) { |
|
|
if (USE_DEXIE_DB) { |
|
|
logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); |
|
|
logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); |
|
|
} |
|
|
} |
|
|
const errorMessage: string = |
|
|
let errorMessage = "There was an error saving your profile."; |
|
|
error.response?.data?.error?.message || |
|
|
if (error instanceof AxiosError) { |
|
|
error.response?.data?.error || |
|
|
errorMessage = |
|
|
error.message || |
|
|
error.response?.data?.error?.message || |
|
|
"There was an error saving your profile."; |
|
|
error.response?.data?.error || |
|
|
|
|
|
error.message || |
|
|
|
|
|
errorMessage; |
|
|
|
|
|
} |
|
|
this.$notify( |
|
|
this.$notify( |
|
|
{ |
|
|
{ |
|
|
group: "alert", |
|
|
group: "alert", |
|
@ -2259,11 +2275,14 @@ export default class AccountViewView extends Vue { |
|
|
if (USE_DEXIE_DB) { |
|
|
if (USE_DEXIE_DB) { |
|
|
logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); |
|
|
logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); |
|
|
} |
|
|
} |
|
|
const errorMessage: string = |
|
|
let errorMessage = "There was an error deleting your profile."; |
|
|
error.response?.data?.error?.message || |
|
|
if (error instanceof AxiosError) { |
|
|
error.response?.data?.error || |
|
|
errorMessage = |
|
|
error.message || |
|
|
error.response?.data?.error?.message || |
|
|
"There was an error deleting your profile."; |
|
|
error.response?.data?.error || |
|
|
|
|
|
error.message || |
|
|
|
|
|
errorMessage; |
|
|
|
|
|
} |
|
|
this.$notify( |
|
|
this.$notify( |
|
|
{ |
|
|
{ |
|
|
group: "alert", |
|
|
group: "alert", |
|
|