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.
@@ -1,9 +1,11 @@
1
+ import { MeshOptions } from "../hooks";
1
2
  export declare enum GetModelActions {
2
3
  selection = "selection",
3
4
  subscribe = "subscribe",
4
5
  preview = "preview"
5
6
  }
6
7
  export interface GetGeometryProps {
8
+ defaultKey: string;
7
9
  setParentState?: (data: any) => void;
8
10
  optionsConfig?: {
9
11
  [index in GetModelActions]: {
@@ -12,6 +14,6 @@ export interface GetGeometryProps {
12
14
  };
13
15
  };
14
16
  buttonLabel?: string;
15
- defaultKey?: string;
16
17
  useIcon?: boolean;
18
+ meshOptions?: MeshOptions;
17
19
  }
@@ -0,0 +1,8 @@
1
+ import { EventHandler } from 'react';
2
+ /**
3
+ * Listen for a CustomEvent.
4
+ * If web it uses document, if panel it uses webview
5
+ * @param eventName Name of the CustomEvent
6
+ * @param handler Handler to trigger
7
+ */
8
+ export declare const useCustomEvent: (eventName: 'onGeometryChanged' | 'onModelChanged' | 'onResultChanged', handler: EventHandler<any>) => void;
@@ -4,8 +4,12 @@ declare global {
4
4
  chrome?: any;
5
5
  }
6
6
  }
7
- export declare const useGetGeometry: () => {
7
+ export interface MeshOptions {
8
+ gridSize?: number;
9
+ union?: boolean;
10
+ }
11
+ export declare const useGetGeometry: (meshOptions?: MeshOptions) => {
8
12
  host: string;
9
13
  geometry: Blob;
10
- getGeometry: (key?: any, selection?: any, force?: any) => void;
14
+ getGeometry: (key?: any, selection?: boolean, force?: boolean, useSelection?: boolean) => void;
11
15
  };
@@ -41072,12 +41072,13 @@ function stubFalse() {
41072
41072
  module.exports = isEqual;
41073
41073
  });
41074
41074
 
