Add a basic modal template to be used
This commit is contained in:
parent
84fecb7a92
commit
d6959ea3dd
|
@ -0,0 +1,40 @@
|
||||||
|
<template>
|
||||||
|
<transition name="modal">
|
||||||
|
<div class="modal-mask" v-show="show" v-on:click="close">
|
||||||
|
<div class="modal-container" @click.stop>
|
||||||
|
<x-icon class="absolute pin-r pin-t m-2 text-grey cursor-pointer" aria-label="Close modal"
|
||||||
|
v-on:click="close"
|
||||||
|
/>
|
||||||
|
<slot/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { XIcon } from 'vue-feather-icons';
|
||||||
|
export default {
|
||||||
|
name: 'modal',
|
||||||
|
components: { XIcon },
|
||||||
|
props: {
|
||||||
|
modalName: { type: String, default: 'modal' },
|
||||||
|
show: { type: Boolean, default: false },
|
||||||
|
closeOnEsc: { type: Boolean, default: true },
|
||||||
|
},
|
||||||
|
mounted: function () {
|
||||||
|
if (this.$props.closeOnEsc) {
|
||||||
|
document.addEventListener('keydown', e => {
|
||||||
|
if (this.show && e.key === 'Escape') {
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
close: function () {
|
||||||
|
this.$emit('close', this.$props.modalName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -2,32 +2,18 @@
|
||||||
<div>
|
<div>
|
||||||
<navigation/>
|
<navigation/>
|
||||||
<div class="container animate fadein mt-6">
|
<div class="container animate fadein mt-6">
|
||||||
|
<modal :show="modalVisible" v-on:close="modalVisible = false">
|
||||||
|
<TwoFactorAuthentication/>
|
||||||
|
</modal>
|
||||||
<flash container="mt-6 mb-2 mx-4"/>
|
<flash container="mt-6 mb-2 mx-4"/>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<update-email class="flex-1 m-4"/>
|
<div class="flex-1 m-4 ml-0">
|
||||||
<div class="flex-1 m-4">
|
<update-email class="mb-8"/>
|
||||||
<form action="" method="post">
|
<div class="bg-white p-6 border border-grey-light rounded rounded-1 text-center">
|
||||||
<div class="bg-white p-6 border border-grey-light rounded rounded-1">
|
<button class="btn btn-green btn-sm" type="submit" v-on:click="modalVisible = true">Configure 2-Factor Authentication</button>
|
||||||
<h2 class="mb-6 text-grey-darkest font-medium">Change your password</h2>
|
</div>
|
||||||
<div class="mt-6">
|
|
||||||
<label for="grid-password-current" class="input-label">Current password</label>
|
|
||||||
<input id="grid-password-current" name="password" type="password" class="input" required>
|
|
||||||
</div>
|
|
||||||
<div class="mt-6">
|
|
||||||
<label for="grid-password-new" class="input-label">New password</label>
|
|
||||||
<input id="grid-password-new" name="password" type="password" class="input" required>
|
|
||||||
<p class="input-help">Your new password should be at least 8 characters in length, contain one number, and be mixed case.</p>
|
|
||||||
</div>
|
|
||||||
<div class="mt-6">
|
|
||||||
<label for="grid-password-new-confirm" class="input-label">Confirm new password</label>
|
|
||||||
<input id="grid-password-new-confirm" name="password_confirmation" type="password" class="input" required>
|
|
||||||
</div>
|
|
||||||
<div class="mt-6 text-right">
|
|
||||||
<button class="btn btn-blue btn-sm text-right" type="submit">Save</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
|
<change-password class="flex-1 m-4 mr-0"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -36,16 +22,18 @@
|
||||||
<script>
|
<script>
|
||||||
import Navigation from '../core/Navigation';
|
import Navigation from '../core/Navigation';
|
||||||
import Flash from '../Flash';
|
import Flash from '../Flash';
|
||||||
import { mapState } from 'vuex';
|
|
||||||
import UpdateEmail from './account/UpdateEmail';
|
import UpdateEmail from './account/UpdateEmail';
|
||||||
|
import ChangePassword from './account/ChangePassword';
|
||||||
|
import Modal from '../core/Modal';
|
||||||
|
import TwoFactorAuthentication from './account/TwoFactorAuthentication';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'account',
|
name: 'account',
|
||||||
components: {UpdateEmail, Flash, Navigation},
|
components: {TwoFactorAuthentication, Modal, ChangePassword, UpdateEmail, Flash, Navigation},
|
||||||
computed: {
|
data: function () {
|
||||||
...mapState({
|
return {
|
||||||
user: state => state.auth.user,
|
modalVisible: false,
|
||||||
})
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<form action="" method="post">
|
||||||
|
<div class="bg-white p-6 border border-grey-light rounded rounded-1">
|
||||||
|
<h2 class="mb-6 text-grey-darkest font-medium">Change your password</h2>
|
||||||
|
<div class="mt-6">
|
||||||
|
<label for="grid-password-current" class="input-label">Current password</label>
|
||||||
|
<input id="grid-password-current" name="password" type="password" class="input" required>
|
||||||
|
</div>
|
||||||
|
<div class="mt-6">
|
||||||
|
<label for="grid-password-new" class="input-label">New password</label>
|
||||||
|
<input id="grid-password-new" name="password" type="password" class="input" required>
|
||||||
|
<p class="input-help">Your new password should be at least 8 characters in length, contain one number, and be mixed case.</p>
|
||||||
|
</div>
|
||||||
|
<div class="mt-6">
|
||||||
|
<label for="grid-password-new-confirm" class="input-label">Confirm new password</label>
|
||||||
|
<input id="grid-password-new-confirm" name="password_confirmation" type="password" class="input" required>
|
||||||
|
</div>
|
||||||
|
<div class="mt-6 text-right">
|
||||||
|
<button class="btn btn-blue btn-sm text-right" type="submit">Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'change-password'
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
Todo: put the 2FA magic here!
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'TwoFactorAuthentication'
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -34,3 +34,15 @@
|
||||||
@apply .bg-red-dark;
|
@apply .bg-red-dark;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* transition="modal"
|
||||||
|
*/
|
||||||
|
.modal-enter, .modal-leave-active {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-enter .modal-container,
|
||||||
|
.modal-leave-active .modal-container {
|
||||||
|
animation: opacity 250ms linear;
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.btn-green {
|
||||||
|
@apply .bg-green .border-green-dark .border .text-white;
|
||||||
|
|
||||||
|
&:hover:enabled {
|
||||||
|
@apply .bg-green-dark .border-green-darker;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&.btn-secondary {
|
&.btn-secondary {
|
||||||
@apply .border .border-grey-light .text-grey-dark;
|
@apply .border .border-grey-light .text-grey-dark;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
.modal-mask {
|
||||||
|
@apply .fixed .pin .z-50 .overflow-auto .flex;
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
transition: opacity 250ms ease;
|
||||||
|
|
||||||
|
& > .modal-container {
|
||||||
|
@apply .relative .p-8 .bg-white .w-full .max-w-md .m-auto .flex-col .flex;
|
||||||
|
transition: all 250ms ease;
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@
|
||||||
@import "components/buttons.css";
|
@import "components/buttons.css";
|
||||||
@import "components/forms.css";
|
@import "components/forms.css";
|
||||||
@import "components/miscellaneous.css";
|
@import "components/miscellaneous.css";
|
||||||
|
@import "components/modal.css";
|
||||||
@import "components/navigation.css";
|
@import "components/navigation.css";
|
||||||
@import "components/notifications.css";
|
@import "components/notifications.css";
|
||||||
@import "components/spinners.css";
|
@import "components/spinners.css";
|
||||||
|
|
Loading…
Reference in New Issue