Skip to content
Snippets Groups Projects
Verified Commit 10868eb0 authored by Nik | Klampfradler's avatar Nik | Klampfradler Committed by Jonathan Weth
Browse files

Introduce general systemProperties query

parent 857f9cd8
No related branches found
No related tags found
1 merge request!1086Resolve "Support i18n directly in Vue"
Pipeline #87158 failed
......@@ -103,14 +103,18 @@ const app = new Vue({
django: window.django,
// FIXME: maybe just use window.django in every component or find a suitable way to access this property everywhere
showCacheAlert: false,
systemProperties: {
currentLanguage: "en",
availableLanguages: [],
},
}),
apollo: {
language: gql`{ language }`,
systemProperties: require("./systemProperties.graphql"),
},
watch: {
language: function (newLanguage) {
this.$i18n.locale = newLanguage;
this.$vuetify.lang.current = newLanguage;
systemProperties: function (newProperties) {
this.$i18n.locale = newProperties.currentLanguage;
this.$vuetify.lang.current = newProperties.currentLanguage;
}
},
components: {
......
......@@ -12,26 +12,22 @@
</v-btn>
</template>
<v-list id="language-dropdown" class="dropdown-content" min-width="150">
<ApolloQuery :query="require('./availableLanguages.graphql')">
<template v-slot="{ result: { error, data }, isLoading }">
<v-skeleton-loader
v-if="isLoading"
class="mx-auto"
type="list-item, list-item, list-item"
></v-skeleton-loader>
<v-list-item-group
v-if="!isLoading"
v-model="$i18n.locale"
color="primary"
>
<v-list-item v-for="languageOption in data.availableLanguages" :key="languageOption.code"
:value="languageOption.code"
@click="setLanguage(languageOption)">
<v-list-item-title>{{ languageOption.nameTranslated }}</v-list-item-title>
</v-list-item>
</v-list-item-group>
</template>
</ApolloQuery>
<v-skeleton-loader
v-if="!$root.systemProperties.availableLanguages"
class="mx-auto"
type="list-item, list-item, list-item"
></v-skeleton-loader>
<v-list-item-group
v-if="$root.systemProperties.availableLanguages"
v-model="$i18n.locale"
color="primary"
>
<v-list-item v-for="languageOption in $root.systemProperties.availableLanguages" :key="languageOption.code"
:value="languageOption.code"
@click="setLanguage(languageOption)">
<v-list-item-title>{{ languageOption.nameTranslated }}</v-list-item-title>
</v-list-item>
</v-list-item-group>
</v-list>
</v-menu>
</template>
......
{
availableLanguages {
code
nameTranslated
cookie
}
}
{
systemProperties {
availableLanguages {
code
nameTranslated
cookie
}
currentLanguage
}
}
......@@ -41,6 +41,20 @@ class LanguageType(ObjectType):
cookie = graphene.String(required=True)
class SystemPropertiesType(graphene.ObjectType):
current_language = graphene.String(required=True)
available_languages = graphene.List(LanguageType)
def resolve_current_language(parent, info, **kwargs):
return info.context.LANGUAGE_CODE
def resolve_available_languages(parent, info, **kwargs):
return [
translation.get_language_info(code) | {"cookie": get_language_cookie(code)}
for code, name in settings.LANGUAGES
]
class PersonMutation(DjangoModelFormMutation):
person = graphene.Field(PersonType)
......@@ -73,8 +87,7 @@ class Query(graphene.ObjectType):
person_by_id = graphene.Field(PersonType, id=graphene.ID())
who_am_i = graphene.Field(PersonType)
language = graphene.String()
available_languages = graphene.List(LanguageType)
system_properties = graphene.Field(SystemPropertiesType)
def resolve_notifications(root, info, **kwargs):
# FIXME do permission stuff
......@@ -93,14 +106,8 @@ class Query(graphene.ObjectType):
else:
return None
def resolve_language(root, info, **kwargs):
return info.context.LANGUAGE_CODE
def resolve_available_languages(root, info, **kwargs):
return [
translation.get_language_info(code) | {"cookie": get_language_cookie(code)}
for code, name in settings.LANGUAGES
]
def resolve_system_properties(root, info, **kwargs):
return True
class Mutation(graphene.ObjectType):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment