1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var react_1 = tslib_1.__importStar(require("react"));
|
5 | var async_1 = require("@shopify/async");
|
6 | var react_idle_1 = require("@shopify/react-idle");
|
7 | var hooks_1 = require("./hooks");
|
8 | var types_1 = require("./types");
|
9 | function createAsyncContext(_a) {
|
10 | var id = _a.id, load = _a.load;
|
11 | var resolver = async_1.createResolver({ id: id, load: load });
|
12 | var Context = react_1.default.createContext(null);
|
13 |
|
14 |
|
15 |
|
16 | function Root() {
|
17 | throw new Error('Do not attempt to render the result of calling `createAsyncContext()` directly. Render its `.Provider` component instead.');
|
18 | }
|
19 | function Provider(props) {
|
20 | var _a = hooks_1.useAsync(resolver, {
|
21 | assets: types_1.AssetTiming.Immediate,
|
22 | }), load = _a.load, resolved = _a.resolved;
|
23 | react_1.useEffect(function () {
|
24 | load();
|
25 | }, [load]);
|
26 | return react_1.default.createElement(Context.Provider, tslib_1.__assign({ value: resolved }, props));
|
27 | }
|
28 | function Consumer(props) {
|
29 | return react_1.default.createElement(Context.Consumer, tslib_1.__assign({}, props));
|
30 | }
|
31 | function usePreload() {
|
32 | return hooks_1.useAsync(resolver, {
|
33 | assets: types_1.AssetTiming.NextPage,
|
34 | }).load;
|
35 | }
|
36 | function Preload() {
|
37 | var preload = usePreload();
|
38 | react_idle_1.useIdleCallback(preload);
|
39 | return null;
|
40 | }
|
41 | function Prefetch() {
|
42 | var preload = usePreload();
|
43 | react_1.useEffect(function () {
|
44 | preload();
|
45 | }, [preload]);
|
46 | return null;
|
47 | }
|
48 | var FinalComponent = Root;
|
49 | Reflect.defineProperty(FinalComponent, 'resolver', {
|
50 | value: resolver,
|
51 | writable: false,
|
52 | });
|
53 | Reflect.defineProperty(FinalComponent, 'Provider', {
|
54 | value: Provider,
|
55 | writable: false,
|
56 | });
|
57 | Reflect.defineProperty(FinalComponent, 'Consumer', {
|
58 | value: Consumer,
|
59 | writable: false,
|
60 | });
|
61 | Reflect.defineProperty(FinalComponent, 'Context', {
|
62 | value: Context,
|
63 | writable: false,
|
64 | });
|
65 | Reflect.defineProperty(FinalComponent, 'Preload', {
|
66 | value: Preload,
|
67 | writable: false,
|
68 | });
|
69 | Reflect.defineProperty(FinalComponent, 'Prefetch', {
|
70 | value: Prefetch,
|
71 | writable: false,
|
72 | });
|
73 | Reflect.defineProperty(FinalComponent, 'KeepFresh', {
|
74 | value: Preload,
|
75 | writable: false,
|
76 | });
|
77 | Reflect.defineProperty(FinalComponent, 'usePreload', {
|
78 | value: usePreload,
|
79 | writable: false,
|
80 | });
|
81 | Reflect.defineProperty(FinalComponent, 'usePrefetch', {
|
82 | value: usePreload,
|
83 | writable: false,
|
84 | });
|
85 | Reflect.defineProperty(FinalComponent, 'useKeepFresh', {
|
86 | value: usePreload,
|
87 | writable: false,
|
88 | });
|
89 | return FinalComponent;
|
90 | }
|
91 | exports.createAsyncContext = createAsyncContext;
|