@shopify/app-bridge-react 0.0.0-snapshot-20221220002610

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 (107) hide show
  1. package/README.md +171 -0
  2. package/components/ClientRouter/ClientRouter.d.ts +23 -0
  3. package/components/ClientRouter/ClientRouter.js +52 -0
  4. package/components/ClientRouter/hook.d.ts +10 -0
  5. package/components/ClientRouter/hook.js +20 -0
  6. package/components/ClientRouter/index.d.ts +3 -0
  7. package/components/ClientRouter/index.js +10 -0
  8. package/components/ClientRouter/router.d.ts +5 -0
  9. package/components/ClientRouter/router.js +11 -0
  10. package/components/ContextualSaveBar/ContextualSaveBar.d.ts +9 -0
  11. package/components/ContextualSaveBar/ContextualSaveBar.js +24 -0
  12. package/components/ContextualSaveBar/index.d.ts +3 -0
  13. package/components/ContextualSaveBar/index.js +7 -0
  14. package/components/Loading/Loading.d.ts +19 -0
  15. package/components/Loading/Loading.js +55 -0
  16. package/components/Loading/index.d.ts +2 -0
  17. package/components/Loading/index.js +7 -0
  18. package/components/Modal/Modal.d.ts +32 -0
  19. package/components/Modal/Modal.js +139 -0
  20. package/components/Modal/ModalContent/ModalContent.d.ts +24 -0
  21. package/components/Modal/ModalContent/ModalContent.js +61 -0
  22. package/components/Modal/ModalContent/index.d.ts +2 -0
  23. package/components/Modal/ModalContent/index.js +7 -0
  24. package/components/Modal/index.d.ts +4 -0
  25. package/components/Modal/index.js +10 -0
  26. package/components/NavigationMenu/NavigationMenu.d.ts +17 -0
  27. package/components/NavigationMenu/NavigationMenu.js +40 -0
  28. package/components/NavigationMenu/index.d.ts +3 -0
  29. package/components/NavigationMenu/index.js +7 -0
  30. package/components/Provider/Provider.d.ts +81 -0
  31. package/components/Provider/Provider.js +78 -0
  32. package/components/Provider/index.d.ts +3 -0
  33. package/components/Provider/index.js +7 -0
  34. package/components/ResourcePicker/ResourcePicker.d.ts +36 -0
  35. package/components/ResourcePicker/ResourcePicker.js +120 -0
  36. package/components/ResourcePicker/index.d.ts +3 -0
  37. package/components/ResourcePicker/index.js +7 -0
  38. package/components/RoutePropagator/RoutePropagator.d.ts +22 -0
  39. package/components/RoutePropagator/RoutePropagator.js +54 -0
  40. package/components/RoutePropagator/globals.d.ts +3 -0
  41. package/components/RoutePropagator/globals.js +15 -0
  42. package/components/RoutePropagator/hook.d.ts +10 -0
  43. package/components/RoutePropagator/hook.js +20 -0
  44. package/components/RoutePropagator/index.d.ts +3 -0
  45. package/components/RoutePropagator/index.js +10 -0
  46. package/components/RoutePropagator/route-propagator.d.ts +7 -0
  47. package/components/RoutePropagator/route-propagator.js +91 -0
  48. package/components/TitleBar/TitleBar.d.ts +27 -0
  49. package/components/TitleBar/TitleBar.js +107 -0
  50. package/components/TitleBar/index.d.ts +3 -0
  51. package/components/TitleBar/index.js +7 -0
  52. package/components/Toast/Toast.d.ts +38 -0
  53. package/components/Toast/Toast.js +67 -0
  54. package/components/Toast/index.d.ts +3 -0
  55. package/components/Toast/index.js +7 -0
  56. package/components/index.d.ts +11 -0
  57. package/components/index.js +37 -0
  58. package/components/unstable_Picker/index.d.ts +3 -0
  59. package/components/unstable_Picker/index.js +7 -0
  60. package/components/unstable_Picker/unstable_Picker.d.ts +13 -0
  61. package/components/unstable_Picker/unstable_Picker.js +85 -0
  62. package/context.d.ts +14 -0
  63. package/context.js +10 -0
  64. package/hooks/index.d.ts +9 -0
  65. package/hooks/index.js +19 -0
  66. package/hooks/useAppBridgeState/index.d.ts +1 -0
  67. package/hooks/useAppBridgeState/index.js +13 -0
  68. package/hooks/useAppBridgeState/useAppBridgeState.d.ts +10 -0
  69. package/hooks/useAppBridgeState/useAppBridgeState.js +89 -0
  70. package/hooks/useContextualSaveBar/index.d.ts +1 -0
  71. package/hooks/useContextualSaveBar/index.js +5 -0
  72. package/hooks/useContextualSaveBar/useContextualSaveBar.d.ts +10 -0
  73. package/hooks/useContextualSaveBar/useContextualSaveBar.js +87 -0
  74. package/hooks/useFeatureRequest/index.d.ts +1 -0
  75. package/hooks/useFeatureRequest/index.js +13 -0
  76. package/hooks/useFeatureRequest/useFeatureRequest.d.ts +13 -0
  77. package/hooks/useFeatureRequest/useFeatureRequest.js +49 -0
  78. package/hooks/useFeaturesAvailable/index.d.ts +2 -0
  79. package/hooks/useFeaturesAvailable/index.js +5 -0
  80. package/hooks/useFeaturesAvailable/useFeaturesAvailable.d.ts +12 -0
  81. package/hooks/useFeaturesAvailable/useFeaturesAvailable.js +101 -0
  82. package/hooks/useLocale/index.d.ts +1 -0
  83. package/hooks/useLocale/index.js +5 -0
  84. package/hooks/useLocale/useLocale.d.ts +1 -0
  85. package/hooks/useLocale/useLocale.js +8 -0
  86. package/hooks/useNavigate/index.d.ts +1 -0
  87. package/hooks/useNavigate/index.js +5 -0
  88. package/hooks/useNavigate/useNavigate.d.ts +3 -0
  89. package/hooks/useNavigate/useNavigate.js +63 -0
  90. package/hooks/useNavigationHistory/index.d.ts +1 -0
  91. package/hooks/useNavigationHistory/index.js +5 -0
  92. package/hooks/useNavigationHistory/useNavigationHistory.d.ts +16 -0
  93. package/hooks/useNavigationHistory/useNavigationHistory.js +28 -0
  94. package/hooks/useToast/index.d.ts +1 -0
  95. package/hooks/useToast/index.js +5 -0
  96. package/hooks/useToast/useToast.d.ts +20 -0
  97. package/hooks/useToast/useToast.js +46 -0
  98. package/index.d.ts +4 -0
  99. package/index.js +19 -0
  100. package/package.json +58 -0
  101. package/types.d.ts +35 -0
  102. package/types.js +5 -0
  103. package/umd/index.js +10 -0
  104. package/useAppBridge.d.ts +1 -0
  105. package/useAppBridge.js +13 -0
  106. package/utilities/transformers.d.ts +20 -0
  107. package/utilities/transformers.js +105 -0
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.useAppBridgeState = void 0;
40
+ var react_1 = require("react");
41
+ var useAppBridge_1 = require("../../useAppBridge");
42
+ var useAppBridgeState = function (query) {
43
+ var app = useAppBridge_1.useAppBridge();
44
+ var _a = react_1.useState(), state = _a[0], setState = _a[1];
45
+ var isUnmounted = react_1.useRef(false);
46
+ var refresh = react_1.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
47
+ var newState, _a;
48
+ return __generator(this, function (_b) {
49
+ switch (_b.label) {
50
+ case 0:
51
+ if (!query) return [3 /*break*/, 2];
52
+ return [4 /*yield*/, app.getState(query)];
53
+ case 1:
54
+ _a = _b.sent();
55
+ return [3 /*break*/, 4];
56
+ case 2: return [4 /*yield*/, app.getState()];
57
+ case 3:
58
+ _a = _b.sent();
59
+ _b.label = 4;
60
+ case 4:
61
+ newState = _a;
62
+ if (isUnmounted.current) {
63
+ return [2 /*return*/];
64
+ }
65
+ setState(function (currentState) {
66
+ if (JSON.stringify(newState) === JSON.stringify(currentState)) {
67
+ return currentState;
68
+ }
69
+ return newState;
70
+ });
71
+ return [2 /*return*/];
72
+ }
73
+ });
74
+ }); }, [app, query]);
75
+ react_1.useEffect(function () {
76
+ refresh();
77
+ // Automatically check to see if the state has changed every time an action has been dispatched
78
+ return app.subscribe(function () {
79
+ refresh();
80
+ });
81
+ }, [app, refresh]);
82
+ react_1.useEffect(function () {
83
+ return function () {
84
+ isUnmounted.current = true;
85
+ };
86
+ }, [app]);
87
+ return state;
88
+ };
89
+ exports.useAppBridgeState = useAppBridgeState;
@@ -0,0 +1 @@
1
+ export { useContextualSaveBar } from './useContextualSaveBar';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useContextualSaveBar = void 0;
4
+ var useContextualSaveBar_1 = require("./useContextualSaveBar");
5
+ Object.defineProperty(exports, "useContextualSaveBar", { enumerable: true, get: function () { return useContextualSaveBar_1.useContextualSaveBar; } });
@@ -0,0 +1,10 @@
1
+ import type { ContextualSaveBarApi } from '@shopify/app-bridge/actions/ContextualSaveBar';
2
+ /**
3
+ * useContextualSaveBar hook
4
+ *
5
+ * @remarks
6
+ * React hook which wraps the Shopify App Bridge ContextualSaveBar action.
7
+ *
8
+ * @public
9
+ */
10
+ export declare function useContextualSaveBar(): ContextualSaveBarApi;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.useContextualSaveBar = void 0;
15
+ var react_1 = require("react");
16
+ var ContextualSaveBar_1 = require("@shopify/app-bridge/actions/ContextualSaveBar");
17
+ var useAppBridge_1 = require("../../useAppBridge");
18
+ /**
19
+ * useContextualSaveBar hook
20
+ *
21
+ * @remarks
22
+ * React hook which wraps the Shopify App Bridge ContextualSaveBar action.
23
+ *
24
+ * @public
25
+ */
26
+ function useContextualSaveBar() {
27
+ var app = useAppBridge_1.useAppBridge();
28
+ var visibleRef = react_1.useRef(false);
29
+ var _a = react_1.useState(), onSaveAction = _a[0], setOnSaveAction = _a[1];
30
+ var _b = react_1.useState(), onDiscardAction = _b[0], setOnDiscardAction = _b[1];
31
+ var contextualSaveBar = react_1.useMemo(function () {
32
+ return ContextualSaveBar_1.create(app);
33
+ }, [app]);
34
+ var show = react_1.useCallback(function (options) {
35
+ // Update options first
36
+ if (options) {
37
+ contextualSaveBar.set(options, false);
38
+ }
39
+ // Updated options will be sent with the "SHOW" action
40
+ contextualSaveBar.dispatch(ContextualSaveBar_1.Action.SHOW);
41
+ visibleRef.current = true;
42
+ }, [contextualSaveBar]);
43
+ var hide = react_1.useCallback(function () {
44
+ contextualSaveBar.dispatch(ContextualSaveBar_1.Action.HIDE);
45
+ visibleRef.current = false;
46
+ }, [contextualSaveBar]);
47
+ var saveAction = react_1.useMemo(function () { return ({
48
+ setOptions: function (_a) {
49
+ var onAction = _a.onAction, saveAction = __rest(_a, ["onAction"]);
50
+ var shouldUpdate = JSON.stringify(contextualSaveBar.options.saveAction) !== JSON.stringify(saveAction) &&
51
+ visibleRef.current;
52
+ setOnSaveAction(function () { return onAction; });
53
+ contextualSaveBar.set({ saveAction: saveAction }, shouldUpdate);
54
+ },
55
+ }); }, [contextualSaveBar]);
56
+ var discardAction = react_1.useMemo(function () { return ({
57
+ setOptions: function (_a) {
58
+ var onAction = _a.onAction, discardAction = __rest(_a, ["onAction"]);
59
+ var shouldUpdate = JSON.stringify(contextualSaveBar.options.discardAction) !==
60
+ JSON.stringify(discardAction) && visibleRef.current;
61
+ setOnDiscardAction(function () { return onAction; });
62
+ contextualSaveBar.set({ discardAction: discardAction }, shouldUpdate);
63
+ },
64
+ }); }, [contextualSaveBar]);
65
+ // Hide contextual save bar on unmount
66
+ react_1.useEffect(function () {
67
+ return function () {
68
+ if (visibleRef.current) {
69
+ hide();
70
+ }
71
+ };
72
+ }, []);
73
+ react_1.useEffect(function () {
74
+ return contextualSaveBar.subscribe(ContextualSaveBar_1.Action.DISCARD, function () {
75
+ contextualSaveBar.dispatch(ContextualSaveBar_1.Action.HIDE);
76
+ onDiscardAction === null || onDiscardAction === void 0 ? void 0 : onDiscardAction();
77
+ });
78
+ }, [contextualSaveBar, onDiscardAction]);
79
+ react_1.useEffect(function () {
80
+ return contextualSaveBar.subscribe(ContextualSaveBar_1.Action.SAVE, function () {
81
+ contextualSaveBar.dispatch(ContextualSaveBar_1.Action.HIDE);
82
+ onSaveAction === null || onSaveAction === void 0 ? void 0 : onSaveAction();
83
+ });
84
+ }, [contextualSaveBar, onSaveAction]);
85
+ return { show: show, hide: hide, saveAction: saveAction, discardAction: discardAction };
86
+ }
87
+ exports.useContextualSaveBar = useContextualSaveBar;
@@ -0,0 +1 @@
1
+ export * from './useFeatureRequest';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./useFeatureRequest"), exports);
@@ -0,0 +1,13 @@
1
+ import type { FeaturePermission, FeaturesAction } from '@shopify/app-bridge';
2
+ import { Group } from '@shopify/app-bridge/actions';
3
+ /**
4
+ * useFeatureRequest hook
5
+ *
6
+ * @public
7
+ * @remarks
8
+ * React hook performs a feature request and then returns
9
+ * the requested feature when permissions has been updated
10
+ * @param {Group} group - The requested group enum
11
+ * @param {string} action - The requested action. This param is optional
12
+ */
13
+ export declare function useFeatureRequest(group: Group, action?: string): FeaturesAction | FeaturePermission | undefined;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFeatureRequest = void 0;
4
+ var react_1 = require("react");
5
+ var Features_1 = require("@shopify/app-bridge/actions/Features");
6
+ var useAppBridge_1 = require("../../useAppBridge");
7
+ var useFeaturesAvailable_1 = require("../useFeaturesAvailable");
8
+ /**
9
+ * useFeatureRequest hook
10
+ *
11
+ * @public
12
+ * @remarks
13
+ * React hook performs a feature request and then returns
14
+ * the requested feature when permissions has been updated
15
+ * @param {Group} group - The requested group enum
16
+ * @param {string} action - The requested action. This param is optional
17
+ */
18
+ function useFeatureRequest(group, action) {
19
+ var app = useAppBridge_1.useAppBridge();
20
+ var featuresAvailable = useFeaturesAvailable_1.useFeaturesAvailable();
21
+ var _a = react_1.useState(), feature = _a[0], setFeature = _a[1];
22
+ var handleFeatureUpdate = react_1.useCallback(function (featuresAvailable) {
23
+ var updatedFeatures = featuresAvailable === null || featuresAvailable === void 0 ? void 0 : featuresAvailable[group];
24
+ if (action && (updatedFeatures === null || updatedFeatures === void 0 ? void 0 : updatedFeatures[action])) {
25
+ var actionPermission_1 = updatedFeatures === null || updatedFeatures === void 0 ? void 0 : updatedFeatures[action];
26
+ setFeature(function (currentState) {
27
+ if (JSON.stringify(actionPermission_1) !== JSON.stringify(currentState)) {
28
+ return actionPermission_1;
29
+ }
30
+ return currentState;
31
+ });
32
+ return;
33
+ }
34
+ setFeature(function (currentState) {
35
+ if (JSON.stringify(updatedFeatures) !== JSON.stringify(currentState)) {
36
+ return updatedFeatures;
37
+ }
38
+ return currentState;
39
+ });
40
+ }, [group, action]);
41
+ react_1.useEffect(function () {
42
+ Features_1.create(app).dispatch(Features_1.Action.REQUEST, { feature: group, action: action });
43
+ }, [app, group, action]);
44
+ react_1.useEffect(function () {
45
+ handleFeatureUpdate(featuresAvailable);
46
+ }, [featuresAvailable, handleFeatureUpdate]);
47
+ return feature;
48
+ }
49
+ exports.useFeatureRequest = useFeatureRequest;
@@ -0,0 +1,2 @@
1
+ export type { FeaturesAvailable } from './useFeaturesAvailable';
2
+ export { useFeaturesAvailable } from './useFeaturesAvailable';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFeaturesAvailable = void 0;
4
+ var useFeaturesAvailable_1 = require("./useFeaturesAvailable");
5
+ Object.defineProperty(exports, "useFeaturesAvailable", { enumerable: true, get: function () { return useFeaturesAvailable_1.useFeaturesAvailable; } });
@@ -0,0 +1,12 @@
1
+ import { Group } from '@shopify/app-bridge/actions/types';
2
+ import { AppBridgeState } from '@shopify/app-bridge/client';
3
+ export declare type FeaturesAvailable = AppBridgeState['features'];
4
+ /**
5
+ * useFeaturesAvailable hook
6
+ *
7
+ * @remarks
8
+ * React hook that wraps the Shopify App Bridge getFeaturesAvailable method.
9
+ *
10
+ * @public
11
+ */
12
+ export declare function useFeaturesAvailable(...query: Group[]): import("@shopify/app-bridge/client").FeaturesAvailable<Group> | undefined;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.useFeaturesAvailable = void 0;
40
+ var react_1 = require("react");
41
+ var types_1 = require("@shopify/app-bridge/actions/Features/types");
42
+ var useAppBridge_1 = require("../../useAppBridge");
43
+ /**
44
+ * useFeaturesAvailable hook
45
+ *
46
+ * @remarks
47
+ * React hook that wraps the Shopify App Bridge getFeaturesAvailable method.
48
+ *
49
+ * @public
50
+ */
51
+ function useFeaturesAvailable() {
52
+ var _this = this;
53
+ var query = [];
54
+ for (var _i = 0; _i < arguments.length; _i++) {
55
+ query[_i] = arguments[_i];
56
+ }
57
+ var app = useAppBridge_1.useAppBridge();
58
+ var _a = react_1.useState(), state = _a[0], setState = _a[1];
59
+ var queryRef = react_1.useRef([]);
60
+ var refresh = react_1.useCallback(function () {
61
+ var isUnmounted = false;
62
+ (function () { return __awaiter(_this, void 0, void 0, function () {
63
+ var features;
64
+ return __generator(this, function (_a) {
65
+ switch (_a.label) {
66
+ case 0: return [4 /*yield*/, app.featuresAvailable.apply(app, queryRef.current)];
67
+ case 1:
68
+ features = _a.sent();
69
+ if (!isUnmounted) {
70
+ setState(function (currentFeatures) {
71
+ if (JSON.stringify(currentFeatures) === JSON.stringify(features)) {
72
+ return currentFeatures;
73
+ }
74
+ return features;
75
+ });
76
+ }
77
+ return [2 /*return*/];
78
+ }
79
+ });
80
+ }); })();
81
+ return function () {
82
+ isUnmounted = true;
83
+ };
84
+ }, [app]);
85
+ react_1.useEffect(function () {
86
+ queryRef.current = query;
87
+ return refresh();
88
+ }, [JSON.stringify(query)]);
89
+ react_1.useEffect(function () {
90
+ var onRefreshCleanup;
91
+ var unsubscribe = app.subscribe(types_1.Action.UPDATE, function () {
92
+ onRefreshCleanup = refresh();
93
+ });
94
+ return function () {
95
+ unsubscribe();
96
+ onRefreshCleanup === null || onRefreshCleanup === void 0 ? void 0 : onRefreshCleanup();
97
+ };
98
+ }, [app, refresh]);
99
+ return state;
100
+ }
101
+ exports.useFeaturesAvailable = useFeaturesAvailable;
@@ -0,0 +1 @@
1
+ export { useLocale } from './useLocale';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLocale = void 0;
4
+ var useLocale_1 = require("./useLocale");
5
+ Object.defineProperty(exports, "useLocale", { enumerable: true, get: function () { return useLocale_1.useLocale; } });
@@ -0,0 +1 @@
1
+ export declare function useLocale(): string | undefined;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLocale = void 0;
4
+ var useAppBridgeState_1 = require("../useAppBridgeState");
5
+ function useLocale() {
6
+ return useAppBridgeState_1.useAppBridgeState('staffMember.locale');
7
+ }
8
+ exports.useLocale = useLocale;
@@ -0,0 +1 @@
1
+ export { useNavigate } from './useNavigate';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNavigate = void 0;
4
+ var useNavigate_1 = require("./useNavigate");
5
+ Object.defineProperty(exports, "useNavigate", { enumerable: true, get: function () { return useNavigate_1.useNavigate; } });
@@ -0,0 +1,3 @@
1
+ import type { To, Navigate } from '@shopify/app-bridge/actions/Navigation/Redirect';
2
+ export declare function useNavigate(): Navigate<To>;
3
+ export type { Location, AppOptions, HostOptions, Options, To, SectionStringName, Navigate, } from '@shopify/app-bridge/actions/Navigation/Redirect';
@@ -0,0 +1,63 @@
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.useNavigate = void 0;
15
+ var react_1 = require("react");
16
+ var Redirect_1 = require("@shopify/app-bridge/actions/Navigation/Redirect");
17
+ var useAppBridge_1 = require("../../useAppBridge");
18
+ var useNavigationHistory_1 = require("../useNavigationHistory");
19
+ function useNavigate() {
20
+ var app = useAppBridge_1.useAppBridge();
21
+ var history = useNavigationHistory_1.useNavigationHistory();
22
+ var redirect = react_1.useMemo(function () {
23
+ return Redirect_1.create(app);
24
+ }, [app]);
25
+ var handleRedirect = react_1.useCallback(function (to, options) {
26
+ var url = Redirect_1.normalizeUrl(to);
27
+ var isAppUrl = url.startsWith(app.localOrigin);
28
+ var isHostUrl = url.startsWith(app.hostOrigin);
29
+ var isRelative = url.startsWith('/');
30
+ if (isAppUrl || isHostUrl || isRelative) {
31
+ var path = Redirect_1.getRelativePath(url);
32
+ if (isHostUrl || (options === null || options === void 0 ? void 0 : options.target) === 'new' || (options === null || options === void 0 ? void 0 : options.target) === 'host') {
33
+ redirect.dispatch(Redirect_1.Action.ADMIN_PATH, {
34
+ path: path.replace(/^\/admin/, ''),
35
+ newContext: (options === null || options === void 0 ? void 0 : options.target) === 'new',
36
+ });
37
+ return;
38
+ }
39
+ if (((options === null || options === void 0 ? void 0 : options.target) === 'self' || !(options === null || options === void 0 ? void 0 : options.target)) && (options === null || options === void 0 ? void 0 : options.replace)) {
40
+ history.replace({ pathname: path });
41
+ return;
42
+ }
43
+ redirect.dispatch(Redirect_1.Action.APP, path);
44
+ return;
45
+ }
46
+ redirect.dispatch(Redirect_1.Action.REMOTE, {
47
+ url: url,
48
+ newContext: (options === null || options === void 0 ? void 0 : options.target) === 'new',
49
+ });
50
+ }, [redirect, history]);
51
+ return react_1.useCallback(function (to, options) {
52
+ if (Redirect_1.isAdminSection(to)) {
53
+ var convertedSection = __assign(__assign({}, to), { name: Redirect_1.ResourceType[to.name] });
54
+ redirect.dispatch(Redirect_1.Action.ADMIN_SECTION, {
55
+ section: convertedSection,
56
+ newContext: (options === null || options === void 0 ? void 0 : options.target) === 'new',
57
+ });
58
+ return;
59
+ }
60
+ handleRedirect(to, options);
61
+ }, [handleRedirect, redirect]);
62
+ }
63
+ exports.useNavigate = useNavigate;
@@ -0,0 +1 @@
1
+ export { useNavigationHistory } from './useNavigationHistory';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNavigationHistory = void 0;
4
+ var useNavigationHistory_1 = require("./useNavigationHistory");
5
+ Object.defineProperty(exports, "useNavigationHistory", { enumerable: true, get: function () { return useNavigationHistory_1.useNavigationHistory; } });
@@ -0,0 +1,16 @@
1
+ /**
2
+ * useNavigationHistory hook
3
+ *
4
+ * @remarks
5
+ * React hook which wraps the Shopify App Bridge History action.
6
+ *
7
+ * @public
8
+ */
9
+ export declare function useNavigationHistory(): {
10
+ push: (location: {
11
+ pathname: string;
12
+ }) => void;
13
+ replace: (location: {
14
+ pathname: string;
15
+ }) => void;
16
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNavigationHistory = void 0;
4
+ var react_1 = require("react");
5
+ var actions_1 = require("@shopify/app-bridge/actions");
6
+ var useAppBridge_1 = require("../../useAppBridge");
7
+ /**
8
+ * useNavigationHistory hook
9
+ *
10
+ * @remarks
11
+ * React hook which wraps the Shopify App Bridge History action.
12
+ *
13
+ * @public
14
+ */
15
+ function useNavigationHistory() {
16
+ var app = useAppBridge_1.useAppBridge();
17
+ return react_1.useMemo(function () {
18
+ var history = actions_1.History.create(app);
19
+ function push(location) {
20
+ history.dispatch(actions_1.History.Action.PUSH, location.pathname);
21
+ }
22
+ function replace(location) {
23
+ history.dispatch(actions_1.History.Action.REPLACE, location.pathname);
24
+ }
25
+ return { push: push, replace: replace };
26
+ }, []);
27
+ }
28
+ exports.useNavigationHistory = useNavigationHistory;
@@ -0,0 +1 @@
1
+ export { useToast } from './useToast';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useToast = void 0;
4
+ var useToast_1 = require("./useToast");
5
+ Object.defineProperty(exports, "useToast", { enumerable: true, get: function () { return useToast_1.useToast; } });
@@ -0,0 +1,20 @@
1
+ import type { Payload } from '@shopify/app-bridge/actions/Toast';
2
+ export declare const DEFAULT_TOAST_DURATION = 5000;
3
+ interface ShowOptionsPayload extends Payload {
4
+ action?: {
5
+ content: string;
6
+ onAction?: () => void;
7
+ };
8
+ }
9
+ /**
10
+ * useToast hook
11
+ *
12
+ * @remarks
13
+ * React hook which wraps the Shopify App Bridge Toast action.
14
+ *
15
+ * @public
16
+ */
17
+ export declare function useToast(): {
18
+ show: (content: string, options?: Partial<Omit<ShowOptionsPayload, "message">> | undefined) => void;
19
+ };
20
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useToast = exports.DEFAULT_TOAST_DURATION = void 0;
4
+ var react_1 = require("react");
5
+ var Toast_1 = require("@shopify/app-bridge/actions/Toast");
6
+ var useAppBridge_1 = require("../../useAppBridge");
7
+ exports.DEFAULT_TOAST_DURATION = 5000;
8
+ /**
9
+ * useToast hook
10
+ *
11
+ * @remarks
12
+ * React hook which wraps the Shopify App Bridge Toast action.
13
+ *
14
+ * @public
15
+ */
16
+ function useToast() {
17
+ var app = useAppBridge_1.useAppBridge();
18
+ var toastList = react_1.useRef([]);
19
+ var show = react_1.useCallback(function (content, options) {
20
+ var toast = Toast_1.create(app, {
21
+ message: content,
22
+ isError: options === null || options === void 0 ? void 0 : options.isError,
23
+ duration: (options === null || options === void 0 ? void 0 : options.duration) || exports.DEFAULT_TOAST_DURATION,
24
+ action: options === null || options === void 0 ? void 0 : options.action,
25
+ });
26
+ toast.dispatch(Toast_1.Action.SHOW);
27
+ toastList.current.push(toast);
28
+ toast.subscribe(Toast_1.Action.CLEAR, function () {
29
+ var _a;
30
+ (_a = options === null || options === void 0 ? void 0 : options.onDismiss) === null || _a === void 0 ? void 0 : _a.call(options);
31
+ toastList.current.splice(toastList.current.indexOf(toast), 1);
32
+ toast.unsubscribe();
33
+ });
34
+ toast.subscribe(Toast_1.Action.ACTION, function () {
35
+ var _a, _b;
36
+ (_b = (_a = options === null || options === void 0 ? void 0 : options.action) === null || _a === void 0 ? void 0 : _a.onAction) === null || _b === void 0 ? void 0 : _b.call(_a);
37
+ });
38
+ }, [app]);
39
+ react_1.useEffect(function () {
40
+ return function () {
41
+ toastList.current.forEach(function (toast) { return toast === null || toast === void 0 ? void 0 : toast.unsubscribe(); });
42
+ };
43
+ }, []);
44
+ return { show: show };
45
+ }
46
+ exports.useToast = useToast;
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { AppBridgeContext as Context } from './context';
2
+ export { useAppBridge } from './useAppBridge';
3
+ export * from './components';
4
+ export * from './hooks';