@equinor/echo-framework 0.8.6 → 0.8.7

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.
Files changed (77) hide show
  1. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkButtons.helpers.d.ts +47 -0
  2. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkButtons.helpers.test.d.ts +1 -0
  3. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkToCommApp.d.ts +14 -0
  4. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkToMcApp.d.ts +3 -1
  5. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkToProCoSys.d.ts +1 -2
  6. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkToSap.d.ts +3 -0
  7. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkToSemiDoc.d.ts +4 -0
  8. package/dist/components/contextualAppLinks/externalLinkButtons/externalLinkToTr2000.d.ts +2 -0
  9. package/dist/components/contextualAppLinks/externalLinkButtons/iconButtonSpinner.d.ts +18 -0
  10. package/dist/components/contextualAppLinks/externalLinkButtons/index.d.ts +1 -0
  11. package/dist/components/externalLinkButton/externalLinkButton.d.ts +16 -7
  12. package/dist/components/realTimeData/hooks/useSignalR.d.ts +3 -2
  13. package/dist/hooks/useSemi.d.ts +11 -7
  14. package/dist/hooks/useTagDetails.d.ts +10 -3
  15. package/dist/index.d.ts +11 -3
  16. package/dist/services/api/api-manager.d.ts +1 -1
  17. package/dist/services/api/api-tag-details.d.ts +18 -0
  18. package/dist/services/api/api-tag-details.test.d.ts +1 -0
  19. package/dist/services/api/api-tags.d.ts +17 -0
  20. package/dist/services/api/api-tags.test.d.ts +1 -0
  21. package/dist/services/api/index.d.ts +1 -0
  22. package/dist/services/echopediaAnalyticsModule/echopediaAnalyticsModule.d.ts +1 -0
  23. package/dist/src/components/containers/layout.module.css.js +1 -1
  24. package/dist/src/components/containers/layouts.js +4 -2
  25. package/dist/src/components/contextualAppLinks/externalAppsMenu.js +4 -4
  26. package/dist/src/components/contextualAppLinks/externalLinkButtons/allExternalLinks.js +66 -11
  27. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkButtons.helpers.js +169 -0
  28. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToCommApp.js +93 -0
  29. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToMcApp.js +60 -5
  30. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToProCoSys.js +43 -11
  31. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToSafeX.js +1 -1
  32. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToSap.js +58 -11
  33. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToSemiDoc.js +16 -5
  34. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToStid.js +1 -1
  35. package/dist/src/components/contextualAppLinks/externalLinkButtons/externalLinkToTr2000.js +67 -16
  36. package/dist/src/components/contextualAppLinks/externalLinkButtons/iconButtonSpinner.js +44 -0
  37. package/dist/src/components/contextualAppLinks/externalLinkButtons/iconButtonSpinner.module.css.js +15 -0
  38. package/dist/src/components/externalLinkButton/externalLinkButton.js +89 -34
  39. package/dist/src/components/externalLinkButton/externalLinkButton.module.css.js +5 -2
  40. package/dist/src/components/realTimeData/components/connectorForIMSTag/IMSConnector.module.css.js +3 -2
  41. package/dist/src/components/realTimeData/components/connectorForIMSTag/RealTimeConnectorForIMSTag.js +32 -7
  42. package/dist/src/components/realTimeData/hooks/useSignalR.js +4 -2
  43. package/dist/src/coreApplication/EchoBarComponent.js +8 -9
  44. package/dist/src/coreApplication/EchoContent.js +1 -5
  45. package/dist/src/coreApplication/EchoContent.module.css.js +1 -5
  46. package/dist/src/hooks/useSemi.js +40 -14
  47. package/dist/src/hooks/useTagDetails.js +116 -45
  48. package/dist/src/icons/common/CommissionApp-icon.png.js +7 -0
  49. package/dist/src/icons/common/Evision.svg.js +3 -2
  50. package/dist/src/icons/common/Fusion.svg.js +30 -25
  51. package/dist/src/icons/common/McApp.svg.js +10 -6
  52. package/dist/src/icons/common/Notification.svg.js +82 -0
  53. package/dist/src/icons/common/ProCoSysIcon.svg.js +3 -2
  54. package/dist/src/icons/common/SapLogo.svg.js +5 -4
  55. package/dist/src/icons/common/SemiIcon.svg.js +11 -11
  56. package/dist/src/icons/common/Stid.svg.js +3 -2
  57. package/dist/src/icons/common/TR2000.svg.js +8 -6
  58. package/dist/src/icons/common/WorkOrder.svg.js +72 -0
  59. package/dist/src/icons/common/Yammer.svg.js +2 -1
  60. package/dist/src/icons/common/satos-logo.png.js +7 -0
  61. package/dist/src/index.js +15 -1
  62. package/dist/src/services/api/api-manager.js +2 -2
  63. package/dist/src/services/api/api-realtimedata.js +3 -1
  64. package/dist/src/services/api/api-tag-details.js +66 -0
  65. package/dist/src/services/api/api-tags.js +29 -0
  66. package/dist/src/services/echopediaAnalyticsModule/echopediaAnalyticsModule.js +10 -0
  67. package/dist/src/types/pingableSources.js +1 -0
  68. package/dist/src/utils/navigationUtils.js +28 -0
  69. package/dist/src/utils/plantInfo.js +1 -0
  70. package/dist/types/api-proCoSysTagResponse.d.ts +8 -0
  71. package/dist/types/pingableSources.d.ts +2 -1
  72. package/dist/utils/index.d.ts +1 -0
  73. package/dist/utils/navigationUtils.d.ts +7 -0
  74. package/dist/utils/navigationUtils.test.d.ts +1 -0
  75. package/dist/utils/plantInfo.d.ts +6 -0
  76. package/dist/utils/plantInfo.test.d.ts +1 -0
  77. package/package.json +3 -3
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, '__esModule', {
6
+ value: true
7
+ });
8
+
9
+ var _tslib = require('../../../../_virtual/_tslib.js');
10
+
11
+ var EchoCore = require('@equinor/echo-core');
12
+
13
+ var apiTagDetails = require('../../../services/api/api-tag-details.js');
14
+
15
+ var apiTags = require('../../../services/api/api-tags.js');
16
+
17
+ var echopediaAnalyticsModule = require('../../../services/echopediaAnalyticsModule/echopediaAnalyticsModule.js');
18
+
19
+ var toastActions = require('../../../services/eventHubActions/toastActions.js');
20
+
21
+ function _interopDefaultLegacy(e) {
22
+ return e && _typeof(e) === 'object' && 'default' in e ? e : {
23
+ 'default': e
24
+ };
25
+ }
26
+
27
+ var EchoCore__default = /*#__PURE__*/_interopDefaultLegacy(EchoCore);
28
+ /**
29
+ * Specific tool for external link buttons to help build URLS for deep linking into ProCoSys web app.
30
+ * Fetches both tag details and tag information from ProCoSys.
31
+ *
32
+ * @param {Object} params
33
+ * @param {string} params.tagNo The tag number to query.
34
+ * @param {string} params.instCode Plant installation code for the given tag.
35
+ * @returns {GetTagDetailsAndProCoSysDataResult} response - The returned promise will resolve once both API calls are resolved. (with Promise.all)
36
+ * @returns {TagDetailsDto} response.tagDetails - Result of tag details API call.
37
+ * @returns {ProCoSysApiTag} response.proCoSysTag - Tag related information from the ProCoSys system.
38
+ * @returns {hasError} response.hasError - indicates if there were any errors during the API calls. The exception is handled under the hood.
39
+ */
40
+
41
+
42
+ function getTagDetailsAndProCoSysData(_ref) {
43
+ var tagNo = _ref.tagNo,
44
+ instCode = _ref.instCode;
45
+ return _tslib.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
46
+ var tagDetailsPromise, proCoSysTagPromise, response;
47
+ return regeneratorRuntime.wrap(function _callee$(_context) {
48
+ while (1) {
49
+ switch (_context.prev = _context.next) {
50
+ case 0:
51
+ tagDetailsPromise = apiTagDetails.getTagDetails({
52
+ tagNo: tagNo,
53
+ instCode: instCode
54
+ });
55
+ proCoSysTagPromise = apiTags.getTagFromProCoSys({
56
+ tagNo: tagNo,
57
+ instCode: instCode
58
+ });
59
+ response = {
60
+ tagDetails: undefined,
61
+ proCoSysTag: undefined,
62
+ hasError: false
63
+ };
64
+ _context.next = 5;
65
+ return Promise.all([tagDetailsPromise, proCoSysTagPromise].map(function (actualPromise, i) {
66
+ return actualPromise["catch"](function (error) {
67
+ error.index = i;
68
+ throw error;
69
+ });
70
+ })).then(function (responses) {
71
+ response.tagDetails = responses[0];
72
+ response.proCoSysTag = responses[1].find(function (item) {
73
+ return item.isMaster;
74
+ });
75
+
76
+ if (!response.proCoSysTag) {
77
+ toastActions.displayToast({
78
+ message: "Tag with number ".concat(response.tagDetails.tagNo, " does not exists in ProCoSys.")
79
+ });
80
+ response.hasError = true;
81
+ }
82
+ }, function (error) {
83
+ var errorSource = error.index === 0 ? 'tag details' : 'ProCoSys tag data';
84
+ var errorMessage = "Failed to fetch ".concat(errorSource, " for tagNo: ").concat(tagNo, " with instCode: ").concat(instCode, ". Please try again later.");
85
+ delete error.index;
86
+ EchoCore__default["default"].handleErrors && EchoCore__default["default"].handleErrors(error, echopediaAnalyticsModule.echopediaAnalyticsModule);
87
+ toastActions.displayToast({
88
+ message: errorMessage
89
+ });
90
+ response.hasError = true;
91
+ });
92
+
93
+ case 5:
94
+ return _context.abrupt("return", response);
95
+
96
+ case 6:
97
+ case "end":
98
+ return _context.stop();
99
+ }
100
+ }
101
+ }, _callee);
102
+ }));
103
+ }
104
+ /**
105
+ * Wraps the 'getTagDetails' function. Handles and logs any Error thrown by it whi;e displaying an error message toast.
106
+ * Use 'getTagDetails' if you want complete freedom on how you handle any exceptions.
107
+ *
108
+ * If there were any errors during the API call, the returned value will have a 'hasError' flag set to 'true'.
109
+ *
110
+ * @param {Object} params
111
+ * @param {string} params.tagNo The tag number to query.
112
+ * @param {string} params.instCode Plant installation code for the given tag.
113
+ * @param {AbortSignal} params.abortSignal A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object.
114
+ * @returns {getTagDetailsWithErrorHandlingResponse} response
115
+ * @returns {TagDetailsDto} response.tagDetails - Result of tag details API call.
116
+ * @returns {hasError} response.hasError - indicates if there were any errors during the API call.
117
+ */
118
+
119
+
120
+ function getTagDetailsWithErrorHandling(_ref2) {
121
+ var tagNo = _ref2.tagNo,
122
+ instCode = _ref2.instCode,
123
+ abortSignal = _ref2.abortSignal;
124
+ return _tslib.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
125
+ var result;
126
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
127
+ while (1) {
128
+ switch (_context2.prev = _context2.next) {
129
+ case 0:
130
+ result = {
131
+ tagDetails: undefined,
132
+ hasError: false
133
+ };
134
+ _context2.prev = 1;
135
+ _context2.next = 4;
136
+ return apiTagDetails.getTagDetails({
137
+ tagNo: tagNo,
138
+ instCode: instCode,
139
+ abortSignal: abortSignal
140
+ });
141
+
142
+ case 4:
143
+ result.tagDetails = _context2.sent;
144
+ _context2.next = 12;
145
+ break;
146
+
147
+ case 7:
148
+ _context2.prev = 7;
149
+ _context2.t0 = _context2["catch"](1);
150
+ EchoCore__default["default"].handleErrors && EchoCore__default["default"].handleErrors(_context2.t0, echopediaAnalyticsModule.echopediaAnalyticsModule);
151
+ toastActions.displayToast({
152
+ message: "Failed to fetch tag details for tagNo: ".concat(tagNo, " with instCode: ").concat(instCode, ". Please try again alter.")
153
+ });
154
+ result.hasError = true;
155
+
156
+ case 12:
157
+ return _context2.abrupt("return", result);
158
+
159
+ case 13:
160
+ case "end":
161
+ return _context2.stop();
162
+ }
163
+ }
164
+ }, _callee2, null, [[1, 7]]);
165
+ }));
166
+ }
167
+
168
+ exports.getTagDetailsAndProCoSysData = getTagDetailsAndProCoSysData;
169
+ exports.getTagDetailsWithErrorHandling = getTagDetailsWithErrorHandling;
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, '__esModule', {
6
+ value: true
7
+ });
8
+
9
+ var _tslib = require('../../../../_virtual/_tslib.js');
10
+
11
+ var EchoCore = require('@equinor/echo-core');
12
+
13
+ var React = require('react');
14
+
15
+ var externalLinkButton = require('../../externalLinkButton/externalLinkButton.js');
16
+
17
+ var externalLinkButtons_helpers = require('./externalLinkButtons.helpers.js');
18
+
19
+ function _interopDefaultLegacy(e) {
20
+ return e && _typeof(e) === 'object' && 'default' in e ? e : {
21
+ 'default': e
22
+ };
23
+ }
24
+
25
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
+ /**
27
+ * External link button to Commissioning web app.
28
+ *
29
+ * @param {string} tagNo The tag's number to open in the Comm app.
30
+ * @param {string} instCode Plant installation code.
31
+ * @returns {React.FC<ExternalLinkToMcAppProps>} React component.
32
+ */
33
+
34
+
35
+ var ExternalLinkToCommApp = function ExternalLinkToCommApp(_ref) {
36
+ var tagNo = _ref.tagNo,
37
+ instCode = _ref.instCode;
38
+ var proCoSysPlantCode = EchoCore.useProCoSysPlantId();
39
+
40
+ function createUrl(params) {
41
+ return _tslib.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
42
+ var _yield$externalLinkBu, tagDetails, proCoSysTag, hasError;
43
+
44
+ return regeneratorRuntime.wrap(function _callee$(_context) {
45
+ while (1) {
46
+ switch (_context.prev = _context.next) {
47
+ case 0:
48
+ _context.next = 2;
49
+ return externalLinkButtons_helpers.getTagDetailsAndProCoSysData(Object.assign({}, params));
50
+
51
+ case 2:
52
+ _yield$externalLinkBu = _context.sent;
53
+ tagDetails = _yield$externalLinkBu.tagDetails;
54
+ proCoSysTag = _yield$externalLinkBu.proCoSysTag;
55
+ hasError = _yield$externalLinkBu.hasError;
56
+ return _context.abrupt("return", hasError ? undefined : "https://apps.procosys.com/comm/".concat(proCoSysPlantCode, "/").concat(tagDetails === null || tagDetails === void 0 ? void 0 : tagDetails.projectCode, "/Tag/").concat(proCoSysTag === null || proCoSysTag === void 0 ? void 0 : proCoSysTag.id));
57
+
58
+ case 7:
59
+ case "end":
60
+ return _context.stop();
61
+ }
62
+ }
63
+ }, _callee);
64
+ }));
65
+ }
66
+
67
+ return /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
68
+ buttonName: "Comm App",
69
+ buttonIcon: "CommApp",
70
+ getUrlToOpen: function getUrlToOpen() {
71
+ return _tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
72
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
73
+ while (1) {
74
+ switch (_context2.prev = _context2.next) {
75
+ case 0:
76
+ return _context2.abrupt("return", createUrl({
77
+ tagNo: tagNo,
78
+ instCode: instCode
79
+ }));
80
+
81
+ case 1:
82
+ case "end":
83
+ return _context2.stop();
84
+ }
85
+ }
86
+ }, _callee2);
87
+ }));
88
+ },
89
+ buttonStyle: externalLinkButton.ExternalLinkButtonStyle.Rounded
90
+ });
91
+ };
92
+
93
+ exports.ExternalLinkToCommApp = ExternalLinkToCommApp;
@@ -6,10 +6,16 @@ Object.defineProperty(exports, '__esModule', {
6
6
  value: true
7
7
  });
