Skip to content

Commit

Permalink
seperate events for selection an unselection of elements
Browse files Browse the repository at this point in the history
  • Loading branch information
clecherbauer committed Nov 11, 2022
1 parent 4206e78 commit aa020f2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 15 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bldrs",
"version": "1.0.0-r531",
"version": "1.0.0-r532",
"main": "src/index.jsx",
"homepage": "https://github.com/bldrs-ai/Share",
"bugs": {
Expand Down
54 changes: 40 additions & 14 deletions src/WidgetApi/ApiEventsRegistry.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import useStore from '../store/useStore'


const EVENT_LOAD_MODEL = 'ai.bldrs-share.loadModel'
const EVENT_HIGHLIGHT_ELEMENTS = 'ai.bldrs-share.highlightElements'
const EVENT_CLIENT_HIGHLIGHT_ELEMENTS = 'ai.bldrs-share.client.setHighlightedElements'
const EVENT_VIEWER_LOAD_MODEL = 'ai.bldrs-share.LoadModel'
const EVENT_VIEWER_SELECT_ELEMENTS = 'ai.bldrs-share.SelectElements'
const EVENT_CLIENT_SELECT_ELEMENTS = 'ai.bldrs-share.ElementsSelected'
const EVENT_CLIENT_DESELECT_ELEMENTS = 'ai.bldrs-share.ElementsDeSelected'

/**
* Api Events are defined here
Expand Down Expand Up @@ -31,7 +32,7 @@ class ApiEventsRegistry {
return this.apiConnection.successfulResponse({})
}

EVENT_HANDLER_HIGHLIGHT_ELEMENTS = (data) => {
EVENT_HANDLER_SELECT_ELEMENTS = (data) => {
if (!('githubIfcPath' in data)) {
return this.apiConnection.missingArgumentResponse('githubIfcPath')
}
Expand All @@ -48,25 +49,50 @@ class ApiEventsRegistry {
}

EVENT_HANDLER_MAP = {
[EVENT_LOAD_MODEL]: this.EVENT_HANDLER_LOAD_MODEL,
[EVENT_HIGHLIGHT_ELEMENTS]: this.EVENT_HANDLER_HIGHLIGHT_ELEMENTS,
[EVENT_VIEWER_LOAD_MODEL]: this.EVENT_HANDLER_LOAD_MODEL,
[EVENT_VIEWER_SELECT_ELEMENTS]: this.EVENT_HANDLER_SELECT_ELEMENTS,
}

EVENT_DISPATCHER_HIGHLIGHT_ELEMENTS = () => {
let lastSelectedElements = []
getSelectedElementIds(state) {
return [state.selectedElement.GlobalId.value]
}

selectedElementIdsHasChanged(state, lastSelectedElementIds) {
if (state.selectedElement && Object.prototype.hasOwnProperty.call(state.selectedElement, 'GlobalId')) {
return JSON.stringify(lastSelectedElementIds) !== JSON.stringify(this.getSelectedElementIds(state))
}
}

EVENT_DISPATCHER_ELEMENT_SELECTION = () => {
let lastSelectedElementIds = []
useStore.subscribe((state) => {
if (this.selectedElementIdsHasChanged(state, lastSelectedElementIds)) {
const newSelectedElementIds = this.getSelectedElementIds(state)
if (newSelectedElementIds.length > 0) {
this.apiConnection.send(EVENT_CLIENT_SELECT_ELEMENTS, newSelectedElementIds)
}
lastSelectedElementIds = newSelectedElementIds
}
})
}

EVENT_DISPATCHER_ELEMENT_DESELECTION = () => {
let lastSelectedElementIds = []
useStore.subscribe((state) => {
if (state.selectedElement && Object.prototype.hasOwnProperty.call(state.selectedElement, 'GlobalId')) {
const newSelectedElements = [state.selectedElement.GlobalId.value]
if (JSON.stringify(lastSelectedElements) !== JSON.stringify(newSelectedElements)) {
lastSelectedElements = newSelectedElements
this.apiConnection.send(EVENT_CLIENT_HIGHLIGHT_ELEMENTS, lastSelectedElements)
if (this.selectedElementIdsHasChanged(state, lastSelectedElementIds)) {
const newSelectedElementIds = this.getSelectedElementIds(state)
let deSelectedElementIds = lastSelectedElementIds.filter(x => !newSelectedElementIds.includes(x));
if (deSelectedElementIds && deSelectedElementIds.length > 0) {
this.apiConnection.send(EVENT_CLIENT_DESELECT_ELEMENTS, deSelectedElementIds)
}
lastSelectedElementIds = newSelectedElementIds
}
})
}

EVENT_DISPATCHER_MAP = {
[EVENT_CLIENT_HIGHLIGHT_ELEMENTS]: this.EVENT_DISPATCHER_HIGHLIGHT_ELEMENTS,
[EVENT_CLIENT_SELECT_ELEMENTS]: this.EVENT_DISPATCHER_ELEMENT_SELECTION,
[EVENT_CLIENT_DESELECT_ELEMENTS]: this.EVENT_DISPATCHER_ELEMENT_DESELECTION
}

registerEventHandlers = () => {
Expand Down

0 comments on commit aa020f2

Please sign in to comment.