pollination-react-io 1.98.1 → 1.100.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,14 @@ function stubFalse() {
41099
41099
  module.exports = isEqual;
41100
41100
  });
41101
41101
 
41102
- var useGetGeometry = function () {
41102
+ var useGetGeometry = function (meshOptions, geometryFilter) {
41103
+ if (meshOptions === void 0) { meshOptions = {}; }
41104
+ if (geometryFilter === void 0) { geometryFilter = {}; }
41103
41105
  var host = getHost();
41104
41106
  var _a = React.useState(undefined), geometry = _a[0], setGeometry = _a[1];
41105
41107
  var geometryRef = React.useRef(undefined);
41106
41108
  var setReturnVal = React.useCallback(function (_a, force) {
41107
- var data = _a.data; _a.identifier;
41109
+ var data = _a.data;
41108
41110
  var bytes = new TextEncoder().encode(data);
41109
41111
  if (!force && geometryRef.current) {
41110
41112
  if (!lodash_isequal(bytes, geometryRef.current)) {
@@ -41130,22 +41132,35 @@ var useGetGeometry = function () {
41130
41132
  };
41131
41133
  // @ts-ignore
41132
41134
  return function () { return window.parent.readGeometry = undefined; };
41133
- }, [host, setReturnVal]);
41134
- var dotNetGetGeometry = React.useCallback(function (key, selection, force) {
41135
+ }, [host, setReturnVal, meshOptions, geometryFilter]);
41136
+ var dotNetGetGeometry = React.useCallback(function (key, selection, force, useSelection) {
41135
41137
  if (key === void 0) { key = 'use-get-geometry'; }
41136
41138
  if (selection === void 0) { selection = false; }
41137
41139
  if (force === void 0) { force = false; }
41140
+ if (useSelection === void 0) { useSelection = true; }
41138
41141
  if (!checkDotNet())
41139
41142
  return;
41140
41143
  var res = {
41141
41144
  data: null,
41142
41145
  identifier: null,
41143
41146
  };
41144
- res = window.parent.chrome.webview.hostObjects.sync.geometry.Get(key, selection);
41147
+ var optionalValues = __assign(__assign({}, meshOptions), geometryFilter);
41148
+ var options = (Object.values(optionalValues).length !== 0) ? {
41149
+ select: selection,
41150
+ useSelection: useSelection,
41151
+ gridSize: optionalValues === null || optionalValues === void 0 ? void 0 : optionalValues.gridSize,
41152
+ merge: optionalValues === null || optionalValues === void 0 ? void 0 : optionalValues.union,
41153
+ layer: optionalValues === null || optionalValues === void 0 ? void 0 : optionalValues.layer,
41154
+ type: optionalValues === null || optionalValues === void 0 ? void 0 : optionalValues.type,
41155
+ } : {
41156
+ select: selection,
41157
+ useSelection: useSelection
41158
+ };
41159
+ res = window.parent.chrome.webview.hostObjects.sync.geometry.Read(key, JSON.stringify(options));
41145
41160
  if (res) {
41146
41161
  setReturnVal(res, force);
41147
41162
  }
41148
- }, [setReturnVal]);
41163
+ }, [setReturnVal, meshOptions, geometryFilter]);
41149
41164
  var getGeometry = React.useMemo(function () {
41150
41165
  switch (host) {
41151
41166
  case 'rhino':
@@ -47951,23 +47966,50 @@ var GetModelActions;
47951
47966
  GetModelActions["preview"] = "preview";
47952
47967
  })(GetModelActions || (GetModelActions = {}));
47953
47968
 
47969
+ /**
47970
+ * Listen for a CustomEvent.
47971
+ * If web it uses document, if panel it uses webview
47972
+ * @param eventName Name of the CustomEvent
47973
+ * @param handler Handler to trigger
47974
+ */
47975
+ var useCustomEvent = function (eventName, handler) {
47976
+ var host = getHost();
47977
+ React.useEffect(function () {
47978
+ // If web use document
47979
+ var owner = document;
47980
+ // If panel use webview
47981
+ if (host !== 'web') {
47982
+ owner = window.parent.chrome.webview;
47983
+ }
47984
+ owner.addEventListener(eventName, handler);
47985
+ return function () {
47986
+ owner.removeEventListener(eventName, handler);
47987
+ };
47988
+ }, []);
47989
+ };
47990
+
47954
47991
  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();
47992
+ 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, _f = _a.geometryFilter, geometryFilter = _f === void 0 ? {} : _f;
47993
+ // Hooks
47957
47994
  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];
47995
+ var _g = useGetGeometry(meshOptions, geometryFilter), host = _g.host, geometry = _g.geometry, getGeometry = _g.getGeometry;
47996
+ var _h = React.useState(false), isClicked = _h[0], setIsClicked = _h[1];
47997
+ var _j = React.useState(), selection = _j[0], setSelection = _j[1];
47998
+ var _k = React.useState(), subscribe = _k[0], setSubscribe = _k[1];
47999
+ var _l = React.useState(), preview = _l[0], setPreview = _l[1];
48000
+ var _m = React.useState(), refresh = _m[0], setRefresh = _m[1];
48001
+ var _o = React.useState(), result = _o[0], setResult = _o[1];
48002
+ // This method does not read runtime state variables. Props only
48003
+ var customEventHandler = function (e) {
48004
+ (e.detail.id === defaultKey) && setRefresh(performance.now().toString());
48005
+ };
48006
+ useCustomEvent('onGeometryChanged', customEventHandler);
47963
48007
  // Config only on bootstrap
47964
48008
  var initialConfig = React.useMemo(function () {
47965
48009
  if (!optionsConfig)
47966
48010
  return undefined;
47967
48011
  return optionsConfig;
47968
48012
  }, []);
47969
- // pollination-react-io hooks
47970
- var _k = useGetGeometry(), host = _k.host, geometry = _k.geometry, getGeometry = _k.getGeometry;
47971
48013
  // set selection and subscribe on props change
47972
48014
  React.useEffect(function () {
47973
48015
  if (!initialConfig)
@@ -47982,61 +48024,59 @@ var GetGeometry = function (_a) {
47982
48024
  setSelection(sel);
47983
48025
  setSubscribe(sub);
47984
48026
  }, [initialConfig]);
48027
+ /**
48028
+ * From Blob geometry to string
48029
+ */
47985
48030
  React.useEffect(function () {
47986
- // Send data only after the first click
47987
- if (!geometry || !setParentState || !isClicked)
48031
+ // Only if clicked
48032
+ if (!geometry || !isClicked)
47988
48033
  return;
47989
48034
  var fr = new FileReader();
47990
48035
  fr.onload = function () {
47991
48036
  if (typeof this.result !== 'string')
47992
48037
  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
- });
48038
+ setResult(this.result);
48006
48039
  };
48007
48040
  fr.readAsText(geometry);
48008
- }, [geometry, setParentState, preview]);
48009
- // subscribe
48041
+ }, [geometry]);
48042
+ /**
48043
+ * Set parent state if result change
48044
+ */
48010
48045
  React.useEffect(function () {
48011
- if (!getGeometry)
48046
+ if (!result || !setParentState)
48012
48047
  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
48048
+ setParentState({ geometry: JSON.parse(result) });
48049
+ }, [result, setParentState]);
48050
+ /**
48051
+ * Preview only
48052
+ */
48026
48053
  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]);
