pollination-react-io 1.100.0 → 1.101.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
@@ -41210,14 +41210,18 @@ var useGetHbjson = function () {
41210
41210
  // @ts-ignore
41211
41211
  return function () { return window.parent.readHbjson = undefined; };
41212
41212
  }, [setReturnValue]);
41213
- var dotNetGetHbjson = React.useCallback(function (key, selection, force) {
41213
+ var dotNetGetHbjson = React.useCallback(function (key, selection, force, useSelection) {
41214
41214
  if (key === void 0) { key = 'use-get-hbjson'; }
41215
41215
  if (selection === void 0) { selection = false; }
41216
41216
  if (force === void 0) { force = false; }
41217
+ if (useSelection === void 0) { useSelection = true; }
41217
41218
  if (!checkDotNet())
41218
41219
  return;
41219
41220
  var res = window.parent.chrome.webview
41220
- .hostObjects.sync.hbjson.Get(key, selection);
41221
+ .hostObjects.sync.hbjson.Read(key, JSON.stringify({
41222
+ select: selection,
41223
+ useSelection: useSelection
41224
+ }));
41221
41225
  if (res) {
41222
41226
  setReturnValue(res, force);
41223
41227
  }
@@ -41773,15 +41777,42 @@ var GetModelActions$1;
41773
41777
  GetModelActions["preview"] = "preview";
41774
41778
  })(GetModelActions$1 || (GetModelActions$1 = {}));
41775
41779
 
41780
+ /**
41781
+ * Listen for a CustomEvent.
41782
+ * If web it uses document, if panel it uses webview
41783
+ * @param eventName Name of the CustomEvent
41784
+ * @param handler Handler to trigger
41785
+ */
41786
+ var useCustomEvent = function (eventName, handler) {
41787
+ var host = getHost();
41788
+ React.useEffect(function () {
41789
+ // If web use document
41790
+ var owner = document;
41791
+ // If panel use webview
41792
+ if (host !== 'web') {
41793
+ owner = window.parent.chrome.webview;
41794
+ }
41795
+ owner.addEventListener(eventName, handler);
41796
+ return function () {
41797
+ owner.removeEventListener(eventName, handler);
41798
+ };
41799
+ }, []);
41800
+ };
41801
+
41776
41802
  var GetModel = function (_a) {
41777
41803
  var onChange = _a.onChange, optionsConfig = _a.optionsConfig, _b = _a.buttonLabel, buttonLabel = _b === void 0 ? 'Get Model' : _b, _c = _a.showHelpText, showHelpText = _c === void 0 ? true : _c, _d = _a.defaultKey, defaultKey = _d === void 0 ? 'get-model-btn' : _d, _e = _a.useIcon, useIcon = _e === void 0 ? true : _e;
41778
- var subscribeRef = React.useRef();
41779
41804
  var sendHbjson = useSendHbjson().sendHbjson;
41780
- var _f = React.useState(performance.now().toString()), key = _f[0], setKey = _f[1];
41781
- var _g = React.useState(false), isClicked = _g[0], setIsClicked = _g[1];
41782
- var _h = React.useState(), selection = _h[0], setSelection = _h[1];
41783
- var _j = React.useState(), subscribe = _j[0], setSubscribe = _j[1];
41784
- var _k = React.useState(), preview = _k[0], setPreview = _k[1];
41805
+ var _f = React.useState(false), isClicked = _f[0], setIsClicked = _f[1];
41806
+ var _g = React.useState(), selection = _g[0], setSelection = _g[1];
41807
+ var _h = React.useState(), subscribe = _h[0], setSubscribe = _h[1];
41808
+ var _j = React.useState(), preview = _j[0], setPreview = _j[1];
41809
+ var _k = React.useState(), refresh = _k[0], setRefresh = _k[1];
41810
+ var _l = React.useState(), result = _l[0], setResult = _l[1];
41811
+ // This method does not read runtime state variables. Props only
41812
+ var customEventHandler = function (e) {
41813
+ (e.detail.id === defaultKey) && setRefresh(performance.now().toString());
41814
+ };
41815
+ useCustomEvent('onModelChanged', customEventHandler);
41785
41816
  // Config only on bootstrap
41786
41817
  var initialConfig = React.useMemo(function () {
41787
41818
  if (!optionsConfig)
@@ -41789,7 +41820,7 @@ var GetModel = function (_a) {
41789
41820
  return optionsConfig;
41790
41821
  }, []);
41791
41822
  // pollination-react-io hooks
41792
- var _l = useGetHbjson(), host = _l.host, hbjson = _l.hbjson, getHbjson = _l.getHbjson;
41823
+ var _m = useGetHbjson(), host = _m.host, hbjson = _m.hbjson, getHbjson = _m.getHbjson;
41793
41824
  // set selection and subscribe on props change
41794
41825
  React.useEffect(function () {
41795
41826
  if (!initialConfig)
@@ -41804,58 +41835,55 @@ var GetModel = function (_a) {
41804
41835
  setSelection(sel);
41805
41836
  setSubscribe(sub);
41806
41837
  }, [initialConfig]);
41838
+ /**
41839
+ * From Blob geometry to string
41840
+ */
41807
41841
  React.useEffect(function () {
41808
- // Send data only after the first click
41842
+ // Only if clicked
41809
41843
  if (!hbjson || !isClicked)
41810
41844
  return;
41811
- onChange && onChange(new File([hbjson], "Model_linked_from_".concat(host, ".hbjson")));
41812
- if (onChange) {
41813
- var fr = new FileReader();
41814
- fr.onload = function () {
41815
- if (typeof this.result !== 'string')
41816
- return;
41817
- // If preview is ON
41818
- preview && sendHbjson('SubscribePreviewHBJSON', {
41819
- data: this.result,
41820
- uniqueId: defaultKey,
41821
- options: {}
41822
- });
41823
- // If preview is OFF
41824
- !preview && sendHbjson('ClearHBJSON', {
41825
- data: this.result,
41826
- uniqueId: defaultKey,
41827
- options: {}
41828
- });
41829
- };
41830
- fr.readAsText(hbjson);
41831
- }
41832
- }, [hbjson, host, onChange, preview]);
41833
- // subscribe
41845
+ var fr = new FileReader();
41846
+ fr.onload = function () {
41847
+ if (typeof this.result !== 'string')
41848
+ return;
41849
+ setResult(this.result);
41850
+ };
41851
+ fr.readAsText(hbjson);
41852
+ }, [hbjson]);
41853
+ /**
41854
+ * Set parent state if result change
41855
+ */
41834
41856
  React.useEffect(function () {
41835
- if (!getHbjson)
41857
+ if (!result || !onChange)
41836
41858
  return;
41837
- if (subscribe
41838
- && typeof subscribeRef.current === 'undefined') {
41839
- subscribeRef.current = setInterval(function () {
41840
- getHbjson(key, false);
41841
- }, 1000);
41842
- }
41843
- else if (!subscribe
41844
- && typeof subscribeRef.current !== 'undefined') {
41845
- clearInterval(subscribeRef.current);
41846
- subscribeRef.current = undefined;
41847
- }
41848
- }, [getHbjson, key, subscribe, subscribeRef]);
41849
- // selection and subscription
41859
+ onChange(new File([hbjson], "Model_linked_from_".concat(host, ".hbjson")));
41860
+ }, [result, onChange]);
41861
+ /**
41862
+ * Preview only
41863
+ */
41850
41864
  React.useEffect(function () {
41851
- // If selection is deactivated and subscription is active
41852
- if (!selection && typeof subscribeRef.current !== 'undefined') {
41853
- clearInterval(subscribeRef.current);
41854
- subscribeRef.current = undefined;
41855
- // Force subscribe
41856
- setKey(performance.now().toString());
41857
- }
41858
- }, [selection]);
41865
+ if (!result)
41866
+ return;
41867
+ // Preview ON
41868
+ preview && sendHbjson('SubscribePreviewHBJSON', {
41869
+ data: result,
41870
+ uniqueId: defaultKey,
41871
+ options: {}
41872
+ });
41873
+ // Preview OFF
41874
+ !preview && sendHbjson('ClearHBJSON', {
41875
+ data: result,
41876
+ uniqueId: defaultKey,
41877
+ options: {}
41878
+ });
41879
+ }, [result, preview]);
41880
+ // Event effect if subscribe is active
41881
+ // If subscribe is enable or disable rerun
41882
+ React.useEffect(function () {
41883
+ if (!getHbjson)
41884
+ return;
41885
+ subscribe && getHbjson(defaultKey, false, false, selection);
41886
+ }, [getHbjson, refresh, subscribe]);
41859
41887
  return (host === 'web'
41860
41888
  ? (React__default["default"].createElement(FileInput, { onChange: function (file) {
41861
41889
  if (!file)
@@ -41866,7 +41894,7 @@ var GetModel = function (_a) {
41866
41894
  if (!getHbjson)
41867
41895
  return;
41868
41896
  setIsClicked(true);
41869
- getHbjson(key, selection, true);
41897
+ getHbjson(defaultKey, selection, true, selection);
41870
41898
  }, disabled: !getHbjson,
41871
41899
  // @ts-ignore
41872
41900
  options: host !== 'revit' ? [{
@@ -41890,10 +41918,6 @@ var GetModel = function (_a) {
41890
41918
  checked: selection,
41891
41919
  icon: React__default["default"].createElement(BoundingBox$1, { size: 16 }),
41892
41920
  onSelect: function () {
41893
- // reset key when "select" option is deselected
41894
- if (selection) {
41895
- setKey(performance.now().toString());
41896
- }
41897
41921
  setSelection(function (state) { return !state; });
41898
41922
  },
41899
41923
  },
@@ -42266,7 +42290,7 @@ var ComboFileSelector = function (_a) {
42266
42290
  return (React__default["default"].createElement(FileInput, { onChange: onChange, inputProps: inputProps, accept: typeof inputProps.accept === 'string' ?
42267
42291
  inputProps.accept.split(', ') : undefined }));
42268
42292
  case 'get_model':
42269
- return (React__default["default"].createElement(GetModel, { onChange: onChange, inputProps: inputProps, showHelpText: false }));
42293
+ return (React__default["default"].createElement(GetModel, { defaultKey: projectName, onChange: onChange, inputProps: inputProps, showHelpText: false }));
42270
42294
  case 'get_cloud':
42271
42295
  return (React__default["default"].createElement(SelectCloudArtifacts, { projectOwner: projectOwner, projectName: projectName, value: value, hidden: hidden, fileNameMatch: typeof inputProps.accept === 'string' ?
42272
42296
  ".*(".concat(inputProps.accept.replace(/\./g, '').split(', ').join('$|'), "$)") : '.*', onChange: onChange, client: client }));
@@ -47966,28 +47990,6 @@ var GetModelActions;
47966
47990
  GetModelActions["preview"] = "preview";
47967
47991
  })(GetModelActions || (GetModelActions = {}));
47968
47992
 
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
-
47991
47993
  var GetGeometry = function (_a) {
47992
47994
  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
47995
  // Hooks
@@ -48067,11 +48069,12 @@ var GetGeometry = function (_a) {
48067
48069
  });
48068
48070
  }, [result, preview]);
48069
48071
  // Event effect if subscribe is active
48072
+ // If subscribe is enable or disable rerun
48070
48073
  React.useEffect(function () {
48071
48074
  if (!getGeometry)
48072
48075
  return;
48073
48076
  subscribe && getGeometry(defaultKey, false, false, selection);
48074
- }, [getGeometry, refresh]);
48077
+ }, [getGeometry, refresh, subscribe]);
48075
48078
  return (React__default["default"].createElement(SettingsButton, { icon: useIcon && ((isClicked && geometry) ? React__default["default"].createElement(CheckCircle$1, null) : undefined), onClick: function () {
48076
48079
  if (!getGeometry)
48077
48080
  return;