Compare commits

..

12 Commits

Author SHA1 Message Date
oguzhankoral 5ec90095f0 Merge branch 'dev'
# Conflicts:
#	README.md
2025-09-04 23:29:20 +03:00
Oğuzhan Koral 20fad26fef Merge pull request #200 from specklesystems/oguzhan/cherry-pick-readme
Update README.md (#147)
2025-09-04 23:19:32 +03:00
Jonathon Broughton 03215f79c4 Update README.md (#147)
* Update README.md

* Update README.md

(cherry picked from commit 85f8f72335)

# Conflicts:
#	README.md
2025-09-04 23:15:19 +03:00
Dogukan Karatas 6d17377ca2 Merge pull request #198 from specklesystems/dogukan/remove-access-token-auth
Build and deploy Connector and Visual / build-connector (push) Has been cancelled
Build and deploy Connector and Visual / build-visual (push) Has been cancelled
Build and deploy Connector and Visual / deploy-installers (push) Has been cancelled
feat (data): remove token and anonymous authentication
2025-09-03 10:09:43 +02:00
Dogukan Karatas 256abaed0c remove token and anon auth 2025-09-02 21:46:35 +02:00
Dogukan Karatas 26409b4ea6 storing logic changes 2025-09-02 14:22:03 +02:00
Dogukan Karatas 865c4c1608 Merge pull request #197 from specklesystems/dogukan/server-url-in-request-data
fix (data): adds server url to exchange data
2025-09-02 12:53:44 +02:00
Dogukan Karatas 67836c2a7f case sensitive change 2025-09-02 11:00:35 +02:00
Dogukan Karatas 95d819f7f3 adds server url to exchange request data 2025-09-02 10:31:01 +02:00
Dogukan Karatas dee3ee6c4d Merge pull request #196 from specklesystems/dogukan/fix-conditional-formatting-card
Build and deploy Connector and Visual / build-connector (push) Has been cancelled
Build and deploy Connector and Visual / build-visual (push) Has been cancelled
Build and deploy Connector and Visual / deploy-installers (push) Has been cancelled
fix (visual): bring back the conditional formatting
2025-08-28 17:17:27 +02:00
Dogukan Karatas 7ed612ec14 revert back for conditional formatting 2025-08-28 16:30:15 +02:00
Jonathon Broughton 85f8f72335 Update README.md (#147)
* Update README.md

* Update README.md
2025-04-08 21:32:04 +03:00
8 changed files with 19 additions and 84 deletions
+1 -8
View File
@@ -247,7 +247,7 @@ GetByUrl.Icons = [
Speckle = [
// This is used when running the connector on an on-premises data gateway
TestConnection = (path) => {"Speckle.GetUser", path},
// Authentication strategy
// Authentication strategy - OAuth only
Authentication = [
OAuth = [
Label = "Speckle Account",
@@ -357,13 +357,6 @@ Speckle = [
]
in
result
],
Key = [
KeyLabel = "Personal Access Token",
Label = "Private Project"
],
Implicit = [
Label = "Public Project"
]
],
Label = "Speckle"
@@ -1,7 +1,7 @@
(server as text, optional query as text, optional variables as record) as record =>
let
// Enhanced credential retrieval with OAuth2 support
apiKey = try Extension.CurrentCredential()[Key] otherwise try Extension.CurrentCredential()[access_token] otherwise null,
apiKey = try Extension.CurrentCredential()[access_token] otherwise null,
defaultQuery = "query {
activeUser {
@@ -29,7 +29,7 @@
versionId = parsedUrl[versionId],
// get API key if available
apiKey = try Extension.CurrentCredential()[Key] otherwise null,
apiKey = try Extension.CurrentCredential()[access_token] otherwise null,
// graphql query to get model info including root object id
// includes specific version if provided
@@ -26,7 +26,7 @@ in
parsedUrl = Parser(url),
server = parsedUrl[baseUrl],
apiKey = try Extension.CurrentCredential()[Key] otherwise try Extension.CurrentCredential()[access_token] otherwise "",
apiKey = try Extension.CurrentCredential()[access_token] otherwise "",
query = "query {
activeUser {
@@ -41,7 +41,8 @@
tokenExchangeData = Json.FromValue([
PowerfulToken = apiKey,
Scopes = {"profile:read", "streams:read", "users:read"},
ProjectId = parsedUrl[projectId]
ProjectId = parsedUrl[projectId],
ServerUrl = parsedUrl[baseUrl]
]),
tokenExchangeResponse = Web.Contents(
@@ -1,5 +1,5 @@
import { formattingSettings as fs } from 'powerbi-visuals-utils-formattingmodel'
import { ColorSelectorSettings, ColorSettings } from 'src/settings/colorSettings'
import { ColorSettings } from 'src/settings/colorSettings'
import { CameraSettings } from 'src/settings/cameraSettings'
import { LightingSettings } from 'src/settings/lightingSettings'
import { DataLoadingSettings } from 'src/settings/dataLoadingSettings'
@@ -8,8 +8,6 @@ export class SpeckleVisualSettingsModel extends fs.Model {
// Building my visual formatting settings card
public color: ColorSettings = new ColorSettings()
public colorSelector: ColorSelectorSettings = new ColorSelectorSettings()
public dataLoading: DataLoadingSettings = new DataLoadingSettings()
// public camera: CameraSettings = new CameraSettings()
+11 -5
View File
@@ -26,7 +26,7 @@ export const useVisualStore = defineStore('visualStore', () => {
const host = shallowRef<powerbi.extensibility.visual.IVisualHost>()
const formattingSettings = ref<SpeckleVisualSettingsModel>()
const loadingProgress = ref<LoadingProgress>(undefined)
const objectsFromStore = ref<object[]>(undefined)
const objectsFromStore = ref<object[][]>(undefined)
// State tracking for toggle reset prevention
const previousToggleState = ref<boolean | undefined>(undefined)
@@ -88,8 +88,14 @@ export const useVisualStore = defineStore('visualStore', () => {
const setReceiveInfo = (newReceiveInfo: ReceiveInfo) => {
receiveInfo.value = newReceiveInfo
// Only save receiveInfo to file in offline mode for persistence (contains token and metadata)
if (formattingSettings.value?.dataLoading.internalizeData.value) {
// Always save receiveInfo to file for credentials persistence (contains token and metadata)
// This ensures weak tokens are available even when desktop service is unavailable
if (formattingSettings.value?.dataLoading.internalizeData.value && objectsFromStore.value) {
// If internalize is ON and we have objects, save both objects and receiveInfo together
writeObjectsToFile(objectsFromStore.value)
} else {
// Otherwise just save receiveInfo alone (credentials only)
writeReceiveInfoToFile()
}
}
@@ -122,7 +128,7 @@ export const useVisualStore = defineStore('visualStore', () => {
}
}
const setObjectsFromStore = (newObjectsFromStore: object[]) => {
const setObjectsFromStore = (newObjectsFromStore: object[][]) => {
objectsFromStore.value = newObjectsFromStore
}
@@ -214,7 +220,7 @@ export const useVisualStore = defineStore('visualStore', () => {
objectName: 'storedData',
properties: {
speckleObjects: compressedChunks,
receiveInfo: JSON.stringify(receiveInfo.value)
receiveInfo: JSON.stringify(receiveInfo.value) // Keep receiveInfo in sync when storing objects
},
selector: null
}
+1 -64
View File
@@ -95,7 +95,6 @@ export class Visual implements IVisual {
)
visualStore.setFormattingSettings(this.formattingSettings)
console.log('Selector colors', this.formattingSettings.colorSelector)
console.log(
'Data Loading - Internalize Data:',
this.formattingSettings.dataLoading.internalizeData.value
@@ -314,69 +313,7 @@ export class Visual implements IVisual {
public getFormattingModel(): powerbi.visuals.FormattingModel {
console.log('🎨 getFormattingModel called')
// build the cards for the options
const model: powerbi.visuals.FormattingModel = {
cards: [
// Color card
{
displayName: 'Object Display',
name: 'color',
uid: 'color_card_uid',
groups: [
{
displayName: undefined,
uid: 'color_group_uid',
slices: [
{
displayName: 'Enabled',
uid: 'color_enabled_uid',
control: {
type: powerbi.visuals.FormattingComponent.ToggleSwitch,
properties: {
descriptor: {
objectName: 'color',
propertyName: 'enabled'
},
value: this.formattingSettings.color.enabled.value
}
}
}
]
}
]
},
// Data Management card
{
displayName: 'Data Management',
name: 'dataLoading',
uid: 'dataLoading_card_uid',
groups: [
{
displayName: undefined,
uid: 'dataLoading_group_uid',
slices: [
{
displayName: 'Internalize Data',
uid: 'dataLoading_internalizeData_uid',
control: {
type: powerbi.visuals.FormattingComponent.ToggleSwitch,
properties: {
descriptor: {
objectName: 'dataLoading',
propertyName: 'internalizeData'
},
value: this.formattingSettings.dataLoading.internalizeData.value
}
}
}
]
}
]
}
]
}
const model = this.formattingSettingsService.buildFormattingModel(this.formattingSettings)
return model
}