8
8
 
9
+ var _tslib = require('../../../../_virtual/_tslib.js');
10
+
11
+ var EchoCore = require('@equinor/echo-core');
12
+
9
13
  var React = require('react');
10
14
 
11
15
  var externalLinkButton = require('../../externalLinkButton/externalLinkButton.js');
12
16
 
17
+ var externalLinkButtons_helpers = require('./externalLinkButtons.helpers.js');
18
+
13
19
  function _interopDefaultLegacy(e) {
14
20
  return e && _typeof(e) === 'object' && 'default' in e ? e : {
15
21
  'default': e
@@ -18,19 +24,68 @@ function _interopDefaultLegacy(e) {
18
24
 
19
25
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
20
26
  /**
21
- * External link button to McApp.
27
+ * External link button to Mechanical Completion web app.
22
28
  *
23
29
  * @param {string} tagNo The tag's number to open in McApp.
30
+ * @param {string} instCode Plant installation code.
24
31
  * @returns {React.FC<ExternalLinkToMcAppProps>} React component.
25
32
  */
26
33
 
27
34
 
28
35
  var ExternalLinkToMcApp = function ExternalLinkToMcApp(_ref) {
29
- var tagNo = _ref.tagNo;
30
- return /*#__PURE__*/React__default["default"].createElement(externalLinkButton["default"], {
31
- buttonName: "McApp",
36
+ var tagNo = _ref.tagNo,
37
+ instCode = _ref.instCode;
38
+ var proCoSysPlantCode = EchoCore.useProCoSysPlantId();
39
+
40
+ function createUrl(params) {
41
+ return _tslib.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
42
+ var _yield$externalLinkBu, tagDetails, proCoSysTag, hasError;
43
+
44
+ return regeneratorRuntime.wrap(function _callee$(_context) {
45
+ while (1) {
46
+ switch (_context.prev = _context.next) {
47
+ case 0:
48
+ _context.next = 2;
49
+ return externalLinkButtons_helpers.getTagDetailsAndProCoSysData(Object.assign({}, params));
50
+
51
+ case 2:
52
+ _yield$externalLinkBu = _context.sent;
53
+ tagDetails = _yield$externalLinkBu.tagDetails;
54
+ proCoSysTag = _yield$externalLinkBu.proCoSysTag;
55
+ hasError = _yield$externalLinkBu.hasError;
56
+ return _context.abrupt("return", hasError ? undefined : "https://apps.procosys.com/mc/".concat(proCoSysPlantCode, "/").concat(tagDetails === null || tagDetails === void 0 ? void 0 : tagDetails.projectCode, "/Tag/").concat(proCoSysTag === null || proCoSysTag === void 0 ? void 0 : proCoSysTag.id));
57
+
58
+ case 7:
59
+ case "end":
60
+ return _context.stop();
61
+ }
62
+ }
63
+ }, _callee);
64
+ }));
65
+ }
66
+
67
+ return /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
68
+ buttonName: "Mc App",
32
69
  buttonIcon: "McApp",
33
- linkTo: "mcapp://v1:tagscope:".concat(tagNo),
70
+ getUrlToOpen: function getUrlToOpen() {
71
+ return _tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
72
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
73
+ while (1) {
74
+ switch (_context2.prev = _context2.next) {
75
+ case 0:
76
+ return _context2.abrupt("return", createUrl({
77
+ tagNo: tagNo,
78
+ instCode: instCode
79
+ }));
80
+
81
+ case 1:
82
+ case "end":
83
+ return _context2.stop();
84
+ }
85
+ }
86
+ }, _callee2);
87
+ }));
88
+ },
34
89
  buttonStyle: externalLinkButton.ExternalLinkButtonStyle.Rounded
