diff --git a/dashboard/src/constants.js b/dashboard/src/constants.js index bce51855a..4675af200 100644 --- a/dashboard/src/constants.js +++ b/dashboard/src/constants.js @@ -119,8 +119,6 @@ const ENDPOINTS_OVH = [ { name: 'Kimsufi North-America', value: 'kimsufi-ca' }, ]; -const SECRET_PLACEHOLDER = String.fromCharCode(0x25CF).repeat(8); - // List is from http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region const REGIONS_S3 = [ { name: 'Africa (Cape Town)', value: 'af-south-1' }, @@ -334,7 +332,6 @@ export { PROXY_APP_ID, TOKEN_TYPES, ENDPOINTS_OVH, - SECRET_PLACEHOLDER, STORAGE_PROVIDERS, BACKUP_FORMATS, REGIONS_CONTABO, @@ -366,7 +363,6 @@ export default { PROXY_APP_ID, TOKEN_TYPES, ENDPOINTS_OVH, - SECRET_PLACEHOLDER, STORAGE_PROVIDERS, BACKUP_FORMATS, REGIONS_CONTABO, diff --git a/dashboard/src/views/VolumesView.vue b/dashboard/src/views/VolumesView.vue index ec40bbc2c..fa9f91772 100644 --- a/dashboard/src/views/VolumesView.vue +++ b/dashboard/src/views/VolumesView.vue @@ -5,7 +5,7 @@ const i18n = useI18n(); const t = i18n.t; import { computed, ref, useTemplateRef, onMounted } from 'vue'; -import { Button, Menu, Checkbox, Dialog, SingleSelect, FormGroup, InputDialog, NumberInput, PasswordInput, TableView, TextInput } from '@cloudron/pankow'; +import { Button, Menu, Checkbox, Dialog, SingleSelect, FormGroup, InputDialog, NumberInput, TableView, TextInput, MaskedInput } from '@cloudron/pankow'; import Section from '../components/Section.vue'; import StateLED from '../components/StateLED.vue'; import VolumesModel from '../models/VolumesModel.js'; @@ -173,9 +173,19 @@ async function openVolumeDialog(volume) { volumeDialogData.value.xfsBlockDevices = xfsBlockDevices; volumeDialog.value.open(); + + setTimeout(checkValidity, 100); // update state of the confirm button } -async function submitVolumeDialog() { +const form = useTemplateRef('form'); +const isFormValid = ref(false); +function checkValidity() { + isFormValid.value = form.value.checkValidity(); +} + +async function onSubmit() { + if (!form.value.reportValidity()) return; + volumeDialogData.value.busy = true; const mountOptions = { @@ -185,11 +195,11 @@ async function submitVolumeDialog() { remoteDir: volumeDialogData.value.remoteDir, user: volumeDialogData.value.user, username: volumeDialogData.value.username, - password: volumeDialogData.value.password, diskPath: volumeDialogData.value.diskPath, hostPath: volumeDialogData.value.hostPath, - privateKey: volumeDialogData.value.privateKey, }; + if (volumeDialogData.value.password) mountOptions.password = volumeDialogData.value.password; // cifs + if (volumeDialogData.value.privateKey) mountOptions.privateKey = volumeDialogData.value.privateKey; // sshfs let error; if (volumeDialogData.value.mode === 'new') { @@ -269,11 +279,11 @@ onMounted(async () =>{ :reject-label="$t('main.dialog.cancel')" reject-style="secondary" :confirm-label="$t('main.dialog.save')" - :confirm-active="volumeDialogValid" + :confirm-active="!volumeDialogData.busy && isFormValid" :confirm-busy="volumeDialogData.busy" - @confirm="submitVolumeDialog()" + @confirm="onSubmit()" > -