diff --git a/dashboard/src/components/UserDialog.vue b/dashboard/src/components/UserDialog.vue index 2222e63e4..433d6204d 100644 --- a/dashboard/src/components/UserDialog.vue +++ b/dashboard/src/components/UserDialog.vue @@ -7,10 +7,12 @@ const t = i18n.t; import { ref, useTemplateRef } from 'vue'; import { Dialog, TextInput, FormGroup, Checkbox, MultiSelect, SingleSelect } from 'pankow'; import { ROLES } from '../constants.js'; +import DashboardModel from '../models/DashboardModel.js'; import ProfileModel from '../models/ProfileModel.js'; import UsersModel from '../models/UsersModel.js'; import GroupsModel from '../models/GroupsModel.js'; +const dashboardModel = DashboardModel.create(); const profileModel = ProfileModel.create(); const usersModel = UsersModel.create(); const groupsModel = GroupsModel.create(); @@ -18,13 +20,14 @@ const groupsModel = GroupsModel.create(); const emit = defineEmits([ 'success' ]); const dialog = useTemplateRef('dialog'); +const form = useTemplateRef('form'); // also determines if new or edit mode const user = ref(null); const roles = ref([]); const profile = ref({}); const busy = ref(false); -const profileLocked = ref(false); // TODO +const profileLocked = ref(false); const formError = ref({}); const displayName = ref(''); const email = ref(''); @@ -40,6 +43,8 @@ const sendInvite = ref(false); const isSelf = ref(false); async function onSubmit() { + if (!form.value.reportValidity()) return; + busy.value = true; formError.value = {}; @@ -55,9 +60,12 @@ async function onSubmit() { // can only be set not updated if (!user.value) data.username = username.value || null; - if (!user.value.source) { + const isExternal = user.value && user.value.source; + + // update or add + if (!isExternal) { let error, result; - if (user.value) [error, result] = await usersModel.update(user.value.id, data); + if (user.value) [error] = await usersModel.update(user.value.id, data); else [error, result] = await usersModel.add(data); if (error) { const message = error.body ? error.body.message : ''; @@ -87,7 +95,7 @@ async function onSubmit() { return; } - userId = result.id; + userId = user.value ? user.value.id : result.id; } // for some reason only user adding supports role setting directly, but not user edit, so we have to do this separately @@ -164,6 +172,10 @@ defineExpose({ { id: ROLES.OWNER, name: t('users.role.owner'), disabled: !profile.value.isAtLeastOwner }, ]; + [error, result] = await dashboardModel.config(); + if (error) return console.error(error); + profileLocked.value = result.profileLocked; + dialog.value.open(); } }); @@ -184,7 +196,7 @@ defineExpose({