@sunggang/ui-lib 0.4.46 → 0.4.47
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 +87 -156
- package/LiffProvider.esm.js +88 -157
- package/package.json +1 -1
- package/src/lib/Provider/LiffProvider.d.ts +0 -2
package/LiffProvider.cjs.js
CHANGED
|
@@ -465,8 +465,8 @@ var LiffProvider = function(param) {
|
|
|
465
465
|
var _useState7 = _sliced_to_array(React.useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
|
|
466
466
|
// userInfo 的 localStorage key
|
|
467
467
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
468
|
-
// liff
|
|
469
|
-
var
|
|
468
|
+
// liff userInfo 的 localStorage key
|
|
469
|
+
var liffUserInfoStorageKey = "".concat(localStorageKey, "-liffUserInfo");
|
|
470
470
|
// 從 localStorage 載入 userInfo
|
|
471
471
|
var loadUserInfoFromStorage = function() {
|
|
472
472
|
try {
|
|
@@ -481,40 +481,36 @@ var LiffProvider = function(param) {
|
|
|
481
481
|
}
|
|
482
482
|
return null;
|
|
483
483
|
};
|
|
484
|
-
//
|
|
485
|
-
var
|
|
484
|
+
// 儲存 userInfo 到 localStorage
|
|
485
|
+
var saveUserInfoToStorage = function(info) {
|
|
486
486
|
try {
|
|
487
|
-
|
|
487
|
+
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
488
|
+
} catch (err) {
|
|
489
|
+
console.error("儲存 userInfo 失敗:", err);
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
// 從 localStorage 載入 LIFF userInfo
|
|
493
|
+
var loadLiffUserInfoFromStorage = function() {
|
|
494
|
+
try {
|
|
495
|
+
var stored = window.localStorage.getItem(liffUserInfoStorageKey);
|
|
488
496
|
if (stored) {
|
|
489
497
|
var parsed = JSON.parse(stored);
|
|
490
498
|
setLiffProfile(parsed);
|
|
491
499
|
return parsed;
|
|
492
500
|
}
|
|
493
501
|
} catch (err) {
|
|
494
|
-
console.error("載入
|
|
502
|
+
console.error("載入 liffUserInfo 失敗:", err);
|
|
495
503
|
}
|
|
496
504
|
return null;
|
|
497
505
|
};
|
|
498
|
-
// 儲存 userInfo 到 localStorage
|
|
499
|
-
var
|
|
500
|
-
try {
|
|
501
|
-
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
502
|
-
} catch (err) {
|
|
503
|
-
console.error("儲存 userInfo 失敗:", err);
|
|
504
|
-
}
|
|
505
|
-
}, [
|
|
506
|
-
userInfoStorageKey
|
|
507
|
-
]);
|
|
508
|
-
// 儲存 LIFF profile 到 localStorage
|
|
509
|
-
var saveLiffProfileToStorage = React.useCallback(function(info) {
|
|
506
|
+
// 儲存 LIFF userInfo 到 localStorage
|
|
507
|
+
var saveLiffUserInfoToStorage = function(info) {
|
|
510
508
|
try {
|
|
511
|
-
window.localStorage.setItem(
|
|
509
|
+
window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
|
|
512
510
|
} catch (err) {
|
|
513
|
-
console.error("儲存
|
|
511
|
+
console.error("儲存 liffUserInfo 失敗:", err);
|
|
514
512
|
}
|
|
515
|
-
}
|
|
516
|
-
liffProfileStorageKey
|
|
517
|
-
]);
|
|
513
|
+
};
|
|
518
514
|
var fetchMemberInfo = function() {
|
|
519
515
|
var _ref = _async_to_generator(function(token) {
|
|
520
516
|
var response, err;
|
|
@@ -732,7 +728,7 @@ var LiffProvider = function(param) {
|
|
|
732
728
|
// 初始化 LIFF
|
|
733
729
|
var initializeLiff = function() {
|
|
734
730
|
var _ref = _async_to_generator(function(isValid) {
|
|
735
|
-
var
|
|
731
|
+
var customFetch, liff, originalFetch, profile, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
736
732
|
return _ts_generator(this, function(_state) {
|
|
737
733
|
switch(_state.label){
|
|
738
734
|
case 0:
|
|
@@ -742,29 +738,48 @@ var LiffProvider = function(param) {
|
|
|
742
738
|
,
|
|
743
739
|
11
|
|
744
740
|
]);
|
|
741
|
+
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
742
|
+
// eslint-disable-next-line no-inner-declarations
|
|
743
|
+
function customFetch(url, options) {
|
|
744
|
+
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
745
|
+
url = "".concat(url, "?ts=").concat(Math.random());
|
|
746
|
+
}
|
|
747
|
+
return originalFetch(url, options);
|
|
748
|
+
};
|
|
745
749
|
return [
|
|
746
750
|
4,
|
|
747
|
-
|
|
751
|
+
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
748
752
|
];
|
|
749
753
|
case 1:
|
|
750
|
-
_state.sent();
|
|
754
|
+
liff = _state.sent().liff;
|
|
755
|
+
originalFetch = window.fetch;
|
|
756
|
+
window.fetch = customFetch;
|
|
757
|
+
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);
|
|
751
758
|
return [
|
|
752
759
|
4,
|
|
753
|
-
|
|
760
|
+
liff.init({
|
|
761
|
+
liffId: liffId,
|
|
762
|
+
withLoginOnExternalBrowser: false
|
|
763
|
+
})
|
|
754
764
|
];
|
|
755
765
|
case 2:
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
setLiffObject(
|
|
759
|
-
|
|
760
|
-
|
|
766
|
+
_state.sent();
|
|
767
|
+
console.log("LIFF init succeeded.");
|
|
768
|
+
setLiffObject(liff);
|
|
769
|
+
return [
|
|
770
|
+
4,
|
|
771
|
+
liff.getProfile()
|
|
761
772
|
];
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
773
|
+
case 3:
|
|
774
|
+
profile = _state.sent();
|
|
775
|
+
setLiffProfile(profile);
|
|
776
|
+
saveLiffUserInfoToStorage(profile);
|
|
777
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
778
|
+
// 未登入先進行登入
|
|
779
|
+
if (!liff.isLoggedIn()) {
|
|
765
780
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
766
781
|
if (liffLogin) {
|
|
767
|
-
|
|
782
|
+
liff.login({
|
|
768
783
|
redirectUri: redirectUri
|
|
769
784
|
});
|
|
770
785
|
return [
|
|
@@ -774,42 +789,33 @@ var LiffProvider = function(param) {
|
|
|
774
789
|
if (loginByUser || ignoreRoute) return [
|
|
775
790
|
2
|
|
776
791
|
];
|
|
777
|
-
|
|
792
|
+
liff.login({
|
|
778
793
|
redirectUri: redirectUri
|
|
779
794
|
});
|
|
780
|
-
return [
|
|
781
|
-
2
|
|
782
|
-
];
|
|
783
795
|
}
|
|
784
796
|
tempFriendship = null;
|
|
785
797
|
if (!lineToken) return [
|
|
786
798
|
3,
|
|
787
799
|
9
|
|
788
800
|
];
|
|
789
|
-
_state.label =
|
|
790
|
-
case
|
|
801
|
+
_state.label = 4;
|
|
802
|
+
case 4:
|
|
791
803
|
_state.trys.push([
|
|
792
|
-
|
|
804
|
+
4,
|
|
793
805
|
6,
|
|
794
806
|
,
|
|
795
807
|
7
|
|
796
808
|
]);
|
|
797
|
-
if (!(sdk.isLoggedIn && sdk.isLoggedIn())) return [
|
|
798
|
-
3,
|
|
799
|
-
5
|
|
800
|
-
];
|
|
801
809
|
return [
|
|
802
810
|
4,
|
|
803
|
-
|
|
811
|
+
liff.getFriendship()
|
|
804
812
|
];
|
|
805
|
-
case
|
|
813
|
+
case 5:
|
|
806
814
|
friendship = _state.sent();
|
|
807
815
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
808
816
|
setFriendship(friendFlag);
|
|
809
817
|
tempFriendship = friendFlag;
|
|
810
818
|
console.log("isFriendship", friendFlag);
|
|
811
|
-
_state.label = 5;
|
|
812
|
-
case 5:
|
|
813
819
|
return [
|
|
814
820
|
3,
|
|
815
821
|
7
|
|
@@ -857,94 +863,6 @@ var LiffProvider = function(param) {
|
|
|
857
863
|
return _ref.apply(this, arguments);
|
|
858
864
|
};
|
|
859
865
|
}();
|
|
860
|
-
// 確保 LIFF init 只執行一次且在需要時才執行
|
|
861
|
-
var ensureLiffInitialized = React.useCallback(function() {
|
|
862
|
-
var _ref = _async_to_generator(function(isValid) {
|
|
863
|
-
var customFetch, liff, originalFetch, profile, e;
|
|
864
|
-
return _ts_generator(this, function(_state) {
|
|
865
|
-
switch(_state.label){
|
|
866
|
-
case 0:
|
|
867
|
-
if (!liffId) {
|
|
868
|
-
console.warn("liffId 未提供,跳過 liff.init()。");
|
|
869
|
-
return [
|
|
870
|
-
2
|
|
871
|
-
];
|
|
872
|
-
}
|
|
873
|
-
_state.label = 1;
|
|
874
|
-
case 1:
|
|
875
|
-
_state.trys.push([
|
|
876
|
-
1,
|
|
877
|
-
5,
|
|
878
|
-
,
|
|
879
|
-
6
|
|
880
|
-
]);
|
|
881
|
-
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
882
|
-
// eslint-disable-next-line no-inner-declarations
|
|
883
|
-
function customFetch(url, options) {
|
|
884
|
-
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
885
|
-
url = "".concat(url, "?ts=").concat(Math.random());
|
|
886
|
-
}
|
|
887
|
-
return originalFetch(url, options);
|
|
888
|
-
};
|
|
889
|
-
return [
|
|
890
|
-
4,
|
|
891
|
-
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
892
|
-
];
|
|
893
|
-
case 2:
|
|
894
|
-
liff = _state.sent().liff;
|
|
895
|
-
originalFetch = window.fetch;
|
|
896
|
-
window.fetch = customFetch;
|
|
897
|
-
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);
|
|
898
|
-
if (liff.isLoggedIn() && isValid) {
|
|
899
|
-
console.log("LIFF already initialized.");
|
|
900
|
-
return [
|
|
901
|
-
2
|
|
902
|
-
];
|
|
903
|
-
}
|
|
904
|
-
return [
|
|
905
|
-
4,
|
|
906
|
-
liff.init({
|
|
907
|
-
liffId: liffId,
|
|
908
|
-
withLoginOnExternalBrowser: false
|
|
909
|
-
})
|
|
910
|
-
];
|
|
911
|
-
case 3:
|
|
912
|
-
_state.sent();
|
|
913
|
-
return [
|
|
914
|
-
4,
|
|
915
|
-
liff.getProfile()
|
|
916
|
-
];
|
|
917
|
-
case 4:
|
|
918
|
-
profile = _state.sent();
|
|
919
|
-
setLiffProfile(profile);
|
|
920
|
-
saveLiffProfileToStorage(profile);
|
|
921
|
-
setLiffObject(liff);
|
|
922
|
-
console.log("LIFF initialized.");
|
|
923
|
-
return [
|
|
924
|
-
3,
|
|
925
|
-
6
|
|
926
|
-
];
|
|
927
|
-
case 5:
|
|
928
|
-
e = _state.sent();
|
|
929
|
-
console.error("ensureLiffInitialized failed:", e);
|
|
930
|
-
return [
|
|
931
|
-
3,
|
|
932
|
-
6
|
|
933
|
-
];
|
|
934
|
-
case 6:
|
|
935
|
-
return [
|
|
936
|
-
2
|
|
937
|
-
];
|
|
938
|
-
}
|
|
939
|
-
});
|
|
940
|
-
});
|
|
941
|
-
return function(isValid) {
|
|
942
|
-
return _ref.apply(this, arguments);
|
|
943
|
-
};
|
|
944
|
-
}(), [
|
|
945
|
-
liffId,
|
|
946
|
-
openInApp
|
|
947
|
-
]);
|
|
948
866
|
var accountLogin = function() {
|
|
949
867
|
var _ref = _async_to_generator(function(username, password) {
|
|
950
868
|
var response, token, tokenType, finalToken, err;
|
|
@@ -1111,10 +1029,10 @@ var LiffProvider = function(param) {
|
|
|
1111
1029
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1112
1030
|
};
|
|
1113
1031
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1114
|
-
// 初始載入時從 localStorage 載入 userInfo
|
|
1032
|
+
// 初始載入時從 localStorage 載入 userInfo
|
|
1115
1033
|
React.useEffect(function() {
|
|
1116
1034
|
loadUserInfoFromStorage();
|
|
1117
|
-
|
|
1035
|
+
loadLiffUserInfoFromStorage();
|
|
1118
1036
|
}, []);
|
|
1119
1037
|
// 客戶端初始化 LIFF
|
|
1120
1038
|
React.useEffect(function() {
|
|
@@ -1192,21 +1110,34 @@ var LiffProvider = function(param) {
|
|
|
1192
1110
|
}();
|
|
1193
1111
|
checkAndInitialize();
|
|
1194
1112
|
}, []);
|
|
1195
|
-
var contextValue = {
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1113
|
+
var contextValue = React.useMemo(function() {
|
|
1114
|
+
return {
|
|
1115
|
+
liffObject: liffObject,
|
|
1116
|
+
loginData: loginData,
|
|
1117
|
+
userInfo: userInfo,
|
|
1118
|
+
accessToken: accessToken,
|
|
1119
|
+
liffError: liffError,
|
|
1120
|
+
initializeLiff: function() {
|
|
1121
|
+
return initializeLiff(false);
|
|
1122
|
+
},
|
|
1123
|
+
isFriendship: isFriendship,
|
|
1124
|
+
ensureLiffTokenValid: ensureLiffTokenValid,
|
|
1125
|
+
accountLogin: accountLogin,
|
|
1126
|
+
loginType: loginType,
|
|
1127
|
+
liffProfile: liffProfile
|
|
1128
|
+
};
|
|
1129
|
+
}, [
|
|
1130
|
+
liffObject,
|
|
1131
|
+
loginData,
|
|
1132
|
+
userInfo,
|
|
1133
|
+
accessToken,
|
|
1134
|
+
liffError,
|
|
1135
|
+
isFriendship,
|
|
1136
|
+
ensureLiffTokenValid,
|
|
1137
|
+
accountLogin,
|
|
1138
|
+
loginType,
|
|
1139
|
+
liffProfile
|
|
1140
|
+
]);
|
|
1210
1141
|
return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
|
|
1211
1142
|
value: contextValue,
|
|
1212
1143
|
children: children
|
package/LiffProvider.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { createContext, useState, useCallback, useEffect, useContext } from 'react';
|
|
2
|
+
import { createContext, useState, useCallback, useEffect, useMemo, useContext } from 'react';
|
|
3
3
|
|
|
4
4
|
function asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key, arg) {
|
|
5
5
|
try {
|
|
@@ -461,8 +461,8 @@ var LiffProvider = function(param) {
|
|
|
461
461
|
var _useState7 = _sliced_to_array(useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
|
|
462
462
|
// userInfo 的 localStorage key
|
|
463
463
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
464
|
-
// liff
|
|
465
|
-
var
|
|
464
|
+
// liff userInfo 的 localStorage key
|
|
465
|
+
var liffUserInfoStorageKey = "".concat(localStorageKey, "-liffUserInfo");
|
|
466
466
|
// 從 localStorage 載入 userInfo
|
|
467
467
|
var loadUserInfoFromStorage = function() {
|
|
468
468
|
try {
|
|
@@ -477,40 +477,36 @@ var LiffProvider = function(param) {
|
|
|
477
477
|
}
|
|
478
478
|
return null;
|
|
479
479
|
};
|
|
480
|
-
//
|
|
481
|
-
var
|
|
480
|
+
// 儲存 userInfo 到 localStorage
|
|
481
|
+
var saveUserInfoToStorage = function(info) {
|
|
482
482
|
try {
|
|
483
|
-
|
|
483
|
+
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
484
|
+
} catch (err) {
|
|
485
|
+
console.error("儲存 userInfo 失敗:", err);
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
// 從 localStorage 載入 LIFF userInfo
|
|
489
|
+
var loadLiffUserInfoFromStorage = function() {
|
|
490
|
+
try {
|
|
491
|
+
var stored = window.localStorage.getItem(liffUserInfoStorageKey);
|
|
484
492
|
if (stored) {
|
|
485
493
|
var parsed = JSON.parse(stored);
|
|
486
494
|
setLiffProfile(parsed);
|
|
487
495
|
return parsed;
|
|
488
496
|
}
|
|
489
497
|
} catch (err) {
|
|
490
|
-
console.error("載入
|
|
498
|
+
console.error("載入 liffUserInfo 失敗:", err);
|
|
491
499
|
}
|
|
492
500
|
return null;
|
|
493
501
|
};
|
|
494
|
-
// 儲存 userInfo 到 localStorage
|
|
495
|
-
var
|
|
496
|
-
try {
|
|
497
|
-
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
498
|
-
} catch (err) {
|
|
499
|
-
console.error("儲存 userInfo 失敗:", err);
|
|
500
|
-
}
|
|
501
|
-
}, [
|
|
502
|
-
userInfoStorageKey
|
|
503
|
-
]);
|
|
504
|
-
// 儲存 LIFF profile 到 localStorage
|
|
505
|
-
var saveLiffProfileToStorage = useCallback(function(info) {
|
|
502
|
+
// 儲存 LIFF userInfo 到 localStorage
|
|
503
|
+
var saveLiffUserInfoToStorage = function(info) {
|
|
506
504
|
try {
|
|
507
|
-
window.localStorage.setItem(
|
|
505
|
+
window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
|
|
508
506
|
} catch (err) {
|
|
509
|
-
console.error("儲存
|
|
507
|
+
console.error("儲存 liffUserInfo 失敗:", err);
|
|
510
508
|
}
|
|
511
|
-
}
|
|
512
|
-
liffProfileStorageKey
|
|
513
|
-
]);
|
|
509
|
+
};
|
|
514
510
|
var fetchMemberInfo = function() {
|
|
515
511
|
var _ref = _async_to_generator(function(token) {
|
|
516
512
|
var response, err;
|
|
@@ -728,7 +724,7 @@ var LiffProvider = function(param) {
|
|
|
728
724
|
// 初始化 LIFF
|
|
729
725
|
var initializeLiff = function() {
|
|
730
726
|
var _ref = _async_to_generator(function(isValid) {
|
|
731
|
-
var
|
|
727
|
+
var customFetch, liff, originalFetch, profile, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
732
728
|
return _ts_generator(this, function(_state) {
|
|
733
729
|
switch(_state.label){
|
|
734
730
|
case 0:
|
|
@@ -738,29 +734,48 @@ var LiffProvider = function(param) {
|
|
|
738
734
|
,
|
|
739
735
|
11
|
|
740
736
|
]);
|
|
737
|
+
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
738
|
+
// eslint-disable-next-line no-inner-declarations
|
|
739
|
+
function customFetch(url, options) {
|
|
740
|
+
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
741
|
+
url = "".concat(url, "?ts=").concat(Math.random());
|
|
742
|
+
}
|
|
743
|
+
return originalFetch(url, options);
|
|
744
|
+
};
|
|
741
745
|
return [
|
|
742
746
|
4,
|
|
743
|
-
|
|
747
|
+
import('./index.esm3.js')
|
|
744
748
|
];
|
|
745
749
|
case 1:
|
|
746
|
-
_state.sent();
|
|
750
|
+
liff = _state.sent().liff;
|
|
751
|
+
originalFetch = window.fetch;
|
|
752
|
+
window.fetch = customFetch;
|
|
753
|
+
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);
|
|
747
754
|
return [
|
|
748
755
|
4,
|
|
749
|
-
|
|
756
|
+
liff.init({
|
|
757
|
+
liffId: liffId,
|
|
758
|
+
withLoginOnExternalBrowser: false
|
|
759
|
+
})
|
|
750
760
|
];
|
|
751
761
|
case 2:
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
setLiffObject(
|
|
755
|
-
|
|
756
|
-
|
|
762
|
+
_state.sent();
|
|
763
|
+
console.log("LIFF init succeeded.");
|
|
764
|
+
setLiffObject(liff);
|
|
765
|
+
return [
|
|
766
|
+
4,
|
|
767
|
+
liff.getProfile()
|
|
757
768
|
];
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
769
|
+
case 3:
|
|
770
|
+
profile = _state.sent();
|
|
771
|
+
setLiffProfile(profile);
|
|
772
|
+
saveLiffUserInfoToStorage(profile);
|
|
773
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
774
|
+
// 未登入先進行登入
|
|
775
|
+
if (!liff.isLoggedIn()) {
|
|
761
776
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
762
777
|
if (liffLogin) {
|
|
763
|
-
|
|
778
|
+
liff.login({
|
|
764
779
|
redirectUri: redirectUri
|
|
765
780
|
});
|
|
766
781
|
return [
|
|
@@ -770,42 +785,33 @@ var LiffProvider = function(param) {
|
|
|
770
785
|
if (loginByUser || ignoreRoute) return [
|
|
771
786
|
2
|
|
772
787
|
];
|
|
773
|
-
|
|
788
|
+
liff.login({
|
|
774
789
|
redirectUri: redirectUri
|
|
775
790
|
});
|
|
776
|
-
return [
|
|
777
|
-
2
|
|
778
|
-
];
|
|
779
791
|
}
|
|
780
792
|
tempFriendship = null;
|
|
781
793
|
if (!lineToken) return [
|
|
782
794
|
3,
|
|
783
795
|
9
|
|
784
796
|
];
|
|
785
|
-
_state.label =
|
|
786
|
-
case
|
|
797
|
+
_state.label = 4;
|
|
798
|
+
case 4:
|
|
787
799
|
_state.trys.push([
|
|
788
|
-
|
|
800
|
+
4,
|
|
789
801
|
6,
|
|
790
802
|
,
|
|
791
803
|
7
|
|
792
804
|
]);
|
|
793
|
-
if (!(sdk.isLoggedIn && sdk.isLoggedIn())) return [
|
|
794
|
-
3,
|
|
795
|
-
5
|
|
796
|
-
];
|
|
797
805
|
return [
|
|
798
806
|
4,
|
|
799
|
-
|
|
807
|
+
liff.getFriendship()
|
|
800
808
|
];
|
|
801
|
-
case
|
|
809
|
+
case 5:
|
|
802
810
|
friendship = _state.sent();
|
|
803
811
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
804
812
|
setFriendship(friendFlag);
|
|
805
813
|
tempFriendship = friendFlag;
|
|
806
814
|
console.log("isFriendship", friendFlag);
|
|
807
|
-
_state.label = 5;
|
|
808
|
-
case 5:
|
|
809
815
|
return [
|
|
810
816
|
3,
|
|
811
817
|
7
|
|
@@ -853,94 +859,6 @@ var LiffProvider = function(param) {
|
|
|
853
859
|
return _ref.apply(this, arguments);
|
|
854
860
|
};
|
|
855
861
|
}();
|
|
856
|
-
// 確保 LIFF init 只執行一次且在需要時才執行
|
|
857
|
-
var ensureLiffInitialized = useCallback(function() {
|
|
858
|
-
var _ref = _async_to_generator(function(isValid) {
|
|
859
|
-
var customFetch, liff, originalFetch, profile, e;
|
|
860
|
-
return _ts_generator(this, function(_state) {
|
|
861
|
-
switch(_state.label){
|
|
862
|
-
case 0:
|
|
863
|
-
if (!liffId) {
|
|
864
|
-
console.warn("liffId 未提供,跳過 liff.init()。");
|
|
865
|
-
return [
|
|
866
|
-
2
|
|
867
|
-
];
|
|
868
|
-
}
|
|
869
|
-
_state.label = 1;
|
|
870
|
-
case 1:
|
|
871
|
-
_state.trys.push([
|
|
872
|
-
1,
|
|
873
|
-
5,
|
|
874
|
-
,
|
|
875
|
-
6
|
|
876
|
-
]);
|
|
877
|
-
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
878
|
-
// eslint-disable-next-line no-inner-declarations
|
|
879
|
-
function customFetch(url, options) {
|
|
880
|
-
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
881
|
-
url = "".concat(url, "?ts=").concat(Math.random());
|
|
882
|
-
}
|
|
883
|
-
return originalFetch(url, options);
|
|
884
|
-
};
|
|
885
|
-
return [
|
|
886
|
-
4,
|
|
887
|
-
import('./index.esm3.js')
|
|
888
|
-
];
|
|
889
|
-
case 2:
|
|
890
|
-
liff = _state.sent().liff;
|
|
891
|
-
originalFetch = window.fetch;
|
|
892
|
-
window.fetch = customFetch;
|
|
893
|
-
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);
|
|
894
|
-
if (liff.isLoggedIn() && isValid) {
|
|
895
|
-
console.log("LIFF already initialized.");
|
|
896
|
-
return [
|
|
897
|
-
2
|
|
898
|
-
];
|
|
899
|
-
}
|
|
900
|
-
return [
|
|
901
|
-
4,
|
|
902
|
-
liff.init({
|
|
903
|
-
liffId: liffId,
|
|
904
|
-
withLoginOnExternalBrowser: false
|
|
905
|
-
})
|
|
906
|
-
];
|
|
907
|
-
case 3:
|
|
908
|
-
_state.sent();
|
|
909
|
-
return [
|
|
910
|
-
4,
|
|
911
|
-
liff.getProfile()
|
|
912
|
-
];
|
|
913
|
-
case 4:
|
|
914
|
-
profile = _state.sent();
|
|
915
|
-
setLiffProfile(profile);
|
|
916
|
-
saveLiffProfileToStorage(profile);
|
|
917
|
-
setLiffObject(liff);
|
|
918
|
-
console.log("LIFF initialized.");
|
|
919
|
-
return [
|
|
920
|
-
3,
|
|
921
|
-
6
|
|
922
|
-
];
|
|
923
|
-
case 5:
|
|
924
|
-
e = _state.sent();
|
|
925
|
-
console.error("ensureLiffInitialized failed:", e);
|
|
926
|
-
return [
|
|
927
|
-
3,
|
|
928
|
-
6
|
|
929
|
-
];
|
|
930
|
-
case 6:
|
|
931
|
-
return [
|
|
932
|
-
2
|
|
933
|
-
];
|
|
934
|
-
}
|
|
935
|
-
});
|
|
936
|
-
});
|
|
937
|
-
return function(isValid) {
|
|
938
|
-
return _ref.apply(this, arguments);
|
|
939
|
-
};
|
|
940
|
-
}(), [
|
|
941
|
-
liffId,
|
|
942
|
-
openInApp
|
|
943
|
-
]);
|
|
944
862
|
var accountLogin = function() {
|
|
945
863
|
var _ref = _async_to_generator(function(username, password) {
|
|
946
864
|
var response, token, tokenType, finalToken, err;
|
|
@@ -1107,10 +1025,10 @@ var LiffProvider = function(param) {
|
|
|
1107
1025
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1108
1026
|
};
|
|
1109
1027
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1110
|
-
// 初始載入時從 localStorage 載入 userInfo
|
|
1028
|
+
// 初始載入時從 localStorage 載入 userInfo
|
|
1111
1029
|
useEffect(function() {
|
|
1112
1030
|
loadUserInfoFromStorage();
|
|
1113
|
-
|
|
1031
|
+
loadLiffUserInfoFromStorage();
|
|
1114
1032
|
}, []);
|
|
1115
1033
|
// 客戶端初始化 LIFF
|
|
1116
1034
|
useEffect(function() {
|
|
@@ -1188,21 +1106,34 @@ var LiffProvider = function(param) {
|
|
|
1188
1106
|
}();
|
|
1189
1107
|
checkAndInitialize();
|
|
1190
1108
|
}, []);
|
|
1191
|
-
var contextValue = {
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1109
|
+
var contextValue = useMemo(function() {
|
|
1110
|
+
return {
|
|
1111
|
+
liffObject: liffObject,
|
|
1112
|
+
loginData: loginData,
|
|
1113
|
+
userInfo: userInfo,
|
|
1114
|
+
accessToken: accessToken,
|
|
1115
|
+
liffError: liffError,
|
|
1116
|
+
initializeLiff: function() {
|
|
1117
|
+
return initializeLiff(false);
|
|
1118
|
+
},
|
|
1119
|
+
isFriendship: isFriendship,
|
|
1120
|
+
ensureLiffTokenValid: ensureLiffTokenValid,
|
|
1121
|
+
accountLogin: accountLogin,
|
|
1122
|
+
loginType: loginType,
|
|
1123
|
+
liffProfile: liffProfile
|
|
1124
|
+
};
|
|
1125
|
+
}, [
|
|
1126
|
+
liffObject,
|
|
1127
|
+
loginData,
|
|
1128
|
+
userInfo,
|
|
1129
|
+
accessToken,
|
|
1130
|
+
liffError,
|
|
1131
|
+
isFriendship,
|
|
1132
|
+
ensureLiffTokenValid,
|
|
1133
|
+
accountLogin,
|
|
1134
|
+
loginType,
|
|
1135
|
+
liffProfile
|
|
1136
|
+
]);
|
|
1206
1137
|
return /*#__PURE__*/ jsx(LiffContext.Provider, {
|
|
1207
1138
|
value: contextValue,
|
|
1208
1139
|
children: children
|
package/package.json
CHANGED
|
@@ -3,11 +3,9 @@ type LiffContextType = {
|
|
|
3
3
|
liffObject: any;
|
|
4
4
|
loginData: any;
|
|
5
5
|
userInfo?: any;
|
|
6
|
-
liffProfile?: any;
|
|
7
6
|
accessToken: string;
|
|
8
7
|
liffError: string | null;
|
|
9
8
|
initializeLiff: () => Promise<void>;
|
|
10
|
-
getLiffProfile: () => Promise<any | null>;
|
|
11
9
|
isFriendship: boolean | null;
|
|
12
10
|
ensureLiffTokenValid: () => Promise<boolean>;
|
|
13
11
|
loginType: string | null;
|