Как добавить настройку
Настройки бывают двух видов. Почти каждая новая это предпочтение: одно поле в проверяемом объекте JSON, который
хранится в settings.preferences_json. Миграция для него не нужна.
Предпочтение
- Схема. Добавьте поле в его раздел в
preferencesSchema,src/shared/config/preferences.ts, со значением по умолчанию:z.boolean().default(false), перечисление илиint(RANGE)с константой{ min, max, default }рядом с остальными. Сохранённая строка без поля читает значение по умолчанию, поэтому старые профили продолжают работать. - Элемент управления. Добавьте его в компонент раздела в
src/renderer/components/settings/sections/, напримерSwitchсpatchSection(setPrefs, 'assistant', { yourField: next }). Берите элементы дизайн-системы (Switch,NumberField,SelectField,RadioCards). - Тексты. Подпись и при нужде подсказка в
preferences.*вsrc/shared/i18n/catalog.tsна обоих языках. Пишите, что меняется для человека, а не как устроен код. - Где используется. Читайте её там, где она нужна: в main через
readPreferences(getDatabase()), в renderer черезsrc/renderer/state/preferencesState.ts. - Когда применяется. Большинство настроек применяется по «Сохранить»; если нужно сразу, скажите это в подсказке.
- Тесты.
tests/unit/preferences.test.ts(значение по умолчанию, диапазон, сохранённая строка без поля) иtests/unit/preferencesRenderer.test.ts, если её читает окно.tests/e2e/preferences.test.tsпроверяет окно. - Вики. Строка настройки на странице Все настройки и на странице её
раздела в
docs/wiki/interface/Settings-*.md, на обоих языках. Если она отправляет что-то с компьютера, ещё и Приватность.
Столбец в строке настроек
Только для значения, которое нужно прочитать раньше предпочтений (например, язык или адрес с особой проверкой). Нужны
миграция (База данных и миграции), поле в nonSecretSettingsSchema (src/shared/config/schema.ts)
и его значение по умолчанию в nonSecretDefaults.
Никогда не секрет
Ключ, пароль или токен никогда не бывают настройкой. Схема настроек отклоняет значения, похожие на них («В настройки
нельзя записать ключ или пароль»). Секреты идут через хранилища ключей и токенов в src/main/settings/.