@sunggang/ui-lib 0.4.57 → 0.4.59
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.
- package/LiffProvider.cjs.js +209 -60
- package/LiffProvider.esm.js +209 -61
- package/package.json +1 -1
- package/src/lib/Provider/LiffProvider.d.ts +3 -0
package/LiffProvider.cjs.js
CHANGED
|
@@ -453,6 +453,115 @@ function _ts_generator(thisArg, body) {
|
|
|
453
453
|
}
|
|
454
454
|
}
|
|
455
455
|
var LiffContext = /*#__PURE__*/ React.createContext(undefined);
|
|
456
|
+
// 外部可直接 import 的 helper:嘗試由 getLiff helper 或 dynamic import 取得 SDK,並在必要時啟動 init
|
|
457
|
+
function fetchLiffSdk(liffId) {
|
|
458
|
+
return _fetchLiffSdk.apply(this, arguments);
|
|
459
|
+
}
|
|
460
|
+
function _fetchLiffSdk() {
|
|
461
|
+
_fetchLiffSdk = _async_to_generator(function(liffId) {
|
|
462
|
+
var sdk, mod, e, e1, e2;
|
|
463
|
+
return _ts_generator(this, function(_state) {
|
|
464
|
+
switch(_state.label){
|
|
465
|
+
case 0:
|
|
466
|
+
if (typeof window === "undefined") return [
|
|
467
|
+
2,
|
|
468
|
+
null
|
|
469
|
+
];
|
|
470
|
+
_state.label = 1;
|
|
471
|
+
case 1:
|
|
472
|
+
_state.trys.push([
|
|
473
|
+
1,
|
|
474
|
+
10,
|
|
475
|
+
,
|
|
476
|
+
11
|
|
477
|
+
]);
|
|
478
|
+
sdk = null;
|
|
479
|
+
_state.label = 2;
|
|
480
|
+
case 2:
|
|
481
|
+
_state.trys.push([
|
|
482
|
+
2,
|
|
483
|
+
4,
|
|
484
|
+
,
|
|
485
|
+
5
|
|
486
|
+
]);
|
|
487
|
+
return [
|
|
488
|
+
4,
|
|
489
|
+
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
490
|
+
];
|
|
491
|
+
case 3:
|
|
492
|
+
mod = _state.sent();
|
|
493
|
+
sdk = mod && (mod.default || mod.liff) ? mod.default || mod.liff : mod;
|
|
494
|
+
return [
|
|
495
|
+
3,
|
|
496
|
+
5
|
|
497
|
+
];
|
|
498
|
+
case 4:
|
|
499
|
+
e = _state.sent();
|
|
500
|
+
console.warn("dynamic import @line/liff failed", e);
|
|
501
|
+
sdk = null;
|
|
502
|
+
return [
|
|
503
|
+
3,
|
|
504
|
+
5
|
|
505
|
+
];
|
|
506
|
+
case 5:
|
|
507
|
+
if (!sdk) return [
|
|
508
|
+
2,
|
|
509
|
+
null
|
|
510
|
+
];
|
|
511
|
+
if (!(typeof sdk.init === "function" && !sdk._initialized && liffId)) return [
|
|
512
|
+
3,
|
|
513
|
+
9
|
|
514
|
+
];
|
|
515
|
+
_state.label = 6;
|
|
516
|
+
case 6:
|
|
517
|
+
_state.trys.push([
|
|
518
|
+
6,
|
|
519
|
+
8,
|
|
520
|
+
,
|
|
521
|
+
9
|
|
522
|
+
]);
|
|
523
|
+
return [
|
|
524
|
+
4,
|
|
525
|
+
sdk.init({
|
|
526
|
+
liffId: liffId,
|
|
527
|
+
withLoginOnExternalBrowser: false
|
|
528
|
+
})
|
|
529
|
+
];
|
|
530
|
+
case 7:
|
|
531
|
+
_state.sent();
|
|
532
|
+
sdk._initialized = true;
|
|
533
|
+
return [
|
|
534
|
+
3,
|
|
535
|
+
9
|
|
536
|
+
];
|
|
537
|
+
case 8:
|
|
538
|
+
e1 = _state.sent();
|
|
539
|
+
console.warn("liff.init failed or already initialized", e1);
|
|
540
|
+
return [
|
|
541
|
+
3,
|
|
542
|
+
9
|
|
543
|
+
];
|
|
544
|
+
case 9:
|
|
545
|
+
return [
|
|
546
|
+
2,
|
|
547
|
+
sdk
|
|
548
|
+
];
|
|
549
|
+
case 10:
|
|
550
|
+
e2 = _state.sent();
|
|
551
|
+
console.warn("fetchLiffSdk error", e2);
|
|
552
|
+
return [
|
|
553
|
+
2,
|
|
554
|
+
null
|
|
555
|
+
];
|
|
556
|
+
case 11:
|
|
557
|
+
return [
|
|
558
|
+
2
|
|
559
|
+
];
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
return _fetchLiffSdk.apply(this, arguments);
|
|
564
|
+
}
|
|
456
565
|
var LiffProvider = function(param) {
|
|
457
566
|
var children = param.children, liffId = param.liffId, _param_localStorageKey = param.localStorageKey, localStorageKey = _param_localStorageKey === void 0 ? "one-gobo-global-login" : _param_localStorageKey, checkTokenUrl = param.checkTokenUrl, loginUrl = param.loginUrl, accountLoginUrl = param.accountLoginUrl, memberInfoUrl = param.memberInfoUrl, _param_openInApp = param.openInApp, openInApp = _param_openInApp === void 0 ? false : _param_openInApp, _param_ignoreCheckAddFriend = param.ignoreCheckAddFriend, ignoreCheckAddFriend = _param_ignoreCheckAddFriend === void 0 ? false : _param_ignoreCheckAddFriend, _param_ignoreRoute = param.ignoreRoute, ignoreRoute = _param_ignoreRoute === void 0 ? false : _param_ignoreRoute, _param_loginByUser = param.loginByUser, loginByUser = _param_loginByUser === void 0 ? false : _param_loginByUser, _param_liffLogin = param.liffLogin, liffLogin = _param_liffLogin === void 0 ? false : _param_liffLogin, customerRedirectUrl = param.customerRedirectUrl, inviteCode = param.inviteCode, handleLoginError = param.handleLoginError;
|
|
458
567
|
var _useState = _sliced_to_array(React.useState(null), 2), liffObject = _useState[0], setLiffObject = _useState[1];
|
|
@@ -767,15 +876,15 @@ var LiffProvider = function(param) {
|
|
|
767
876
|
// 初始化 LIFF
|
|
768
877
|
var initializeLiff = function() {
|
|
769
878
|
var _ref = _async_to_generator(function(isValid) {
|
|
770
|
-
var customFetch, liff, originalFetch,
|
|
879
|
+
var customFetch, liff, originalFetch, redirectUri, tempFriendship, lineToken, profile, profileErr, friendship, friendFlag, error, err;
|
|
771
880
|
return _ts_generator(this, function(_state) {
|
|
772
881
|
switch(_state.label){
|
|
773
882
|
case 0:
|
|
774
883
|
_state.trys.push([
|
|
775
884
|
0,
|
|
776
|
-
|
|
885
|
+
13,
|
|
777
886
|
,
|
|
778
|
-
|
|
887
|
+
14
|
|
779
888
|
]);
|
|
780
889
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
781
890
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -794,6 +903,9 @@ var LiffProvider = function(param) {
|
|
|
794
903
|
originalFetch = window.fetch;
|
|
795
904
|
window.fetch = customFetch;
|
|
796
905
|
if (openInApp && !(liff === null || liff === void 0 ? void 0 : liff.isInClient()) && (liff === null || liff === void 0 ? void 0 : liff.getOS()) !== "web") window.location.href = "line://app/".concat(liffId);
|
|
906
|
+
if (isValid) return [
|
|
907
|
+
2
|
|
908
|
+
];
|
|
797
909
|
return [
|
|
798
910
|
4,
|
|
799
911
|
liff.init({
|
|
@@ -805,17 +917,26 @@ var LiffProvider = function(param) {
|
|
|
805
917
|
_state.sent();
|
|
806
918
|
console.log("LIFF init succeeded.");
|
|
807
919
|
setLiffObject(liff);
|
|
808
|
-
//
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
920
|
+
// 未登入先進行登入
|
|
921
|
+
if (!liff.isLoggedIn()) {
|
|
922
|
+
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
923
|
+
if (liffLogin) {
|
|
924
|
+
liff.login({
|
|
925
|
+
redirectUri: redirectUri
|
|
926
|
+
});
|
|
927
|
+
return [
|
|
928
|
+
2
|
|
929
|
+
];
|
|
930
|
+
}
|
|
931
|
+
if (loginByUser || ignoreRoute) return [
|
|
932
|
+
2
|
|
933
|
+
];
|
|
934
|
+
liff.login({
|
|
935
|
+
redirectUri: redirectUri
|
|
936
|
+
});
|
|
814
937
|
}
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
7
|
|
818
|
-
];
|
|
938
|
+
tempFriendship = null;
|
|
939
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
819
940
|
_state.label = 3;
|
|
820
941
|
case 3:
|
|
821
942
|
_state.trys.push([
|
|
@@ -838,58 +959,29 @@ var LiffProvider = function(param) {
|
|
|
838
959
|
];
|
|
839
960
|
case 5:
|
|
840
961
|
profileErr = _state.sent();
|
|
841
|
-
console.warn("取得 LIFF profile
|
|
962
|
+
console.warn("取得 LIFF profile 失敗:", profileErr);
|
|
842
963
|
return [
|
|
843
964
|
3,
|
|
844
965
|
6
|
|
845
966
|
];
|
|
846
967
|
case 6:
|
|
847
|
-
return [
|
|
848
|
-
3,
|
|
849
|
-
8
|
|
850
|
-
];
|
|
851
|
-
case 7:
|
|
852
|
-
// 已有快取,跳過呼叫
|
|
853
|
-
console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
|
|
854
|
-
_state.label = 8;
|
|
855
|
-
case 8:
|
|
856
|
-
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
857
|
-
// 未登入先進行登入
|
|
858
|
-
if (!liff.isLoggedIn()) {
|
|
859
|
-
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
860
|
-
if (liffLogin) {
|
|
861
|
-
liff.login({
|
|
862
|
-
redirectUri: redirectUri
|
|
863
|
-
});
|
|
864
|
-
return [
|
|
865
|
-
2
|
|
866
|
-
];
|
|
867
|
-
}
|
|
868
|
-
if (loginByUser || ignoreRoute) return [
|
|
869
|
-
2
|
|
870
|
-
];
|
|
871
|
-
liff.login({
|
|
872
|
-
redirectUri: redirectUri
|
|
873
|
-
});
|
|
874
|
-
}
|
|
875
|
-
tempFriendship = null;
|
|
876
968
|
if (!lineToken) return [
|
|
877
969
|
3,
|
|
878
|
-
|
|
970
|
+
12
|
|
879
971
|
];
|
|
880
|
-
_state.label =
|
|
881
|
-
case
|
|
972
|
+
_state.label = 7;
|
|
973
|
+
case 7:
|
|
882
974
|
_state.trys.push([
|
|
975
|
+
7,
|
|
883
976
|
9,
|
|
884
|
-
11,
|
|
885
977
|
,
|
|
886
|
-
|
|
978
|
+
10
|
|
887
979
|
]);
|
|
888
980
|
return [
|
|
889
981
|
4,
|
|
890
982
|
liff.getFriendship()
|
|
891
983
|
];
|
|
892
|
-
case
|
|
984
|
+
case 8:
|
|
893
985
|
friendship = _state.sent();
|
|
894
986
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
895
987
|
setFriendship(friendFlag);
|
|
@@ -897,16 +989,16 @@ var LiffProvider = function(param) {
|
|
|
897
989
|
console.log("isFriendship", friendFlag);
|
|
898
990
|
return [
|
|
899
991
|
3,
|
|
900
|
-
|
|
992
|
+
10
|
|
901
993
|
];
|
|
902
|
-
case
|
|
994
|
+
case 9:
|
|
903
995
|
error = _state.sent();
|
|
904
996
|
console.error("Error in liff.getFriendship():", error);
|
|
905
997
|
return [
|
|
906
998
|
3,
|
|
907
|
-
|
|
999
|
+
10
|
|
908
1000
|
];
|
|
909
|
-
case
|
|
1001
|
+
case 10:
|
|
910
1002
|
console.log("isValid", isValid);
|
|
911
1003
|
if (tempFriendship && isValid) return [
|
|
912
1004
|
2
|
|
@@ -915,23 +1007,23 @@ var LiffProvider = function(param) {
|
|
|
915
1007
|
4,
|
|
916
1008
|
loginInit(lineToken)
|
|
917
1009
|
];
|
|
918
|
-
case
|
|
1010
|
+
case 11:
|
|
919
1011
|
_state.sent();
|
|
920
|
-
_state.label =
|
|
921
|
-
case
|
|
1012
|
+
_state.label = 12;
|
|
1013
|
+
case 12:
|
|
922
1014
|
return [
|
|
923
1015
|
3,
|
|
924
|
-
|
|
1016
|
+
14
|
|
925
1017
|
];
|
|
926
|
-
case
|
|
1018
|
+
case 13:
|
|
927
1019
|
err = _state.sent();
|
|
928
1020
|
setLiffError(err.toString());
|
|
929
1021
|
console.log("LIFF init failed.", err);
|
|
930
1022
|
return [
|
|
931
1023
|
3,
|
|
932
|
-
|
|
1024
|
+
14
|
|
933
1025
|
];
|
|
934
|
-
case
|
|
1026
|
+
case 14:
|
|
935
1027
|
return [
|
|
936
1028
|
2
|
|
937
1029
|
];
|
|
@@ -1113,6 +1205,56 @@ var LiffProvider = function(param) {
|
|
|
1113
1205
|
var trimmed = token.trim();
|
|
1114
1206
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1115
1207
|
};
|
|
1208
|
+
// 提供給 context 的 lazy-load 函式(會嘗試回傳已存在的 liffObject,否則 dynamic import)
|
|
1209
|
+
var getLiff = React.useCallback(/*#__PURE__*/ _async_to_generator(function() {
|
|
1210
|
+
var mod, sdk, e;
|
|
1211
|
+
return _ts_generator(this, function(_state) {
|
|
1212
|
+
switch(_state.label){
|
|
1213
|
+
case 0:
|
|
1214
|
+
if (liffObject) return [
|
|
1215
|
+
2,
|
|
1216
|
+
liffObject
|
|
1217
|
+
];
|
|
1218
|
+
if (typeof window === "undefined") return [
|
|
1219
|
+
2,
|
|
1220
|
+
null
|
|
1221
|
+
];
|
|
1222
|
+
_state.label = 1;
|
|
1223
|
+
case 1:
|
|
1224
|
+
_state.trys.push([
|
|
1225
|
+
1,
|
|
1226
|
+
3,
|
|
1227
|
+
,
|
|
1228
|
+
4
|
|
1229
|
+
]);
|
|
1230
|
+
return [
|
|
1231
|
+
4,
|
|
1232
|
+
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
1233
|
+
];
|
|
1234
|
+
case 2:
|
|
1235
|
+
mod = _state.sent();
|
|
1236
|
+
sdk = mod && (mod.default || mod.liff) ? mod.default || mod.liff : mod;
|
|
1237
|
+
if (sdk) setLiffObject(sdk);
|
|
1238
|
+
return [
|
|
1239
|
+
2,
|
|
1240
|
+
sdk || null
|
|
1241
|
+
];
|
|
1242
|
+
case 3:
|
|
1243
|
+
e = _state.sent();
|
|
1244
|
+
console.error("lazy import @line/liff failed", e);
|
|
1245
|
+
return [
|
|
1246
|
+
2,
|
|
1247
|
+
null
|
|
1248
|
+
];
|
|
1249
|
+
case 4:
|
|
1250
|
+
return [
|
|
1251
|
+
2
|
|
1252
|
+
];
|
|
1253
|
+
}
|
|
1254
|
+
});
|
|
1255
|
+
}), [
|
|
1256
|
+
liffObject
|
|
1257
|
+
]);
|
|
1116
1258
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1117
1259
|
// 初始載入時從 localStorage 載入
|
|
1118
1260
|
React.useEffect(function() {
|
|
@@ -1198,6 +1340,12 @@ var LiffProvider = function(param) {
|
|
|
1198
1340
|
var contextValue = React.useMemo(function() {
|
|
1199
1341
|
return {
|
|
1200
1342
|
liffObject: liffObject,
|
|
1343
|
+
// 非同步取得 LIFF SDK 的 helper(lazy-load),使用時可以呼叫 `await getLiff()`
|
|
1344
|
+
getLiff: getLiff,
|
|
1345
|
+
// helper:透過 fetchLiffSdk 執行更完整的 fetch + optional init
|
|
1346
|
+
fetchLiffSdk: function(liffId) {
|
|
1347
|
+
return fetchLiffSdk(liffId);
|
|
1348
|
+
},
|
|
1201
1349
|
loginData: loginData,
|
|
1202
1350
|
userInfo: userInfo,
|
|
1203
1351
|
accessToken: accessToken,
|
|
@@ -1237,4 +1385,5 @@ var useLiffContext = function() {
|
|
|
1237
1385
|
|
|
1238
1386
|
exports.LiffContext = LiffContext;
|
|
1239
1387
|
exports.LiffProvider = LiffProvider;
|
|
1388
|
+
exports.fetchLiffSdk = fetchLiffSdk;
|
|
1240
1389
|
exports.useLiffContext = useLiffContext;
|
package/LiffProvider.esm.js
CHANGED
|
@@ -449,6 +449,115 @@ function _ts_generator(thisArg, body) {
|
|
|
449
449
|
}
|
|
450
450
|
}
|
|
451
451
|
var LiffContext = /*#__PURE__*/ createContext(undefined);
|
|
452
|
+
// 外部可直接 import 的 helper:嘗試由 getLiff helper 或 dynamic import 取得 SDK,並在必要時啟動 init
|
|
453
|
+
function fetchLiffSdk(liffId) {
|
|
454
|
+
return _fetchLiffSdk.apply(this, arguments);
|
|
455
|
+
}
|
|
456
|
+
function _fetchLiffSdk() {
|
|
457
|
+
_fetchLiffSdk = _async_to_generator(function(liffId) {
|
|
458
|
+
var sdk, mod, e, e1, e2;
|
|
459
|
+
return _ts_generator(this, function(_state) {
|
|
460
|
+
switch(_state.label){
|
|
461
|
+
case 0:
|
|
462
|
+
if (typeof window === "undefined") return [
|
|
463
|
+
2,
|
|
464
|
+
null
|
|
465
|
+
];
|
|
466
|
+
_state.label = 1;
|
|
467
|
+
case 1:
|
|
468
|
+
_state.trys.push([
|
|
469
|
+
1,
|
|
470
|
+
10,
|
|
471
|
+
,
|
|
472
|
+
11
|
|
473
|
+
]);
|
|
474
|
+
sdk = null;
|
|
475
|
+
_state.label = 2;
|
|
476
|
+
case 2:
|
|
477
|
+
_state.trys.push([
|
|
478
|
+
2,
|
|
479
|
+
4,
|
|
480
|
+
,
|
|
481
|
+
5
|
|
482
|
+
]);
|
|
483
|
+
return [
|
|
484
|
+
4,
|
|
485
|
+
import('./index.esm3.js')
|
|
486
|
+
];
|
|
487
|
+
case 3:
|
|
488
|
+
mod = _state.sent();
|
|
489
|
+
sdk = mod && (mod.default || mod.liff) ? mod.default || mod.liff : mod;
|
|
490
|
+
return [
|
|
491
|
+
3,
|
|
492
|
+
5
|
|
493
|
+
];
|
|
494
|
+
case 4:
|
|
495
|
+
e = _state.sent();
|
|
496
|
+
console.warn("dynamic import @line/liff failed", e);
|
|
497
|
+
sdk = null;
|
|
498
|
+
return [
|
|
499
|
+
3,
|
|
500
|
+
5
|
|
501
|
+
];
|
|
502
|
+
case 5:
|
|
503
|
+
if (!sdk) return [
|
|
504
|
+
2,
|
|
505
|
+
null
|
|
506
|
+
];
|
|
507
|
+
if (!(typeof sdk.init === "function" && !sdk._initialized && liffId)) return [
|
|
508
|
+
3,
|
|
509
|
+
9
|
|
510
|
+
];
|
|
511
|
+
_state.label = 6;
|
|
512
|
+
case 6:
|
|
513
|
+
_state.trys.push([
|
|
514
|
+
6,
|
|
515
|
+
8,
|
|
516
|
+
,
|
|
517
|
+
9
|
|
518
|
+
]);
|
|
519
|
+
return [
|
|
520
|
+
4,
|
|
521
|
+
sdk.init({
|
|
522
|
+
liffId: liffId,
|
|
523
|
+
withLoginOnExternalBrowser: false
|
|
524
|
+
})
|
|
525
|
+
];
|
|
526
|
+
case 7:
|
|
527
|
+
_state.sent();
|
|
528
|
+
sdk._initialized = true;
|
|
529
|
+
return [
|
|
530
|
+
3,
|
|
531
|
+
9
|
|
532
|
+
];
|
|
533
|
+
case 8:
|
|
534
|
+
e1 = _state.sent();
|
|
535
|
+
console.warn("liff.init failed or already initialized", e1);
|
|
536
|
+
return [
|
|
537
|
+
3,
|
|
538
|
+
9
|
|
539
|
+
];
|
|
540
|
+
case 9:
|
|
541
|
+
return [
|
|
542
|
+
2,
|
|
543
|
+
sdk
|
|
544
|
+
];
|
|
545
|
+
case 10:
|
|
546
|
+
e2 = _state.sent();
|
|
547
|
+
console.warn("fetchLiffSdk error", e2);
|
|
548
|
+
return [
|
|
549
|
+
2,
|
|
550
|
+
null
|
|
551
|
+
];
|
|
552
|
+
case 11:
|
|
553
|
+
return [
|
|
554
|
+
2
|
|
555
|
+
];
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
});
|
|
559
|
+
return _fetchLiffSdk.apply(this, arguments);
|
|
560
|
+
}
|
|
452
561
|
var LiffProvider = function(param) {
|
|
453
562
|
var children = param.children, liffId = param.liffId, _param_localStorageKey = param.localStorageKey, localStorageKey = _param_localStorageKey === void 0 ? "one-gobo-global-login" : _param_localStorageKey, checkTokenUrl = param.checkTokenUrl, loginUrl = param.loginUrl, accountLoginUrl = param.accountLoginUrl, memberInfoUrl = param.memberInfoUrl, _param_openInApp = param.openInApp, openInApp = _param_openInApp === void 0 ? false : _param_openInApp, _param_ignoreCheckAddFriend = param.ignoreCheckAddFriend, ignoreCheckAddFriend = _param_ignoreCheckAddFriend === void 0 ? false : _param_ignoreCheckAddFriend, _param_ignoreRoute = param.ignoreRoute, ignoreRoute = _param_ignoreRoute === void 0 ? false : _param_ignoreRoute, _param_loginByUser = param.loginByUser, loginByUser = _param_loginByUser === void 0 ? false : _param_loginByUser, _param_liffLogin = param.liffLogin, liffLogin = _param_liffLogin === void 0 ? false : _param_liffLogin, customerRedirectUrl = param.customerRedirectUrl, inviteCode = param.inviteCode, handleLoginError = param.handleLoginError;
|
|
454
563
|
var _useState = _sliced_to_array(useState(null), 2), liffObject = _useState[0], setLiffObject = _useState[1];
|
|
@@ -763,15 +872,15 @@ var LiffProvider = function(param) {
|
|
|
763
872
|
// 初始化 LIFF
|
|
764
873
|
var initializeLiff = function() {
|
|
765
874
|
var _ref = _async_to_generator(function(isValid) {
|
|
766
|
-
var customFetch, liff, originalFetch,
|
|
875
|
+
var customFetch, liff, originalFetch, redirectUri, tempFriendship, lineToken, profile, profileErr, friendship, friendFlag, error, err;
|
|
767
876
|
return _ts_generator(this, function(_state) {
|
|
768
877
|
switch(_state.label){
|
|
769
878
|
case 0:
|
|
770
879
|
_state.trys.push([
|
|
771
880
|
0,
|
|
772
|
-
|
|
881
|
+
13,
|
|
773
882
|
,
|
|
774
|
-
|
|
883
|
+
14
|
|
775
884
|
]);
|
|
776
885
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
777
886
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -790,6 +899,9 @@ var LiffProvider = function(param) {
|
|
|
790
899
|
originalFetch = window.fetch;
|
|
791
900
|
window.fetch = customFetch;
|
|
792
901
|
if (openInApp && !(liff === null || liff === void 0 ? void 0 : liff.isInClient()) && (liff === null || liff === void 0 ? void 0 : liff.getOS()) !== "web") window.location.href = "line://app/".concat(liffId);
|
|
902
|
+
if (isValid) return [
|
|
903
|
+
2
|
|
904
|
+
];
|
|
793
905
|
return [
|
|
794
906
|
4,
|
|
795
907
|
liff.init({
|
|
@@ -801,17 +913,26 @@ var LiffProvider = function(param) {
|
|
|
801
913
|
_state.sent();
|
|
802
914
|
console.log("LIFF init succeeded.");
|
|
803
915
|
setLiffObject(liff);
|
|
804
|
-
//
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
916
|
+
// 未登入先進行登入
|
|
917
|
+
if (!liff.isLoggedIn()) {
|
|
918
|
+
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
919
|
+
if (liffLogin) {
|
|
920
|
+
liff.login({
|
|
921
|
+
redirectUri: redirectUri
|
|
922
|
+
});
|
|
923
|
+
return [
|
|
924
|
+
2
|
|
925
|
+
];
|
|
926
|
+
}
|
|
927
|
+
if (loginByUser || ignoreRoute) return [
|
|
928
|
+
2
|
|
929
|
+
];
|
|
930
|
+
liff.login({
|
|
931
|
+
redirectUri: redirectUri
|
|
932
|
+
});
|
|
810
933
|
}
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
7
|
|
814
|
-
];
|
|
934
|
+
tempFriendship = null;
|
|
935
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
815
936
|
_state.label = 3;
|
|
816
937
|
case 3:
|
|
817
938
|
_state.trys.push([
|
|
@@ -834,58 +955,29 @@ var LiffProvider = function(param) {
|
|
|
834
955
|
];
|
|
835
956
|
case 5:
|
|
836
957
|
profileErr = _state.sent();
|
|
837
|
-
console.warn("取得 LIFF profile
|
|
958
|
+
console.warn("取得 LIFF profile 失敗:", profileErr);
|
|
838
959
|
return [
|
|
839
960
|
3,
|
|
840
961
|
6
|
|
841
962
|
];
|
|
842
963
|
case 6:
|
|
843
|
-
return [
|
|
844
|
-
3,
|
|
845
|
-
8
|
|
846
|
-
];
|
|
847
|
-
case 7:
|
|
848
|
-
// 已有快取,跳過呼叫
|
|
849
|
-
console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
|
|
850
|
-
_state.label = 8;
|
|
851
|
-
case 8:
|
|
852
|
-
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
853
|
-
// 未登入先進行登入
|
|
854
|
-
if (!liff.isLoggedIn()) {
|
|
855
|
-
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
856
|
-
if (liffLogin) {
|
|
857
|
-
liff.login({
|
|
858
|
-
redirectUri: redirectUri
|
|
859
|
-
});
|
|
860
|
-
return [
|
|
861
|
-
2
|
|
862
|
-
];
|
|
863
|
-
}
|
|
864
|
-
if (loginByUser || ignoreRoute) return [
|
|
865
|
-
2
|
|
866
|
-
];
|
|
867
|
-
liff.login({
|
|
868
|
-
redirectUri: redirectUri
|
|
869
|
-
});
|
|
870
|
-
}
|
|
871
|
-
tempFriendship = null;
|
|
872
964
|
if (!lineToken) return [
|
|
873
965
|
3,
|
|
874
|
-
|
|
966
|
+
12
|
|
875
967
|
];
|
|
876
|
-
_state.label =
|
|
877
|
-
case
|
|
968
|
+
_state.label = 7;
|
|
969
|
+
case 7:
|
|
878
970
|
_state.trys.push([
|
|
971
|
+
7,
|
|
879
972
|
9,
|
|
880
|
-
11,
|
|
881
973
|
,
|
|
882
|
-
|
|
974
|
+
10
|
|
883
975
|
]);
|
|
884
976
|
return [
|
|
885
977
|
4,
|
|
886
978
|
liff.getFriendship()
|
|
887
979
|
];
|
|
888
|
-
case
|
|
980
|
+
case 8:
|
|
889
981
|
friendship = _state.sent();
|
|
890
982
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
891
983
|
setFriendship(friendFlag);
|
|
@@ -893,16 +985,16 @@ var LiffProvider = function(param) {
|
|
|
893
985
|
console.log("isFriendship", friendFlag);
|
|
894
986
|
return [
|
|
895
987
|
3,
|
|
896
|
-
|
|
988
|
+
10
|
|
897
989
|
];
|
|
898
|
-
case
|
|
990
|
+
case 9:
|
|
899
991
|
error = _state.sent();
|
|
900
992
|
console.error("Error in liff.getFriendship():", error);
|
|
901
993
|
return [
|
|
902
994
|
3,
|
|
903
|
-
|
|
995
|
+
10
|
|
904
996
|
];
|
|
905
|
-
case
|
|
997
|
+
case 10:
|
|
906
998
|
console.log("isValid", isValid);
|
|
907
999
|
if (tempFriendship && isValid) return [
|
|
908
1000
|
2
|
|
@@ -911,23 +1003,23 @@ var LiffProvider = function(param) {
|
|
|
911
1003
|
4,
|
|
912
1004
|
loginInit(lineToken)
|
|
913
1005
|
];
|
|
914
|
-
case
|
|
1006
|
+
case 11:
|
|
915
1007
|
_state.sent();
|
|
916
|
-
_state.label =
|
|
917
|
-
case
|
|
1008
|
+
_state.label = 12;
|
|
1009
|
+
case 12:
|
|
918
1010
|
return [
|
|
919
1011
|
3,
|
|
920
|
-
|
|
1012
|
+
14
|
|
921
1013
|
];
|
|
922
|
-
case
|
|
1014
|
+
case 13:
|
|
923
1015
|
err = _state.sent();
|
|
924
1016
|
setLiffError(err.toString());
|
|
925
1017
|
console.log("LIFF init failed.", err);
|
|
926
1018
|
return [
|
|
927
1019
|
3,
|
|
928
|
-
|
|
1020
|
+
14
|
|
929
1021
|
];
|
|
930
|
-
case
|
|
1022
|
+
case 14:
|
|
931
1023
|
return [
|
|
932
1024
|
2
|
|
933
1025
|
];
|
|
@@ -1109,6 +1201,56 @@ var LiffProvider = function(param) {
|
|
|
1109
1201
|
var trimmed = token.trim();
|
|
1110
1202
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1111
1203
|
};
|
|
1204
|
+
// 提供給 context 的 lazy-load 函式(會嘗試回傳已存在的 liffObject,否則 dynamic import)
|
|
1205
|
+
var getLiff = useCallback(/*#__PURE__*/ _async_to_generator(function() {
|
|
1206
|
+
var mod, sdk, e;
|
|
1207
|
+
return _ts_generator(this, function(_state) {
|
|
1208
|
+
switch(_state.label){
|
|
1209
|
+
case 0:
|
|
1210
|
+
if (liffObject) return [
|
|
1211
|
+
2,
|
|
1212
|
+
liffObject
|
|
1213
|
+
];
|
|
1214
|
+
if (typeof window === "undefined") return [
|
|
1215
|
+
2,
|
|
1216
|
+
null
|
|
1217
|
+
];
|
|
1218
|
+
_state.label = 1;
|
|
1219
|
+
case 1:
|
|
1220
|
+
_state.trys.push([
|
|
1221
|
+
1,
|
|
1222
|
+
3,
|
|
1223
|
+
,
|
|
1224
|
+
4
|
|
1225
|
+
]);
|
|
1226
|
+
return [
|
|
1227
|
+
4,
|
|
1228
|
+
import('./index.esm3.js')
|
|
1229
|
+
];
|
|
1230
|
+
case 2:
|
|
1231
|
+
mod = _state.sent();
|
|
1232
|
+
sdk = mod && (mod.default || mod.liff) ? mod.default || mod.liff : mod;
|
|
1233
|
+
if (sdk) setLiffObject(sdk);
|
|
1234
|
+
return [
|
|
1235
|
+
2,
|
|
1236
|
+
sdk || null
|
|
1237
|
+
];
|
|
1238
|
+
case 3:
|
|
1239
|
+
e = _state.sent();
|
|
1240
|
+
console.error("lazy import @line/liff failed", e);
|
|
1241
|
+
return [
|
|
1242
|
+
2,
|
|
1243
|
+
null
|
|
1244
|
+
];
|
|
1245
|
+
case 4:
|
|
1246
|
+
return [
|
|
1247
|
+
2
|
|
1248
|
+
];
|
|
1249
|
+
}
|
|
1250
|
+
});
|
|
1251
|
+
}), [
|
|
1252
|
+
liffObject
|
|
1253
|
+
]);
|
|
1112
1254
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1113
1255
|
// 初始載入時從 localStorage 載入
|
|
1114
1256
|
useEffect(function() {
|
|
@@ -1194,6 +1336,12 @@ var LiffProvider = function(param) {
|
|
|
1194
1336
|
var contextValue = useMemo(function() {
|
|
1195
1337
|
return {
|
|
1196
1338
|
liffObject: liffObject,
|
|
1339
|
+
// 非同步取得 LIFF SDK 的 helper(lazy-load),使用時可以呼叫 `await getLiff()`
|
|
1340
|
+
getLiff: getLiff,
|
|
1341
|
+
// helper:透過 fetchLiffSdk 執行更完整的 fetch + optional init
|
|
1342
|
+
fetchLiffSdk: function(liffId) {
|
|
1343
|
+
return fetchLiffSdk(liffId);
|
|
1344
|
+
},
|
|
1197
1345
|
loginData: loginData,
|
|
1198
1346
|
userInfo: userInfo,
|
|
1199
1347
|
accessToken: accessToken,
|
|
@@ -1231,4 +1379,4 @@ var useLiffContext = function() {
|
|
|
1231
1379
|
return context;
|
|
1232
1380
|
};
|
|
1233
1381
|
|
|
1234
|
-
export { LiffContext, LiffProvider, useLiffContext };
|
|
1382
|
+
export { LiffContext, LiffProvider, fetchLiffSdk, useLiffContext };
|
package/package.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
type LiffContextType = {
|
|
3
|
+
getLiff: () => Promise<any>;
|
|
4
|
+
fetchLiffSdk?: (liffId: string) => Promise<any>;
|
|
3
5
|
liffObject: any;
|
|
4
6
|
loginData: any;
|
|
5
7
|
userInfo?: any;
|
|
@@ -13,6 +15,7 @@ type LiffContextType = {
|
|
|
13
15
|
accountLogin: (username: string, password: string) => Promise<void>;
|
|
14
16
|
};
|
|
15
17
|
export declare const LiffContext: React.Context<LiffContextType | undefined>;
|
|
18
|
+
export declare function fetchLiffSdk(liffId?: string): Promise<any>;
|
|
16
19
|
export declare const LiffProvider: ({ children, liffId, localStorageKey, checkTokenUrl, loginUrl, accountLoginUrl, memberInfoUrl, openInApp, ignoreCheckAddFriend, ignoreRoute, loginByUser, liffLogin, customerRedirectUrl, inviteCode, handleLoginError, }: {
|
|
17
20
|
children: React.ReactNode;
|
|
18
21
|
liffId: string;
|