48054
+ if (!result)
48055
+ return;
48056
+ // Preview ON
48057
+ preview && sendMessage('SubscribePreviewGeometry', {
48058
+ data: result,
48059
+ uniqueId: defaultKey,
48060
+ options: {}
48061
+ });
48062
+ // Preview OFF
48063
+ !preview && sendMessage('ClearGeometry', {
48064
+ data: result,
48065
+ uniqueId: defaultKey,
48066
+ options: {}
48067
+ });
48068
+ }, [result, preview]);
48069
+ // Event effect if subscribe is active
48070
+ React.useEffect(function () {
48071
+ if (!getGeometry)
48072
+ return;
48073
+ subscribe && getGeometry(defaultKey, false, false, selection);
48074
+ }, [getGeometry, refresh]);
48035
48075
  return (React__default["default"].createElement(SettingsButton, { icon: useIcon && ((isClicked && geometry) ? React__default["default"].createElement(CheckCircle$1, null) : undefined), onClick: function () {
48036
48076
  if (!getGeometry)
48037
48077
  return;
48038
48078
  setIsClicked(true);
48039
- getGeometry(key, selection, true);
48079
+ getGeometry(defaultKey, selection, true, selection);
48040
48080
  }, disabled: typeof getGeometry === 'undefined',
48041
48081
  // @ts-ignore
48042
48082
  options: host !== 'revit' ? [{
@@ -48060,10 +48100,6 @@ var GetGeometry = function (_a) {
48060
48100
  checked: selection,
48061
48101
  icon: React__default["default"].createElement(BoundingBox$1, { size: 16 }),
48062
48102
  onSelect: function () {
48063
- // reset key when "select" option is deselected
48064
- if (selection) {
48065
- setKey(performance.now().toString());
48066
- }
48067
48103
  setSelection(function (state) { return !state; });
48068
48104
  },
48069
48105
  },