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