react-liff-v2
Version:
A react context provider for LIFF (LINE Front-end Framework)
97 lines (96 loc) • 4.54 kB
JavaScript
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;
;