35
90
  });
36
91
  };
@@ -6,14 +6,16 @@ Object.defineProperty(exports, '__esModule', {
6
6
  value: true
7
7
  });
8
8
 
9
+ var _tslib = require('../../../../_virtual/_tslib.js');
10
+
9
11
  var EchoCore = require('@equinor/echo-core');
10
12
 
11
13
  var React = require('react');
12
14
 
13
- var useTagDetails = require('../../../hooks/useTagDetails.js');
14
-
15
15
  var externalLinkButton = require('../../externalLinkButton/externalLinkButton.js');
16
16
 
17
+ var externalLinkButtons_helpers = require('./externalLinkButtons.helpers.js');
18
+
17
19
  function _interopDefaultLegacy(e) {
18
20
  return e && _typeof(e) === 'object' && 'default' in e ? e : {
19
21
  'default': e
@@ -23,10 +25,9 @@ function _interopDefaultLegacy(e) {
23
25
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
24
26
  /**
25
27
  * External link button to ProCoSys.
26
- * Will only render if the passed tagNo has any tag details in the actually selected plant.
27
28
  *
28
29
  * @param {string} tagNo The tag's number to open in ProCoSys.
29
- * @param {string} instCode Plant installation code.
30
+ * @param {TagDetailsDto} tagDetails The given tags detailed information.
30
31
  * @returns {React.FC<ExternalLinkToProCoSysProps>} React component.
31
32
  */
32
33
 
@@ -34,17 +35,48 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
34
35
  var ExternalLinkToProCoSys = function ExternalLinkToProCoSys(_ref) {
35
36
  var tagNo = _ref.tagNo,
36
37
  instCode = _ref.instCode;
37
- var tagDetails = useTagDetails.useTagDetails({
38
- tagNo: tagNo,
39
- instCode: instCode
40
- });
41
38
  var proCoSysPlantCode = EchoCore.useProCoSysPlantId();
42
- return tagDetails ? /*#__PURE__*/React__default["default"].createElement(externalLinkButton["default"], {
39
+
40
+ function createUrl(params) {
41
+ return _tslib.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
42
+ var _yield$externalLinkBu, tagDetails, hasError;
43
+
44
+ return regeneratorRuntime.wrap(function _callee$(_context) {
45
+ while (1) {
46
+ switch (_context.prev = _context.next) {
47
+ case 0:
48
+ _context.next = 2;
49
+ return externalLinkButtons_helpers.getTagDetailsWithErrorHandling({
50
+ tagNo: params.tagNo,
51
+ instCode: params.instCode
52
+ });
53
+
54
+ case 2:
55
+ _yield$externalLinkBu = _context.sent;
56
+ tagDetails = _yield$externalLinkBu.tagDetails;
57
+ hasError = _yield$externalLinkBu.hasError;
58
+ return _context.abrupt("return", hasError ? undefined : "https://procosys.equinor.com/".concat(proCoSysPlantCode, "/Link/TAG?TagNo=").concat(tagNo, "&project=").concat(tagDetails === null || tagDetails === void 0 ? void 0 : tagDetails.projectCode));
59
+
60
+ case 6:
61
+ case "end":
62
+ return _context.stop();
63
+ }
64
+ }
65
+ }, _callee);
66
+ }));
67
+ }
68
+
69
+ return /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
43
70
  buttonName: "ProCoSys",
44
71
  buttonIcon: "ProCoSys",
45
- linkTo: "https://procosys.equinor.com/".concat(proCoSysPlantCode, "/Link/TAG?TagNo=").concat(tagNo, "&project=").concat(tagDetails.projectCode),
72
+ getUrlToOpen: function getUrlToOpen() {
73
+ return createUrl({
74
+ tagNo: tagNo,
75
+ instCode: instCode
76
+ });
77
+ },
46
78
  buttonStyle: externalLinkButton.ExternalLinkButtonStyle.Rounded
47
- }) : null;
79
+ });
48
80
  };
