generated from Seekra/repository-template
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69dab6c3eb
|
||
|
|
53b8546983
|
||
|
|
88fb3bfcd0
|
@@ -16,7 +16,7 @@ limitations under the License.
|
||||
|
||||
<script setup>
|
||||
import { useSettingsStore } from '../stores/settingsStore';
|
||||
import { ref, useId, watch } from 'vue';
|
||||
import { useId } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
const { t } = useI18n();
|
||||
@@ -35,16 +35,8 @@ const switchId = useId();
|
||||
|
||||
const store = useSettingsStore();
|
||||
|
||||
const enabled = ref(null);
|
||||
watch(store, (newStore) => {
|
||||
enabled.value = newStore.get(props.path);
|
||||
});
|
||||
// set value after registering watcher to avoid immediate value change
|
||||
enabled.value = store.get(props.path) ?? props.setting.default;
|
||||
|
||||
const toggle = function toggle () {
|
||||
enabled.value = !enabled.value;
|
||||
store.set(props.path, enabled.value);
|
||||
store.set(props.path, !store.get(props.path));
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -55,7 +47,7 @@ const toggle = function toggle () {
|
||||
</label>
|
||||
<div
|
||||
class="switch-wrapper"
|
||||
:class="{ enabled }"
|
||||
:class="{ enabled: store.get(props.path) }"
|
||||
:title="t('settings.switch.title')"
|
||||
:aria-label="t('settings.switch.ariaLabel')"
|
||||
:aria-labelledby="labelId"
|
||||
|
||||
@@ -20,23 +20,17 @@ import { useSettingsStore } from '../../stores/settingsStore.js';
|
||||
import { expect, describe, test } from 'vitest';
|
||||
import { nextTick } from 'vue';
|
||||
|
||||
const getWrapper = function getWrapper ({
|
||||
i18n = 'switch1',
|
||||
defaultValue = undefined,
|
||||
translations = {},
|
||||
piniaOptions = {}
|
||||
} = {}) {
|
||||
const getWrapper = function getWrapper ({ i18n = 'switch1', translations = {} } = {}) {
|
||||
return mountComponent(Switch, {
|
||||
attrs: {
|
||||
setting: {
|
||||
type: 'bool',
|
||||
name: 'switch',
|
||||
i18n,
|
||||
default: defaultValue
|
||||
i18n
|
||||
},
|
||||
path: 'switch'
|
||||
}
|
||||
}, translations, [], piniaOptions);
|
||||
}, translations);
|
||||
};
|
||||
|
||||
describe('Switch', () => {
|
||||
@@ -59,42 +53,6 @@ describe('Switch', () => {
|
||||
expect(switchElementClasses2).not.toContain('enabled');
|
||||
});
|
||||
|
||||
test('shows default value', () => {
|
||||
const wrapper = getWrapper({
|
||||
defaultValue: true
|
||||
});
|
||||
|
||||
const switchElement = wrapper.find('.switch-wrapper');
|
||||
expect(switchElement.classes('enabled')).toBeTruthy();
|
||||
});
|
||||
|
||||
test('shows stored value instead of default value', () => {
|
||||
const wrapper = getWrapper({
|
||||
defaultValue: true,
|
||||
piniaOptions: {
|
||||
setupStores: () => {
|
||||
const store = useSettingsStore();
|
||||
store.set('switch', false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const switchElement = wrapper.find('.switch-wrapper');
|
||||
expect(switchElement.classes('enabled')).toBeFalsy();
|
||||
});
|
||||
|
||||
test('reacts on store change', async () => {
|
||||
const wrapper = getWrapper();
|
||||
const store = useSettingsStore();
|
||||
|
||||
const switchElement = wrapper.find('.switch-wrapper');
|
||||
expect(switchElement.classes('enabled')).toBeFalsy();
|
||||
|
||||
store.set('switch', true);
|
||||
await nextTick();
|
||||
expect(switchElement.classes('enabled')).toBeTruthy();
|
||||
});
|
||||
|
||||
test('toggles value in store', async () => {
|
||||
const wrapper = getWrapper();
|
||||
|
||||
|
||||
@@ -61,10 +61,6 @@ onMounted(async () => {
|
||||
});
|
||||
settingsLoaded.value = true;
|
||||
});
|
||||
|
||||
const toggleSidebarIfSmallScreen = function toggleSidebarIfSmallScreen (toggleSidebarFunction) {
|
||||
if (matchMedia('(max-width: 48rem)').matches) toggleSidebarFunction();
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -75,14 +71,13 @@ const toggleSidebarIfSmallScreen = function toggleSidebarIfSmallScreen (toggleSi
|
||||
</h1>
|
||||
</header>
|
||||
<LeftSidebarLayout class="layout">
|
||||
<template #sidebar="{ toggleSidebar }">
|
||||
<template #sidebar>
|
||||
<ul class="sidebar-sections-list">
|
||||
<li v-for="section in settings">
|
||||
<RouterLink
|
||||
:to="`/settings/${section.name}`"
|
||||
class="button button-link link sidebar-section"
|
||||
:class="{ active: activeSection === section.name }"
|
||||
@click="toggleSidebarIfSmallScreen(toggleSidebar)"
|
||||
>
|
||||
{{ t(section.i18n) }}
|
||||
</RouterLink>
|
||||
|
||||
@@ -61,10 +61,6 @@ const toggleSidebar = function toggleSidebar () {
|
||||
}
|
||||
|
||||
@media (max-width: 48rem) {
|
||||
.sidebar {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.sidebar:not(.expanded) .sidebar-expand-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ const props = defineProps({
|
||||
|
||||
const expanded = ref(props.expanded);
|
||||
|
||||
const toggleSidebar = function toggleSidebar () {
|
||||
const toggleExpanded = function toggleExpanded () {
|
||||
expanded.value = !expanded.value;
|
||||
};
|
||||
</script>
|
||||
@@ -37,13 +37,13 @@ const toggleSidebar = function toggleSidebar () {
|
||||
<template>
|
||||
<div class="layout-container" :class="{ expanded }">
|
||||
<div class="sidebar-expand-button-container">
|
||||
<SidebarExpandButton class="sidebar-expand-button" @click="toggleSidebar" />
|
||||
<SidebarExpandButton class="sidebar-expand-button" @click="toggleExpanded" />
|
||||
</div>
|
||||
<Sidebar @toggle-expanded="toggleSidebar" :expanded="expanded" class="sidebar">
|
||||
<slot name="sidebar" :toggleSidebar="toggleSidebar" />
|
||||
<Sidebar @toggle-expanded="toggleExpanded" :expanded="expanded" class="sidebar">
|
||||
<slot name="sidebar" />
|
||||
</Sidebar>
|
||||
<main class="main-content">
|
||||
<slot :toggleSidebar="toggleSidebar" />
|
||||
<slot />
|
||||
</main>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -86,9 +86,4 @@ input {
|
||||
|
||||
.button:hover {
|
||||
background-color: var(--light-hover);
|
||||
}
|
||||
|
||||
/* Temporary until a custom tap highlight is implemented. */
|
||||
* {
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
Reference in New Issue
Block a user