From 6abc35e2fc31c452bfde5087ca4a7973c468e5e9 Mon Sep 17 00:00:00 2001 From: Kevin Date: Mon, 23 Jun 2025 14:02:39 -0500 Subject: [PATCH] fix: saving off work --- e2e/playwright/basic-sketch.spec.ts | 14 ++++++++++++++ e2e/playwright/storageStates.ts | 6 +++++- e2e/playwright/test-utils.ts | 4 ---- rust/kcl-lib/src/settings/types/mod.rs | 2 +- src/lang/langHelpers.ts | 3 +++ src/lib/desktop.ts | 3 +++ src/lib/paths.ts | 2 ++ src/lib/settings/initialSettings.tsx | 12 ++++++++++++ src/lib/settings/settingsUtils.ts | 24 ++++++++++++++++++++++-- src/machines/settingsMachine.ts | 1 + 10 files changed, 63 insertions(+), 8 deletions(-) diff --git a/e2e/playwright/basic-sketch.spec.ts b/e2e/playwright/basic-sketch.spec.ts index 944b97746..67014f4f7 100644 --- a/e2e/playwright/basic-sketch.spec.ts +++ b/e2e/playwright/basic-sketch.spec.ts @@ -9,6 +9,7 @@ import { TEST_COLORS, commonPoints, getUtils, + enableConsoleLogEverything, } from '@e2e/playwright/test-utils' import { expect, test } from '@e2e/playwright/zoo-test' @@ -178,7 +179,19 @@ test.describe('Basic sketch', () => { cmdBar, scene, editor, + tronApp, }) => { + // await tronApp.cleanProjectDir({ + // app: { + // appearance: { + // theme: 'light', + // }, + // }, + // }) + enableConsoleLogEverything({ + page, + tronApp, + }) await doBasicSketch(page, ['code'], { cmdBar, scene, homePage, editor }) }) @@ -188,6 +201,7 @@ test.describe('Basic sketch', () => { cmdBar, scene, editor, + tronApp, }) => { // Load the app with the code panes await page.addInitScript(async (persistModelingContext) => { diff --git a/e2e/playwright/storageStates.ts b/e2e/playwright/storageStates.ts index 310ffa3f5..7d812366d 100644 --- a/e2e/playwright/storageStates.ts +++ b/e2e/playwright/storageStates.ts @@ -8,10 +8,14 @@ export const TEST_SETTINGS_KEY = '/settings.toml' export const TEST_SETTINGS: DeepPartial = { app: { appearance: { - theme: Themes.Dark, + theme: Themes.Light, }, onboarding_status: 'dismissed', show_debug_panel: true, + // Tests were written before this setting existed. + // It's true by default because it's a good user experience, but + // these tests require it to be false. + fixed_size_grid: false, }, modeling: { enable_ssao: false, diff --git a/e2e/playwright/test-utils.ts b/e2e/playwright/test-utils.ts index e613c4f5b..56c62ddbe 100644 --- a/e2e/playwright/test-utils.ts +++ b/e2e/playwright/test-utils.ts @@ -880,10 +880,6 @@ export async function setup( }, ...TEST_SETTINGS.project, onboarding_status: 'dismissed', - // Tests were written before this setting existed. - // It's true by default because it's a good user experience, but - // these tests require it to be false. - fixed_size_grid: false, }, project: { ...TEST_SETTINGS.project, diff --git a/rust/kcl-lib/src/settings/types/mod.rs b/rust/kcl-lib/src/settings/types/mod.rs index a3a0a45d6..5602ba267 100644 --- a/rust/kcl-lib/src/settings/types/mod.rs +++ b/rust/kcl-lib/src/settings/types/mod.rs @@ -67,6 +67,7 @@ pub struct Settings { #[derive(Debug, Default, Clone, Deserialize, Serialize, JsonSchema, ts_rs::TS, PartialEq, Validate)] #[ts(export)] #[serde(rename_all = "snake_case")] +#[serde(deny_unknown_fields)] pub struct AppSettings { /// The settings for the appearance of the app. #[serde(default, skip_serializing_if = "is_default")] @@ -96,7 +97,6 @@ pub struct AppSettings { pub show_debug_panel: bool, /// If true, the grid cells will be fixed-size, where the width is the user's default length unit. /// If false, the grid's size will scale as the user zooms in and out. - #[serde(default = "make_it_so", skip_serializing_if = "is_default")] pub fixed_size_grid: bool, } diff --git a/src/lang/langHelpers.ts b/src/lang/langHelpers.ts index 61cbe8c3c..72d9baff4 100644 --- a/src/lang/langHelpers.ts +++ b/src/lang/langHelpers.ts @@ -69,7 +69,10 @@ export async function executeAst({ path?: string }): Promise { try { + console.log('YOLO') const settings = await jsAppSettings() + + console.log('LANG HELPERS', JSON.stringify(settings, null, 4)) const execState = await rustContext.execute(ast, settings, path) await rustContext.waitForAllEngineCommands() diff --git a/src/lib/desktop.ts b/src/lib/desktop.ts index 5899710bc..20b87fc49 100644 --- a/src/lib/desktop.ts +++ b/src/lib/desktop.ts @@ -626,6 +626,7 @@ export const readAppSettingsFile = async () => { const configToml = await window.electron.readFile(settingsPath, { encoding: 'utf-8', }) + console.log('config toml', JSON.stringify(configToml, null, 4)) const parsedAppConfig = parseAppSettings(configToml) if (err(parsedAppConfig)) { return Promise.reject(parsedAppConfig) @@ -635,6 +636,7 @@ export const readAppSettingsFile = async () => { parsedAppConfig.settings?.project?.directory if (hasProjectDirectorySetting) { + console.log('parsed app config', JSON.stringify(parsedAppConfig, null, 4)) return parsedAppConfig } else { // inject the default project directory setting @@ -671,6 +673,7 @@ export const readAppSettingsFile = async () => { ), }, } + console.log('MERGED', JSON.stringify(mergedDefaultConfig, null, 4)) return mergedDefaultConfig } diff --git a/src/lib/paths.ts b/src/lib/paths.ts index 42a89c3e5..dbe3aef8d 100644 --- a/src/lib/paths.ts +++ b/src/lib/paths.ts @@ -51,6 +51,8 @@ export async function getProjectMetaByRouteId( : readLocalStorageAppSettingsFile() } + console.log('TEST SETTINGS UTILS', JSON.stringify(configuration, null, 4)) + if (err(configuration)) return Promise.reject(configuration) // Should not be possible but I guess logically it could be diff --git a/src/lib/settings/initialSettings.tsx b/src/lib/settings/initialSettings.tsx index 0c2135d6e..d206a0e7e 100644 --- a/src/lib/settings/initialSettings.tsx +++ b/src/lib/settings/initialSettings.tsx @@ -257,6 +257,18 @@ export function createSettings() { description: 'Toggle free camera while in sketch mode', validate: (v) => typeof v === 'boolean', }), + /** + * Fixed size grid + */ + fixedSizeGrid: new Setting({ + defaultValue: true, + hideOnLevel:'project', + description: 'If true, grid will be a 10x10 grid where each cell is the size of your default length unit. If false, the grid will get bigger as you zoom out and smaller as you zoom in.', + validate: (v) => typeof v === 'boolean', + commandConfig: { + inputType: 'boolean', + }, + }), onboardingStatus: new Setting({ defaultValue: '', // TODO: this could be better but we don't have a TS side real enum diff --git a/src/lib/settings/settingsUtils.ts b/src/lib/settings/settingsUtils.ts index bda3e9f7d..e2494411a 100644 --- a/src/lib/settings/settingsUtils.ts +++ b/src/lib/settings/settingsUtils.ts @@ -51,6 +51,7 @@ const toUndefinedIfNull = (a: any): OmitNull => export function configurationToSettingsPayload( configuration: DeepPartial ): DeepPartial { + console.log('configuration', configuration) return { app: { theme: appThemeToTheme(configuration?.settings?.app?.appearance?.theme), @@ -66,6 +67,7 @@ export function configurationToSettingsPayload( configuration?.settings?.app?.allow_orbit_in_sketch_mode, projectDirectory: configuration?.settings?.project?.directory, showDebugPanel: configuration?.settings?.app?.show_debug_panel, + fixedSizeGrid: configuration.settings?.app?.fixed_size_grid }, modeling: { defaultUnit: configuration?.settings?.modeling?.base_unit, @@ -109,6 +111,7 @@ export function settingsPayloadToConfiguration( stream_idle_mode: configuration?.app?.streamIdleMode, allow_orbit_in_sketch_mode: configuration?.app?.allowOrbitInSketchMode, show_debug_panel: configuration?.app?.showDebugPanel, + fixed_size_grid: configuration?.app?.fixedSizeGrid }, modeling: { base_unit: configuration?.modeling?.defaultUnit, @@ -327,11 +330,13 @@ export async function loadAndValidateSettings( settingsNext.app.projectDirectory.default = await getInitialDefaultDir() } + console.log("FUCK", appSettingsPayload) settingsNext = setSettingsAtLevel( settingsNext, 'user', configurationToSettingsPayload(appSettingsPayload) ) + console.log("FUCK2", settingsNext) // Load the project settings if they exist if (projectPath) { @@ -365,10 +370,14 @@ export async function saveSettings( await initPromise const onDesktop = isDesktop() + console.log('all settings', allSettings) // Get the user settings. const jsAppSettings = getChangedSettingsAtLevel(allSettings, 'user') + const DOG = settingsPayloadToConfiguration(jsAppSettings) + console.log('CAT',jsAppSettings) + console.log("DOG", DOG) const appTomlString = serializeConfiguration( - settingsPayloadToConfiguration(jsAppSettings) + DOG ) if (err(appTomlString)) return @@ -542,15 +551,26 @@ export function getSettingInputType(setting: Setting) { } export const jsAppSettings = async (): Promise> => { + console.log("HERE!!!") let jsAppSettings = default_app_settings() + console.log('old', JSON.stringify(jsAppSettings, null, 4)) + console.log("NOT HERE!!!") if (!TEST) { // TODO: https://github.com/KittyCAD/modeling-app/issues/6445 const settings = await import('@src/lib/singletons').then((module) => module.getSettings() - ) + ) + console.log('here1', settings) if (settings) { + console.log('here2', settings) jsAppSettings = getAllCurrentSettings(settings) + console.log('here3') + + console.log('JS APP SETTINGS', jsAppSettings) + console.log('JS APP SETTINGS', settings) } + } + console.log('here4') return settingsPayloadToConfiguration(jsAppSettings) } diff --git a/src/machines/settingsMachine.ts b/src/machines/settingsMachine.ts index 6e77a9a74..04e2ce1c1 100644 --- a/src/machines/settingsMachine.ts +++ b/src/machines/settingsMachine.ts @@ -98,6 +98,7 @@ export const settingsMachine = setup({ input.rootContext.codeManager.writeCausedByAppCheckedInFileTreeFileSystemWatcher = true const { currentProject, ...settings } = input.context + console.log('huh', settings) const val = await saveSettings(settings, currentProject?.path) if (input.toastCallback) {