Implemented personal settings
This commit is contained in:
100
frontend/src/components/SettingsWidget.vue
Normal file
100
frontend/src/components/SettingsWidget.vue
Normal file
@@ -0,0 +1,100 @@
|
||||
<template>
|
||||
<div class="settings-widget">
|
||||
<h2>{{ $t("settings.personal.title") }}</h2>
|
||||
<template v-for="setting in settings">
|
||||
<InputStringWidget v-if="setting.datatype == 'string'"
|
||||
:labelTr="`settings.personal.label.${setting.name}`"
|
||||
:tooltipTr="`settings.personal.tooltip.${setting.name}`" :value=setting.value :list="languagesList()"
|
||||
@input="handleInput(setting.id, $event)" />
|
||||
<DateInputWidget v-else-if="setting.datatype == 'date'" :labelTr="`settings.personal.label.${setting.name}`"
|
||||
:tooltipTr="`settings.personal.tooltip.${setting.name}`" :value=setting.value
|
||||
@input="handleInput(setting.id, $event)" />
|
||||
<SelectDropdownWidget v-else-if="setting.datatype == 'singleselect'"
|
||||
:labelTr="`settings.personal.label.${setting.name}`"
|
||||
:tooltipTr="`settings.personal.tooltip.${setting.name}`" :value=setting.value
|
||||
:list="getSettingOptions(setting.name, setting.options)" @input="handleInput(setting.id, $event)" />
|
||||
<div v-else>{{ setting }}
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import apiClient from '@/utils/axios.js';
|
||||
import { mapGetters } from 'vuex';
|
||||
import InputStringWidget from '@/components/form/InputStringWidget.vue';
|
||||
import DateInputWidget from '@/components/form/DateInputWidget.vue';
|
||||
import SelectDropdownWidget from '@/components/form/SelectDropdownWidget';
|
||||
|
||||
export default {
|
||||
name: "SettingsWidget",
|
||||
components: {
|
||||
InputStringWidget,
|
||||
DateInputWidget,
|
||||
SelectDropdownWidget,
|
||||
},
|
||||
props: {
|
||||
settingsType: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['user']),
|
||||
},
|
||||
async mounted() {
|
||||
await this.fetchSettings();
|
||||
},
|
||||
methods: {
|
||||
async fetchSettings() {
|
||||
if (this.user && this.user.id) {
|
||||
try {
|
||||
const userid = this.user.id;
|
||||
const response = await apiClient.post('/api/settings/filter', {
|
||||
userid: userid,
|
||||
type: this.settingsType
|
||||
});
|
||||
this.settings = response.data;
|
||||
} catch (err) {
|
||||
this.settings = [];
|
||||
}
|
||||
}
|
||||
},
|
||||
getSettingOptions(fieldName, options) {
|
||||
return options.map((option) => {
|
||||
return {
|
||||
value: option.id,
|
||||
captionTr: `settings.personal.${fieldName}.${option.value}`
|
||||
}
|
||||
});
|
||||
},
|
||||
async handleInput(settingId, value) {
|
||||
if (['object', 'array'].includes(typeof value)) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const userid = this.user.id;
|
||||
await apiClient.post('/api/settings/update', {
|
||||
userid: userid,
|
||||
settingId: settingId,
|
||||
value: value
|
||||
});
|
||||
console.log('Setting updated:', settingId, value);
|
||||
} catch (err) {
|
||||
console.error('Error updating setting:', err);
|
||||
}
|
||||
},
|
||||
languagesList() {
|
||||
return [
|
||||
{ value: 'en', captionTr: 'settings.personal.languages.en' },
|
||||
{ value: 'de', captionTr: 'settings.personal.languages.de' },
|
||||
];
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
settings: [],
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
Reference in New Issue
Block a user