components/related_pages.vue (47 lines of code) (raw):

<script> export default { props: { related: { type: Array, required: false, default: () => [], }, }, computed: { hasRelatedPatterns() { return this.relatedPatterns && this.relatedPatterns.length > 0; }, relatedPatterns() { return this.related.map((item) => { let slug; let url; if (item.startsWith('/')) { url = item; slug = item.split('/').pop(); } else { slug = item; url = `/components/${slug}`; } return { slug, url, // capitalize first letter, replace hyphens with spaces label: (slug.charAt(0).toLocaleUpperCase() + slug.substring(1)).split('-').join(' '), }; }); }, }, }; </script> <template> <div v-if="hasRelatedPatterns"> <div class="md typography"> <h2 id="related-patterns">Related</h2> <ul> <li v-for="pattern in relatedPatterns" :key="pattern.slug"> <nuxt-link :to="pattern.url">{{ pattern.label }}</nuxt-link> </li> </ul> </div> </div> </template>