(component, idPrefix, queryObject)
| 11 | * @param {object} queryObject - Map of values to match. |
| 12 | */ |
| 13 | export function checkControllerPresentAndSetup (component, idPrefix, queryObject) { |
| 14 | var el = component.el; |
| 15 | var controller; |
| 16 | var isControllerPresent = isControllerPresentWebXR; |
| 17 | var isPresent; |
| 18 | |
| 19 | controller = isControllerPresent(component, idPrefix, queryObject); |
| 20 | isPresent = !!controller; |
| 21 | |
| 22 | // Nothing changed, no need to do anything. |
| 23 | if (isPresent === component.controllerPresent) { return isPresent; } |
| 24 | |
| 25 | component.controllerPresent = isPresent; |
| 26 | |
| 27 | // Update controller presence. |
| 28 | if (isPresent) { |
| 29 | component.addEventListeners(); |
| 30 | // On reconnect, injectTrackedControls calls setAttribute('tracked-controls', ...) |
| 31 | // with unchanged data so update/updateController is skipped. |
| 32 | // tracked-controls' own controllersupdated listener would call updateController, |
| 33 | // but it was registered after the specific controller component's listener |
| 34 | // (e.g. meta-touch-controls) so it fires too late. |
| 35 | // Explicitly call updateController before emitting controllerconnected. |
| 36 | var trackedControls = el.components['tracked-controls']; |
| 37 | component.injectTrackedControls(controller); |
| 38 | if (trackedControls) { trackedControls.updateController(); } |
| 39 | el.emit('controllerconnected', {name: component.name, component: component}); |
| 40 | } else { |
| 41 | component.removeEventListeners(); |
| 42 | el.emit('controllerdisconnected', {name: component.name, component: component}); |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | /** |
| 47 | * |
no test coverage detected