summaryrefslogtreecommitdiffstats
path: root/src/pages/AddStatusPage.vue
blob: bae61449c2c999f23b9afb52b22ff95856e2682d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<template>
    <transition name="slide-fade" appear>
        <div>
            <h1 class="mb-3">
                {{ $t("Add New Status Page") }}
            </h1>

            <form @submit.prevent="submit">
                <div class="shadow-box">
                    <div class="mb-3">
                        <label for="name" class="form-label">{{ $t("Name") }}</label>
                        <input id="name" v-model="title" type="text" class="form-control" required data-testid="name-input">
                    </div>

                    <div class="mb-4">
                        <label for="slug" class="form-label">{{ $t("Slug") }}</label>
                        <div class="input-group">
                            <span id="basic-addon3" class="input-group-text">/status/</span>
                            <input id="slug" v-model="slug" type="text" class="form-control" required data-testid="slug-input">
                        </div>
                        <div class="form-text">
                            <ul>
                                <li>{{ $t("Accept characters:") }} <mark>a-z</mark> <mark>0-9</mark> <mark>-</mark></li>
                                <i18n-t tag="li" keypath="startOrEndWithOnly">
                                    <mark>a-z</mark> <mark>0-9</mark>
                                </i18n-t>
                                <li>{{ $t("No consecutive dashes") }} <mark>--</mark></li>
                                <i18n-t tag="li" keypath="statusPageSpecialSlugDesc">
                                    <mark class="me-1">default</mark>
                                </i18n-t>
                            </ul>
                        </div>
                    </div>

                    <div class="mt-2 mb-1">
                        <button id="monitor-submit-btn" class="btn btn-primary w-100" type="submit" :disabled="processing" data-testid="submit-button">{{ $t("Next") }}</button>
                    </div>
                </div>
            </form>
        </div>
    </transition>
</template>

<script>
export default {
    components: {

    },
    data() {
        return {
            title: "",
            slug: "",
            processing: false,
        };
    },
    methods: {
        /**
         * Submit form data to add new status page
         * @returns {Promise<void>}
         */
        async submit() {
            this.processing = true;

            this.$root.getSocket().emit("addStatusPage", this.title, this.slug, (res) => {
                this.processing = false;

                if (res.ok) {
                    location.href = "/status/" + this.slug + "?edit";
                } else {

                    if (res.msg.includes("UNIQUE constraint")) {
                        this.$root.toastError("The slug is already taken. Please choose another slug.");
                    } else {
                        this.$root.toastRes(res);
                    }

                }
            });
        }
    }
};
</script>

<style lang="scss" scoped>
.shadow-box {
    padding: 20px;
}
</style>