Fetch topic information from API

This commit is contained in:
Ramon Wenger 2018-10-19 10:36:31 +02:00
parent 181a06424a
commit febed9adc4
5 changed files with 56 additions and 16 deletions

View File

@ -1,12 +1,9 @@
#import "./fragments/moduleParts.gql"
query ModulesQuery { query ModulesQuery {
modules { modules {
edges { edges {
node { node {
id ...ModuleParts
title
metaTitle
teaser
slug
} }
} }
} }

View File

@ -0,0 +1,7 @@
fragment ModuleParts on ModuleNode {
id
title
metaTitle
teaser
slug
}

View File

@ -0,0 +1,16 @@
#import "./fragments/moduleParts.gql"
query Topic($slug: String!){
topic(slug: $slug) {
id
title
teaser
description
modules {
edges {
node {
...ModuleParts
}
}
}
}
}

View File

@ -1,11 +1,8 @@
<template> <template>
<div class="topic"> <div class="topic">
<h1 class="topic__title">Berufliche Grundbildung</h1> <h1 class="topic__title">{{topic.title}}</h1>
<p class="topic__teaser"> <p class="topic__teaser">
Die berufliche Grundbildung lehrt Sie, den Arbeitsalltag erfolgreich zu bewältigen, Ihre Fähigkeiten zu entwickeln {{topic.teaser}}
und beruflich flexibel zu sein. Ebenso wichtig ist der Umgang mit verschiedensten Mitmenschen. Eine angemessene
mündliche Kommunikation erleichtert
das Zusammenleben und Zusammenarbeiten.
</p> </p>
<div class="topic__modules"> <div class="topic__modules">
<module-teaser v-for="module in modules" :key="module.id" v-bind="module"></module-teaser> <module-teaser v-for="module in modules" :key="module.id" v-bind="module"></module-teaser>
@ -15,7 +12,7 @@
<script> <script>
import ModuleTeaser from '@/components/modules/ModuleTeaser.vue'; import ModuleTeaser from '@/components/modules/ModuleTeaser.vue';
import MODULES_QUERY from '@/graphql/gql/allModules.gql'; import TOPIC_QUERY from '@/graphql/gql/topicQuery.gql';
export default { export default {
components: { components: {
@ -23,17 +20,30 @@
}, },
apollo: { apollo: {
modules: { topic: {
query: MODULES_QUERY, query: TOPIC_QUERY,
variables: {
slug: 'geld-und-kauf'
},
update(data) { update(data) {
return this.$getRidOfEdges(data).modules || {}; return this.$getRidOfEdges(data).topic || {};
} }
} }
}, },
computed: {
modules() {
return this.topic.modules;
}
},
data() { data() {
return { return {
modules: [] topic: {
modules: {
edges: []
}
}
} }
} }
} }

View File

@ -152,7 +152,7 @@ class FilteredChapterNode(DjangoObjectType):
class BookQuery(object): class BookQuery(object):
book = relay.Node.Field(BookNode) book = relay.Node.Field(BookNode)
topic = relay.Node.Field(TopicNode) topic = graphene.Field(TopicNode, slug=graphene.String())
module = graphene.Field(ModuleNode, slug=graphene.String()) module = graphene.Field(ModuleNode, slug=graphene.String())
chapter = relay.Node.Field(FilteredChapterNode) chapter = relay.Node.Field(FilteredChapterNode)
content_block = relay.Node.Field(ContentBlockNode) content_block = relay.Node.Field(ContentBlockNode)
@ -183,3 +183,13 @@ class BookQuery(object):
if slug is not None: if slug is not None:
return Module.objects.get(slug=slug) return Module.objects.get(slug=slug)
return None return None
def resolve_topic(self, info, **kwargs):
slug = kwargs.get('slug')
id = kwargs.get('id')
if id is not None:
return get_object(Topic, id)
if slug is not None:
return Topic.objects.get(slug=slug)
return None