aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2024-03-13 17:35:05 +0000
committerLeonardo Bishop <me@leonardobishop.com>2024-03-13 17:35:05 +0000
commitba28c0148cab26fcaf523e84731ffb7c416b3338 (patch)
treea26135e7aa07f53c36292117eff84d0b22e6dd92 /components
parent1d2fd8e82f4d2ccfa4cf9e434a05e43250162449 (diff)
Add import page
Diffstat (limited to 'components')
-rw-r--r--components/base/Button.vue24
-rw-r--r--components/header/SiteHeader.vue3
-rw-r--r--components/loader/LoaderDiscardSessionModal.vue48
-rw-r--r--components/loader/LoaderFileSystemButton.vue2
-rw-r--r--components/loader/LoaderImportButton.vue9
-rw-r--r--components/loader/LoaderNetworkButton.vue8
-rw-r--r--components/loader/LoaderTestDataButton.vue2
7 files changed, 91 insertions, 5 deletions
diff --git a/components/base/Button.vue b/components/base/Button.vue
index c7f7c50..827e201 100644
--- a/components/base/Button.vue
+++ b/components/base/Button.vue
@@ -5,6 +5,11 @@ const props = defineProps({
required: false,
default: 'text',
},
+ accent: {
+ type: String,
+ required: false,
+ default: 'normal',
+ },
label: String,
icon: Array<String>,
disabled: Boolean,
@@ -20,7 +25,8 @@ const onClick = (event: MouseEvent) => {
</script>
<template>
- <a id="button" :class="{ text: type === 'text', solid: type === 'solid', disabled: disabled }" @click.stop="onClick">
+ <a id="button" :class="{ text: type === 'text', solid: type === 'solid', disabled: disabled, [accent]: true }"
+ @click.stop="onClick">
<font-awesome-icon :icon="icon" />
{{ label }}
</a>
@@ -55,6 +61,22 @@ const onClick = (event: MouseEvent) => {
}
}
+.text.danger {
+ color: var(--color-false);
+
+ &:hover {
+ color: var(--color-false-hover)
+ }
+}
+
+.solid.danger {
+ background-color: var(--color-false);
+
+ &:hover {
+ background-color: var(--color-false-hover);
+ }
+}
+
.solid {
background-color: var(--color-primary);
transition: background-color 0.3s;
diff --git a/components/header/SiteHeader.vue b/components/header/SiteHeader.vue
index 015af3d..afd85b8 100644
--- a/components/header/SiteHeader.vue
+++ b/components/header/SiteHeader.vue
@@ -15,8 +15,7 @@ const navigateHome = () => {
</div>
<div id="controls">
- <LoaderTestDataButton />
- <LoaderFileSystemButton />
+ <LoaderImportButton />
</div>
</header>
</template>
diff --git a/components/loader/LoaderDiscardSessionModal.vue b/components/loader/LoaderDiscardSessionModal.vue
new file mode 100644
index 0000000..845b10a
--- /dev/null
+++ b/components/loader/LoaderDiscardSessionModal.vue
@@ -0,0 +1,48 @@
+<script setup lang="ts">
+const session = useSessionStore();
+
+const showModal = ref(false);
+
+const open = () => {
+ showModal.value = true;
+}
+
+const confirm = () => {
+ session.setQuests([]);
+ session.setCategories([]);
+ session.setItems([]);
+ session.setSessionType('none');
+
+ navigateToEditorPane(null);
+
+ showModal.value = false;
+}
+
+defineExpose({
+ open
+})
+</script>
+
+<template>
+ <Modal v-model="showModal">
+ <template v-slot:header>
+ <h2>Discard current session</h2>
+ </template>
+
+ <p>You are about to discard your current session. All changes will be lost.
+ Do you want to continue?</p>
+
+ <div id="controls" class="control-group">
+ <Button :icon="['fas', 'xmark']" :label="'Cancel'" @click="showModal = false"></Button>
+ <Button type="solid" accent="danger" :icon="['fas', 'trash']" :label="'Confirm'" @click="confirm"></Button>
+ </div>
+ </Modal>
+</template>
+
+<style scoped>
+#controls {
+ display: flex;
+ justify-content: flex-end;
+ margin-top: 1rem;
+}
+</style> \ No newline at end of file
diff --git a/components/loader/LoaderFileSystemButton.vue b/components/loader/LoaderFileSystemButton.vue
index 0d02477..3a70860 100644
--- a/components/loader/LoaderFileSystemButton.vue
+++ b/components/loader/LoaderFileSystemButton.vue
@@ -32,7 +32,7 @@ const openFileSystemPrompt = async () => {
<template>
<ClientOnly>
- <Button type="solid" :icon="['fas', 'folder-open']" label="Import from Filesystem" @click="openFileSystemPrompt"
+ <Button type="solid" :icon="['fas', 'folder-open']" label="Load" @click="openFileSystemPrompt"
:disabled="!canUseFsApi" />
<LoaderFileSystemModal ref="fileSystemModal" />
diff --git a/components/loader/LoaderImportButton.vue b/components/loader/LoaderImportButton.vue
new file mode 100644
index 0000000..48bcb8d
--- /dev/null
+++ b/components/loader/LoaderImportButton.vue
@@ -0,0 +1,9 @@
+<script setup lang="ts">
+const navigateToImport = async () => {
+ navigateTo('/import');
+}
+</script>
+
+<template>
+ <Button type="solid" :icon="['fas', 'file-import']" label="Import" @click="navigateToImport" />
+</template> \ No newline at end of file
diff --git a/components/loader/LoaderNetworkButton.vue b/components/loader/LoaderNetworkButton.vue
new file mode 100644
index 0000000..3364597
--- /dev/null
+++ b/components/loader/LoaderNetworkButton.vue
@@ -0,0 +1,8 @@
+<script setup lang="ts">
+</script>
+
+<template>
+ <ClientOnly>
+ <Button type="solid" :icon="['fas', 'download']" label="Download" :disabled="true" />
+ </ClientOnly>
+</template> \ No newline at end of file
diff --git a/components/loader/LoaderTestDataButton.vue b/components/loader/LoaderTestDataButton.vue
index b01b0ee..1e648d6 100644
--- a/components/loader/LoaderTestDataButton.vue
+++ b/components/loader/LoaderTestDataButton.vue
@@ -10,7 +10,7 @@ const openTestDataModal = async () => {
<template>
<ClientOnly>
- <Button :icon="['fas', 'flask-vial']" label="Demo" @click="openTestDataModal" />
+ <Button type="solid" :icon="['fas', 'flask-vial']" label="Demo" @click="openTestDataModal" />
<LoaderTestDataModal ref="testDataModal" />
</ClientOnly>