49
81
 
50
82
  exports.ExternalLinkToProCoSys = ExternalLinkToProCoSys;
@@ -27,7 +27,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
27
27
 
28
28
  var ExternalLinkToSafeX = function ExternalLinkToSafeX(_ref) {
29
29
  var tag = _ref.tag;
30
- return /*#__PURE__*/React__default["default"].createElement(externalLinkButton["default"], {
30
+ return /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
31
31
  buttonName: "SafeX",
32
32
  buttonIcon: "SafeX",
33
33
  linkTo: "https://safex.equinor.com/search?keyword=".concat(tag.description),
@@ -6,16 +6,18 @@ Object.defineProperty(exports, '__esModule', {
6
6
  value: true
7
7
  });
8
8
 
9
+ var _tslib = require('../../../../_virtual/_tslib.js');
10
+
9
11
  var EchoUtils = require('@equinor/echo-utils');
10
12
 
11
13
  var React = require('react');
12
14
 
13
- var useTagDetails = require('../../../hooks/useTagDetails.js');
14
-
15
15
  var pingableSources = require('../../../types/pingableSources.js');
16
16
 
17
17
  var externalLinkButton = require('../../externalLinkButton/externalLinkButton.js');
18
18
 
19
+ var externalLinkButtons_helpers = require('./externalLinkButtons.helpers.js');
20
+
19
21
  function _interopDefaultLegacy(e) {
20
22
  return e && _typeof(e) === 'object' && 'default' in e ? e : {
21
23
  'default': e
@@ -28,34 +30,79 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
30
  /**
29
31
  * External link button to SAP.
30
32
  * Will only render if the passed tagNo has any tag details in the actually selected plant and SAP is available.
33
+ * It pings SAP to determine whether is available or not.
31
34
  *
32
35
  * @param {string} tagNo The tag's number to open in SAP.
33
36
  * @param {string} instCode Plant installation code.
37
+ * @param {(isLoading: boolean) => void} loadingStatusCallback Callback which provides an 'isLoading' param reflecting the actual loading state of the ping to SAP.
34
38
  * @returns {React.FC<ExternalLinkToSapProps>} React component.
35
39
  */
36
40
 
37
41
 
38
42
  var ExternalLinkToSap = function ExternalLinkToSap(_ref) {
39
43
  var tagNo = _ref.tagNo,
40
- instCode = _ref.instCode;
44
+ instCode = _ref.instCode,
45
+ loadingStatusCallback = _ref.loadingStatusCallback;
41
46
  var _EchoUtils__default$d = EchoUtils__default["default"].Hooks,
42
47
  usePing = _EchoUtils__default$d.usePing,
43
48
  useIsIosDevice = _EchoUtils__default$d.useIsIosDevice;
44
- var tagDetails = useTagDetails.useTagDetails({
45
- tagNo: tagNo,
46
- instCode: instCode
47
- });
48
49
 
49
50
  var _usePing = usePing(pingableSources.PingableSources.Sap),
50
- isSourceAvailable = _usePing.isSourceAvailable;
51
+ isSourceAvailable = _usePing.isSourceAvailable,
52
+ isPingLoading = _usePing.isPingLoading;
51
53
 
52
54
  var isIosDevice = useIsIosDevice();
53
- return tagDetails && (isSourceAvailable || isIosDevice) ? /*#__PURE__*/React__default["default"].createElement(externalLinkButton["default"], {
55
+
56
+ function createUrl(params) {
57
+ return _tslib.__awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
58
+ var _yield$externalLinkBu, tagDetails, hasError;
59
+
60
+ return regeneratorRuntime.wrap(function _callee$(_context) {
61
+ while (1) {
62
+ switch (_context.prev = _context.next) {
63
+ case 0:
64
+ _context.next = 2;
65
+ return externalLinkButtons_helpers.getTagDetailsWithErrorHandling({
66
+ tagNo: params.tagNo,
67
+ instCode: params.instCode
68
+ });
69
+
70
+ case 2:
71
+ _yield$externalLinkBu = _context.sent;
72
+ tagDetails = _yield$externalLinkBu.tagDetails;
73
+ hasError = _yield$externalLinkBu.hasError;
74
+ return _context.abrupt("return", hasError ? undefined : "https://p03web.statoil.no/sap/bc/gui/sap/its/webgui?sap-client=505&sap-language=EN&~transaction=*ih06%20STRNO-LOW=".concat(tagDetails === null || tagDetails === void 0 ? void 0 : tagDetails.plantNo, "-").concat(tagNo, "#"));
75
+
76
+ case 6:
77
+ case "end":
78
+ return _context.stop();
79
+ }
80
+ }
81
+ }, _callee);
82
+ }));
83
+ }
84
+
85
+ React.useEffect(function () {
86
+ if (!!loadingStatusCallback) {
87
+ loadingStatusCallback(isPingLoading);
88
+ }
89
+ }, [isPingLoading, loadingStatusCallback]);
90
+
91
+ if (!isIosDevice && !isSourceAvailable) {
92
+ return null;
93
+ }
94
+
95
+ return /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
54
96
  buttonName: "Sap",
55
97
  buttonIcon: "Sap",
56
- linkTo: "https://p03web.statoil.no/sap/bc/gui/sap/its/webgui?sap-client=505&sap-language=EN&~transaction=*ih06%20STRNO-LOW=".concat(tagDetails.plantNo, "-").concat(tagNo, "#"),
98
+ getUrlToOpen: function getUrlToOpen() {
99
+ return createUrl({
100
+ tagNo: tagNo,
101
+ instCode: instCode
102
+ });
103
+ },
57
104
  buttonStyle: externalLinkButton.ExternalLinkButtonStyle.Rounded
58
- }) : null;
105
+ });
59
106
  };
