@monkvision/common 4.0.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.
Files changed (183) hide show
  1. package/LICENSE +32 -0
  2. package/README/APP_UTILS.md +52 -0
  3. package/README/HOOKS.md +242 -0
  4. package/README/INTERNATIONALIZATION.md +89 -0
  5. package/README/STATE_MANAGEMENT.md +125 -0
  6. package/README/THEMING.md +70 -0
  7. package/README/UTILITIES.md +254 -0
  8. package/README.md +23 -0
  9. package/lib/PreventExit/hooks.d.ts +15 -0
  10. package/lib/PreventExit/hooks.js +27 -0
  11. package/lib/PreventExit/hooks.js.map +1 -0
  12. package/lib/PreventExit/index.d.ts +1 -0
  13. package/lib/PreventExit/index.js +18 -0
  14. package/lib/PreventExit/index.js.map +1 -0
  15. package/lib/PreventExit/store.d.ts +23 -0
  16. package/lib/PreventExit/store.js +41 -0
  17. package/lib/PreventExit/store.js.map +1 -0
  18. package/lib/apps/analytics.d.ts +2 -0
  19. package/lib/apps/analytics.js +16 -0
  20. package/lib/apps/analytics.js.map +1 -0
  21. package/lib/apps/appState.d.ts +61 -0
  22. package/lib/apps/appState.js +11 -0
  23. package/lib/apps/appState.js.map +1 -0
  24. package/lib/apps/appStateProvider.d.ts +64 -0
  25. package/lib/apps/appStateProvider.js +116 -0
  26. package/lib/apps/appStateProvider.js.map +1 -0
  27. package/lib/apps/index.d.ts +3 -0
  28. package/lib/apps/index.js +20 -0
  29. package/lib/apps/index.js.map +1 -0
  30. package/lib/apps/monitoring.d.ts +2 -0
  31. package/lib/apps/monitoring.js +25 -0
  32. package/lib/apps/monitoring.js.map +1 -0
  33. package/lib/apps/searchParams.d.ts +60 -0
  34. package/lib/apps/searchParams.js +81 -0
  35. package/lib/apps/searchParams.js.map +1 -0
  36. package/lib/hooks/index.d.ts +12 -0
  37. package/lib/hooks/index.js +29 -0
  38. package/lib/hooks/index.js.map +1 -0
  39. package/lib/hooks/useAsyncEffect.d.ts +7 -0
  40. package/lib/hooks/useAsyncEffect.js +37 -0
  41. package/lib/hooks/useAsyncEffect.js.map +1 -0
  42. package/lib/hooks/useAsyncInterval.d.ts +7 -0
  43. package/lib/hooks/useAsyncInterval.js +54 -0
  44. package/lib/hooks/useAsyncInterval.js.map +1 -0
  45. package/lib/hooks/useInteractiveStatus.d.ts +52 -0
  46. package/lib/hooks/useInteractiveStatus.js +70 -0
  47. package/lib/hooks/useInteractiveStatus.js.map +1 -0
  48. package/lib/hooks/useInterval.d.ts +5 -0
  49. package/lib/hooks/useInterval.js +27 -0
  50. package/lib/hooks/useInterval.js.map +1 -0
  51. package/lib/hooks/useLoadingState.d.ts +33 -0
  52. package/lib/hooks/useLoadingState.js +36 -0
  53. package/lib/hooks/useLoadingState.js.map +1 -0
  54. package/lib/hooks/useObjectMemo.d.ts +12 -0
  55. package/lib/hooks/useObjectMemo.js +20 -0
  56. package/lib/hooks/useObjectMemo.js.map +1 -0
  57. package/lib/hooks/useObjectTranslation.d.ts +15 -0
  58. package/lib/hooks/useObjectTranslation.js +19 -0
  59. package/lib/hooks/useObjectTranslation.js.map +1 -0
  60. package/lib/hooks/useQueue.d.ts +152 -0
  61. package/lib/hooks/useQueue.js +194 -0
  62. package/lib/hooks/useQueue.js.map +1 -0
  63. package/lib/hooks/useResponsiveStyle.d.ts +28 -0
  64. package/lib/hooks/useResponsiveStyle.js +64 -0
  65. package/lib/hooks/useResponsiveStyle.js.map +1 -0
  66. package/lib/hooks/useSearchParams.d.ts +4 -0
  67. package/lib/hooks/useSearchParams.js +12 -0
  68. package/lib/hooks/useSearchParams.js.map +1 -0
  69. package/lib/hooks/useSightLabel.d.ts +21 -0
  70. package/lib/hooks/useSightLabel.js +19 -0
  71. package/lib/hooks/useSightLabel.js.map +1 -0
  72. package/lib/hooks/useWindowDimensions.d.ts +15 -0
  73. package/lib/hooks/useWindowDimensions.js +27 -0
  74. package/lib/hooks/useWindowDimensions.js.map +1 -0
  75. package/lib/i18n/index.d.ts +2 -0
  76. package/lib/i18n/index.js +19 -0
  77. package/lib/i18n/index.js.map +1 -0
  78. package/lib/i18n/translations/image.d.ts +22 -0
  79. package/lib/i18n/translations/image.js +408 -0
  80. package/lib/i18n/translations/image.js.map +1 -0
  81. package/lib/i18n/translations/index.d.ts +2 -0
  82. package/lib/i18n/translations/index.js +19 -0
  83. package/lib/i18n/translations/index.js.map +1 -0
  84. package/lib/i18n/translations/vehicleParts.d.ts +5 -0
  85. package/lib/i18n/translations/vehicleParts.js +461 -0
  86. package/lib/i18n/translations/vehicleParts.js.map +1 -0
  87. package/lib/i18n/utils.d.ts +45 -0
  88. package/lib/i18n/utils.js +86 -0
  89. package/lib/i18n/utils.js.map +1 -0
  90. package/lib/index.d.ts +7 -0
  91. package/lib/index.js +24 -0
  92. package/lib/index.js.map +1 -0
  93. package/lib/state/actions/createdOneImage.d.ts +44 -0
  94. package/lib/state/actions/createdOneImage.js +52 -0
  95. package/lib/state/actions/createdOneImage.js.map +1 -0
  96. package/lib/state/actions/gotOneInspection.d.ts +24 -0
  97. package/lib/state/actions/gotOneInspection.js +55 -0
  98. package/lib/state/actions/gotOneInspection.js.map +1 -0
  99. package/lib/state/actions/index.d.ts +6 -0
  100. package/lib/state/actions/index.js +23 -0
  101. package/lib/state/actions/index.js.map +1 -0
  102. package/lib/state/actions/monkAction.d.ts +34 -0
  103. package/lib/state/actions/monkAction.js +30 -0
  104. package/lib/state/actions/monkAction.js.map +1 -0
  105. package/lib/state/actions/resetState.d.ts +20 -0
  106. package/lib/state/actions/resetState.js +21 -0
  107. package/lib/state/actions/resetState.js.map +1 -0
  108. package/lib/state/actions/updatedManyTasks.d.ts +32 -0
  109. package/lib/state/actions/updatedManyTasks.js +47 -0
  110. package/lib/state/actions/updatedManyTasks.js.map +1 -0
  111. package/lib/state/actions/updatedVehicle.d.ts +38 -0
  112. package/lib/state/actions/updatedVehicle.js +50 -0
  113. package/lib/state/actions/updatedVehicle.js.map +1 -0
  114. package/lib/state/context.d.ts +21 -0
  115. package/lib/state/context.js +10 -0
  116. package/lib/state/context.js.map +1 -0
  117. package/lib/state/hooks.d.ts +8 -0
  118. package/lib/state/hooks.js +20 -0
  119. package/lib/state/hooks.js.map +1 -0
  120. package/lib/state/index.d.ts +6 -0
  121. package/lib/state/index.js +23 -0
  122. package/lib/state/index.js.map +1 -0
  123. package/lib/state/provider.d.ts +19 -0
  124. package/lib/state/provider.js +40 -0
  125. package/lib/state/provider.js.map +1 -0
  126. package/lib/state/reducer.d.ts +6 -0
  127. package/lib/state/reducer.js +24 -0
  128. package/lib/state/reducer.js.map +1 -0
  129. package/lib/state/state.d.ts +50 -0
  130. package/lib/state/state.js +22 -0
  131. package/lib/state/state.js.map +1 -0
  132. package/lib/theme/context.d.ts +5 -0
  133. package/lib/theme/context.js +10 -0
  134. package/lib/theme/context.js.map +1 -0
  135. package/lib/theme/default/index.d.ts +1 -0
  136. package/lib/theme/default/index.js +18 -0
  137. package/lib/theme/default/index.js.map +1 -0
  138. package/lib/theme/default/palette.d.ts +2 -0
  139. package/lib/theme/default/palette.js +69 -0
  140. package/lib/theme/default/palette.js.map +1 -0
  141. package/lib/theme/hooks.d.ts +5 -0
  142. package/lib/theme/hooks.js +13 -0
  143. package/lib/theme/hooks.js.map +1 -0
  144. package/lib/theme/index.d.ts +5 -0
  145. package/lib/theme/index.js +22 -0
  146. package/lib/theme/index.js.map +1 -0
  147. package/lib/theme/provider.d.ts +16 -0
  148. package/lib/theme/provider.js +29 -0
  149. package/lib/theme/provider.js.map +1 -0
  150. package/lib/theme/theme.d.ts +17 -0
  151. package/lib/theme/theme.js +54 -0
  152. package/lib/theme/theme.js.map +1 -0
  153. package/lib/utils/array.utils.d.ts +26 -0
  154. package/lib/utils/array.utils.js +75 -0
  155. package/lib/utils/array.utils.js.map +1 -0
  156. package/lib/utils/browser.utils.d.ts +4 -0
  157. package/lib/utils/browser.utils.js +16 -0
  158. package/lib/utils/browser.utils.js.map +1 -0
  159. package/lib/utils/color.utils.d.ts +51 -0
  160. package/lib/utils/color.utils.js +155 -0
  161. package/lib/utils/color.utils.js.map +1 -0
  162. package/lib/utils/env.utils.d.ts +5 -0
  163. package/lib/utils/env.utils.js +16 -0
  164. package/lib/utils/env.utils.js.map +1 -0
  165. package/lib/utils/index.d.ts +9 -0
  166. package/lib/utils/index.js +26 -0
  167. package/lib/utils/index.js.map +1 -0
  168. package/lib/utils/mimetype.utils.d.ts +14 -0
  169. package/lib/utils/mimetype.utils.js +69 -0
  170. package/lib/utils/mimetype.utils.js.map +1 -0
  171. package/lib/utils/promise.utils.d.ts +4 -0
  172. package/lib/utils/promise.utils.js +13 -0
  173. package/lib/utils/promise.utils.js.map +1 -0
  174. package/lib/utils/state.utils.d.ts +9 -0
  175. package/lib/utils/state.utils.js +35 -0
  176. package/lib/utils/state.utils.js.map +1 -0
  177. package/lib/utils/string.utils.d.ts +22 -0
  178. package/lib/utils/string.utils.js +48 -0
  179. package/lib/utils/string.utils.js.map +1 -0
  180. package/lib/utils/zlib.utils.d.ts +8 -0
  181. package/lib/utils/zlib.utils.js +30 -0
  182. package/lib/utils/zlib.utils.js.map +1 -0
  183. package/package.json +97 -0
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.useMonkAppState = exports.MonkAppStateProvider = exports.STORAGE_KEY_AUTH_TOKEN = void 0;
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var sights_1 = require("@monkvision/sights");
17
+ var react_1 = require("react");
18
+ var hooks_1 = require("../hooks");
19
+ var searchParams_1 = require("./searchParams");
20
+ var appState_1 = require("./appState");
21
+ var monitoring_1 = require("./monitoring");
22
+ var analytics_1 = require("./analytics");
23
+ /**
24
+ * Local storage key used within Monk web applications to store the authentication token.
25
+ */
26
+ exports.STORAGE_KEY_AUTH_TOKEN = '@monk_authToken';
27
+ function getSights(config, vehicleType, steeringWheel) {
28
+ var currentVehicleType = vehicleType !== null && vehicleType !== void 0 ? vehicleType : config.defaultVehicleType;
29
+ var sightIds;
30
+ if (config.enableSteeringWheelPosition) {
31
+ var currentSteeringWheel = steeringWheel !== null && steeringWheel !== void 0 ? steeringWheel : config.defaultSteeringWheelPosition;
32
+ sightIds = config.sights[currentSteeringWheel][currentVehicleType];
33
+ }
34
+ else {
35
+ sightIds = config.sights[currentVehicleType];
36
+ }
37
+ if (!sightIds) {
38
+ throw new Error('Invalid application configuration. No sights have been found for the current vehicle type steering wheel position.');
39
+ }
40
+ return sightIds.map(function (id) {
41
+ if (!sights_1.sights[id]) {
42
+ throw new Error("Sight with ID \"".concat(id, "\" does not exist."));
43
+ }
44
+ return sights_1.sights[id];
45
+ });
46
+ }
47
+ /**
48
+ * A React context provider that declares the state for the common parameters used by Monk applications. The parameters
49
+ * are described in the `MonkAppState` interface. Using options available in the App config (`config` prop), this
50
+ * component can also fetch initial values for these params directly from the URL search params and the web local
51
+ * storage.
52
+ *
53
+ * @see MonkAppState
54
+ * @see MonkAppStateProviderProps
55
+ */
56
+ function MonkAppStateProvider(_a) {
57
+ var config = _a.config, onFetchAuthToken = _a.onFetchAuthToken, onFetchLanguage = _a.onFetchLanguage, children = _a.children;
58
+ var loading = (0, hooks_1.useLoadingState)(true);
59
+ var _b = (0, react_1.useState)(null), authToken = _b[0], setAuthToken = _b[1];
60
+ var _c = (0, react_1.useState)(null), inspectionId = _c[0], setInspectionId = _c[1];
61
+ var _d = (0, react_1.useState)(null), vehicleType = _d[0], setVehicleType = _d[1];
62
+ var _e = (0, react_1.useState)(null), steeringWheel = _e[0], setSteeringWheel = _e[1];
63
+ var monkSearchParams = (0, searchParams_1.useMonkSearchParams)();
64
+ (0, monitoring_1.useAppStateMonitoring)({ authToken: authToken, inspectionId: inspectionId, vehicleType: vehicleType, steeringWheel: steeringWheel });
65
+ (0, analytics_1.useAppStateAnalytics)({ inspectionId: inspectionId });
66
+ (0, react_1.useEffect)(function () {
67
+ var _a;
68
+ loading.onSuccess();
69
+ var fetchedToken = localStorage.getItem(exports.STORAGE_KEY_AUTH_TOKEN);
70
+ if (config.fetchFromSearchParams) {
71
+ fetchedToken = (_a = monkSearchParams.get(searchParams_1.MonkSearchParam.TOKEN)) !== null && _a !== void 0 ? _a : fetchedToken;
72
+ setInspectionId(function (param) { var _a; return (_a = monkSearchParams.get(searchParams_1.MonkSearchParam.INSPECTION_ID)) !== null && _a !== void 0 ? _a : param; });
73
+ setVehicleType(function (param) { var _a; return (_a = monkSearchParams.get(searchParams_1.MonkSearchParam.VEHICLE_TYPE)) !== null && _a !== void 0 ? _a : param; });
74
+ setSteeringWheel(function (param) { var _a; return (_a = monkSearchParams.get(searchParams_1.MonkSearchParam.STEERING_WHEEL)) !== null && _a !== void 0 ? _a : param; });
75
+ var lang = monkSearchParams.get(searchParams_1.MonkSearchParam.LANGUAGE);
76
+ if (lang) {
77
+ onFetchLanguage === null || onFetchLanguage === void 0 ? void 0 : onFetchLanguage(lang);
78
+ }
79
+ }
80
+ if (fetchedToken) {
81
+ setAuthToken(fetchedToken);
82
+ onFetchAuthToken === null || onFetchAuthToken === void 0 ? void 0 : onFetchAuthToken();
83
+ }
84
+ }, [monkSearchParams, config]);
85
+ var getCurrentSights = (0, react_1.useCallback)(function () { return getSights(config, vehicleType, steeringWheel); }, [config, vehicleType, steeringWheel]);
86
+ var appState = (0, hooks_1.useObjectMemo)({
87
+ loading: loading,
88
+ config: config,
89
+ authToken: authToken,
90
+ inspectionId: inspectionId,
91
+ vehicleType: vehicleType,
92
+ steeringWheel: steeringWheel,
93
+ getCurrentSights: getCurrentSights,
94
+ setAuthToken: setAuthToken,
95
+ setInspectionId: setInspectionId,
96
+ setVehicleType: setVehicleType,
97
+ setSteeringWheel: setSteeringWheel,
98
+ });
99
+ return (0, jsx_runtime_1.jsx)(appState_1.MonkAppStateContext.Provider, __assign({ value: appState }, { children: children }));
100
+ }
101
+ exports.MonkAppStateProvider = MonkAppStateProvider;
102
+ function useMonkAppState(options) {
103
+ var value = (0, react_1.useContext)(appState_1.MonkAppStateContext);
104
+ if (!value) {
105
+ throw new Error('MonkAppState is null! Did you forget to place the <MonkAppStateProvider /> component?');
106
+ }
107
+ if ((options === null || options === void 0 ? void 0 : options.requireInspection) && !value.authToken) {
108
+ throw new Error('Authentication token is null but was required by the current component.');
109
+ }
110
+ if ((options === null || options === void 0 ? void 0 : options.requireInspection) && !value.inspectionId) {
111
+ throw new Error('Inspection ID is null but was required by the current component.');
112
+ }
113
+ return value;
114
+ }
115
+ exports.useMonkAppState = useMonkAppState;
116
+ //# sourceMappingURL=appStateProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appStateProvider.js","sourceRoot":"","sources":["../../src/apps/appStateProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,6CAA4C;AAC5C,+BAA+F;AAC/F,kCAA0D;AAC1D,+CAAsE;AACtE,uCAA+D;AAC/D,2CAAqD;AACrD,yCAAmD;AAEnD;;GAEG;AACU,QAAA,sBAAsB,GAAG,iBAAiB,CAAC;AAqBxD,SAAS,SAAS,CAChB,MAAwB,EACxB,WAA+B,EAC/B,aAA2C;IAE3C,IAAM,kBAAkB,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,MAAM,CAAC,kBAAkB,CAAC;IACpE,IAAI,QAA8B,CAAC;IACnC,IAAI,MAAM,CAAC,2BAA2B,EAAE;QACtC,IAAM,oBAAoB,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,MAAM,CAAC,4BAA4B,CAAC;QAClF,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,kBAAkB,CAAC,CAAC;KACpE;SAAM;QACL,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;KAC9C;IACD,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CACb,oHAAoH,CACrH,CAAC;KACH;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAC,EAAE;QACrB,IAAI,CAAC,eAAM,CAAC,EAAE,CAAC,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,0BAAkB,EAAE,uBAAmB,CAAC,CAAC;SAC1D;QACD,OAAO,eAAM,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAC,EAKU;QAJ7C,MAAM,YAAA,EACN,gBAAgB,sBAAA,EAChB,eAAe,qBAAA,EACf,QAAQ,cAAA;IAER,IAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAC;IAChC,IAAA,KAA4B,IAAA,gBAAQ,EAAgB,IAAI,CAAC,EAAxD,SAAS,QAAA,EAAE,YAAY,QAAiC,CAAC;IAC1D,IAAA,KAAkC,IAAA,gBAAQ,EAAgB,IAAI,CAAC,EAA9D,YAAY,QAAA,EAAE,eAAe,QAAiC,CAAC;IAChE,IAAA,KAAgC,IAAA,gBAAQ,EAAqB,IAAI,CAAC,EAAjE,WAAW,QAAA,EAAE,cAAc,QAAsC,CAAC;IACnE,IAAA,KAAoC,IAAA,gBAAQ,EAA+B,IAAI,CAAC,EAA/E,aAAa,QAAA,EAAE,gBAAgB,QAAgD,CAAC;IACvF,IAAM,gBAAgB,GAAG,IAAA,kCAAmB,GAAE,CAAC;IAC/C,IAAA,kCAAqB,EAAC,EAAE,SAAS,WAAA,EAAE,YAAY,cAAA,EAAE,WAAW,aAAA,EAAE,aAAa,eAAA,EAAE,CAAC,CAAC;IAC/E,IAAA,gCAAoB,EAAC,EAAE,YAAY,cAAA,EAAE,CAAC,CAAC;IAEvC,IAAA,iBAAS,EAAC;;QACR,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,YAAY,GAAkB,YAAY,CAAC,OAAO,CAAC,8BAAsB,CAAC,CAAC;QAE/E,IAAI,MAAM,CAAC,qBAAqB,EAAE;YAChC,YAAY,GAAG,MAAA,gBAAgB,CAAC,GAAG,CAAC,8BAAe,CAAC,KAAK,CAAC,mCAAI,YAAY,CAAC;YAC3E,eAAe,CAAC,UAAC,KAAK,YAAK,OAAA,MAAA,gBAAgB,CAAC,GAAG,CAAC,8BAAe,CAAC,aAAa,CAAC,mCAAI,KAAK,CAAA,EAAA,CAAC,CAAC;YACzF,cAAc,CAAC,UAAC,KAAK,YAAK,OAAA,MAAA,gBAAgB,CAAC,GAAG,CAAC,8BAAe,CAAC,YAAY,CAAC,mCAAI,KAAK,CAAA,EAAA,CAAC,CAAC;YACvF,gBAAgB,CAAC,UAAC,KAAK,YAAK,OAAA,MAAA,gBAAgB,CAAC,GAAG,CAAC,8BAAe,CAAC,cAAc,CAAC,mCAAI,KAAK,CAAA,EAAA,CAAC,CAAC;YAC3F,IAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,8BAAe,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,IAAI,EAAE;gBACR,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,IAAI,CAAC,CAAC;aACzB;SACF;QAED,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,YAAY,CAAC,CAAC;YAC3B,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,EAAI,CAAC;SACtB;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/B,IAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,cAAM,OAAA,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,EAA7C,CAA6C,EACnD,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CACrC,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAA,qBAAa,EAAC;QAC7B,OAAO,SAAA;QACP,MAAM,QAAA;QACN,SAAS,WAAA;QACT,YAAY,cAAA;QACZ,WAAW,aAAA;QACX,aAAa,eAAA;QACb,gBAAgB,kBAAA;QAChB,YAAY,cAAA;QACZ,eAAe,iBAAA;QACf,cAAc,gBAAA;QACd,gBAAgB,kBAAA;KACjB,CAAC,CAAC;IAEH,OAAO,uBAAC,8BAAmB,CAAC,QAAQ,aAAC,KAAK,EAAE,QAAQ,gBAAG,QAAQ,IAAgC,CAAC;AAClG,CAAC;AAxDD,oDAwDC;AA2BD,SAAgB,eAAe,CAAC,OAAgC;IAC9D,IAAM,KAAK,GAAG,IAAA,kBAAU,EAAC,8BAAmB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;KACH;IACD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,KAAI,CAAC,KAAK,CAAC,SAAS,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;KAC5F;IACD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,KAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;KACrF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAdD,0CAcC"}
@@ -0,0 +1,3 @@
1
+ export * from './appState';
2
+ export * from './appStateProvider';
3
+ export * from './searchParams';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./appState"), exports);
18
+ __exportStar(require("./appStateProvider"), exports);
19
+ __exportStar(require("./searchParams"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/apps/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,qDAAmC;AACnC,iDAA+B"}
@@ -0,0 +1,2 @@
1
+ import { MonkAppState } from './appState';
2
+ export declare function useAppStateMonitoring({ authToken, inspectionId, vehicleType, steeringWheel, }: Pick<MonkAppState, 'authToken' | 'inspectionId' | 'vehicleType' | 'steeringWheel'>): void;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAppStateMonitoring = void 0;
4
+ var react_1 = require("react");
5
+ var jwt_decode_1 = require("jwt-decode");
6
+ var monitoring_1 = require("@monkvision/monitoring");
7
+ function useAppStateMonitoring(_a) {
8
+ var authToken = _a.authToken, inspectionId = _a.inspectionId, vehicleType = _a.vehicleType, steeringWheel = _a.steeringWheel;
9
+ var _b = (0, monitoring_1.useMonitoring)(), setTags = _b.setTags, setUserId = _b.setUserId;
10
+ (0, react_1.useEffect)(function () {
11
+ setTags({
12
+ inspectionId: inspectionId,
13
+ vehicleType: vehicleType,
14
+ steeringWheel: steeringWheel,
15
+ });
16
+ }, [inspectionId, vehicleType, steeringWheel, setTags]);
17
+ (0, react_1.useEffect)(function () {
18
+ var userId = authToken ? (0, jwt_decode_1.jwtDecode)(authToken).sub : undefined;
19
+ if (userId) {
20
+ setUserId(userId);
21
+ }
22
+ }, [authToken, setUserId]);
23
+ }
24
+ exports.useAppStateMonitoring = useAppStateMonitoring;
25
+ //# sourceMappingURL=monitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoring.js","sourceRoot":"","sources":["../../src/apps/monitoring.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAClC,yCAAuC;AACvC,qDAAuD;AAGvD,SAAgB,qBAAqB,CAAC,EAK+C;QAJnF,SAAS,eAAA,EACT,YAAY,kBAAA,EACZ,WAAW,iBAAA,EACX,aAAa,mBAAA;IAEP,IAAA,KAAyB,IAAA,0BAAa,GAAE,EAAtC,OAAO,aAAA,EAAE,SAAS,eAAoB,CAAC;IAE/C,IAAA,iBAAS,EAAC;QACR,OAAO,CAAC;YACN,YAAY,cAAA;YACZ,WAAW,aAAA;YACX,aAAa,eAAA;SACd,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC;QACR,IAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAA,sBAAS,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,IAAI,MAAM,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,CAAC;SACnB;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7B,CAAC;AAtBD,sDAsBC"}
@@ -0,0 +1,60 @@
1
+ import { MonkLanguage, SteeringWheelPosition, VehicleType } from '@monkvision/types';
2
+ /**
3
+ * Enumeration of the usual search parameters used by Monk applications. These parameters help configure the application
4
+ * via URL directly.
5
+ */
6
+ export declare enum MonkSearchParam {
7
+ /**
8
+ * Search parameter used to provide an authentication token directly via URL. Note : auth tokens need be compressed
9
+ * using ZLib (ex: using the `zlibCompress` utility function available in this package) and properly URL-encoded
10
+ * before being passed as a URL param. No Monk app should ever use auth tokens obtained from URL search params without
11
+ * compression and encoding.
12
+ *
13
+ * @see zlibCompress
14
+ * @see encodeURIComponent
15
+ */
16
+ TOKEN = "t",
17
+ /**
18
+ * Search parameter used to provide an inspection ID to the app to use directly.
19
+ */
20
+ INSPECTION_ID = "i",
21
+ /**
22
+ * Search parameter used to specify the vehicle type that the application should use. The list of vehicle types
23
+ * available and supported by the Monk SDK is described in the `VehicleType` enum exported by the `@monkvision/types`
24
+ * package.
25
+ *
26
+ * @see VehicleType
27
+ */
28
+ VEHICLE_TYPE = "v",
29
+ /**
30
+ * Search parameter used to specify the language used by the application. The list of languages supported by the Monk
31
+ * SDK is available in the `monkLanguages` array exported by the `@monkvision/types` package.
32
+ *
33
+ * @see monkLanguages
34
+ */
35
+ LANGUAGE = "l",
36
+ /**
37
+ * Search parameter used to specify the position of the steering wheel on the car.
38
+ *
39
+ * @see SteeringWheelPosition
40
+ */
41
+ STEERING_WHEEL = "s"
42
+ }
43
+ /**
44
+ * Getter function used to fetch the value of MonkSearchParams for the current app search params.
45
+ */
46
+ export type MonkSearchParamsGetter = {
47
+ (param: MonkSearchParam.TOKEN): string | null;
48
+ (param: MonkSearchParam.INSPECTION_ID): string | null;
49
+ (param: MonkSearchParam.VEHICLE_TYPE): VehicleType | null;
50
+ (param: MonkSearchParam.STEERING_WHEEL): SteeringWheelPosition | null;
51
+ (param: MonkSearchParam.LANGUAGE): MonkLanguage | null;
52
+ };
53
+ /**
54
+ * Custom hook used to return a getter function used to fetch the value of different MonkSearchParams.
55
+ *
56
+ * @see MonkSearchParam
57
+ */
58
+ export declare function useMonkSearchParams(): {
59
+ get: MonkSearchParamsGetter;
60
+ };
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMonkSearchParams = exports.MonkSearchParam = void 0;
4
+ var types_1 = require("@monkvision/types");
5
+ var react_1 = require("react");
6
+ var hooks_1 = require("../hooks");
7
+ var utils_1 = require("../utils");
8
+ /**
9
+ * Enumeration of the usual search parameters used by Monk applications. These parameters help configure the application
10
+ * via URL directly.
11
+ */
12
+ var MonkSearchParam;
13
+ (function (MonkSearchParam) {
14
+ /**
15
+ * Search parameter used to provide an authentication token directly via URL. Note : auth tokens need be compressed
16
+ * using ZLib (ex: using the `zlibCompress` utility function available in this package) and properly URL-encoded
17
+ * before being passed as a URL param. No Monk app should ever use auth tokens obtained from URL search params without
18
+ * compression and encoding.
19
+ *
20
+ * @see zlibCompress
21
+ * @see encodeURIComponent
22
+ */
23
+ MonkSearchParam["TOKEN"] = "t";
24
+ /**
25
+ * Search parameter used to provide an inspection ID to the app to use directly.
26
+ */
27
+ MonkSearchParam["INSPECTION_ID"] = "i";
28
+ /**
29
+ * Search parameter used to specify the vehicle type that the application should use. The list of vehicle types
30
+ * available and supported by the Monk SDK is described in the `VehicleType` enum exported by the `@monkvision/types`
31
+ * package.
32
+ *
33
+ * @see VehicleType
34
+ */
35
+ MonkSearchParam["VEHICLE_TYPE"] = "v";
36
+ /**
37
+ * Search parameter used to specify the language used by the application. The list of languages supported by the Monk
38
+ * SDK is available in the `monkLanguages` array exported by the `@monkvision/types` package.
39
+ *
40
+ * @see monkLanguages
41
+ */
42
+ MonkSearchParam["LANGUAGE"] = "l";
43
+ /**
44
+ * Search parameter used to specify the position of the steering wheel on the car.
45
+ *
46
+ * @see SteeringWheelPosition
47
+ */
48
+ MonkSearchParam["STEERING_WHEEL"] = "s";
49
+ })(MonkSearchParam = exports.MonkSearchParam || (exports.MonkSearchParam = {}));
50
+ function validateParamValue(value, validValues) {
51
+ var validValuesArray = (Array.isArray(validValues) ? validValues : Object.values(validValues));
52
+ return validValuesArray.includes(value) ? value : null;
53
+ }
54
+ /**
55
+ * Custom hook used to return a getter function used to fetch the value of different MonkSearchParams.
56
+ *
57
+ * @see MonkSearchParam
58
+ */
59
+ function useMonkSearchParams() {
60
+ var searchParams = (0, hooks_1.useSearchParams)();
61
+ var get = (0, react_1.useCallback)(function (param) {
62
+ var value = searchParams.get(param);
63
+ switch (param) {
64
+ case MonkSearchParam.TOKEN:
65
+ return value ? (0, utils_1.zlibDecompress)(value) : null;
66
+ case MonkSearchParam.INSPECTION_ID:
67
+ return value;
68
+ case MonkSearchParam.VEHICLE_TYPE:
69
+ return validateParamValue(value, types_1.VehicleType);
70
+ case MonkSearchParam.STEERING_WHEEL:
71
+ return validateParamValue(value, types_1.SteeringWheelPosition);
72
+ case MonkSearchParam.LANGUAGE:
73
+ return validateParamValue(value, types_1.monkLanguages);
74
+ default:
75
+ return null;
76
+ }
77
+ }, [searchParams]);
78
+ return (0, hooks_1.useObjectMemo)({ get: get });
79
+ }
80
+ exports.useMonkSearchParams = useMonkSearchParams;
81
+ //# sourceMappingURL=searchParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchParams.js","sourceRoot":"","sources":["../../src/apps/searchParams.ts"],"names":[],"mappings":";;;AAAA,2CAM2B;AAC3B,+BAAoC;AACpC,kCAA0D;AAC1D,kCAA0C;AAE1C;;;GAGG;AACH,IAAY,eAoCX;AApCD,WAAY,eAAe;IACzB;;;;;;;;OAQG;IACH,8BAAW,CAAA;IACX;;OAEG;IACH,sCAAmB,CAAA;IACnB;;;;;;OAMG;IACH,qCAAkB,CAAA;IAClB;;;;;OAKG;IACH,iCAAc,CAAA;IACd;;;;OAIG;IACH,uCAAoB,CAAA;AACtB,CAAC,EApCW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAoC1B;AAaD,SAAS,kBAAkB,CACzB,KAAoB,EACpB,WAAkC;IAElC,IAAM,gBAAgB,GAAG,CACvB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CACjD,CAAC;IACvB,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB;IACjC,IAAM,YAAY,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEvC,IAAM,GAAG,GAAG,IAAA,mBAAW,EACrB,UAAC,KAAsB;QACrB,IAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,QAAQ,KAAK,EAAE;YACb,KAAK,eAAe,CAAC,KAAK;gBACxB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9C,KAAK,eAAe,CAAC,aAAa;gBAChC,OAAO,KAAK,CAAC;YACf,KAAK,eAAe,CAAC,YAAY;gBAC/B,OAAO,kBAAkB,CAAC,KAAK,EAAE,mBAAW,CAAC,CAAC;YAChD,KAAK,eAAe,CAAC,cAAc;gBACjC,OAAO,kBAAkB,CAAC,KAAK,EAAE,6BAAqB,CAAC,CAAC;YAC1D,KAAK,eAAe,CAAC,QAAQ;gBAC3B,OAAO,kBAAkB,CAAC,KAAK,EAAE,qBAAa,CAAC,CAAC;YAClD;gBACE,OAAO,IAAI,CAAC;SACf;IACH,CAAC,EACD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,OAAO,IAAA,qBAAa,EAAC,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;AAChC,CAAC;AAzBD,kDAyBC"}
@@ -0,0 +1,12 @@
1
+ export * from './useWindowDimensions';
2
+ export * from './useResponsiveStyle';
3
+ export * from './useInteractiveStatus';
4
+ export * from './useQueue';
5
+ export * from './useObjectTranslation';
6
+ export * from './useSightLabel';
7
+ export * from './useLoadingState';
8
+ export * from './useAsyncEffect';
9
+ export * from './useSearchParams';
10
+ export * from './useInterval';
11
+ export * from './useAsyncInterval';
12
+ export * from './useObjectMemo';
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./useWindowDimensions"), exports);
18
+ __exportStar(require("./useResponsiveStyle"), exports);
19
+ __exportStar(require("./useInteractiveStatus"), exports);
20
+ __exportStar(require("./useQueue"), exports);
21
+ __exportStar(require("./useObjectTranslation"), exports);
22
+ __exportStar(require("./useSightLabel"), exports);
23
+ __exportStar(require("./useLoadingState"), exports);
24
+ __exportStar(require("./useAsyncEffect"), exports);
25
+ __exportStar(require("./useSearchParams"), exports);
26
+ __exportStar(require("./useInterval"), exports);
27
+ __exportStar(require("./useAsyncInterval"), exports);
28
+ __exportStar(require("./useObjectMemo"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,uDAAqC;AACrC,yDAAuC;AACvC,6CAA2B;AAC3B,yDAAuC;AACvC,kDAAgC;AAChC,oDAAkC;AAClC,mDAAiC;AACjC,oDAAkC;AAClC,gDAA8B;AAC9B,qDAAmC;AACnC,kDAAgC"}
@@ -0,0 +1,7 @@
1
+ import { DependencyList } from 'react';
2
+ import { PromiseHandlers } from '@monkvision/types';
3
+ /**
4
+ * Custom hook that can be used to run asyncrhonous effects. It is similar to `useEffect` but makes sure to not execute
5
+ * the effect handlers if the effect's Promise resolves after the current component as been dismounted.
6
+ */
7
+ export declare function useAsyncEffect<T = void>(effect: () => Promise<T>, deps: DependencyList | undefined, handlers?: Partial<PromiseHandlers<T>>): void;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAsyncEffect = void 0;
4
+ var react_1 = require("react");
5
+ /**
6
+ * Custom hook that can be used to run asyncrhonous effects. It is similar to `useEffect` but makes sure to not execute
7
+ * the effect handlers if the effect's Promise resolves after the current component as been dismounted.
8
+ */
9
+ function useAsyncEffect(effect, deps, handlers) {
10
+ (0, react_1.useEffect)(function () {
11
+ var isActive = true;
12
+ effect()
13
+ .then(function (res) {
14
+ var _a;
15
+ if (isActive) {
16
+ (_a = handlers === null || handlers === void 0 ? void 0 : handlers.onResolve) === null || _a === void 0 ? void 0 : _a.call(handlers, res);
17
+ }
18
+ })
19
+ .catch(function (err) {
20
+ var _a;
21
+ if (isActive) {
22
+ (_a = handlers === null || handlers === void 0 ? void 0 : handlers.onReject) === null || _a === void 0 ? void 0 : _a.call(handlers, err);
23
+ }
24
+ })
25
+ .finally(function () {
26
+ var _a;
27
+ if (isActive) {
28
+ (_a = handlers === null || handlers === void 0 ? void 0 : handlers.onComplete) === null || _a === void 0 ? void 0 : _a.call(handlers);
29
+ }
30
+ });
31
+ return function () {
32
+ isActive = false;
33
+ };
34
+ }, deps);
35
+ }
36
+ exports.useAsyncEffect = useAsyncEffect;
37
+ //# sourceMappingURL=useAsyncEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncEffect.js","sourceRoot":"","sources":["../../src/hooks/useAsyncEffect.ts"],"names":[],"mappings":";;;AAAA,+BAAkD;AAGlD;;;GAGG;AACH,SAAgB,cAAc,CAC5B,MAAwB,EACxB,IAAgC,EAChC,QAAsC;IAEtC,IAAA,iBAAS,EAAC;QACR,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE;aACL,IAAI,CAAC,UAAC,GAAG;;YACR,IAAI,QAAQ,EAAE;gBACZ,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,yDAAG,GAAG,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,GAAG;;YACT,IAAI,QAAQ,EAAE;gBACZ,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,yDAAG,GAAG,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC;aACD,OAAO,CAAC;;YACP,IAAI,QAAQ,EAAE;gBACZ,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,wDAAI,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QACL,OAAO;YACL,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC;AA3BD,wCA2BC"}
@@ -0,0 +1,7 @@
1
+ import { PromiseHandlers } from '@monkvision/types';
2
+ /**
3
+ * This custom hook creates an interval that calls the provided async callback every `delay` milliseconds if the
4
+ * previous call isn't still running. If `delay` is `null` or less than 0, the callback will not be called. The
5
+ * promise handlers provided will only be called while the component is still mounted.
6
+ */
7
+ export declare function useAsyncInterval<T>(callback: () => Promise<T>, delay: number | null, handlers?: Partial<PromiseHandlers<T>>): void;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useAsyncInterval = void 0;
4
+ var react_1 = require("react");
5
+ /**
6
+ * This custom hook creates an interval that calls the provided async callback every `delay` milliseconds if the
7
+ * previous call isn't still running. If `delay` is `null` or less than 0, the callback will not be called. The
8
+ * promise handlers provided will only be called while the component is still mounted.
9
+ */
10
+ function useAsyncInterval(callback, delay, handlers) {
11
+ var callbackRef = (0, react_1.useRef)(callback);
12
+ (0, react_1.useLayoutEffect)(function () {
13
+ callbackRef.current = callback;
14
+ }, [callback]);
15
+ (0, react_1.useEffect)(function () {
16
+ var isActive = true;
17
+ var isRunning = false;
18
+ if (delay === null || delay < 0) {
19
+ return function () { };
20
+ }
21
+ var intervalId = setInterval(function () {
22
+ if (!isRunning) {
23
+ isRunning = true;
24
+ callbackRef
25
+ .current()
26
+ .then(function (res) {
27
+ var _a;
28
+ if (isActive) {
29
+ (_a = handlers === null || handlers === void 0 ? void 0 : handlers.onResolve) === null || _a === void 0 ? void 0 : _a.call(handlers, res);
30
+ }
31
+ })
32
+ .catch(function (err) {
33
+ var _a;
34
+ if (isActive) {
35
+ (_a = handlers === null || handlers === void 0 ? void 0 : handlers.onReject) === null || _a === void 0 ? void 0 : _a.call(handlers, err);
36
+ }
37
+ })
38
+ .finally(function () {
39
+ var _a;
40
+ if (isActive) {
41
+ isRunning = false;
42
+ (_a = handlers === null || handlers === void 0 ? void 0 : handlers.onComplete) === null || _a === void 0 ? void 0 : _a.call(handlers);
43
+ }
44
+ });
45
+ }
46
+ }, delay);
47
+ return function () {
48
+ isActive = false;
49
+ clearInterval(intervalId);
50
+ };
51
+ }, [delay]);
52
+ }
53
+ exports.useAsyncInterval = useAsyncInterval;
54
+ //# sourceMappingURL=useAsyncInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAsyncInterval.js","sourceRoot":"","sources":["../../src/hooks/useAsyncInterval.ts"],"names":[],"mappings":";;;AAAA,+BAA2D;AAG3D;;;;GAIG;AACH,SAAgB,gBAAgB,CAC9B,QAA0B,EAC1B,KAAoB,EACpB,QAAsC;IAEtC,IAAM,WAAW,GAAG,IAAA,cAAM,EAAC,QAAQ,CAAC,CAAC;IAErC,IAAA,uBAAe,EAAC;QACd,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAA,iBAAS,EAAC;QACR,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;YAC/B,OAAO,cAAO,CAAC,CAAC;SACjB;QAED,IAAM,UAAU,GAAG,WAAW,CAAC;YAC7B,IAAI,CAAC,SAAS,EAAE;gBACd,SAAS,GAAG,IAAI,CAAC;gBACjB,WAAW;qBACR,OAAO,EAAE;qBACT,IAAI,CAAC,UAAC,GAAG;;oBACR,IAAI,QAAQ,EAAE;wBACZ,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,yDAAG,GAAG,CAAC,CAAC;qBAC5B;gBACH,CAAC,CAAC;qBACD,KAAK,CAAC,UAAC,GAAG;;oBACT,IAAI,QAAQ,EAAE;wBACZ,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,yDAAG,GAAG,CAAC,CAAC;qBAC3B;gBACH,CAAC,CAAC;qBACD,OAAO,CAAC;;oBACP,IAAI,QAAQ,EAAE;wBACZ,SAAS,GAAG,KAAK,CAAC;wBAClB,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,wDAAI,CAAC;qBAC1B;gBACH,CAAC,CAAC,CAAC;aACN;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,OAAO;YACL,QAAQ,GAAG,KAAK,CAAC;YACjB,aAAa,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,CAAC;AAhDD,4CAgDC"}
@@ -0,0 +1,52 @@
1
+ import { MouseEventHandler } from 'react';
2
+ import { InteractiveStatus } from '@monkvision/types';
3
+ /**
4
+ * Object containing the event listeners used to get the current status of an interactive element.
5
+ */
6
+ export interface InteractiveEventListeners {
7
+ onMouseEnter: MouseEventHandler;
8
+ onMouseLeave: MouseEventHandler;
9
+ onMouseDown: MouseEventHandler;
10
+ onMouseUp: MouseEventHandler;
11
+ }
12
+ /**
13
+ * Parameters given to the useInteractiveStatus hook.
14
+ */
15
+ export interface UseInteractiveStatusParams {
16
+ /**
17
+ * Boolean indicating if the element is disabled or not.
18
+ *
19
+ * @default false
20
+ */
21
+ disabled?: boolean;
22
+ /**
23
+ * The event handlers of the component if you need to merge them.
24
+ */
25
+ componentHandlers?: Partial<InteractiveEventListeners>;
26
+ }
27
+ /**
28
+ * The result of the useInteractiveStatus. It contains the current interactive status of the element as well as the
29
+ * event listeners it needs to update its status.
30
+ */
31
+ export interface UseInteractiveStatusResult {
32
+ /**
33
+ * The interactive status of the element.
34
+ */
35
+ status: InteractiveStatus;
36
+ /**
37
+ * The event listeners the element needs to update its status.
38
+ */
39
+ eventHandlers: InteractiveEventListeners;
40
+ }
41
+ /**
42
+ * Custom hook used to manage the interactive state (active, hovered, disabled...) of a React element. This hook returns
43
+ * the state of the element, as well as MouseEvent listeners needed on the element to update its interactive state.
44
+ *
45
+ * @example
46
+ * function TestComponent() {
47
+ * const { status, events } = useInteractiveStatus();
48
+ * useEffect(() => console.log('Button status :', status), [status]);
49
+ * return <button {...events}>My Button</button>;
50
+ * }
51
+ */
52
+ export declare function useInteractiveStatus(params?: UseInteractiveStatusParams): UseInteractiveStatusResult;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useInteractiveStatus = void 0;
4
+ var react_1 = require("react");
5
+ var types_1 = require("@monkvision/types");
6
+ function getInteractiveStatus(_a) {
7
+ var _b = _a.hovered, hovered = _b === void 0 ? false : _b, _c = _a.active, active = _c === void 0 ? false : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d;
8
+ if (disabled) {
9
+ return types_1.InteractiveStatus.DISABLED;
10
+ }
11
+ if (active) {
12
+ return types_1.InteractiveStatus.ACTIVE;
13
+ }
14
+ return hovered ? types_1.InteractiveStatus.HOVERED : types_1.InteractiveStatus.DEFAULT;
15
+ }
16
+ /**
17
+ * Custom hook used to manage the interactive state (active, hovered, disabled...) of a React element. This hook returns
18
+ * the state of the element, as well as MouseEvent listeners needed on the element to update its interactive state.
19
+ *
20
+ * @example
21
+ * function TestComponent() {
22
+ * const { status, events } = useInteractiveStatus();
23
+ * useEffect(() => console.log('Button status :', status), [status]);
24
+ * return <button {...events}>My Button</button>;
25
+ * }
26
+ */
27
+ function useInteractiveStatus(params) {
28
+ var _a, _b, _c, _d;
29
+ var _e = (0, react_1.useState)(false), hovered = _e[0], setHovered = _e[1];
30
+ var _f = (0, react_1.useState)(false), active = _f[0], setActive = _f[1];
31
+ var onMouseEnter = (0, react_1.useCallback)(function (event) {
32
+ var _a;
33
+ setHovered(true);
34
+ if ((_a = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _a === void 0 ? void 0 : _a.onMouseEnter) {
35
+ params.componentHandlers.onMouseEnter(event);
36
+ }
37
+ }, [(_a = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _a === void 0 ? void 0 : _a.onMouseEnter]);
38
+ var onMouseLeave = (0, react_1.useCallback)(function (event) {
39
+ var _a;
40
+ setHovered(false);
41
+ if ((_a = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _a === void 0 ? void 0 : _a.onMouseLeave) {
42
+ params.componentHandlers.onMouseLeave(event);
43
+ }
44
+ }, [(_b = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _b === void 0 ? void 0 : _b.onMouseLeave]);
45
+ var onMouseDown = (0, react_1.useCallback)(function (event) {
46
+ var _a;
47
+ setActive(true);
48
+ if ((_a = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _a === void 0 ? void 0 : _a.onMouseDown) {
49
+ params.componentHandlers.onMouseDown(event);
50
+ }
51
+ }, [(_c = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _c === void 0 ? void 0 : _c.onMouseDown]);
52
+ var onMouseUp = (0, react_1.useCallback)(function (event) {
53
+ var _a;
54
+ setActive(false);
55
+ if ((_a = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _a === void 0 ? void 0 : _a.onMouseUp) {
56
+ params.componentHandlers.onMouseUp(event);
57
+ }
58
+ }, [(_d = params === null || params === void 0 ? void 0 : params.componentHandlers) === null || _d === void 0 ? void 0 : _d.onMouseUp]);
59
+ return (0, react_1.useMemo)(function () { return ({
60
+ status: getInteractiveStatus({ hovered: hovered, active: active, disabled: params === null || params === void 0 ? void 0 : params.disabled }),
61
+ eventHandlers: {
62
+ onMouseEnter: onMouseEnter,
63
+ onMouseLeave: onMouseLeave,
64
+ onMouseDown: onMouseDown,
65
+ onMouseUp: onMouseUp,
66
+ },
67
+ }); }, [hovered, active, params === null || params === void 0 ? void 0 : params.disabled, onMouseEnter, onMouseLeave, onMouseDown, onMouseUp]);
68
+ }
69
+ exports.useInteractiveStatus = useInteractiveStatus;
70
+ //# sourceMappingURL=useInteractiveStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInteractiveStatus.js","sourceRoot":"","sources":["../../src/hooks/useInteractiveStatus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This custom hook creates an interval that calls the provided callback every `delay` milliseconds. If `delay` is
3
+ * `null` or less than 0, the callback will not be called.
4
+ */
5
+ export declare function useInterval(callback: () => void, delay: number | null): void;