UNPKG

react-liff-v2

Version:

A react context provider for LIFF (LINE Front-end Framework)

97 lines (96 loc) 4.54 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.useLiff = exports.LiffProvider = exports.LiffConsumer = exports.createLiffContext = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const PropTypes = __importStar(require("prop-types")); const react_1 = require("react"); const liff_stub_1 = require("./liff-stub"); const use_login_state_manager_1 = require("./use-login-state-manager"); const initLiff = ({ liffId, stubEnabled }) => __awaiter(void 0, void 0, void 0, function* () { var _b; if (stubEnabled) { if (typeof stubEnabled === 'object') { return { liff: Object.assign(Object.assign({}, liff_stub_1.liffStub), stubEnabled), ready: true }; } return { liff: liff_stub_1.liffStub, ready: true }; } try { const liff = (_b = window.liff) !== null && _b !== void 0 ? _b : (yield Promise.resolve().then(() => __importStar(require('@line/liff')))).default; yield liff.init({ liffId }); return { liff, ready: true }; } catch (error) { return { error, ready: false }; } }); const LiffProviderPropTypes = { children: PropTypes.element.isRequired, liffId: PropTypes.string.isRequired, stubEnabled: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), }; const createLiffProvider = (context) => { const LiffProvider = ({ children, liffId, stubEnabled = false }) => { const [error, setError] = react_1.useState(); const [originalLiff, setLiff] = react_1.useState(liff_stub_1.liffStub); const [ready, setReady] = react_1.useState(false); const [isLoggedIn, liff] = use_login_state_manager_1.useLoginStateManager(originalLiff); react_1.useEffect(() => { (() => __awaiter(void 0, void 0, void 0, function* () { const { error, liff, ready } = yield initLiff({ liffId, stubEnabled }); setError(error); setLiff(liff); setReady(ready); }))(); }, [liffId, stubEnabled]); return (jsx_runtime_1.jsx(context.Provider, Object.assign({ value: { error, liff, loggedIn: isLoggedIn, isLoggedIn, ready } }, { children: children }), void 0)); }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore LiffProvider.propTypes = LiffProviderPropTypes; return LiffProvider; }; const createLiffContext = () => { const context = react_1.createContext({ isLoggedIn: false, liff: liff_stub_1.liffStub, loggedIn: false, ready: false, }); context.displayName = 'LiffContext'; return { LiffConsumer: context.Consumer, LiffProvider: createLiffProvider(context), useLiff: () => react_1.useContext(context), }; }; exports.createLiffContext = createLiffContext; _a = exports.createLiffContext(), exports.LiffConsumer = _a.LiffConsumer, exports.LiffProvider = _a.LiffProvider, exports.useLiff = _a.useLiff;