From 3dd9eded41edf897c5276fbf3436ab482f0405a0 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Thu, 6 Aug 2026 23:52:29 +0200 Subject: [PATCH] feature(settings)!: make settings configuration a JavaScript module The settings configuration is now a JavaScript module because dynamic configuration is only possible in this way and dynamic settings configuration is needed for the language as a setting. --- .../composables/__tests__/useSettings.test.js | 2 +- .../settings/composables/useSettings.js | 2 +- src/features/settings/config.js | 46 +++++++++++++++++++ src/features/settings/settings.json | 30 ------------ src/features/settings/views/SettingsView.vue | 2 +- .../views/__tests__/SettingsView.test.js | 2 +- src/main.js | 2 +- 7 files changed, 51 insertions(+), 35 deletions(-) create mode 100644 src/features/settings/config.js delete mode 100644 src/features/settings/settings.json diff --git a/src/features/settings/composables/__tests__/useSettings.test.js b/src/features/settings/composables/__tests__/useSettings.test.js index aec200d..5bbda77 100644 --- a/src/features/settings/composables/__tests__/useSettings.test.js +++ b/src/features/settings/composables/__tests__/useSettings.test.js @@ -22,7 +22,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest'; const settingDefaultValue = vi.hoisted(() => 42); const settingPath = ['test', 'number']; -vi.mock('../../settings.json', () => ({ +vi.mock('../../config.js', () => ({ default: { contents: [ { diff --git a/src/features/settings/composables/useSettings.js b/src/features/settings/composables/useSettings.js index 8c469a6..c42ef99 100644 --- a/src/features/settings/composables/useSettings.js +++ b/src/features/settings/composables/useSettings.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import settings from '../settings.json'; +import settings from '../config.js'; import { useSettingsStore } from '../stores/settingsStore'; import { getSettingRecursively } from '../utils/getSetting'; diff --git a/src/features/settings/config.js b/src/features/settings/config.js new file mode 100644 index 0000000..cebce17 --- /dev/null +++ b/src/features/settings/config.js @@ -0,0 +1,46 @@ +/* +Copyright 2026 Seekra + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +export default { + contents: [ + { + name: 'appearance', + i18n: 'settings.settings.appearance.title', + content: [ + { + name: 'colorScheme', + type: 'selection', + i18n: 'settings.settings.appearance.contents.colorScheme.title', + default: 'auto', + options: [ + { + name: 'auto', + i18n: 'settings.settings.appearance.contents.colorScheme.options.auto' + }, + { + name: 'light', + i18n: 'settings.settings.appearance.contents.colorScheme.options.light' + }, + { + name: 'dark', + i18n: 'settings.settings.appearance.contents.colorScheme.options.dark' + } + ] + } + ] + } + ] +}; diff --git a/src/features/settings/settings.json b/src/features/settings/settings.json deleted file mode 100644 index 76a4f69..0000000 --- a/src/features/settings/settings.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "contents": [ - { - "name": "appearance", - "i18n": "settings.settings.appearance.title", - "content": [ - { - "name": "colorScheme", - "type": "selection", - "i18n": "settings.settings.appearance.contents.colorScheme.title", - "default": "auto", - "options": [ - { - "name": "auto", - "i18n": "settings.settings.appearance.contents.colorScheme.options.auto" - }, - { - "name": "light", - "i18n": "settings.settings.appearance.contents.colorScheme.options.light" - }, - { - "name": "dark", - "i18n": "settings.settings.appearance.contents.colorScheme.options.dark" - } - ] - } - ] - } - ] -} diff --git a/src/features/settings/views/SettingsView.vue b/src/features/settings/views/SettingsView.vue index d241ee9..538dfc2 100644 --- a/src/features/settings/views/SettingsView.vue +++ b/src/features/settings/views/SettingsView.vue @@ -18,7 +18,7 @@ limitations under the License. import LeftSidebarLayout from '@/layouts/LeftSidebarLayout.vue'; import SettingsPage from '../components/SettingsPage.vue'; -import settingsConfiguration from '../settings.json'; +import settingsConfiguration from '../config.js'; import { getSettingRecursively } from '../utils/getSetting.js'; import { computed, onMounted, ref, watch } from 'vue'; import { useI18n } from 'vue-i18n'; diff --git a/src/features/settings/views/__tests__/SettingsView.test.js b/src/features/settings/views/__tests__/SettingsView.test.js index 446f3a1..4a49a6f 100644 --- a/src/features/settings/views/__tests__/SettingsView.test.js +++ b/src/features/settings/views/__tests__/SettingsView.test.js @@ -197,7 +197,7 @@ const settings = settingsHoisted.values(); const originalCurrentSection = 's0'; let currentSection = originalCurrentSection; -vi.mock('../../settings.json', () => ({ +vi.mock('../../config.js', () => ({ default: { contents: settingsHoisted } })); diff --git a/src/main.js b/src/main.js index d7efce6..1b54fcb 100644 --- a/src/main.js +++ b/src/main.js @@ -30,7 +30,7 @@ import rawFonts from './styles/fonts.json'; import './styles/common.css'; import './styles/variables/colors.css'; -import settings from './features/settings/settings.json'; +import settings from './features/settings/config.js'; import { validateSettingsConfig } from './features/settings/utils/settingsValidator'; (async () => {