fix: use actual local platform ID to resolve linked ROS settings
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "lms",
|
"name": "lms",
|
||||||
"version": "1.2.5",
|
"version": "1.2.6",
|
||||||
"description": "Autonomy Studio LMS Electron app",
|
"description": "Autonomy Studio LMS Electron app",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
const { test } = require('node:test')
|
||||||
|
const assert = require('node:assert/strict')
|
||||||
|
const fs = require('node:fs')
|
||||||
|
const vm = require('node:vm')
|
||||||
|
const ts = require('typescript')
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
const data = new Map()
|
||||||
|
const exports = {}
|
||||||
|
vm.runInNewContext(ts.transpileModule(fs.readFileSync(require.resolve('../src/renderer/src/features/workspace/sourceSettings.ts'), 'utf8'), {
|
||||||
|
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022 },
|
||||||
|
}).outputText, {
|
||||||
|
exports,
|
||||||
|
require: () => ({ STUDIO_SOURCE_SETTINGS_STORAGE_KEY: 'test-settings' }),
|
||||||
|
window: { localStorage: { getItem: key => data.get(key) ?? null, setItem: (key, value) => data.set(key, value) } },
|
||||||
|
})
|
||||||
|
return exports
|
||||||
|
}
|
||||||
|
|
||||||
|
test('remote workspace reads local domain and linked platform by actual platform ID', () => {
|
||||||
|
const api = setup()
|
||||||
|
api.storeStudioSourceSettings('local-platform-uuid', { ...api.defaultStudioSourceSettings, rosDomainId: '75', rosLinkedPlatformId: 'yahboom-uuid' })
|
||||||
|
const result = api.readLocalStudioSourceSettings([
|
||||||
|
{ id: 'yahboom-uuid', platformKey: 'yahboom', sourceSettings: { rosDomainId: '77' } },
|
||||||
|
{ id: 'local-platform-uuid', platformKey: 'futuredrive-local-pc' },
|
||||||
|
])
|
||||||
|
assert.equal(result.rosDomainId, '75')
|
||||||
|
assert.equal(result.rosLinkedPlatformId, 'yahboom-uuid')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('local platform defaults and unlinked selection are preserved', () => {
|
||||||
|
const api = setup()
|
||||||
|
const platforms = [{ id: 'local-platform-uuid', platformKey: 'futuredrive-local-pc', sourceSettings: { rosDomainId: '76' } }]
|
||||||
|
assert.equal(api.readLocalStudioSourceSettings(platforms).rosDomainId, '76')
|
||||||
|
api.storeStudioSourceSettings('local-platform-uuid', { ...api.defaultStudioSourceSettings, rosDomainId: '75', rosLinkedPlatformId: null })
|
||||||
|
assert.equal(api.readLocalStudioSourceSettings(platforms).rosLinkedPlatformId, null)
|
||||||
|
})
|
||||||
@@ -72,7 +72,7 @@ import { useWorkspaceVisualization } from './features/workspace/useWorkspaceVisu
|
|||||||
import { makeModuleParameterKey, readStoredModuleParameters, serializeModuleParameters } from './features/workspace/moduleParameters'
|
import { makeModuleParameterKey, readStoredModuleParameters, serializeModuleParameters } from './features/workspace/moduleParameters'
|
||||||
import { parseHostFromUrl, readNestedString } from './features/workspace/remoteWorkspaceTarget'
|
import { parseHostFromUrl, readNestedString } from './features/workspace/remoteWorkspaceTarget'
|
||||||
import { resolveRuntimeModules } from './features/workspace/runtimeModuleSet'
|
import { resolveRuntimeModules } from './features/workspace/runtimeModuleSet'
|
||||||
import { defaultStudioSourceSettings, makePlatformWorkspaceRoot, makeTeamWeekWorkspaceRoot, makeWeekWorkspaceRoot, normalizeStudioSourceSettings, readStudioSourceSettings, storeStudioSourceSettings } from './features/workspace/sourceSettings'
|
import { defaultStudioSourceSettings, makePlatformWorkspaceRoot, makeTeamWeekWorkspaceRoot, makeWeekWorkspaceRoot, normalizeStudioSourceSettings, readLocalStudioSourceSettings, readStudioSourceSettings, storeStudioSourceSettings } from './features/workspace/sourceSettings'
|
||||||
import { makeWorkspaceUiSessionKey, readStudioRuntimeSessionState, storeStudioRuntimeSessionState } from './features/workspace/studioRuntimeSession'
|
import { makeWorkspaceUiSessionKey, readStudioRuntimeSessionState, storeStudioRuntimeSessionState } from './features/workspace/studioRuntimeSession'
|
||||||
import type { StudioRuntimeSessionState } from './features/workspace/studioRuntimeSession'
|
import type { StudioRuntimeSessionState } from './features/workspace/studioRuntimeSession'
|
||||||
import type { ModuleRow, RosNetworkConfig, RuntimeImageArtifact } from './features/workspace/types'
|
import type { ModuleRow, RosNetworkConfig, RuntimeImageArtifact } from './features/workspace/types'
|
||||||
@@ -567,8 +567,8 @@ function LocalPcWorkspaceMockup({
|
|||||||
const [sourceSettings, setSourceSettings] = useState<StudioSourceSettings>(() => readStudioSourceSettings(platformId, platformSourceSettingsDefaults))
|
const [sourceSettings, setSourceSettings] = useState<StudioSourceSettings>(() => readStudioSourceSettings(platformId, platformSourceSettingsDefaults))
|
||||||
const [sourceSettingsDraft, setSourceSettingsDraft] = useState<StudioSourceSettings>(() => readStudioSourceSettings(platformId, platformSourceSettingsDefaults))
|
const [sourceSettingsDraft, setSourceSettingsDraft] = useState<StudioSourceSettings>(() => readStudioSourceSettings(platformId, platformSourceSettingsDefaults))
|
||||||
const localWorkspaceSettings = useMemo(
|
const localWorkspaceSettings = useMemo(
|
||||||
() => readStudioSourceSettings('futuredrive-local-pc', defaultStudioSourceSettings),
|
() => remoteWorkspace ? readLocalStudioSourceSettings(platformOptions) : sourceSettings,
|
||||||
[platformId, sourceSettings.rosLinkedPlatformId, sourceSettings.rosDomainId, sourceSettings.visualizationBridgeLocation],
|
[remoteWorkspace, platformOptions, sourceSettings],
|
||||||
)
|
)
|
||||||
const linkedPlatformId = remoteWorkspace
|
const linkedPlatformId = remoteWorkspace
|
||||||
? localWorkspaceSettings.rosLinkedPlatformId
|
? localWorkspaceSettings.rosLinkedPlatformId
|
||||||
|
|||||||
@@ -95,3 +95,12 @@ export function storeStudioSourceSettings(platformId: string, settings: StudioSo
|
|||||||
// Local source settings can be re-entered if persistence is unavailable.
|
// Local source settings can be re-entered if persistence is unavailable.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function readLocalStudioSourceSettings(platforms: Array<{
|
||||||
|
id: string
|
||||||
|
platformKey: string
|
||||||
|
sourceSettings?: Partial<StudioSourceSettings> | null
|
||||||
|
}>): StudioSourceSettings {
|
||||||
|
const local = platforms.find((platform) => platform.platformKey === 'futuredrive-local-pc')
|
||||||
|
return readStudioSourceSettings(local?.id ?? 'local-pc', normalizeStudioSourceSettings(local?.sourceSettings))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user