60
107
 
61
108
  exports.ExternalLinkToSap = ExternalLinkToSap;
@@ -24,20 +24,31 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
24
24
  * Will only render if Semi is available for the passed tagNo.
25
25
  *
26
26
  * @param {string} tagNo The tag's number to open in Semi.
27
+ * @param {string} instCode Plant installation code.
28
+ * @param {(isLoading: boolean) => void} loadingStatusCallback Callback which provides an 'isLoading' param reflecting the actual API call state for checking Semi availability.
27
29
  * @returns {React.FC<ExternalLinkToSemiDocProps>} React component.
28
30
  */
29
31
 
30
32
 
31
33
  var ExternalLinkToSemiDoc = function ExternalLinkToSemiDoc(_ref) {
32
- var tagNo = _ref.tagNo;
34
+ var tagNo = _ref.tagNo,
35
+ instCode = _ref.instCode,
36
+ loadingStatusCallback = _ref.loadingStatusCallback;
33
37
 
34
38
  var _useSemi$useSemi = useSemi.useSemi({
35
- tagNo: tagNo
39
+ tagNo: tagNo,
40
+ instCode: instCode
36
41
  }),
37
42
  isSemiDocumentAvailable = _useSemi$useSemi.isSemiDocumentAvailable,
38
- semiDocumentId = _useSemi$useSemi.semiDocumentId;
39
-
40
- return isSemiDocumentAvailable ? /*#__PURE__*/React__default["default"].createElement(externalLinkButton["default"], {
43
+ semiDocumentId = _useSemi$useSemi.semiDocumentId,
44
+ isSemiLoading = _useSemi$useSemi.isSemiLoading;
45
+
46
+ React.useEffect(function () {
47
+ if (!!loadingStatusCallback) {
48
+ loadingStatusCallback(isSemiLoading);
49
+ }
50
+ }, [isSemiLoading, loadingStatusCallback]);
51
+ return isSemiDocumentAvailable && !isSemiLoading ? /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
41
52
  buttonName: "Semi",
42
53
  buttonIcon: "Semi",
43
54
  linkTo: "https://semi.equinor.com/uploaddocumentation?semiId=".concat(semiDocumentId),
@@ -29,7 +29,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
29
29
  var ExternalLinkToStid = function ExternalLinkToStid(_ref) {
30
30
  var tagNo = _ref.tagNo,
31
31
  instCode = _ref.instCode;
32
- return /*#__PURE__*/React__default["default"].createElement(externalLinkButton["default"], {
32
+ return /*#__PURE__*/React__default["default"].createElement(externalLinkButton.ExternalLinkButton, {
33
33
  buttonName: "STID",
34
34
  buttonIcon: "Stid",
35
35
  linkTo: "https://stid.equinor.com/".concat(instCode, "/tag/").concat(tagNo),