UNPKG

3.12 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var react_1 = tslib_1.__importStar(require("react"));
5var async_1 = require("@shopify/async");
6var react_idle_1 = require("@shopify/react-idle");
7var hooks_1 = require("./hooks");
8var types_1 = require("./types");
9function 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 // Just like a "normal" value returned from `createContext`, rendering
14 // the value itself is not supported. This component is just a placeholder
15 // to provide a more useful error.
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}
91exports.createAsyncContext = createAsyncContext;