diff --git a/packages/dui3/components/header/NavBar.vue b/packages/dui3/components/header/NavBar.vue
index 097e23e17..6d28e7bad 100644
--- a/packages/dui3/components/header/NavBar.vue
+++ b/packages/dui3/components/header/NavBar.vue
@@ -7,14 +7,8 @@
@@ -24,5 +18,5 @@
diff --git a/packages/dui3/lib/bindings/definitions/baseBindings.ts b/packages/dui3/lib/bindings/definitions/baseBindings.ts
index d59330531..34961ef18 100644
--- a/packages/dui3/lib/bindings/definitions/baseBindings.ts
+++ b/packages/dui3/lib/bindings/definitions/baseBindings.ts
@@ -14,6 +14,11 @@ export interface IBaseBinding {
event: E,
callback: IBaseBindingHostEvents[E]
) => void
+ /**
+ * Note: this method does not need to be implemented in the .NET host application base bindings,
+ * it is served by the DUI3 bridge.
+ */
+ showDevTools: () => Promise
}
export interface IBaseBindingHostEvents {
@@ -21,6 +26,7 @@ export interface IBaseBindingHostEvents {
documentChanged: () => void
}
+// An almost 1-1 mapping of what we need from the Core accounts class.
export type Account = {
id: string
isDefault: boolean
diff --git a/packages/dui3/lib/bindings/definitions/testBindings.ts b/packages/dui3/lib/bindings/definitions/testBindings.ts
index 500850fd2..c2aae246d 100644
--- a/packages/dui3/lib/bindings/definitions/testBindings.ts
+++ b/packages/dui3/lib/bindings/definitions/testBindings.ts
@@ -1,7 +1,16 @@
+/**
+ * The name under which this binding will be registered.
+ */
+export const ITestBindingKey = 'testBinding'
+
+/**
+ * A test binding interface to ensure compatbility. Ideally all host environments would implement and register it.
+ */
export interface ITestBinding {
sayHi: (name: string, count: number, sayHelloNotHi: boolean) => Promise
goAway: () => Promise
getComplexType: () => Promise
+ shouldThrow: () => Promise
triggerEvent: (eventName: string) => Promise
on: (
event: E,
diff --git a/packages/dui3/lib/bridge/generic.ts b/packages/dui3/lib/bridge/generic.ts
index a09199c90..b4c22c550 100644
--- a/packages/dui3/lib/bridge/generic.ts
+++ b/packages/dui3/lib/bridge/generic.ts
@@ -35,13 +35,24 @@ export class GenericBridge extends BaseBridge {
private async runMethod(methodName: string, args: unknown[]): Promise {
const preserializedArgs = args.map((a) => JSON.stringify(a))
+
// NOTE: RunMethod is a call to the .NET side.
const result = await this.bridge.RunMethod(
methodName,
JSON.stringify(preserializedArgs)
)
- return JSON.parse(result) as unknown
+ const parsed = result ? (JSON.parse(result) as Record) : null
+
+ if (parsed && parsed['error']) {
+ throw new Error(parsed['error'] as string)
+ }
+
+ return parsed
+ }
+
+ public showDevTools() {
+ this.bridge.ShowDevTools()
}
}
diff --git a/packages/dui3/lib/bridge/sketchup.ts b/packages/dui3/lib/bridge/sketchup.ts
index 79f522d60..75fb28c8c 100644
--- a/packages/dui3/lib/bridge/sketchup.ts
+++ b/packages/dui3/lib/bridge/sketchup.ts
@@ -49,22 +49,17 @@ export class SketchupBridge extends BaseBridge {
;(globalThis as Record).bindings = this
}
- // NOTE: Overriden function for now, need to be checked later payload can be unified or not.
- // From sketchup we receive beatiful JSON object that we do not need to parse.
- // This should be checked with .NET
+ // NOTE: Overriden emit as we do not need to parse the data back - the Sketchup bridge already parses it for us.
emit(eventName: string, payload: string): void {
- this.emitter.emit(eventName, payload)
+ this.emitter.emit(eventName, payload as unknown as Record)
}
public async create(): Promise {
// Initialization continues in the receiveCommandsAndInitializeBridge function,
// where we expect sketchup to return to us the command names for related bindings/views.
- // NOTE: as we want to have multiple sketchup bindings in the future, we will
- // most likely change this method to specify which view/plugin/bindings we want.
- // eslint-disable-next-line camelcase
- // sketchup.exec({ name: 'getCommands', view_id: this.bindingsName })
sketchup.getCommands(this.bindingsName)
+ //
try {
await this.isInitalized
return true
@@ -148,4 +143,11 @@ export class SketchupBridge extends BaseBridge {
delete this.requests[requestId]
}
}
+
+ public showDevTools() {
+ // eslint-disable-next-line no-alert
+ window.alert(
+ 'Sketchup cannot do this. The dev tools menu is accessible via a right click.'
+ )
+ }
}
diff --git a/packages/dui3/pages/index.vue b/packages/dui3/pages/index.vue
index 45ffbf581..cdf848732 100644
--- a/packages/dui3/pages/index.vue
+++ b/packages/dui3/pages/index.vue
@@ -44,9 +44,10 @@ import { graphql } from '~/lib/common/generated/gql'
import { ServerInfoTestQuery } from '~/lib/common/generated/gql/graphql'
import { useDocumentInfoSetup } from '~/lib/document-info'
+const { accounts, refreshAccounts, defaultAccount } = await useAccountsSetup()
+
const { $baseBinding } = useNuxtApp()
const appName = await $baseBinding.getSourceApplicationName()
-const { accounts, refreshAccounts, defaultAccount } = await useAccountsSetup()
const documentInfo = await useDocumentInfoSetup()
diff --git a/packages/dui3/pages/test.vue b/packages/dui3/pages/test.vue
index 1e002b42a..495af4489 100644
--- a/packages/dui3/pages/test.vue
+++ b/packages/dui3/pages/test.vue
@@ -21,16 +21,12 @@ import { ComplexType, TestEventArgs } from '~/lib/bindings/definitions/testBindi
const { $testBindings } = useNuxtApp()
$testBindings.on('emptyTestEvent', () => {
- setTimeout(() => {
- console.log('empty test event catched!')
- }, 500)
+ console.log('empty test event catched!')
})
$testBindings.on('testEvent', (args: TestEventArgs) => {
- setTimeout(() => {
- console.log('test event catched!')
- console.log(args)
- }, 500)
+ console.log('test event catched!')
+ console.log(args)
})
async function triggerEmptyEvent() {
diff --git a/packages/dui3/plugins/00.bindings.ts b/packages/dui3/plugins/00.bindings.ts
index 955a0ce90..1fd7827bb 100644
--- a/packages/dui3/plugins/00.bindings.ts
+++ b/packages/dui3/plugins/00.bindings.ts
@@ -3,7 +3,7 @@ import { IRawBridge } from '~/lib/bridge/definitions'
import { IBaseBinding } from '~/lib/bindings/definitions/baseBindings'
import { SketchupBridge } from '~/lib/bridge/sketchup'
-import { ITestBinding } from '~/lib/bindings/definitions/testBindings'
+import { ITestBinding, ITestBindingKey } from '~/lib/bindings/definitions/testBindings'
// Makes TS happy
declare let globalThis: Record & {
@@ -18,16 +18,23 @@ declare let globalThis: Record & {
* strip or customize functionality from the ui itself.
*/
export default defineNuxtPlugin(async () => {
- const testBindings = await tryHoistBinding('testBindings')
+ // Registers some default test bindings.
+ const testBindings = await tryHoistBinding(ITestBindingKey)
+ // Tries to register some non-existant bindings.
const nonExistantBindings = await tryHoistBinding('nonExistantBindings')
-
+ // Registers a set of default bindings.
const baseBinding = await tryHoistBinding('baseBinding')
+ const showDevTools = () => {
+ baseBinding.showDevTools()
+ }
+
return {
provide: {
testBindings,
nonExistantBindings,
- baseBinding
+ baseBinding,
+ showDevTools
}
}
})