summaryrefslogtreecommitdiffstats
path: root/src/pages/AddStatusPage.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/AddStatusPage.vue')
-rw-r--r--src/pages/AddStatusPage.vue88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/pages/AddStatusPage.vue b/src/pages/AddStatusPage.vue
new file mode 100644
index 0000000..bae6144
--- /dev/null
+++ b/src/pages/AddStatusPage.vue
@@ -0,0 +1,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>