Skip to content

Commit 767e466

Browse files
committed
Lets be smarter with modals here...
1 parent b6773b5 commit 767e466

File tree

5 files changed

+54
-34
lines changed

5 files changed

+54
-34
lines changed

resources/assets/scripts/components/core/Modal.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<transition name="modal">
33
<div class="modal-mask" v-show="show" v-on:click="close">
44
<div class="modal-container" @click.stop>
5-
<div v-on:click="close">
5+
<div v-on:click="close" v-if="dismissable">
66
<Icon name="x"
77
class="absolute pin-r pin-t m-2 text-neutral-500 cursor-pointer"
88
aria-label="Close modal"
@@ -27,10 +27,11 @@
2727
modalName: {type: String, default: 'modal'},
2828
show: {type: Boolean, default: false},
2929
closeOnEsc: {type: Boolean, default: true},
30+
dismissable: {type: Boolean, default: true},
3031
},
3132
3233
mounted: function () {
33-
if (this.$props.closeOnEsc) {
34+
if (this.$props.dismissable && this.$props.closeOnEsc) {
3435
document.addEventListener('keydown', e => {
3536
if (this.show && e.key === 'Escape') {
3637
this.close();
@@ -41,7 +42,9 @@
4142
4243
methods: {
4344
close: function () {
44-
this.$emit('close', this.$props.modalName);
45+
if (this.$props.dismissable) {
46+
this.$emit('close', this.$props.modalName);
47+
}
4548
}
4649
},
4750
});

resources/assets/scripts/components/dashboard/Dashboard.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<span class="spinner spinner-xl spinner-thick blue"></span>
1717
</div>
1818
</div>
19-
<TransitionGroup class="flex flex-wrap justify-center sm:justify-start" v-else>
19+
<TransitionGroup class="flex flex-wrap justify-center sm:justify-start" tag="div" v-else>
2020
<ServerBox
2121
v-for="(server, index) in servers"
2222
:key="index"

resources/assets/scripts/components/server/components/database/DatabaseRow.vue

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,23 @@
3131
</button>
3232
</div>
3333
</div>
34-
<Modal :show="showDeleteModal" v-on:close="showDeleteModal = false">
35-
<DeleteDatabaseModal
36-
:database="database"
37-
v-on:close="showDeleteModal = false"
38-
v-if="showDeleteModal"
39-
/>
40-
</modal>
34+
<DeleteDatabaseModal
35+
:database="database"
36+
:show="showDeleteModal"
37+
v-on:close="showDeleteModal = false"
38+
/>
4139
</div>
4240
</template>
4341

4442
<script lang="ts">
4543
import Vue from 'vue';
4644
import Icon from "@/components/core/Icon.vue";
47-
import Modal from "@/components/core/Modal.vue";
4845
import {ServerDatabase} from "@/api/server/types";
4946
import DeleteDatabaseModal from "@/components/server/components/database/DeleteDatabaseModal.vue";
5047
5148
export default Vue.extend({
5249
name: 'DatabaseRow',
53-
components: {DeleteDatabaseModal, Modal, Icon},
50+
components: {DeleteDatabaseModal, Icon},
5451
props: {
5552
database: {
5653
type: Object as () => ServerDatabase,

resources/assets/scripts/components/server/components/database/DeleteDatabaseModal.vue

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,42 @@
11
<template>
2-
<div>
3-
<h2 class="font-medium text-neutral-900 mb-6">Delete this database?</h2>
4-
<p class="text-neutral-900 text-sm">This action
5-
<strong>cannot</strong> be undone. This will permanetly delete the
6-
<strong>{{database.name}}</strong> database and remove all associated data.</p>
7-
<div class="mt-6">
8-
<label class="input-label">Confirm database name</label>
9-
<input type="text" class="input" v-model="nameConfirmation"/>
10-
</div>
11-
<div class="mt-6 text-right">
12-
<button class="btn btn-sm btn-secondary mr-2" v-on:click="$emit('close')">Cancel</button>
13-
<button class="btn btn-sm btn-red" :disabled="disabled" v-on:click="deleteDatabase">
14-
<span class="spinner white" v-bind:class="{ hidden: !showSpinner }">&nbsp;</span>
15-
<span :class="{ hidden: showSpinner }">
16-
Confirm Deletion
17-
</span>
18-
</button>
19-
</div>
20-
</div>
2+
<Modal v-on:close="closeModal" :show="show" :dismissable="!showSpinner">
3+
<transition name="modal">
4+
<div>
5+
<h2 class="font-medium text-neutral-900 mb-6">Delete this database?</h2>
6+
<p class="text-neutral-900 text-sm">This action
7+
<strong>cannot</strong> be undone. This will permanetly delete the
8+
<strong>{{database.name}}</strong> database and remove all associated data.</p>
9+
<div class="mt-6">
10+
<label class="input-label">Confirm database name</label>
11+
<input type="text" class="input" v-model="nameConfirmation"/>
12+
</div>
13+
<div class="mt-6 text-right">
14+
<button class="btn btn-sm btn-secondary mr-2" v-on:click="closeModal">Cancel</button>
15+
<button class="btn btn-sm btn-red" :disabled="disabled" v-on:click="deleteDatabase">
16+
<span class="spinner white" v-bind:class="{ hidden: !showSpinner }">&nbsp;</span>
17+
<span :class="{ hidden: showSpinner }">
18+
Confirm Deletion
19+
</span>
20+
</button>
21+
</div>
22+
</div>
23+
</transition>
24+
</Modal>
2125
</template>
2226

2327
<script lang="ts">
2428
import Vue from 'vue';
2529
import {ServerDatabase} from "@/api/server/types";
30+
import Modal from '@/components/core/Modal.vue';
2631
2732
export default Vue.extend({
2833
name: 'DeleteDatabaseModal',
34+
components: {Modal},
2935
props: {
36+
show: {
37+
type: Boolean,
38+
default: false,
39+
},
3040
database: {
3141
type: Object as () => ServerDatabase,
3242
required: true
@@ -84,6 +94,16 @@
8494
this.$emit('close');
8595
})
8696
},
97+
98+
/**
99+
* Closes the modal and resets the entry field.
100+
*/
101+
closeModal: function () {
102+
this.showSpinner = false;
103+
this.nameConfirmation = '';
104+
105+
this.$emit('close');
106+
}
87107
},
88108
});
89109
</script>

resources/assets/styles/components/miscellaneous.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ code {
7676
}
7777

7878
& > div {
79-
@apply .flex .flex-col .h-full;
79+
@apply .flex .flex-col;
8080
transition: box-shadow 150ms ease-in;
8181

8282
&:hover {
@@ -85,7 +85,7 @@ code {
8585
}
8686

8787
& > div > .server-card {
88-
@apply .flex .flex-1 .flex-col .p-4 .border .border-t-4 .border-neutral-100 .bg-white;
88+
@apply .flex .flex-col .p-4 .border .border-t-4 .border-neutral-100 .bg-white;
8989
transition: all 100ms ease-in;
9090

9191
& .identifier-icon {

0 commit comments

Comments
 (0)