41075
- var useGetGeometry = function () {
41075
+ var useGetGeometry = function (meshOptions) {
41076
+ if (meshOptions === void 0) { meshOptions = {}; }
41076
41077
  var host = getHost();
41077
41078
  var _a = useState(undefined), geometry = _a[0], setGeometry = _a[1];
41078
41079
  var geometryRef = useRef(undefined);
41079
41080
  var setReturnVal = useCallback(function (_a, force) {
41080
- var data = _a.data; _a.identifier;
41081
+ var data = _a.data;
41081
41082
  var bytes = new TextEncoder().encode(data);
41082
41083
  if (!force && geometryRef.current) {
41083
41084
  if (!lodash_isequal(bytes, geometryRef.current)) {
@@ -41104,17 +41105,27 @@ var useGetGeometry = function () {
41104
41105
  // @ts-ignore
41105
41106
  return function () { return window.parent.readGeometry = undefined; };
41106
41107
  }, [host, setReturnVal]);
41107
- var dotNetGetGeometry = useCallback(function (key, selection, force) {
41108
+ var dotNetGetGeometry = useCallback(function (key, selection, force, useSelection) {
41108
41109
  if (key === void 0) { key = 'use-get-geometry'; }
41109
41110
  if (selection === void 0) { selection = false; }
41110
41111
  if (force === void 0) { force = false; }
41112
+ if (useSelection === void 0) { useSelection = true; }
41111
41113
  if (!checkDotNet())
41112
41114
  return;
41113
41115
  var res = {
41114
41116
  data: null,
41115
41117
  identifier: null,
41116
41118
  };
41117
- res = window.parent.chrome.webview.hostObjects.sync.geometry.Get(key, selection);
41119
+ var options = (Object.values(meshOptions).length !== 0) ? {
41120
+ select: selection,
41121
+ useSelection: useSelection,
41122
+ gridSize: meshOptions.gridSize,
41123
+ merge: meshOptions.union
41124
+ } : {
41125
+ select: selection,
41126
+ useSelection: useSelection
41127
+ };
41128
+ res = window.parent.chrome.webview.hostObjects.sync.geometry.Read(key, JSON.stringify(options));
41118
41129
  if (res) {
41119
41130
  setReturnVal(res, force);
41120
41131
  }
@@ -47924,23 +47935,50 @@ var GetModelActions;
47924
47935
  GetModelActions["preview"] = "preview";
47925
47936
  })(GetModelActions || (GetModelActions = {}));
47926
47937
 
47938
+ /**
47939
+ * Listen for a CustomEvent.
47940
+ * If web it uses document, if panel it uses webview
47941
+ * @param eventName Name of the CustomEvent
47942
+ * @param handler Handler to trigger
47943
+ */
47944
+ var useCustomEvent = function (eventName, handler) {
47945
+ var host = getHost();
47946
+ useEffect(function () {
47947
+ // If web use document
47948
+ var owner = document;
47949
+ // If panel use webview
47950
+ if (host !== 'web') {
47951
+ owner = window.parent.chrome.webview;
47952
+ }
47953
+ owner.addEventListener(eventName, handler);
47954
+ return function () {
47955
+ owner.removeEventListener(eventName, handler);
47956
+ };
47957
+ }, []);
47958
+ };
47959
+
47927
47960
  var GetGeometry = function (_a) {
47928
- 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;
47929
- var subscribeRef = useRef();
47961
+ 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;
47962
+ // Hooks
47930
47963
  var sendMessage = useSendMessage().sendMessage;
47931
- var _e = useState(performance.now().toString()), key = _e[0], setKey = _e[1];
47932
- var _f = useState(false), isClicked = _f[0], setIsClicked = _f[1];
47933
- var _g = useState(), selection = _g[0], setSelection = _g[1];
47934
- var _h = useState(), subscribe = _h[0], setSubscribe = _h[1];
47935
- var _j = useState(), preview = _j[0], setPreview = _j[1];
47964
+ var _f = useGetGeometry(meshOptions), host = _f.host, geometry = _f.geometry, getGeometry = _f.getGeometry;
47965
+ var _g = useState(false), isClicked = _g[0], setIsClicked = _g[1];
47966
+ var _h = useState(), selection = _h[0], setSelection = _h[1];
47967
+ var _j = useState(), subscribe = _j[0], setSubscribe = _j[1];
47968
+ var _k = useState(), preview = _k[0], setPreview = _k[1];
47969
+ var _l = useState(), refresh = _l[0], setRefresh = _l[1];
47970
+ var _m = useState(), result = _m[0], setResult = _m[1];
47971
+ // This method does not read runtime state variables. Props only
47972
+ var customEventHandler = function (e) {
47973
+ (e.detail.id === defaultKey) && setRefresh(performance.now().toString());
47974
+ };
47975
+ useCustomEvent('onGeometryChanged', customEventHandler);
47936
47976
  // Config only on bootstrap
47937
47977
  var initialConfig = useMemo(function () {
47938
47978
  if (!optionsConfig)
47939
47979
  return undefined;
47940
47980
  return optionsConfig;
47941
47981
  }, []);
47942
- // pollination-react-io hooks
47943
- var _k = useGetGeometry(), host = _k.host, geometry = _k.geometry, getGeometry = _k.getGeometry;
47944
47982
  // set selection and subscribe on props change
47945
47983
  useEffect(function () {
47946
47984
  if (!initialConfig)
@@ -47955,61 +47993,59 @@ var GetGeometry = function (_a) {
47955
47993
  setSelection(sel);
47956
47994
  setSubscribe(sub);
47957
47995
  }, [initialConfig]);
47996
+ /**
47997
+ * From Blob geometry to string
47998
+ */
47958
47999
  useEffect(function () {
47959
- // Send data only after the first click
47960
- if (!geometry || !setParentState || !isClicked)
48000
+ // Only if clicked
48001
+ if (!geometry || !isClicked)
47961
48002
  return;
47962
48003
  var fr = new FileReader();
47963
48004
  fr.onload = function () {
47964
48005
  if (typeof this.result !== 'string')
47965
48006
  return;
47966
- setParentState({ geometry: JSON.parse(this.result) });
47967
- // If preview is ON
47968
- preview && sendMessage('SubscribePreviewGeometry', {
47969
- data: this.result,
47970
- uniqueId: defaultKey,
47971
- options: {}
47972
- });
47973
- // If preview is OFF
47974
- !preview && sendMessage('ClearGeometry', {
47975
- data: this.result,
47976
- uniqueId: defaultKey,
47977
- options: {}
47978
- });
48007
+ setResult(this.result);
47979
48008
  };
47980
48009
  fr.readAsText(geometry);
47981
- }, [geometry, setParentState, preview]);
47982
- // subscribe
48010
+ }, [geometry]);
48011
+ /**
48012
+ * Set parent state if result change
48013
+ */
47983
48014
  useEffect(function () {
47984
- if (!getGeometry)
48015
+ if (!result || !setParentState)
47985
48016
  return;
47986
- if (subscribe
47987
- && typeof subscribeRef.current === 'undefined') {
47988
- subscribeRef.current = setInterval(function () {
47989
- getGeometry(key);
47990
- }, 1000);
47991
- }
47992
- else if (!subscribe
47993
- && typeof subscribeRef.current !== 'undefined') {
47994
- clearInterval(subscribeRef.current);
47995
- subscribeRef.current = undefined;
47996
- }
47997
- }, [getGeometry, key, subscribe, subscribeRef, selection]);
47998
- // selection and subscription
48017
+ setParentState({ geometry: JSON.parse(result) });
48018
+ }, [result, setParentState]);
48019
+ /**
48020
+ * Preview only
48021
+ */
47999
48022
  useEffect(function () {
48000
- // If selection is deactivated and subscription is active
48001
- if (!selection && typeof subscribeRef.current !== 'undefined') {
48002
- clearInterval(subscribeRef.current);
48003
- subscribeRef.current = undefined;
48004
- // Force subscribe
48005
- setKey(performance.now().toString());
48006
- }
48007
- }, [selection]);
48023
+ if (!result)
48024
+ return;
48025
+ // Preview ON
48026
+ preview && sendMessage('SubscribePreviewGeometry', {
48027
+ data: result,
48028
+ uniqueId: defaultKey,
48029
+ options: {}
48030
+ });
48031
+ // Preview OFF
48032
+ !preview && sendMessage('ClearGeometry', {
48033
+ data: result,
48034
+ uniqueId: defaultKey,
48035
+ options: {}
48036
+ });
48037
+ }, [result, preview]);
48038
+ // Event effect if subscribe is active
48039
+ useEffect(function () {
48040
+ if (!getGeometry)
48041
+ return;
48042
+ subscribe && getGeometry(defaultKey, false, false, selection);
48043
+ }, [getGeometry, refresh]);
48008
48044
  return (React__default.createElement(SettingsButton, { icon: useIcon && ((isClicked && geometry) ? React__default.createElement(CheckCircle$1, null) : undefined), onClick: function () {
48009
48045
  if (!getGeometry)
48010
48046
  return;
48011
48047
  setIsClicked(true);
48012
- getGeometry(key, selection, true);
48048
+ getGeometry(defaultKey, selection, true, selection);
48013
48049
  }, disabled: typeof getGeometry === 'undefined',
48014
48050
  // @ts-ignore
48015
48051
  options: host !== 'revit' ? [{
@@ -48033,10 +48069,6 @@ var GetGeometry = function (_a) {
48033
48069
  checked: selection,
48034
48070
  icon: React__default.createElement(BoundingBox$1, { size: 16 }),
48035
48071
  onSelect: function () {
48036
- // reset key when "select" option is deselected
48037
- if (selection) {
48038
- setKey(performance.now().toString());
48039
- }
48040
48072
  setSelection(function (state) { return !state; });
48041
48073
  },
48042
48074
  },