forked from geolba/tethys.frontend
- search detail page
This commit is contained in:
parent
66651135fa
commit
6cb6f178a9
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -21,3 +21,4 @@ pnpm-debug.log*
|
||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
|
/.env
|
|
@ -1,3 +1,5 @@
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
export interface Dataset {
|
export interface Dataset {
|
||||||
abstract_additional: Array<string>;
|
abstract_additional: Array<string>;
|
||||||
abstract_output: string;
|
abstract_output: string;
|
||||||
|
@ -32,34 +34,71 @@ export enum SearchType {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DbDataset {
|
export class DbDataset {
|
||||||
public id!: number;
|
// public id!: number;
|
||||||
public url!: string;
|
// public url!: string;
|
||||||
public contributing_corporation!: string;
|
// public contributing_corporation!: string;
|
||||||
public creating_corporation!: string;
|
// public creating_corporation!: string;
|
||||||
public publisher_name!: string;
|
// public publisher_name!: string;
|
||||||
public embargo_date!: string;
|
// public embargo_date!: string;
|
||||||
public publish_id!: number;
|
// public publish_id!: number;
|
||||||
public project_id!: number;
|
// public project_id!: number;
|
||||||
public type!: string;
|
// public type!: string;
|
||||||
public language!: string;
|
// public language!: string;
|
||||||
public server_state!: string;
|
// public server_state!: string;
|
||||||
public belongs_to_bibliography!: boolean;
|
// public belongs_to_bibliography!: boolean;
|
||||||
public created_at!: string;
|
// public created_at!: string;
|
||||||
public server_date_modified!: string;
|
// public server_date_modified!: string;
|
||||||
public server_date_published!: string;
|
// public server_date_published!: string;
|
||||||
public account_id!: number;
|
// public account_id!: number;
|
||||||
public editor_id!: number;
|
// public editor_id!: number;
|
||||||
public reviewer_id!: number;
|
// public reviewer_id!: number;
|
||||||
public preferred_reviewer!: number;
|
// public preferred_reviewer!: number;
|
||||||
public preferred_reviewer_email!: string;
|
// public preferred_reviewer_email!: string;
|
||||||
public reject_editor_note!: string;
|
// public reject_editor_note!: string;
|
||||||
public reject_reviewer_note!: string;
|
// public reject_reviewer_note!: string;
|
||||||
public reviewer_note_visible!: string;
|
// public reviewer_note_visible!: string;
|
||||||
public titles!: Array<Title>;
|
// public titles!: Array<Title>;
|
||||||
public abstracts!: Array<Abstract>;
|
// public abstracts!: Array<Abstract>;
|
||||||
public authors!: Array<Author>;
|
// public authors!: Array<Author>;
|
||||||
public contributors!: Array<Author>;
|
// public contributors!: Array<Author>;
|
||||||
public user!: Person;
|
// public user!: Person;
|
||||||
|
// public subjects!: Array<Subject>;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
public id: string,
|
||||||
|
public url: string,
|
||||||
|
public contributing_corporation: string,
|
||||||
|
public creating_corporation: string,
|
||||||
|
public publisher_name: string,
|
||||||
|
public embargo_date: string,
|
||||||
|
public publish_id: number,
|
||||||
|
public project_id: number,
|
||||||
|
public type: string,
|
||||||
|
public language: string,
|
||||||
|
public server_state: string,
|
||||||
|
public belongs_to_bibliography: boolean,
|
||||||
|
public created_at: string,
|
||||||
|
public server_date_modified: string,
|
||||||
|
public server_date_published: string,
|
||||||
|
public account_id: number,
|
||||||
|
public editor_id: number,
|
||||||
|
public reviewer_id: number,
|
||||||
|
public preferred_reviewer: number,
|
||||||
|
public preferred_reviewer_email: string,
|
||||||
|
public reject_editor_note: string,
|
||||||
|
public reject_reviewer_note: string,
|
||||||
|
public reviewer_note_visible: string,
|
||||||
|
public titles: Array<Title>,
|
||||||
|
public abstracts: Array<Abstract>,
|
||||||
|
public authors: Array<Author>,
|
||||||
|
public contributors: Array<Author>,
|
||||||
|
public user: Person,
|
||||||
|
public subjects: Array<Subject>,
|
||||||
|
public licenses: Array<License>,
|
||||||
|
public files: Array<DbFile>,
|
||||||
|
private coverage?: Coverage,
|
||||||
|
public project?: Project,
|
||||||
|
) {}
|
||||||
|
|
||||||
public hasTranslatedAbstract(): boolean {
|
public hasTranslatedAbstract(): boolean {
|
||||||
if (this.abstracts.some((e) => e.type === "Translated")) {
|
if (this.abstracts.some((e) => e.type === "Translated")) {
|
||||||
|
@ -85,6 +124,38 @@ export class DbDataset {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public hasContributors(): boolean {
|
||||||
|
if (this.contributors.length > 0) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public hasLicenses(): boolean {
|
||||||
|
if (this.licenses.length > 0) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public hasEmbargoPassed(): boolean {
|
||||||
|
const embargoDate = moment(this.embargo_date);
|
||||||
|
if (embargoDate == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
const todayDate = moment.now();
|
||||||
|
// Embargo has passed on the day after the specified date
|
||||||
|
|
||||||
|
if (embargoDate.isBefore(todayDate)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// return ($embargoDate->lessThan($now));
|
||||||
|
}
|
||||||
|
|
||||||
public get MainAbstract(): Nullable<Abstract> {
|
public get MainAbstract(): Nullable<Abstract> {
|
||||||
return this.abstracts.find((e) => e.type === AbstractType.Abstract);
|
return this.abstracts.find((e) => e.type === AbstractType.Abstract);
|
||||||
}
|
}
|
||||||
|
@ -100,6 +171,21 @@ export class DbDataset {
|
||||||
public get MethodsAbtract(): Nullable<Abstract> {
|
public get MethodsAbtract(): Nullable<Abstract> {
|
||||||
return this.abstracts.find((e) => e.type === AbstractType.Methods);
|
return this.abstracts.find((e) => e.type === AbstractType.Methods);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get Coverage(): string {
|
||||||
|
if (this.coverage != undefined) {
|
||||||
|
const xMin = this.coverage.x_min;
|
||||||
|
const xMax = this.coverage.x_max;
|
||||||
|
const yMin = this.coverage.y_min;
|
||||||
|
const yMax = this.coverage.y_max;
|
||||||
|
return `SOUTH-BOUND LATITUDE: ${xMin},
|
||||||
|
* WEST-BOUND LONGITUDE: ${yMin},
|
||||||
|
* NORTH-BOUND LATITUDE: ${xMax},
|
||||||
|
* EAST-BOUND LONGITUDE: ${yMax}`;
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
type Nullable<T> = T | undefined;
|
type Nullable<T> = T | undefined;
|
||||||
|
|
||||||
|
@ -144,3 +230,62 @@ export interface Person {
|
||||||
last_name: string;
|
last_name: string;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Subject {
|
||||||
|
id: number;
|
||||||
|
language: string;
|
||||||
|
type: string;
|
||||||
|
value: string;
|
||||||
|
external_key: string;
|
||||||
|
created_at: string;
|
||||||
|
updated_at: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Coverage {
|
||||||
|
x_min: string;
|
||||||
|
x_max: string;
|
||||||
|
y_min: string;
|
||||||
|
y_max: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface License {
|
||||||
|
id: number;
|
||||||
|
active: boolean;
|
||||||
|
comment_internal?: string;
|
||||||
|
desc_markup?: string;
|
||||||
|
desc_text?: string;
|
||||||
|
language: string;
|
||||||
|
link_licence: string;
|
||||||
|
link_logo?: string;
|
||||||
|
link_sign?: string;
|
||||||
|
mime_type: string;
|
||||||
|
name_long: string; // "Creative Commons Attribution 4.0 International (CC BY 4.0)"
|
||||||
|
name: string; // "CC-BY-4.0"
|
||||||
|
pod_allowed: boolean;
|
||||||
|
sort_order: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Project {
|
||||||
|
id: number;
|
||||||
|
label: string; // "ALLG_FACHLICH"
|
||||||
|
name: string; // "Allgemein fachliche Arbeiten"
|
||||||
|
description: string; // "Allgemein fachlich interdisziplinäre Arbeiten"
|
||||||
|
created_at: string;
|
||||||
|
updated_at: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DbFile {
|
||||||
|
id: number;
|
||||||
|
document_id: number;
|
||||||
|
path_name: string;
|
||||||
|
label: string;
|
||||||
|
comment?: string;
|
||||||
|
mime_type: string;
|
||||||
|
language?: string;
|
||||||
|
file_size: bigint;
|
||||||
|
visible_in_frontdoor: boolean;
|
||||||
|
visible_in_oai: boolean;
|
||||||
|
sort_order: Int16Array;
|
||||||
|
created_at: string;
|
||||||
|
updated_at: string;
|
||||||
|
}
|
||||||
|
|
|
@ -14,10 +14,12 @@ export default class DatasetDetailComponent extends Vue {
|
||||||
datasetId!: number;
|
datasetId!: number;
|
||||||
|
|
||||||
private subscriptions: Array<Subscription> = [];
|
private subscriptions: Array<Subscription> = [];
|
||||||
private dataset = {} as DbDataset;
|
public dataset = {} as DbDataset;
|
||||||
private error = "";
|
private error = "";
|
||||||
|
public loaded = false;
|
||||||
|
public openAccessLicences: Array<string> = ["CC-BY-4.0", "CC-BY-SA-4.0"];
|
||||||
|
|
||||||
beforeMount(): void {
|
created(): void {
|
||||||
this.getDataset(this.datasetId);
|
this.getDataset(this.datasetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +35,7 @@ export default class DatasetDetailComponent extends Vue {
|
||||||
const newSub = DatasetService.getDataset(id).subscribe(
|
const newSub = DatasetService.getDataset(id).subscribe(
|
||||||
(res: DbDataset) => {
|
(res: DbDataset) => {
|
||||||
this.dataset = res;
|
this.dataset = res;
|
||||||
|
this.loaded = true;
|
||||||
},
|
},
|
||||||
(error: string) => this.errorHandler(error),
|
(error: string) => this.errorHandler(error),
|
||||||
);
|
);
|
||||||
|
@ -54,4 +57,8 @@ export default class DatasetDetailComponent extends Vue {
|
||||||
return moment(date).format("DD.MM.YYYY HH:mm");
|
return moment(date).format("DD.MM.YYYY HH:mm");
|
||||||
// return moment(date).format("MMM Do YYYY");
|
// return moment(date).format("MMM Do YYYY");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getYear(date: string) {
|
||||||
|
return moment(date).format("YYYY");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<button v-on:click="goBack">Back</button>
|
<button v-on:click="goBack">Back</button>
|
||||||
</section>
|
</section>
|
||||||
</div> -->
|
</div> -->
|
||||||
<section class="section" v-if="dataset">
|
<section class="section" v-if="loaded">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- <span class="is-size-5"> Basic Table </span>
|
<!-- <span class="is-size-5"> Basic Table </span>
|
||||||
<br /> -->
|
<br /> -->
|
||||||
|
@ -51,6 +51,42 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="column is-9-desktop is-8-tablet" v-else>-</div>
|
<div class="column is-9-desktop is-8-tablet" v-else>-</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-3-desktop is-4-tablet">Downloads/<br />downloads:</div>
|
||||||
|
<div class="column is-9-desktop is-8-tablet" v-if="dataset.files.length > 0">
|
||||||
|
<table id="items" v-if="dataset.hasEmbargoPassed()" class="pure-table pure-table-horizontal">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Path Name</th>
|
||||||
|
<th>File Extension</th>
|
||||||
|
<th>File Size</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="file in dataset.files" :key="file.id">
|
||||||
|
<td>
|
||||||
|
{{ file.path_name }}
|
||||||
|
<!-- @if($file->exists() === true)
|
||||||
|
<a target="_blank" href="{{ route('file.download', ['id' => $file->id]) }}"> {{ $file->label }} </a>
|
||||||
|
@else
|
||||||
|
<span class="alert">missing file: {{ $file->path_name }}</span>
|
||||||
|
@endif -->
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<!-- <span>{{ pathinfo($file->path_name, PATHINFO_EXTENSION) }}</span> -->
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<!-- <span>{{ $file->formatSize(2) }}</span> -->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<span v-else>Datensatz hat noch ein gültiges Embargo-Datum.</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column is-3-desktop is-4-tablet">Technische Metadaten/<br />technical metadata:</div>
|
<div class="column is-3-desktop is-4-tablet">Technische Metadaten/<br />technical metadata:</div>
|
||||||
<div class="column is-9-desktop is-8-tablet">
|
<div class="column is-9-desktop is-8-tablet">
|
||||||
|
@ -64,7 +100,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="id-side-bar" class="column is-4 sidebar_column" style="padding-top: 1.2rem; padding-right: 1.5rem; padding-left: 1.5rem">
|
<div id="id-side-bar" class="column is-4 sidebar_column" style="padding-top: 1.2rem; padding-right: 1rem; padding-left: 1rem">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<h2>Details</h2>
|
<h2>Details</h2>
|
||||||
|
@ -72,7 +108,83 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<h2 v-if="dataset.hasOwnProperty('contributors')">{{ dataset.contributors.map((u) => u.full_name).join(", ") }}</h2>
|
<h3>Beitragende/Contributor</h3>
|
||||||
|
<p v-if="dataset.hasContributors()">
|
||||||
|
{{ dataset.contributors.map((u) => u.full_name).join(", ") }}
|
||||||
|
</p>
|
||||||
|
<p v-else>-</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Schlüsselwörter/Keywords</h3>
|
||||||
|
<p v-if="dataset.hasOwnProperty('subjects')">
|
||||||
|
{{ dataset.subjects.map((u) => u.value).join(", ") }}
|
||||||
|
</p>
|
||||||
|
<p v-else>-</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Erstellungsjahr/Year</h3>
|
||||||
|
<p>
|
||||||
|
{{ getYear(dataset.server_date_published) }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Abdeckung/Coverage</h3>
|
||||||
|
<p>
|
||||||
|
{{ dataset.Coverage }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Sprache/Language</h3>
|
||||||
|
<p>
|
||||||
|
{{ dataset.language }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Objekttyp/Object Type</h3>
|
||||||
|
<p>
|
||||||
|
<span><i class="fas fa-file"></i> {{ dataset.type }}</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Lizenz/License</h3>
|
||||||
|
<p v-if="dataset.hasLicenses()">
|
||||||
|
<label v-for="license in dataset.licenses" :key="license.id">
|
||||||
|
<span class="label">
|
||||||
|
{{ license.name }}
|
||||||
|
</span>
|
||||||
|
<span v-if="openAccessLicences.includes(license.name)" class="label titlecase"><i class="fas fa-lock-open"></i> Open Access</span>
|
||||||
|
</label>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Projekt/Project</h3>
|
||||||
|
<p v-if="dataset.project != null">
|
||||||
|
<span>{{ dataset.project.name }}</span>
|
||||||
|
</p>
|
||||||
|
<p v-else>-</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="column">
|
||||||
|
<h3>Embargo</h3>
|
||||||
|
<p v-if="dataset.embargo_date">
|
||||||
|
<span>{{ getHumanDate(dataset.embargo_date) }}</span>
|
||||||
|
</p>
|
||||||
|
<p v-else>-</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -127,7 +239,7 @@ export default DatasetDetailComponent;
|
||||||
}
|
}
|
||||||
label {
|
label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 3em;
|
// width: 3em;
|
||||||
margin: 0.5em 0;
|
margin: 0.5em 0;
|
||||||
color: #607d8b;
|
color: #607d8b;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user