pollination-react-io 1.98.1 → 1.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -41099,12 +41099,13 @@ function stubFalse() {
41099
41099
  module.exports = isEqual;
41100
41100
  });
41101
41101
 
41102
- var useGetGeometry = function () {
41102
+ var useGetGeometry = function (meshOptions) {
41103
+ if (meshOptions === void 0) { meshOptions = {}; }
41103
41104
  var host = getHost();
41104
41105
  var _a = React.useState(undefined), geometry = _a[0], setGeometry = _a[1];
41105
41106
  var geometryRef = React.useRef(undefined);
41106
41107
  var setReturnVal = React.useCallback(function (_a, force) {
41107
- var data = _a.data; _a.identifier;
41108
+ var data = _a.data;
41108
41109
  var bytes = new TextEncoder().encode(data);
41109
41110
  if (!force && geometryRef.current) {
41110
41111
  if (!lodash_isequal(bytes, geometryRef.current)) {
@@ -41131,17 +41132,27 @@ var useGetGeometry = function () {
41131
41132
  // @ts-ignore
41132
41133
  return function () { return window.parent.readGeometry = undefined; };
41133
41134
  }, [host, setReturnVal]);
41134
- var dotNetGetGeometry = React.useCallback(function (key, selection, force) {
41135
+ var dotNetGetGeometry = React.useCallback(function (key, selection, force, useSelection) {
41135
41136
  if (key === void 0) { key = 'use-get-geometry'; }
41136
41137
  if (selection === void 0) { selection = false; }
41137
41138
  if (force === void 0) { force = false; }
41139
+ if (useSelection === void 0) { useSelection = true; }
41138
41140
  if (!checkDotNet())
41139
41141
  return;
41140
41142
  var res = {
41141
41143
  data: null,
41142
41144
  identifier: null,
41143
41145
  };
41144
- res = window.parent.chrome.webview.hostObjects.sync.geometry.Get(key, selection);
41146
+ var options = (Object.values(meshOptions).length !== 0) ? {
41147
+ select: selection,
41148
+ useSelection: useSelection,
41149
+ gridSize: meshOptions.gridSize,
41150
+ merge: meshOptions.union
41151
+ } : {
41152
+ select: selection,
41153
+ useSelection: useSelection
41154
+ };
41155
+ res = window.parent.chrome.webview.hostObjects.sync.geometry.Read(key, JSON.stringify(options));
41145
41156
  if (res) {
41146
41157
  setReturnVal(res, force);
41147
41158
  }
@@ -47951,23 +47962,50 @@ var GetModelActions;
47951
47962
  GetModelActions["preview"] = "preview";
47952
47963
  })(GetModelActions || (GetModelActions = {}));
47953
47964
 
47965
+ /**
47966
+ * Listen for a CustomEvent.
47967
+ * If web it uses document, if panel it uses webview
47968
+ * @param eventName Name of the CustomEvent
47969
+ * @param handler Handler to trigger
47970
+ */
47971
+ var useCustomEvent = function (eventName, handler) {
47972
+ var host = getHost();
47973
+ React.useEffect(function () {
47974
+ // If web use document
47975
+ var owner = document;
47976
+ // If panel use webview
47977
+ if (host !== 'web') {
47978
+ owner = window.parent.chrome.webview;
47979
+ }
47980
+ owner.addEventListener(eventName, handler);
47981
+ return function () {
47982
+ owner.removeEventListener(eventName, handler);
47983
+ };
47984
+ }, []);
47985
+ };
47986
+
47954
47987
  var GetGeometry = function (_a) {
47955
- var setParentState = _a.setParentState, optionsConfig = _a.optionsConfig, _b = _a.buttonLabel, buttonLabel = _b === void 0 ? 'Get Geometry' : _b, _c = _a.defaultKey, defaultKey = _c === void 0 ? 'get-geometry-btn' : _c, _d = _a.useIcon, useIcon = _d === void 0 ? false : _d;
47956
- var subscribeRef = React.useRef();
47988
+ var setParentState = _a.setParentState, optionsConfig = _a.optionsConfig, _b = _a.buttonLabel, buttonLabel = _b === void 0 ? 'Get Geometry' : _b, _c = _a.defaultKey, defaultKey = _c === void 0 ? 'get-geometry-btn' : _c, _d = _a.useIcon, useIcon = _d === void 0 ? false : _d, _e = _a.meshOptions, meshOptions = _e === void 0 ? {} : _e;
47989
+ // Hooks
47957
47990
  var sendMessage = useSendMessage().sendMessage;
47958
- var _e = React.useState(performance.now().toString()), key = _e[0], setKey = _e[1];
47959
- var _f = React.useState(false), isClicked = _f[0], setIsClicked = _f[1];
47960
- var _g = React.useState(), selection = _g[0], setSelection = _g[1];
47961
- var _h = React.useState(), subscribe = _h[0], setSubscribe = _h[1];
47962
- var _j = React.useState(), preview = _j[0], setPreview = _j[1];
47991
+ var _f = useGetGeometry(meshOptions), host = _f.host, geometry = _f.geometry, getGeometry = _f.getGeometry;
47992
+ var _g = React.useState(false), isClicked = _g[0], setIsClicked = _g[1];
47993
+ var _h = React.useState(), selection = _h[0], setSelection = _h[1];
47994
+ var _j = React.useState(), subscribe = _j[0], setSubscribe = _j[1];
47995
+ var _k = React.useState(), preview = _k[0], setPreview = _k[1];
47996
+ var _l = React.useState(), refresh = _l[0], setRefresh = _l[1];
47997
+ var _m = React.useState(), result = _m[0], setResult = _m[1];
47998
+ // This method does not read runtime state variables. Props only
47999
+ var customEventHandler = function (e) {
48000
+ (e.detail.id === defaultKey) && setRefresh(performance.now().toString());
48001
+ };
48002
+ useCustomEvent('onGeometryChanged', customEventHandler);
47963
48003
  // Config only on bootstrap
47964
48004
  var initialConfig = React.useMemo(function () {
47965
48005
  if (!optionsConfig)
47966
48006
  return undefined;
47967
48007
  return optionsConfig;
47968
48008
  }, []);
47969
- // pollination-react-io hooks
47970
- var _k = useGetGeometry(), host = _k.host, geometry = _k.geometry, getGeometry = _k.getGeometry;
47971
48009
  // set selection and subscribe on props change
47972
48010
  React.useEffect(function () {
47973
48011
  if (!initialConfig)
@@ -47982,61 +48020,59 @@ var GetGeometry = function (_a) {
47982
48020
  setSelection(sel);
47983
48021
  setSubscribe(sub);
47984
48022
  }, [initialConfig]);
48023
+ /**
48024
+ * From Blob geometry to string
48025
+ */
47985
48026
  React.useEffect(function () {
47986
- // Send data only after the first click
47987
- if (!geometry || !setParentState || !isClicked)
48027
+ // Only if clicked
48028
+ if (!geometry || !isClicked)
47988
48029
  return;
47989
48030
  var fr = new FileReader();
47990
48031
  fr.onload = function () {
47991
48032
  if (typeof this.result !== 'string')
47992
48033
  return;
47993
- setParentState({ geometry: JSON.parse(this.result) });
47994
- // If preview is ON
47995
- preview && sendMessage('SubscribePreviewGeometry', {
47996
- data: this.result,
47997
- uniqueId: defaultKey,
47998
- options: {}
47999
- });
48000
- // If preview is OFF
48001
- !preview && sendMessage('ClearGeometry', {
48002
- data: this.result,
48003
- uniqueId: defaultKey,
48004
- options: {}
48005
- });
48034
+ setResult(this.result);
48006
48035
  };
48007
48036
  fr.readAsText(geometry);
48008
- }, [geometry, setParentState, preview]);
48009
- // subscribe
48037
+ }, [geometry]);
48038
+ /**
48039
+ * Set parent state if result change
48040
+ */
48010
48041
  React.useEffect(function () {
48011
- if (!getGeometry)
48042
+ if (!result || !setParentState)
48012
48043
  return;
48013
- if (subscribe
48014
- && typeof subscribeRef.current === 'undefined') {
48015
- subscribeRef.current = setInterval(function () {
48016
- getGeometry(key);
48017
- }, 1000);
48018
- }
48019
- else if (!subscribe
48020
- && typeof subscribeRef.current !== 'undefined') {
48021
- clearInterval(subscribeRef.current);
48022
- subscribeRef.current = undefined;
48023
- }
48024
- }, [getGeometry, key, subscribe, subscribeRef, selection]);
48025
- // selection and subscription
48044
+ setParentState({ geometry: JSON.parse(result) });
48045
+ }, [result, setParentState]);
48046
+ /**
48047
+ * Preview only
48048
+ */
48026
48049
  React.useEffect(function () {
48027
- // If selection is deactivated and subscription is active
48028
- if (!selection && typeof subscribeRef.current !== 'undefined') {
48029
- clearInterval(subscribeRef.current);
48030
- subscribeRef.current = undefined;
48031
- // Force subscribe
48032
- setKey(performance.now().toString());
48033
- }
48034
- }, [selection]);
48050
+ if (!result)
48051
+ return;
48052
+ // Preview ON
48053
+ preview && sendMessage('SubscribePreviewGeometry', {
48054
+ data: result,
48055
+ uniqueId: defaultKey,
48056
+ options: {}
48057
+ });
48058
+ // Preview OFF
48059
+ !preview && sendMessage('ClearGeometry', {
48060
+ data: result,
48061
+ uniqueId: defaultKey,
48062
+ options: {}
48063
+ });
48064
+ }, [result, preview]);
48065
+ // Event effect if subscribe is active
48066
+ React.useEffect(function () {
48067
+ if (!getGeometry)
48068
+ return;
48069
+ subscribe && getGeometry(defaultKey, false, false, selection);
48070
+ }, [getGeometry, refresh]);
48035
48071
  return (React__default["default"].createElement(SettingsButton, { icon: useIcon && ((isClicked && geometry) ? React__default["default"].createElement(CheckCircle$1, null) : undefined), onClick: function () {
48036
48072
  if (!getGeometry)
48037
48073
  return;
48038
48074
  setIsClicked(true);
48039
- getGeometry(key, selection, true);
48075
+ getGeometry(defaultKey, selection, true, selection);
48040
48076
  }, disabled: typeof getGeometry === 'undefined',
48041
48077
  // @ts-ignore
48042
48078
  options: host !== 'revit' ? [{
@@ -48060,10 +48096,6 @@ var GetGeometry = function (_a) {
48060
48096
  checked: selection,
48061
48097
  icon: React__default["default"].createElement(BoundingBox$1, { size: 16 }),
48062
48098
  onSelect: function () {
48063
- // reset key when "select" option is deselected
48064
- if (selection) {
48065
- setKey(performance.now().toString());
48066
- }
48067
48099
  setSelection(function (state) { return !state; });
48068
48100
  },
48069
48101
  },