diff --git a/app/Controllers/Http/Api/AuthorsController.ts b/app/Controllers/Http/Api/AuthorsController.ts index 111c219..7209699 100644 --- a/app/Controllers/Http/Api/AuthorsController.ts +++ b/app/Controllers/Http/Api/AuthorsController.ts @@ -9,6 +9,7 @@ export default class AuthorsController { // where exists (select * from gba.documents inner join gba.link_documents_persons on "documents"."id" = "link_documents_persons"."document_id" // where ("link_documents_persons"."role" = 'author') and ("persons"."id" = "link_documents_persons"."person_id")); const authors = await Person.query() + .preload('datasets') .where('name_type', 'Personal') .whereHas('datasets', (dQuery) => { dQuery.wherePivot('role', 'author'); diff --git a/app/models/person.ts b/app/models/person.ts index 4e6b60b..cdc612d 100644 --- a/app/models/person.ts +++ b/app/models/person.ts @@ -3,7 +3,7 @@ import { DateTime } from 'luxon'; import dayjs from 'dayjs'; import Dataset from './dataset.js'; import BaseModel from './base_model.js'; -import type { ManyToMany } from "@adonisjs/lucid/types/relations"; +import type { ManyToMany } from '@adonisjs/lucid/types/relations'; export default class Person extends BaseModel { public static namingStrategy = new SnakeCaseNamingStrategy(); @@ -64,9 +64,8 @@ export default class Person extends BaseModel { // return '2023-03-21 08:45:00'; // } - @computed({ - serializeAs: 'dataset_count', + serializeAs: 'dataset_count', }) public get datasetCount() { const stock = this.$extras.datasets_count; //my pivot column name was "stock" @@ -79,6 +78,16 @@ export default class Person extends BaseModel { return contributor_type; } + @computed({ serializeAs: 'allow_email_contact' }) + public get allowEmailContact() { + // If the datasets relation is missing or empty, return false instead of null. + if (!this.datasets || this.datasets.length === 0) { + return false; + } + // Otherwise return the pivot attribute from the first related dataset. + return this.datasets[0].$extras?.pivot_allow_email_contact; + } + @manyToMany(() => Dataset, { pivotForeignKey: 'person_id', pivotRelatedForeignKey: 'document_id', diff --git a/resources/js/Components/CardBoxClient.vue b/resources/js/Components/CardBoxClient.vue index b89ed7a..cd9bf57 100644 --- a/resources/js/Components/CardBoxClient.vue +++ b/resources/js/Components/CardBoxClient.vue @@ -39,6 +39,10 @@ const props = defineProps({ type: String, default: null, }, + allowEmailContact: { + type: Boolean, + default: false, + } }); const pillType = computed(() => { @@ -81,9 +85,8 @@ const pillType = computed(() => {
- - {{ email }} +
+