@sunggang/ui-lib 0.4.39 → 0.4.40

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.
@@ -254,7 +254,7 @@ var fetchAPI = function() {
254
254
  };
255
255
  }();
256
256
 
257
- function _array_like_to_array(arr, len) {
257
+ /* eslint-disable @typescript-eslint/no-explicit-any */ function _array_like_to_array(arr, len) {
258
258
  if (len == null || len > arr.length) len = arr.length;
259
259
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
260
260
  return arr2;
@@ -465,7 +465,7 @@ var LiffProvider = function(param) {
465
465
  // userInfo 的 localStorage key
466
466
  var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
467
467
  // 從 localStorage 載入 userInfo
468
- var loadUserInfoFromStorage = function() {
468
+ var loadUserInfoFromStorage = React.useCallback(function() {
469
469
  try {
470
470
  var storedUserInfo = window.localStorage.getItem(userInfoStorageKey);
471
471
  if (storedUserInfo) {
@@ -477,16 +477,20 @@ var LiffProvider = function(param) {
477
477
  console.error("載入 userInfo 失敗:", err);
478
478
  }
479
479
  return null;
480
- };
480
+ }, [
481
+ userInfoStorageKey
482
+ ]);
481
483
  // 儲存 userInfo 到 localStorage
482
- var saveUserInfoToStorage = function(info) {
484
+ var saveUserInfoToStorage = React.useCallback(function(info) {
483
485
  try {
484
486
  window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
485
487
  } catch (err) {
486
488
  console.error("儲存 userInfo 失敗:", err);
487
489
  }
488
- };
489
- var fetchMemberInfo = function() {
490
+ }, [
491
+ userInfoStorageKey
492
+ ]);
493
+ var fetchMemberInfo = React.useCallback(function() {
490
494
  var _ref = _async_to_generator(function(token) {
491
495
  var response, err;
492
496
  return _ts_generator(this, function(_state) {
@@ -531,19 +535,23 @@ var LiffProvider = function(param) {
531
535
  }
532
536
  });
533
537
  });
534
- return function fetchMemberInfo(token) {
538
+ return function(token) {
535
539
  return _ref.apply(this, arguments);
536
540
  };
537
- }();
541
+ }(), [
542
+ memberInfoUrl,
543
+ saveUserInfoToStorage
544
+ ]);
538
545
  // 檢查 token 的有效性
539
- var checkTokenFunc = function() {
546
+ var checkTokenFunc = React.useCallback(function() {
540
547
  var _ref = _async_to_generator(function(token) {
541
548
  var finalToken, response, err;
542
549
  return _ts_generator(this, function(_state) {
543
550
  switch(_state.label){
544
551
  case 0:
545
552
  if (!checkTokenUrl) return [
546
- 2
553
+ 2,
554
+ false
547
555
  ];
548
556
  finalToken = token.startsWith("Bearer ") ? token : "Bearer ".concat(token);
549
557
  _state.label = 1;
@@ -606,12 +614,17 @@ var LiffProvider = function(param) {
606
614
  }
607
615
  });
608
616
  });
609
- return function checkTokenFunc(token) {
617
+ return function(token) {
610
618
  return _ref.apply(this, arguments);
611
619
  };
612
- }();
620
+ }(), [
621
+ checkTokenUrl,
622
+ memberInfoUrl,
623
+ userInfoStorageKey,
624
+ fetchMemberInfo
625
+ ]);
613
626
  // 登入初始化函數
614
- var loginInit = function() {
627
+ var loginInit = React.useCallback(function() {
615
628
  var _ref = _async_to_generator(function(token) {
616
629
  var _resData_data, _resData_data1, response, resData, loginToken, err;
617
630
  return _ts_generator(this, function(_state) {
@@ -696,22 +709,34 @@ var LiffProvider = function(param) {
696
709
  }
697
710
  });
698
711
  });
699
- return function loginInit(token) {
712
+ return function(token) {
700
713
  return _ref.apply(this, arguments);
701
714
  };
702
- }();
715
+ }(), [
716
+ loginUrl,
717
+ ignoreCheckAddFriend,
718
+ inviteCode,
719
+ localStorageKey,
720
+ memberInfoUrl,
721
+ handleLoginError,
722
+ fetchMemberInfo,
723
+ saveUserInfoToStorage
724
+ ]);
703
725
  // 初始化 LIFF
704
- var initializeLiff = function() {
726
+ var initializeLiff = React.useCallback(function() {
705
727
  var _ref = _async_to_generator(function(isValid) {
706
- var customFetch, liff, originalFetch, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
728
+ var originalFetch, customFetch, liff, redirectUri, lineToken, tempFriendship, friendship, friendFlag, error, err;
707
729
  return _ts_generator(this, function(_state) {
708
730
  switch(_state.label){
709
731
  case 0:
732
+ originalFetch = window.fetch;
733
+ _state.label = 1;
734
+ case 1:
710
735
  _state.trys.push([
711
- 0,
712
- 9,
713
- ,
714
- 10
736
+ 1,
737
+ 13,
738
+ 14,
739
+ 15
715
740
  ]);
716
741
  customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
717
742
  // eslint-disable-next-line no-inner-declarations
@@ -725,11 +750,15 @@ var LiffProvider = function(param) {
725
750
  4,
726
751
  Promise.resolve().then(function () { return require('./index.cjs3.js'); })
727
752
  ];
728
- case 1:
753
+ case 2:
729
754
  liff = _state.sent().liff;
730
- originalFetch = window.fetch;
731
755
  window.fetch = customFetch;
732
756
  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);
757
+ console.log("Initializing LIFF with ID:", liff);
758
+ if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
759
+ 3,
760
+ 4
761
+ ];
733
762
  return [
734
763
  4,
735
764
  liff.init({
@@ -737,11 +766,17 @@ var LiffProvider = function(param) {
737
766
  withLoginOnExternalBrowser: false
738
767
  })
739
768
  ];
740
- case 2:
769
+ case 3:
741
770
  _state.sent();
742
771
  console.log("LIFF init succeeded.");
743
- setLiffObject(liff);
744
- lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
772
+ return [
773
+ 3,
774
+ 5
775
+ ];
776
+ case 4:
777
+ console.log("LIFF already logged in, skip init.");
778
+ _state.label = 5;
779
+ case 5:
745
780
  // 未登入先進行登入
746
781
  if (!liff.isLoggedIn()) {
747
782
  redirectUri = customerRedirectUrl || "".concat(window.location.href);
@@ -760,42 +795,58 @@ var LiffProvider = function(param) {
760
795
  redirectUri: redirectUri
761
796
  });
762
797
  }
798
+ setLiffObject(liff);
799
+ lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
800
+ // 已登入且 token 有效,跳過 loginInit
801
+ if (isValid) {
802
+ console.log("✅ Token 已驗證有效,跳過 loginInit");
803
+ return [
804
+ 2
805
+ ];
806
+ }
763
807
  tempFriendship = null;
764
808
  if (!lineToken) return [
765
809
  3,
766
- 8
810
+ 12
767
811
  ];
768
- _state.label = 3;
769
- case 3:
812
+ _state.label = 6;
813
+ case 6:
770
814
  _state.trys.push([
771
- 3,
772
- 5,
815
+ 6,
816
+ 9,
773
817
  ,
774
- 6
818
+ 10
775
819
  ]);
820
+ if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
821
+ 3,
822
+ 8
823
+ ];
776
824
  return [
777
825
  4,
778
826
  liff.getFriendship()
779
827
  ];
780
- case 4:
828
+ case 7:
781
829
  friendship = _state.sent();
782
830
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
783
831
  setFriendship(friendFlag);
784
832
  tempFriendship = friendFlag;
785
833
  console.log("isFriendship", friendFlag);
834
+ _state.label = 8;
835
+ case 8:
786
836
  return [
787
837
  3,
788
- 6
838
+ 10
789
839
  ];
790
- case 5:
840
+ case 9:
791
841
  error = _state.sent();
792
842
  console.error("Error in liff.getFriendship():", error);
793
843
  return [
794
844
  3,
795
- 6
845
+ 10
796
846
  ];
797
- case 6:
847
+ case 10:
798
848
  console.log("isValid", isValid);
849
+ // 如果是好友且 token 有效,跳過 loginInit
799
850
  if (tempFriendship && isValid) return [
800
851
  2
801
852
  ];
@@ -803,34 +854,52 @@ var LiffProvider = function(param) {
803
854
  4,
804
855
  loginInit(lineToken)
805
856
  ];
806
- case 7:
857
+ case 11:
807
858
  _state.sent();
808
- _state.label = 8;
809
- case 8:
859
+ _state.label = 12;
860
+ case 12:
810
861
  return [
811
862
  3,
812
- 10
863
+ 15
813
864
  ];
814
- case 9:
865
+ case 13:
815
866
  err = _state.sent();
816
867
  setLiffError(err.toString());
817
868
  console.log("LIFF init failed.", err);
818
869
  return [
819
870
  3,
820
- 10
871
+ 15
821
872
  ];
822
- case 10:
873
+ case 14:
874
+ // 確保還原全域 fetch
875
+ try {
876
+ window.fetch = originalFetch;
877
+ } catch (e) {
878
+ // ignore
879
+ }
880
+ return [
881
+ 7
882
+ ];
883
+ case 15:
823
884
  return [
824
885
  2
825
886
  ];
826
887
  }
827
888
  });
828
889
  });
829
- return function initializeLiff(isValid) {
890
+ return function(isValid) {
830
891
  return _ref.apply(this, arguments);
831
892
  };
832
- }();
833
- var accountLogin = function() {
893
+ }(), [
894
+ openInApp,
895
+ liffId,
896
+ liffLogin,
897
+ loginByUser,
898
+ ignoreRoute,
899
+ customerRedirectUrl,
900
+ loginInit
901
+ ]);
902
+ var accountLogin = React.useCallback(function() {
834
903
  var _ref = _async_to_generator(function(username, password) {
835
904
  var response, token, tokenType, finalToken, err;
836
905
  return _ts_generator(this, function(_state) {
@@ -897,10 +966,14 @@ var LiffProvider = function(param) {
897
966
  }
898
967
  });
899
968
  });
900
- return function accountLogin(username, password) {
969
+ return function(username, password) {
901
970
  return _ref.apply(this, arguments);
902
971
  };
903
- }();
972
+ }(), [
973
+ accountLoginUrl,
974
+ localStorageKey,
975
+ fetchMemberInfo
976
+ ]);
904
977
  var ensureLiffTokenValid = React.useCallback(/*#__PURE__*/ _async_to_generator(function() {
905
978
  var _parsedStore_data, _parsedStore_state, jwtTokenValue, jwtToken, parsedStore, isValid, _tmp, err;
906
979
  return _ts_generator(this, function(_state) {
@@ -989,26 +1062,34 @@ var LiffProvider = function(param) {
989
1062
  });
990
1063
  }), [
991
1064
  liffObject,
992
- userInfoStorageKey
1065
+ userInfoStorageKey,
1066
+ checkTokenFunc,
1067
+ localStorageKey,
1068
+ loginData
993
1069
  ]);
994
1070
  var normalizeToken = function(token) {
995
1071
  var trimmed = token.trim();
996
1072
  return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
997
1073
  };
998
- var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
1074
+ // searchParams 移到 useEffect 內部以避免每次 render 變動造成的依賴問題
1075
+ // (會在後面的 useEffect 中建立)
1076
+ var searchParams = null;
999
1077
  // 初始載入時從 localStorage 載入 userInfo
1000
1078
  React.useEffect(function() {
1001
1079
  loadUserInfoFromStorage();
1002
- }, []);
1080
+ }, [
1081
+ loadUserInfoFromStorage
1082
+ ]);
1003
1083
  // 客戶端初始化 LIFF
1004
1084
  React.useEffect(function() {
1005
1085
  var checkAndInitialize = function() {
1006
1086
  var _ref = _async_to_generator(function() {
1007
- var tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
1087
+ var searchParamsLocal, tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
1008
1088
  return _ts_generator(this, function(_state) {
1009
1089
  switch(_state.label){
1010
1090
  case 0:
1011
- tokenFromQuery = searchParams === null || searchParams === void 0 ? void 0 : searchParams.get("token");
1091
+ searchParamsLocal = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
1092
+ tokenFromQuery = searchParamsLocal === null || searchParamsLocal === void 0 ? void 0 : searchParamsLocal.get("token");
1012
1093
  if (!tokenFromQuery) return [
1013
1094
  3,
1014
1095
  2
@@ -1075,7 +1156,13 @@ var LiffProvider = function(param) {
1075
1156
  };
1076
1157
  }();
1077
1158
  checkAndInitialize();
1078
- }, []);
1159
+ }, [
1160
+ checkTokenFunc,
1161
+ initializeLiff,
1162
+ localStorageKey,
1163
+ loginData,
1164
+ searchParams
1165
+ ]);
1079
1166
  var contextValue = React.useMemo(function() {
1080
1167
  return {
1081
1168
  liffObject: liffObject,
@@ -1100,7 +1187,8 @@ var LiffProvider = function(param) {
1100
1187
  isFriendship,
1101
1188
  ensureLiffTokenValid,
1102
1189
  accountLogin,
1103
- loginType
1190
+ loginType,
1191
+ initializeLiff
1104
1192
  ]);
1105
1193
  return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
1106
1194
  value: contextValue,
@@ -250,7 +250,7 @@ var fetchAPI = function() {
250
250
  };
251
251
  }();
252
252
 
253
- function _array_like_to_array(arr, len) {
253
+ /* eslint-disable @typescript-eslint/no-explicit-any */ function _array_like_to_array(arr, len) {
254
254
  if (len == null || len > arr.length) len = arr.length;
255
255
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
256
256
  return arr2;
@@ -461,7 +461,7 @@ var LiffProvider = function(param) {
461
461
  // userInfo 的 localStorage key
462
462
  var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
463
463
  // 從 localStorage 載入 userInfo
464
- var loadUserInfoFromStorage = function() {
464
+ var loadUserInfoFromStorage = useCallback(function() {
465
465
  try {
466
466
  var storedUserInfo = window.localStorage.getItem(userInfoStorageKey);
467
467
  if (storedUserInfo) {
@@ -473,16 +473,20 @@ var LiffProvider = function(param) {
473
473
  console.error("載入 userInfo 失敗:", err);
474
474
  }
475
475
  return null;
476
- };
476
+ }, [
477
+ userInfoStorageKey
478
+ ]);
477
479
  // 儲存 userInfo 到 localStorage
478
- var saveUserInfoToStorage = function(info) {
480
+ var saveUserInfoToStorage = useCallback(function(info) {
479
481
  try {
480
482
  window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
481
483
  } catch (err) {
482
484
  console.error("儲存 userInfo 失敗:", err);
483
485
  }
484
- };
485
- var fetchMemberInfo = function() {
486
+ }, [
487
+ userInfoStorageKey
488
+ ]);
489
+ var fetchMemberInfo = useCallback(function() {
486
490
  var _ref = _async_to_generator(function(token) {
487
491
  var response, err;
488
492
  return _ts_generator(this, function(_state) {
@@ -527,19 +531,23 @@ var LiffProvider = function(param) {
527
531
  }
528
532
  });
529
533
  });
530
- return function fetchMemberInfo(token) {
534
+ return function(token) {
531
535
  return _ref.apply(this, arguments);
532
536
  };
533
- }();
537
+ }(), [
538
+ memberInfoUrl,
539
+ saveUserInfoToStorage
540
+ ]);
534
541
  // 檢查 token 的有效性
535
- var checkTokenFunc = function() {
542
+ var checkTokenFunc = useCallback(function() {
536
543
  var _ref = _async_to_generator(function(token) {
537
544
  var finalToken, response, err;
538
545
  return _ts_generator(this, function(_state) {
539
546
  switch(_state.label){
540
547
  case 0:
541
548
  if (!checkTokenUrl) return [
542
- 2
549
+ 2,
550
+ false
543
551
  ];
544
552
  finalToken = token.startsWith("Bearer ") ? token : "Bearer ".concat(token);
545
553
  _state.label = 1;
@@ -602,12 +610,17 @@ var LiffProvider = function(param) {
602
610
  }
603
611
  });
604
612
  });
605
- return function checkTokenFunc(token) {
613
+ return function(token) {
606
614
  return _ref.apply(this, arguments);
607
615
  };
608
- }();
616
+ }(), [
617
+ checkTokenUrl,
618
+ memberInfoUrl,
619
+ userInfoStorageKey,
620
+ fetchMemberInfo
621
+ ]);
609
622
  // 登入初始化函數
610
- var loginInit = function() {
623
+ var loginInit = useCallback(function() {
611
624
  var _ref = _async_to_generator(function(token) {
612
625
  var _resData_data, _resData_data1, response, resData, loginToken, err;
613
626
  return _ts_generator(this, function(_state) {
@@ -692,22 +705,34 @@ var LiffProvider = function(param) {
692
705
  }
693
706
  });
694
707
  });
695
- return function loginInit(token) {
708
+ return function(token) {
696
709
  return _ref.apply(this, arguments);
697
710
  };
698
- }();
711
+ }(), [
712
+ loginUrl,
713
+ ignoreCheckAddFriend,
714
+ inviteCode,
715
+ localStorageKey,
716
+ memberInfoUrl,
717
+ handleLoginError,
718
+ fetchMemberInfo,
719
+ saveUserInfoToStorage
720
+ ]);
699
721
  // 初始化 LIFF
700
- var initializeLiff = function() {
722
+ var initializeLiff = useCallback(function() {
701
723
  var _ref = _async_to_generator(function(isValid) {
702
- var customFetch, liff, originalFetch, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
724
+ var originalFetch, customFetch, liff, redirectUri, lineToken, tempFriendship, friendship, friendFlag, error, err;
703
725
  return _ts_generator(this, function(_state) {
704
726
  switch(_state.label){
705
727
  case 0:
728
+ originalFetch = window.fetch;
729
+ _state.label = 1;
730
+ case 1:
706
731
  _state.trys.push([
707
- 0,
708
- 9,
709
- ,
710
- 10
732
+ 1,
733
+ 13,
734
+ 14,
735
+ 15
711
736
  ]);
712
737
  customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
713
738
  // eslint-disable-next-line no-inner-declarations
@@ -721,11 +746,15 @@ var LiffProvider = function(param) {
721
746
  4,
722
747
  import('./index.esm3.js')
723
748
  ];
724
- case 1:
749
+ case 2:
725
750
  liff = _state.sent().liff;
726
- originalFetch = window.fetch;
727
751
  window.fetch = customFetch;
728
752
  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);
753
+ console.log("Initializing LIFF with ID:", liff);
754
+ if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
755
+ 3,
756
+ 4
757
+ ];
729
758
  return [
730
759
  4,
731
760
  liff.init({
@@ -733,11 +762,17 @@ var LiffProvider = function(param) {
733
762
  withLoginOnExternalBrowser: false
734
763
  })
735
764
  ];
736
- case 2:
765
+ case 3:
737
766
  _state.sent();
738
767
  console.log("LIFF init succeeded.");
739
- setLiffObject(liff);
740
- lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
768
+ return [
769
+ 3,
770
+ 5
771
+ ];
772
+ case 4:
773
+ console.log("LIFF already logged in, skip init.");
774
+ _state.label = 5;
775
+ case 5:
741
776
  // 未登入先進行登入
742
777
  if (!liff.isLoggedIn()) {
743
778
  redirectUri = customerRedirectUrl || "".concat(window.location.href);
@@ -756,42 +791,58 @@ var LiffProvider = function(param) {
756
791
  redirectUri: redirectUri
757
792
  });
758
793
  }
794
+ setLiffObject(liff);
795
+ lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
796
+ // 已登入且 token 有效,跳過 loginInit
797
+ if (isValid) {
798
+ console.log("✅ Token 已驗證有效,跳過 loginInit");
799
+ return [
800
+ 2
801
+ ];
802
+ }
759
803
  tempFriendship = null;
760
804
  if (!lineToken) return [
761
805
  3,
762
- 8
806
+ 12
763
807
  ];
764
- _state.label = 3;
765
- case 3:
808
+ _state.label = 6;
809
+ case 6:
766
810
  _state.trys.push([
767
- 3,
768
- 5,
811
+ 6,
812
+ 9,
769
813
  ,
770
- 6
814
+ 10
771
815
  ]);
816
+ if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
817
+ 3,
818
+ 8
819
+ ];
772
820
  return [
773
821
  4,
774
822
  liff.getFriendship()
775
823
  ];
776
- case 4:
824
+ case 7:
777
825
  friendship = _state.sent();
778
826
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
779
827
  setFriendship(friendFlag);
780
828
  tempFriendship = friendFlag;
781
829
  console.log("isFriendship", friendFlag);
830
+ _state.label = 8;
831
+ case 8:
782
832
  return [
783
833
  3,
784
- 6
834
+ 10
785
835
  ];
786
- case 5:
836
+ case 9:
787
837
  error = _state.sent();
788
838
  console.error("Error in liff.getFriendship():", error);
789
839
  return [
790
840
  3,
791
- 6
841
+ 10
792
842
  ];
793
- case 6:
843
+ case 10:
794
844
  console.log("isValid", isValid);
845
+ // 如果是好友且 token 有效,跳過 loginInit
795
846
  if (tempFriendship && isValid) return [
796
847
  2
797
848
  ];
@@ -799,34 +850,52 @@ var LiffProvider = function(param) {
799
850
  4,
800
851
  loginInit(lineToken)
801
852
  ];
802
- case 7:
853
+ case 11:
803
854
  _state.sent();
804
- _state.label = 8;
805
- case 8:
855
+ _state.label = 12;
856
+ case 12:
806
857
  return [
807
858
  3,
808
- 10
859
+ 15
809
860
  ];
810
- case 9:
861
+ case 13:
811
862
  err = _state.sent();
812
863
  setLiffError(err.toString());
813
864
  console.log("LIFF init failed.", err);
814
865
  return [
815
866
  3,
816
- 10
867
+ 15
817
868
  ];
818
- case 10:
869
+ case 14:
870
+ // 確保還原全域 fetch
871
+ try {
872
+ window.fetch = originalFetch;
873
+ } catch (e) {
874
+ // ignore
875
+ }
876
+ return [
877
+ 7
878
+ ];
879
+ case 15:
819
880
  return [
820
881
  2
821
882
  ];
822
883
  }
823
884
  });
824
885
  });
825
- return function initializeLiff(isValid) {
886
+ return function(isValid) {
826
887
  return _ref.apply(this, arguments);
827
888
  };
828
- }();
829
- var accountLogin = function() {
889
+ }(), [
890
+ openInApp,
891
+ liffId,
892
+ liffLogin,
893
+ loginByUser,
894
+ ignoreRoute,
895
+ customerRedirectUrl,
896
+ loginInit
897
+ ]);
898
+ var accountLogin = useCallback(function() {
830
899
  var _ref = _async_to_generator(function(username, password) {
831
900
  var response, token, tokenType, finalToken, err;
832
901
  return _ts_generator(this, function(_state) {
@@ -893,10 +962,14 @@ var LiffProvider = function(param) {
893
962
  }
894
963
  });
895
964
  });
896
- return function accountLogin(username, password) {
965
+ return function(username, password) {
897
966
  return _ref.apply(this, arguments);
898
967
  };
899
- }();
968
+ }(), [
969
+ accountLoginUrl,
970
+ localStorageKey,
971
+ fetchMemberInfo
972
+ ]);
900
973
  var ensureLiffTokenValid = useCallback(/*#__PURE__*/ _async_to_generator(function() {
901
974
  var _parsedStore_data, _parsedStore_state, jwtTokenValue, jwtToken, parsedStore, isValid, _tmp, err;
902
975
  return _ts_generator(this, function(_state) {
@@ -985,26 +1058,34 @@ var LiffProvider = function(param) {
985
1058
  });
986
1059
  }), [
987
1060
  liffObject,
988
- userInfoStorageKey
1061
+ userInfoStorageKey,
1062
+ checkTokenFunc,
1063
+ localStorageKey,
1064
+ loginData
989
1065
  ]);
990
1066
  var normalizeToken = function(token) {
991
1067
  var trimmed = token.trim();
992
1068
  return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
993
1069
  };
994
- var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
1070
+ // searchParams 移到 useEffect 內部以避免每次 render 變動造成的依賴問題
1071
+ // (會在後面的 useEffect 中建立)
1072
+ var searchParams = null;
995
1073
  // 初始載入時從 localStorage 載入 userInfo
996
1074
  useEffect(function() {
997
1075
  loadUserInfoFromStorage();
998
- }, []);
1076
+ }, [
1077
+ loadUserInfoFromStorage
1078
+ ]);
999
1079
  // 客戶端初始化 LIFF
1000
1080
  useEffect(function() {
1001
1081
  var checkAndInitialize = function() {
1002
1082
  var _ref = _async_to_generator(function() {
1003
- var tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
1083
+ var searchParamsLocal, tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
1004
1084
  return _ts_generator(this, function(_state) {
1005
1085
  switch(_state.label){
1006
1086
  case 0:
1007
- tokenFromQuery = searchParams === null || searchParams === void 0 ? void 0 : searchParams.get("token");
1087
+ searchParamsLocal = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
1088
+ tokenFromQuery = searchParamsLocal === null || searchParamsLocal === void 0 ? void 0 : searchParamsLocal.get("token");
1008
1089
  if (!tokenFromQuery) return [
1009
1090
  3,
1010
1091
  2
@@ -1071,7 +1152,13 @@ var LiffProvider = function(param) {
1071
1152
  };
1072
1153
  }();
1073
1154
  checkAndInitialize();
1074
- }, []);
1155
+ }, [
1156
+ checkTokenFunc,
1157
+ initializeLiff,
1158
+ localStorageKey,
1159
+ loginData,
1160
+ searchParams
1161
+ ]);
1075
1162
  var contextValue = useMemo(function() {
1076
1163
  return {
1077
1164
  liffObject: liffObject,
@@ -1096,7 +1183,8 @@ var LiffProvider = function(param) {
1096
1183
  isFriendship,
1097
1184
  ensureLiffTokenValid,
1098
1185
  accountLogin,
1099
- loginType
1186
+ loginType,
1187
+ initializeLiff
1100
1188
  ]);
1101
1189
  return /*#__PURE__*/ jsx(LiffContext.Provider, {
1102
1190
  value: contextValue,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunggang/ui-lib",
3
- "version": "0.4.39",
3
+ "version": "0.4.40",
4
4
  "sideEffects": [
5
5
  "*.css",
6
6
  "./src/style.css",