mirror of https://github.com/requarks/wiki
parent
e8cb5f9773
commit
9ecaebba32
After Width: | Height: | Size: 4.9 KiB |
@ -0,0 +1,211 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
q-menu.translucent-menu(
|
||||||
|
anchor='bottom right'
|
||||||
|
self='top right'
|
||||||
|
:offset='[0, 10]'
|
||||||
|
ref='menuRef'
|
||||||
|
)
|
||||||
|
q-card(style='width: 850px;')
|
||||||
|
q-card-section.card-header
|
||||||
|
q-icon(name='img:/_assets/icons/fluent-choose.svg', left, size='sm')
|
||||||
|
span {{t(`admin.users.defaults`)}}
|
||||||
|
q-list(padding)
|
||||||
|
q-item
|
||||||
|
blueprint-icon(icon='timezone')
|
||||||
|
q-item-section
|
||||||
|
q-item-label {{t(`admin.general.defaultTimezone`)}}
|
||||||
|
q-item-label(caption) {{t(`admin.general.defaultTimezoneHint`)}}
|
||||||
|
q-item-section
|
||||||
|
q-select(
|
||||||
|
outlined
|
||||||
|
v-model='state.timezone'
|
||||||
|
:options='timezones'
|
||||||
|
option-value='value'
|
||||||
|
option-label='text'
|
||||||
|
emit-value
|
||||||
|
map-options
|
||||||
|
dense
|
||||||
|
options-dense
|
||||||
|
:virtual-scroll-slice-size='1000'
|
||||||
|
:aria-label='t(`admin.general.defaultTimezone`)'
|
||||||
|
)
|
||||||
|
q-separator.q-my-sm(inset)
|
||||||
|
q-item
|
||||||
|
blueprint-icon(icon='calendar')
|
||||||
|
q-item-section
|
||||||
|
q-item-label {{t(`admin.general.defaultDateFormat`)}}
|
||||||
|
q-item-label(caption) {{t(`admin.general.defaultDateFormatHint`)}}
|
||||||
|
q-item-section
|
||||||
|
q-select(
|
||||||
|
outlined
|
||||||
|
v-model='state.dateFormat'
|
||||||
|
emit-value
|
||||||
|
map-options
|
||||||
|
dense
|
||||||
|
:aria-label='t(`admin.general.defaultDateFormat`)'
|
||||||
|
:options='dateFormats'
|
||||||
|
)
|
||||||
|
q-separator.q-my-sm(inset)
|
||||||
|
q-item
|
||||||
|
blueprint-icon(icon='clock')
|
||||||
|
q-item-section
|
||||||
|
q-item-label {{t(`admin.general.defaultTimeFormat`)}}
|
||||||
|
q-item-label(caption) {{t(`admin.general.defaultTimeFormatHint`)}}
|
||||||
|
q-item-section.col-auto
|
||||||
|
q-btn-toggle(
|
||||||
|
v-model='state.timeFormat'
|
||||||
|
push
|
||||||
|
glossy
|
||||||
|
no-caps
|
||||||
|
toggle-color='primary'
|
||||||
|
:options='timeFormats'
|
||||||
|
)
|
||||||
|
q-card-actions.card-actions
|
||||||
|
q-space
|
||||||
|
q-btn.acrylic-btn(
|
||||||
|
flat
|
||||||
|
:label='t(`common.actions.cancel`)'
|
||||||
|
color='grey'
|
||||||
|
padding='xs md'
|
||||||
|
v-close-popup
|
||||||
|
)
|
||||||
|
q-btn(
|
||||||
|
unelevated
|
||||||
|
:label='t(`common.actions.save`)'
|
||||||
|
color='primary'
|
||||||
|
padding='xs md'
|
||||||
|
@click='save'
|
||||||
|
)
|
||||||
|
q-inner-loading(:showing='state.loading > 0')
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { useQuasar } from 'quasar'
|
||||||
|
import { onMounted, reactive, ref } from 'vue'
|
||||||
|
import gql from 'graphql-tag'
|
||||||
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
|
||||||
|
import { usePageStore } from 'src/stores/page'
|
||||||
|
import { useSiteStore } from 'src/stores/site'
|
||||||
|
|
||||||
|
// QUASAR
|
||||||
|
|
||||||
|
const $q = useQuasar()
|
||||||
|
|
||||||
|
// STORES
|
||||||
|
|
||||||
|
const pageStore = usePageStore()
|
||||||
|
const siteStore = useSiteStore()
|
||||||
|
|
||||||
|
// I18N
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
|
// DATA
|
||||||
|
|
||||||
|
const state = reactive({
|
||||||
|
loading: 0,
|
||||||
|
timezone: '',
|
||||||
|
dateFormat: '',
|
||||||
|
timeFormat: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const menuRef = ref(null)
|
||||||
|
|
||||||
|
const dateFormats = [
|
||||||
|
{ value: '', label: t('profile.localeDefault') },
|
||||||
|
{ value: 'DD/MM/YYYY', label: 'DD/MM/YYYY' },
|
||||||
|
{ value: 'DD.MM.YYYY', label: 'DD.MM.YYYY' },
|
||||||
|
{ value: 'MM/DD/YYYY', label: 'MM/DD/YYYY' },
|
||||||
|
{ value: 'YYYY-MM-DD', label: 'YYYY-MM-DD' },
|
||||||
|
{ value: 'YYYY/MM/DD', label: 'YYYY/MM/DD' }
|
||||||
|
]
|
||||||
|
const timeFormats = [
|
||||||
|
{ value: '12h', label: t('admin.general.defaultTimeFormat12h') },
|
||||||
|
{ value: '24h', label: t('admin.general.defaultTimeFormat24h') }
|
||||||
|
]
|
||||||
|
const timezones = Intl.supportedValuesOf('timeZone')
|
||||||
|
|
||||||
|
// METHODS
|
||||||
|
|
||||||
|
async function save () {
|
||||||
|
state.loading++
|
||||||
|
try {
|
||||||
|
const resp = await APOLLO_CLIENT.mutate({
|
||||||
|
mutation: gql`
|
||||||
|
mutation saveSite (
|
||||||
|
$timezone: String!
|
||||||
|
$dateFormat: String!
|
||||||
|
$timeFormat: String!
|
||||||
|
) {
|
||||||
|
updateUserDefaults (
|
||||||
|
timezone: $timezone
|
||||||
|
dateFormat: $dateFormat
|
||||||
|
timeFormat: $timeFormat
|
||||||
|
) {
|
||||||
|
operation {
|
||||||
|
succeeded
|
||||||
|
slug
|
||||||
|
message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
variables: {
|
||||||
|
timezone: state.timezone,
|
||||||
|
dateFormat: state.dateFormat,
|
||||||
|
timeFormat: state.timeFormat
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (resp?.data?.updateUserDefaults?.operation?.succeeded) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'positive',
|
||||||
|
message: t('admin.users.defaultsSaveSuccess')
|
||||||
|
})
|
||||||
|
menuRef.value.hide()
|
||||||
|
} else {
|
||||||
|
throw new Error(resp?.data?.updateUserDefaults?.operation?.message)
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: 'Failed to save user defaults.',
|
||||||
|
caption: err.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
state.loading--
|
||||||
|
}
|
||||||
|
|
||||||
|
// MOUNTED
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
state.loading++
|
||||||
|
try {
|
||||||
|
const resp = await APOLLO_CLIENT.query({
|
||||||
|
query: gql`
|
||||||
|
query getUserDefaults {
|
||||||
|
userDefaults {
|
||||||
|
timezone
|
||||||
|
dateFormat
|
||||||
|
timeFormat
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
fetchPolicy: 'network-only'
|
||||||
|
})
|
||||||
|
const respData = cloneDeep(resp?.data?.userDefaults)
|
||||||
|
state.timezone = respData.timezone
|
||||||
|
state.dateFormat = respData.dateFormat
|
||||||
|
state.timeFormat = respData.timeFormat
|
||||||
|
} catch (err) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'negative',
|
||||||
|
message: 'Failed to load user defaults',
|
||||||
|
caption: err.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
state.loading--
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
Loading…
Reference in new issue