Files
speckle-server/frontend/src/components/dialogs/UserDialog.vue
T
Matteo Cominetti 8dc157772d feat(ui): adds dark mode 🌛
2020-10-16 18:52:14 +01:00

123 lines
2.9 KiB
Vue

<template>
<v-dialog v-model="show" width="500" @keydown.esc="cancel">
<v-card class="pa-4" color="background2">
<v-card-title class="subtitle-1">Edit Profile</v-card-title>
<v-card-text class="pl-2 pr-2 pt-0 pb-0">
<v-form
ref="form"
v-model="valid"
lazy-validation
@submit.prevent="agree"
>
<v-container>
<v-row>
<v-col cols="12" class="pb-0">
<v-text-field
v-model="user.name"
label="Name"
:rules="nameRules"
required
filled
autofocus
></v-text-field>
</v-col>
</v-row>
<v-row>
<v-col cols="12" class="pt-0 pb-0">
<v-text-field
v-model="user.company"
filled
label="Company"
></v-text-field>
</v-col>
</v-row>
<v-row>
<v-col cols="12" class="pt-0 pb-0">
<v-textarea
v-model="user.bio"
filled
rows="2"
label="Bio"
></v-textarea>
</v-col>
</v-row>
</v-container>
</v-form>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn :disabled="!valid" color="primary" text @click.native="agree">
Save
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
data: () => ({
dialog: false,
user: {},
nameRules: [],
valid: true
}),
computed: {
show: {
get() {
return this.dialog
},
set(value) {
this.dialog = value
if (value === false) {
this.cancel()
}
}
}
},
watch: {
"user.name"(val) {
this.nameRules = []
}
},
methods: {
open(user) {
this.dialog = true
if (this.$refs.form) this.$refs.form.resetValidation()
this.user = { name: user.name, company: user.company, bio: user.bio }
return new Promise((resolve, reject) => {
this.resolve = resolve
this.reject = reject
})
},
agree() {
this.nameRules = [
(v) => !!v || "You need a name!",
(v) =>
(v && v.length <= 100) || "Name must be less than 100 characters",
(v) => (v && v.length >= 3) || "Name must be at least 3 characters"
]
let self = this
setTimeout(function () {
if (self.$refs.form.validate()) {
self.resolve({
result: true,
user: self.user
})
self.dialog = false
}
})
},
cancel() {
this.resolve({
result: false
})
this.dialog = false
}
}
}
</script>