mirror of
https://github.com/enso-org/enso.git
synced 2025-01-05 15:42:52 +03:00
8edf49343f
fixes #9730 Added a `logEvent` method to remote backend implementation in dashboard. Added an always-present remote backend instance that can be used for logging even when running a local project (intentional behavior). # Important Notes Because the backend implementation requires access to always fresh session token, the logger needs to be periodically updated on GUI side, so it can continue to function. To accomplish that, I simplified the app loading logic to treat GUI as an ordinary react component, so its props can be updated with normal react rendering flow. That refactor also removed the dynamic GUI asset loading code that was only needed for Rust GUI.
124 lines
4.0 KiB
TypeScript
124 lines
4.0 KiB
TypeScript
import '@/assets/base.css'
|
|
import { provideGuiConfig } from '@/providers/guiConfig'
|
|
import { provideVisualizationConfig } from '@/providers/visualizationConfig'
|
|
import { Vec2 } from '@/util/data/vec2'
|
|
import { MockTransport } from '@/util/net'
|
|
import type { QualifiedName } from '@/util/qualifiedName'
|
|
import { defineSetupVue3 } from '@histoire/plugin-vue'
|
|
import * as random from 'lib0/random'
|
|
import type { LibraryComponentGroup, Uuid, response } from 'shared/languageServerTypes'
|
|
import type {
|
|
SuggestionEntry,
|
|
SuggestionsDatabaseUpdate,
|
|
} from 'shared/languageServerTypes/suggestions'
|
|
import { ref } from 'vue'
|
|
import CustomBackground from './histoire/CustomBackground.vue'
|
|
import mockDb from './mockSuggestions.json' assert { type: 'json' }
|
|
import './story.css'
|
|
|
|
const mockProjectId = random.uuidv4() as Uuid
|
|
const standardBase = 'Standard.Base' as QualifiedName
|
|
|
|
export function placeholderGroups(): LibraryComponentGroup[] {
|
|
return [
|
|
{ color: '#4D9A29', name: 'Input', library: standardBase, exports: [] },
|
|
{ color: '#B37923', name: 'Web', library: standardBase, exports: [] },
|
|
{ color: '#9735B9', name: 'Parse', library: standardBase, exports: [] },
|
|
{ color: '#4D9A29', name: 'Select', library: standardBase, exports: [] },
|
|
{ color: '#B37923', name: 'Join', library: standardBase, exports: [] },
|
|
{ color: '#9735B9', name: 'Transform', library: standardBase, exports: [] },
|
|
{ color: '#4D9A29', name: 'Output', library: standardBase, exports: [] },
|
|
]
|
|
}
|
|
|
|
MockTransport.addMock('engine', async (method, data, transport) => {
|
|
switch (method) {
|
|
case 'session/initProtocolConnection':
|
|
return {
|
|
contentRoots: [{ type: 'Project', id: mockProjectId }],
|
|
} satisfies response.InitProtocolConnection
|
|
case 'executionContext/create':
|
|
setTimeout(
|
|
() => transport.emit('executionContext/executionComplete', { contextId: data.contextId }),
|
|
100,
|
|
)
|
|
return {
|
|
contextId: data.contextId,
|
|
}
|
|
case 'search/getSuggestionsDatabase':
|
|
// We first send the empty database, and then update it 200 ms later, mimicking the real LS.
|
|
setTimeout(() => {
|
|
const updates: SuggestionsDatabaseUpdate[] = mockDb.map((suggestion, id) => ({
|
|
type: 'Add',
|
|
id,
|
|
suggestion: suggestion as SuggestionEntry,
|
|
}))
|
|
transport.emit('search/suggestionsDatabaseUpdates', { updates, currentVersion: 2 })
|
|
}, 200)
|
|
return {
|
|
entries: [],
|
|
currentVersion: 1,
|
|
} satisfies response.GetSuggestionsDatabase
|
|
case 'runtime/getComponentGroups':
|
|
return { componentGroups: placeholderGroups() } satisfies response.GetComponentGroups
|
|
case 'file/list':
|
|
return { paths: [] } satisfies response.FileList
|
|
case 'executionContext/push':
|
|
case 'executionContext/pop':
|
|
case 'executionContext/recompute':
|
|
case 'capability/acquire':
|
|
return {}
|
|
default:
|
|
return Promise.reject(`Method not mocked: ${method}`)
|
|
}
|
|
})
|
|
|
|
export const setupVue3 = defineSetupVue3(({ app, addWrapper }) => {
|
|
addWrapper(CustomBackground)
|
|
provideGuiConfig._mock(
|
|
ref({
|
|
startup: {
|
|
project: 'Mock Project',
|
|
displayedProjectName: 'Mock Project',
|
|
},
|
|
engine: { rpcUrl: 'mock://engine', dataUrl: 'mock://data' },
|
|
}),
|
|
app,
|
|
)
|
|
// Required for visualization stories.
|
|
provideVisualizationConfig._mock(
|
|
{
|
|
fullscreen: false,
|
|
scale: 1,
|
|
width: 200,
|
|
height: 150,
|
|
hide() {},
|
|
isCircularMenuVisible: false,
|
|
isBelowToolbar: false,
|
|
nodeSize: new Vec2(200, 150),
|
|
currentType: {
|
|
module: { kind: 'Builtin' },
|
|
name: 'Current Type',
|
|
},
|
|
icon: 'braces',
|
|
types: [
|
|
{
|
|
module: { kind: 'Builtin' },
|
|
name: 'Example',
|
|
},
|
|
{
|
|
module: { kind: 'Builtin' },
|
|
name: 'Types',
|
|
},
|
|
{
|
|
module: { kind: 'Builtin' },
|
|
name: 'Here',
|
|
},
|
|
],
|
|
updateType() {},
|
|
addNode() {},
|
|
},
|
|
app,
|
|
)
|
|
})
|