Skip to content

Commit f8e33a8

Browse files
committed
Add Remote Data Fetching
This commit adds in support for fetching data from an external source, namely our example application[1], which provides additional data for artists. The application now renders the data from arches first, then using an external ID makes a request to the external server and renders it in the artist resource view. [1] https://github.com/hminsky2002/archesAppRemoteServer Issue #247 Demonstrate referring to external service from Arches in WAC demo app
1 parent 05143bd commit f8e33a8

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<template>
2+
<div v-if="validateRemoteServerResponseSchema(remoteServerResponse)" class="artist-note">
3+
<p>
4+
{{ remoteServerResponse.note }}
5+
<a :href="remoteServerResponse.url" target="_blank" rel="noopener noreferrer">{{
6+
remoteServerResponse.url
7+
}}</a>
8+
</p>
9+
</div>
10+
</template>
11+
12+
<script setup lang="ts">
13+
import type { Artist, RemoteServerResponse } from '@/types';
14+
import { ref, onMounted } from 'vue';
15+
import { validateRemoteServerResponseSchema } from '@/types';
16+
17+
const props = defineProps<{
18+
artist: Artist;
19+
}>();
20+
21+
const remoteServerResponse = ref<RemoteServerResponse | undefined>();
22+
23+
async function fetchRemoteServerResponse() {
24+
const url = new URL(
25+
`${import.meta.env.VITE_REMOTE_SERVER_URL}/artist/${props.artist.remoteServerId}`
26+
);
27+
const response = await fetch(url.toString()).then((res) => res.json());
28+
remoteServerResponse.value = response;
29+
}
30+
31+
onMounted(async () => {
32+
await fetchRemoteServerResponse();
33+
});
34+
</script>
35+
<style scoped>
36+
.artist-note {
37+
color: var(--wac--color--gray);
38+
padding-top: var(--wac--accessible-spacing--1x);
39+
padding-bottom: var(--wac--accessible-spacing--1x);
40+
}
41+
</style>

front-end/src/components/ResourcePanel.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,17 @@
1212
/>
1313
<h1>{{ props.resource.displayname ?? '' }}</h1>
1414
</div>
15-
1615
<RouterLink :to="'/'" class="resource-detail-back-button">
1716
<button type="button" class="back-button">
1817
<ArrowLeftIcon class="back-button-icon" />
1918
BACK
2019
</button>
2120
</RouterLink>
2221
</div>
23-
22+
<ArtistNote
23+
v-if="validateArtistSchema(props.resource.resource)"
24+
:artist="props.resource.resource"
25+
/>
2426
<ResourceDetail>
2527
<template #items>
2628
<ArtworkDetailItem
@@ -89,14 +91,15 @@ import type {
8991
ImageTileData,
9092
Resource
9193
} from '@/types';
92-
import { validateArtworkSchema, PanelResourceEnum } from '@/types';
94+
import { validateArtworkSchema, PanelResourceEnum, validateArtistSchema } from '@/types';
9395
import { ArrowLeftIcon } from '@heroicons/vue/24/outline';
9496
import ResourceDetail from './ResourceDetail.vue';
9597
import ArtworkDetailItem from './ArtworkDetailItem.vue';
9698
import RelatedArtworkDetailItem from './RelatedArtworkDetailItem.vue';
9799
import MoreArtworksByArtist from './MoreArtworksByArtist.vue';
98100
import ArtworksIcon from './Icons/ArtworksIcon.vue';
99101
import ArtistsIcon from './Icons/ArtistsIcon.vue';
102+
import ArtistNote from './ArtistNote.vue';
100103
101104
const props = defineProps<{
102105
resource: ApiResource;

0 commit comments

Comments
 (0)