|
|
@ -33,6 +33,20 @@ |
|
|
|
class="text-sm text-slate-500 ml-2 mb-1" |
|
|
|
/> |
|
|
|
</button> |
|
|
|
<button |
|
|
|
:title=" |
|
|
|
isStarred |
|
|
|
? 'Remove from starred projects' |
|
|
|
: 'Add to starred projects' |
|
|
|
" |
|
|
|
@click="toggleStar()" |
|
|
|
> |
|
|
|
<font-awesome |
|
|
|
:icon="isStarred ? 'star' : ['far', 'star']" |
|
|
|
:class="isStarred ? 'text-yellow-500' : 'text-slate-500'" |
|
|
|
class="text-sm ml-2 mb-1" |
|
|
|
/> |
|
|
|
</button> |
|
|
|
</h2> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -58,13 +72,13 @@ |
|
|
|
icon="user" |
|
|
|
class="fa-fw text-slate-400" |
|
|
|
></font-awesome> |
|
|
|
<span class="truncate inline-block max-w-[calc(100%-2rem)]"> |
|
|
|
<span class="truncate max-w-[calc(100%-2rem)] ml-1"> |
|
|
|
{{ issuerInfoObject?.displayName }} |
|
|
|
</span> |
|
|
|
|
|
|
|
<span |
|
|
|
v-if="!serverUtil.isHiddenDid(issuer)" |
|
|
|
class="inline-flex items-center" |
|
|
|
class="inline-flex items-center ml-1" |
|
|
|
> |
|
|
|
<router-link |
|
|
|
:to="{ |
|
|
@ -657,6 +671,7 @@ import HiddenDidDialog from "../components/HiddenDidDialog.vue"; |
|
|
|
import { logger } from "../utils/logger"; |
|
|
|
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; |
|
|
|
import { useClipboard } from "@vueuse/core"; |
|
|
|
|
|
|
|
/** |
|
|
|
* Project View Component |
|
|
|
* @author Matthew Raymer |
|
|
@ -742,6 +757,8 @@ export default class ProjectViewView extends Vue { |
|
|
|
givesProvidedByHitLimit = false; |
|
|
|
givesTotalsByUnit: Array<{ unit: string; amount: number }> = []; |
|
|
|
imageUrl = ""; |
|
|
|
/** Whether this project is starred by the user */ |
|
|
|
isStarred = false; |
|
|
|
/** Project issuer DID */ |
|
|
|
issuer = ""; |
|
|
|
/** Cached issuer information */ |
|
|
@ -841,6 +858,15 @@ export default class ProjectViewView extends Vue { |
|
|
|
} |
|
|
|
this.loadProject(this.projectId, this.activeDid); |
|
|
|
this.loadTotals(); |
|
|
|
|
|
|
|
// Check if this project is starred when settings are loaded |
|
|
|
if (this.projectId && settings.starredProjectIds) { |
|
|
|
const starredIds: string[] = databaseUtil.parseJsonField( |
|
|
|
settings.starredProjectIds, |
|
|
|
[], |
|
|
|
); |
|
|
|
this.isStarred = starredIds.includes(this.projectId); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -1483,7 +1509,7 @@ export default class ProjectViewView extends Vue { |
|
|
|
} else { |
|
|
|
logger.error("Got error submitting the confirmation:", result); |
|
|
|
const message = |
|
|
|
(result.error?.error as string) || |
|
|
|
(result.error as string) || |
|
|
|
"There was a problem submitting the confirmation."; |
|
|
|
this.$notify( |
|
|
|
{ |
|
|
@ -1563,5 +1589,73 @@ export default class ProjectViewView extends Vue { |
|
|
|
this.givesTotalsByUnit.find((total) => total.unit === "HUR")?.amount || 0 |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Toggle the starred status of the current project |
|
|
|
*/ |
|
|
|
async toggleStar() { |
|
|
|
if (!this.projectId) return; |
|
|
|
|
|
|
|
try { |
|
|
|
if (!this.isStarred) { |
|
|
|
// Add to starred projects |
|
|
|
const settings = await databaseUtil.retrieveSettingsForActiveAccount(); |
|
|
|
const starredIds: string[] = databaseUtil.parseJsonField( |
|
|
|
settings.starredProjectIds, |
|
|
|
[], |
|
|
|
); |
|
|
|
|
|
|
|
if (!starredIds.includes(this.projectId)) { |
|
|
|
const newStarredIds = [...starredIds, this.projectId]; |
|
|
|
const newIdsParam = JSON.stringify(newStarredIds); |
|
|
|
const result = await databaseUtil.updateDidSpecificSettings( |
|
|
|
this.activeDid, |
|
|
|
// @ts-expect-error until we use SettingsWithJsonString properly |
|
|
|
{ starredProjectIds: newIdsParam }, |
|
|
|
); |
|
|
|
if (!result) { |
|
|
|
// eslint-disable-next-line no-console |
|
|
|
console.log( |
|
|
|
"Still getting a bad result from SQL update to star a project.", |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
this.isStarred = true; |
|
|
|
} else { |
|
|
|
// Remove from starred projects |
|
|
|
const settings = await databaseUtil.retrieveSettingsForActiveAccount(); |
|
|
|
const starredIds: string[] = databaseUtil.parseJsonField( |
|
|
|
settings.starredProjectIds, |
|
|
|
[], |
|
|
|
); |
|
|
|
|
|
|
|
const updatedIds = starredIds.filter((id) => id !== this.projectId); |
|
|
|
const newIdsParam = JSON.stringify(updatedIds); |
|
|
|
const result = await databaseUtil.updateDidSpecificSettings( |
|
|
|
this.activeDid, |
|
|
|
// @ts-expect-error until we use SettingsWithJsonString properly |
|
|
|
{ starredProjectIds: newIdsParam }, |
|
|
|
); |
|
|
|
if (!result) { |
|
|
|
// eslint-disable-next-line no-console |
|
|
|
console.log( |
|
|
|
"Still getting a bad result from SQL update to unstar a project.", |
|
|
|
); |
|
|
|
} |
|
|
|
this.isStarred = false; |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
logger.error("Error toggling star status:", error); |
|
|
|
this.$notify( |
|
|
|
{ |
|
|
|
group: "alert", |
|
|
|
type: "danger", |
|
|
|
title: "Error", |
|
|
|
text: "Failed to update starred status. Please try again.", |
|
|
|
}, |
|
|
|
3000, |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|