@sunggang/ui-lib 0.4.46 → 0.4.48

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.
@@ -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 profile 的 localStorage key
469
- var liffProfileStorageKey = "".concat(localStorageKey, "-liffProfile");
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
- // localStorage 載入 LIFF profile
485
- var loadLiffProfileFromStorage = function() {
484
+ // 儲存 userInfo localStorage
485
+ var saveUserInfoToStorage = function(info) {
486
+ try {
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() {
486
494
  try {
487
- var stored = window.localStorage.getItem(liffProfileStorageKey);
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("載入 liffProfile 失敗:", err);
502
+ console.error("載入 liffUserInfo 失敗:", err);
495
503
  }
496
504
  return null;
497
505
  };
498
- // 儲存 userInfo 到 localStorage
499
- var saveUserInfoToStorage = React.useCallback(function(info) {
506
+ // 儲存 LIFF userInfo 到 localStorage
507
+ var saveLiffUserInfoToStorage = function(info) {
500
508
  try {
501
- window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
509
+ window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
502
510
  } catch (err) {
503
- console.error("儲存 userInfo 失敗:", err);
511
+ console.error("儲存 liffUserInfo 失敗:", err);
504
512
  }
505
- }, [
506
- userInfoStorageKey
507
- ]);
508
- // 儲存 LIFF profile 到 localStorage
509
- var saveLiffProfileToStorage = React.useCallback(function(info) {
510
- try {
511
- window.localStorage.setItem(liffProfileStorageKey, JSON.stringify(info));
512
- } catch (err) {
513
- console.error("儲存 liffProfile 失敗:", err);
514
- }
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,39 +728,35 @@ var LiffProvider = function(param) {
732
728
  // 初始化 LIFF
733
729
  var initializeLiff = function() {
734
730
  var _ref = _async_to_generator(function(isValid) {
735
- var _sdk_getAccessToken, _sdk_isLoggedIn, imported, sdk, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
731
+ var customFetch, liff, redirectUri, originalFetch, profile, lineToken, tempFriendship, friendship, friendFlag, error, err;
736
732
  return _ts_generator(this, function(_state) {
737
733
  switch(_state.label){
738
734
  case 0:
739
735
  _state.trys.push([
740
736
  0,
741
- 10,
737
+ 12,
742
738
  ,
743
- 11
739
+ 13
744
740
  ]);
745
- return [
746
- 4,
747
- ensureLiffInitialized(isValid)
748
- ];
749
- case 1:
750
- _state.sent();
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
+ };
751
749
  return [
752
750
  4,
753
751
  Promise.resolve().then(function () { return require('./index.cjs3.js'); })
754
752
  ];
755
- case 2:
756
- imported = _state.sent();
757
- sdk = liffObject || imported.liff;
758
- setLiffObject(sdk);
759
- if (sdk.isLoggedIn() && isValid) return [
760
- 2
761
- ];
762
- lineToken = sdk === null || sdk === void 0 ? void 0 : (_sdk_getAccessToken = sdk.getAccessToken) === null || _sdk_getAccessToken === void 0 ? void 0 : _sdk_getAccessToken.call(sdk);
763
- // 未登入先進行登入(呼叫 login 後立即 return,避免後續執行)
764
- if (!(sdk === null || sdk === void 0 ? void 0 : (_sdk_isLoggedIn = sdk.isLoggedIn) === null || _sdk_isLoggedIn === void 0 ? void 0 : _sdk_isLoggedIn.call(sdk))) {
753
+ case 1:
754
+ liff = _state.sent().liff;
755
+ // 未登入先進行登入
756
+ if (!liff.isLoggedIn()) {
765
757
  redirectUri = customerRedirectUrl || "".concat(window.location.href);
766
758
  if (liffLogin) {
767
- sdk.login({
759
+ liff.login({
768
760
  redirectUri: redirectUri
769
761
  });
770
762
  return [
@@ -774,54 +766,83 @@ var LiffProvider = function(param) {
774
766
  if (loginByUser || ignoreRoute) return [
775
767
  2
776
768
  ];
777
- sdk.login({
769
+ liff.login({
778
770
  redirectUri: redirectUri
779
771
  });
780
772
  return [
781
773
  2
782
774
  ];
783
775
  }
776
+ originalFetch = window.fetch;
777
+ window.fetch = customFetch;
778
+ 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);
779
+ if (!!liff.isLoggedIn()) return [
780
+ 3,
781
+ 4
782
+ ];
783
+ return [
784
+ 4,
785
+ liff.init({
786
+ liffId: liffId,
787
+ withLoginOnExternalBrowser: false
788
+ })
789
+ ];
790
+ case 2:
791
+ _state.sent();
792
+ console.log("LIFF init succeeded.");
793
+ setLiffObject(liff);
794
+ return [
795
+ 4,
796
+ liff.getProfile()
797
+ ];
798
+ case 3:
799
+ profile = _state.sent();
800
+ setLiffProfile(profile);
801
+ saveLiffUserInfoToStorage(profile);
802
+ _state.label = 4;
803
+ case 4:
804
+ lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
784
805
  tempFriendship = null;
785
806
  if (!lineToken) return [
786
807
  3,
787
- 9
808
+ 11
788
809
  ];
789
- _state.label = 3;
790
- case 3:
810
+ _state.label = 5;
811
+ case 5:
791
812
  _state.trys.push([
792
- 3,
793
- 6,
813
+ 5,
814
+ 8,
794
815
  ,
795
- 7
816
+ 9
796
817
  ]);
797
- if (!(sdk.isLoggedIn && sdk.isLoggedIn())) return [
818
+ if (!!liff.isLoggedIn()) return [
798
819
  3,
799
- 5
820
+ 7
800
821
  ];
801
822
  return [
802
823
  4,
803
- sdk.getFriendship()
824
+ liff.getFriendship()
804
825
  ];
805
- case 4:
826
+ case 6:
806
827
  friendship = _state.sent();
807
828
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
808
829
  setFriendship(friendFlag);
809
830
  tempFriendship = friendFlag;
810
831
  console.log("isFriendship", friendFlag);
811
- _state.label = 5;
812
- case 5:
832
+ _state.label = 7;
833
+ case 7:
813
834
  return [
814
835
  3,
815
- 7
836
+ 9
816
837
  ];
817
- case 6:
838
+ case 8:
818
839
  error = _state.sent();
819
840
  console.error("Error in liff.getFriendship():", error);
820
841
  return [
821
842
  3,
822
- 7
843
+ 9
823
844
  ];
824
- case 7:
845
+ case 9:
825
846
  console.log("isValid", isValid);
826
847
  if (tempFriendship && isValid) return [
827
848
  2
@@ -830,23 +851,23 @@ var LiffProvider = function(param) {
830
851
  4,
831
852
  loginInit(lineToken)
832
853
  ];
833
- case 8:
854
+ case 10:
834
855
  _state.sent();
835
- _state.label = 9;
836
- case 9:
856
+ _state.label = 11;
857
+ case 11:
837
858
  return [
838
859
  3,
839
- 11
860
+ 13
840
861
  ];
841
- case 10:
862
+ case 12:
842
863
  err = _state.sent();
843
864
  setLiffError(err.toString());
844
865
  console.log("LIFF init failed.", err);
845
866
  return [
846
867
  3,
847
- 11
868
+ 13
848
869
  ];
849
- case 11:
870
+ case 13:
850
871
  return [
851
872
  2
852
873
  ];
@@ -857,94 +878,6 @@ var LiffProvider = function(param) {
857
878
  return _ref.apply(this, arguments);
858
879
  };
859
880
  }();
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
881
  var accountLogin = function() {
949
882
  var _ref = _async_to_generator(function(username, password) {
950
883
  var response, token, tokenType, finalToken, err;
@@ -1111,10 +1044,10 @@ var LiffProvider = function(param) {
1111
1044
  return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
1112
1045
  };
1113
1046
  var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
1114
- // 初始載入時從 localStorage 載入 userInfo 與 LIFF profile
1047
+ // 初始載入時從 localStorage 載入 userInfo
1115
1048
  React.useEffect(function() {
1116
1049
  loadUserInfoFromStorage();
1117
- loadLiffProfileFromStorage();
1050
+ loadLiffUserInfoFromStorage();
1118
1051
  }, []);
1119
1052
  // 客戶端初始化 LIFF
1120
1053
  React.useEffect(function() {
@@ -1192,21 +1125,34 @@ var LiffProvider = function(param) {
1192
1125
  }();
1193
1126
  checkAndInitialize();
1194
1127
  }, []);
1195
- var contextValue = {
1196
- liffObject: liffObject,
1197
- loginData: loginData,
1198
- userInfo: userInfo,
1199
- accessToken: accessToken,
1200
- liffError: liffError,
1201
- initializeLiff: function() {
1202
- return initializeLiff(false);
1203
- },
1204
- liffProfile: liffProfile,
1205
- isFriendship: isFriendship,
1206
- ensureLiffTokenValid: ensureLiffTokenValid,
1207
- accountLogin: accountLogin,
1208
- loginType: loginType
1209
- };
1128
+ var contextValue = React.useMemo(function() {
1129
+ return {
1130
+ liffObject: liffObject,
1131
+ loginData: loginData,
1132
+ userInfo: userInfo,
1133
+ accessToken: accessToken,
1134
+ liffError: liffError,
1135
+ initializeLiff: function() {
1136
+ return initializeLiff(false);
1137
+ },
1138
+ isFriendship: isFriendship,
1139
+ ensureLiffTokenValid: ensureLiffTokenValid,
1140
+ accountLogin: accountLogin,
1141
+ loginType: loginType,
1142
+ liffProfile: liffProfile
1143
+ };
1144
+ }, [
1145
+ liffObject,
1146
+ loginData,
1147
+ userInfo,
1148
+ accessToken,
1149
+ liffError,
1150
+ isFriendship,
1151
+ ensureLiffTokenValid,
1152
+ accountLogin,
1153
+ loginType,
1154
+ liffProfile
1155
+ ]);
1210
1156
  return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
1211
1157
  value: contextValue,
1212
1158
  children: children
@@ -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 profile 的 localStorage key
465
- var liffProfileStorageKey = "".concat(localStorageKey, "-liffProfile");
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
- // localStorage 載入 LIFF profile
481
- var loadLiffProfileFromStorage = function() {
480
+ // 儲存 userInfo localStorage
481
+ var saveUserInfoToStorage = function(info) {
482
+ try {
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() {
482
490
  try {
483
- var stored = window.localStorage.getItem(liffProfileStorageKey);
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("載入 liffProfile 失敗:", err);
498
+ console.error("載入 liffUserInfo 失敗:", err);
491
499
  }
492
500
  return null;
493
501
  };
494
- // 儲存 userInfo 到 localStorage
495
- var saveUserInfoToStorage = useCallback(function(info) {
502
+ // 儲存 LIFF userInfo 到 localStorage
503
+ var saveLiffUserInfoToStorage = function(info) {
496
504
  try {
497
- window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
505
+ window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
498
506
  } catch (err) {
499
- console.error("儲存 userInfo 失敗:", err);
507
+ console.error("儲存 liffUserInfo 失敗:", err);
500
508
  }
501
- }, [
502
- userInfoStorageKey
503
- ]);
504
- // 儲存 LIFF profile 到 localStorage
505
- var saveLiffProfileToStorage = useCallback(function(info) {
506
- try {
507
- window.localStorage.setItem(liffProfileStorageKey, JSON.stringify(info));
508
- } catch (err) {
509
- console.error("儲存 liffProfile 失敗:", err);
510
- }
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,39 +724,35 @@ var LiffProvider = function(param) {
728
724
  // 初始化 LIFF
729
725
  var initializeLiff = function() {
730
726
  var _ref = _async_to_generator(function(isValid) {
731
- var _sdk_getAccessToken, _sdk_isLoggedIn, imported, sdk, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
727
+ var customFetch, liff, redirectUri, originalFetch, profile, lineToken, tempFriendship, friendship, friendFlag, error, err;
732
728
  return _ts_generator(this, function(_state) {
733
729
  switch(_state.label){
734
730
  case 0:
735
731
  _state.trys.push([
736
732
  0,
737
- 10,
733
+ 12,
738
734
  ,
739
- 11
735
+ 13
740
736
  ]);
741
- return [
742
- 4,
743
- ensureLiffInitialized(isValid)
744
- ];
745
- case 1:
746
- _state.sent();
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
+ };
747
745
  return [
748
746
  4,
749
747
  import('./index.esm3.js')
750
748
  ];
751
- case 2:
752
- imported = _state.sent();
753
- sdk = liffObject || imported.liff;
754
- setLiffObject(sdk);
755
- if (sdk.isLoggedIn() && isValid) return [
756
- 2
757
- ];
758
- lineToken = sdk === null || sdk === void 0 ? void 0 : (_sdk_getAccessToken = sdk.getAccessToken) === null || _sdk_getAccessToken === void 0 ? void 0 : _sdk_getAccessToken.call(sdk);
759
- // 未登入先進行登入(呼叫 login 後立即 return,避免後續執行)
760
- if (!(sdk === null || sdk === void 0 ? void 0 : (_sdk_isLoggedIn = sdk.isLoggedIn) === null || _sdk_isLoggedIn === void 0 ? void 0 : _sdk_isLoggedIn.call(sdk))) {
749
+ case 1:
750
+ liff = _state.sent().liff;
751
+ // 未登入先進行登入
752
+ if (!liff.isLoggedIn()) {
761
753
  redirectUri = customerRedirectUrl || "".concat(window.location.href);
762
754
  if (liffLogin) {
763
- sdk.login({
755
+ liff.login({
764
756
  redirectUri: redirectUri
765
757
  });
766
758
  return [
@@ -770,54 +762,83 @@ var LiffProvider = function(param) {
770
762
  if (loginByUser || ignoreRoute) return [
771
763
  2
772
764
  ];
773
- sdk.login({
765
+ liff.login({
774
766
  redirectUri: redirectUri
775
767
  });
776
768
  return [
777
769
  2
778
770
  ];
779
771
  }
772
+ originalFetch = window.fetch;
773
+ window.fetch = customFetch;
774
+ 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);
775
+ if (!!liff.isLoggedIn()) return [
776
+ 3,
777
+ 4
778
+ ];
779
+ return [
780
+ 4,
781
+ liff.init({
782
+ liffId: liffId,
783
+ withLoginOnExternalBrowser: false
784
+ })
785
+ ];
786
+ case 2:
787
+ _state.sent();
788
+ console.log("LIFF init succeeded.");
789
+ setLiffObject(liff);
790
+ return [
791
+ 4,
792
+ liff.getProfile()
793
+ ];
794
+ case 3:
795
+ profile = _state.sent();
796
+ setLiffProfile(profile);
797
+ saveLiffUserInfoToStorage(profile);
798
+ _state.label = 4;
799
+ case 4:
800
+ lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
780
801
  tempFriendship = null;
781
802
  if (!lineToken) return [
782
803
  3,
783
- 9
804
+ 11
784
805
  ];
785
- _state.label = 3;
786
- case 3:
806
+ _state.label = 5;
807
+ case 5:
787
808
  _state.trys.push([
788
- 3,
789
- 6,
809
+ 5,
810
+ 8,
790
811
  ,
791
- 7
812
+ 9
792
813
  ]);
793
- if (!(sdk.isLoggedIn && sdk.isLoggedIn())) return [
814
+ if (!!liff.isLoggedIn()) return [
794
815
  3,
795
- 5
816
+ 7
796
817
  ];
797
818
  return [
798
819
  4,
799
- sdk.getFriendship()
820
+ liff.getFriendship()
800
821
  ];
801
- case 4:
822
+ case 6:
802
823
  friendship = _state.sent();
803
824
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
804
825
  setFriendship(friendFlag);
805
826
  tempFriendship = friendFlag;
806
827
  console.log("isFriendship", friendFlag);
807
- _state.label = 5;
808
- case 5:
828
+ _state.label = 7;
829
+ case 7:
809
830
  return [
810
831
  3,
811
- 7
832
+ 9
812
833
  ];
813
- case 6:
834
+ case 8:
814
835
  error = _state.sent();
815
836
  console.error("Error in liff.getFriendship():", error);
816
837
  return [
817
838
  3,
818
- 7
839
+ 9
819
840
  ];
820
- case 7:
841
+ case 9:
821
842
  console.log("isValid", isValid);
822
843
  if (tempFriendship && isValid) return [
823
844
  2
@@ -826,23 +847,23 @@ var LiffProvider = function(param) {
826
847
  4,
827
848
  loginInit(lineToken)
828
849
  ];
829
- case 8:
850
+ case 10:
830
851
  _state.sent();
831
- _state.label = 9;
832
- case 9:
852
+ _state.label = 11;
853
+ case 11:
833
854
  return [
834
855
  3,
835
- 11
856
+ 13
836
857
  ];
837
- case 10:
858
+ case 12:
838
859
  err = _state.sent();
839
860
  setLiffError(err.toString());
840
861
  console.log("LIFF init failed.", err);
841
862
  return [
842
863
  3,
843
- 11
864
+ 13
844
865
  ];
845
- case 11:
866
+ case 13:
846
867
  return [
847
868
  2
848
869
  ];
@@ -853,94 +874,6 @@ var LiffProvider = function(param) {
853
874
  return _ref.apply(this, arguments);
854
875
  };
855
876
  }();
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
877
  var accountLogin = function() {
945
878
  var _ref = _async_to_generator(function(username, password) {
946
879
  var response, token, tokenType, finalToken, err;
@@ -1107,10 +1040,10 @@ var LiffProvider = function(param) {
1107
1040
  return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
1108
1041
  };
1109
1042
  var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
1110
- // 初始載入時從 localStorage 載入 userInfo 與 LIFF profile
1043
+ // 初始載入時從 localStorage 載入 userInfo
1111
1044
  useEffect(function() {
1112
1045
  loadUserInfoFromStorage();
1113
- loadLiffProfileFromStorage();
1046
+ loadLiffUserInfoFromStorage();
1114
1047
  }, []);
1115
1048
  // 客戶端初始化 LIFF
1116
1049
  useEffect(function() {
@@ -1188,21 +1121,34 @@ var LiffProvider = function(param) {
1188
1121
  }();
1189
1122
  checkAndInitialize();
1190
1123
  }, []);
1191
- var contextValue = {
1192
- liffObject: liffObject,
1193
- loginData: loginData,
1194
- userInfo: userInfo,
1195
- accessToken: accessToken,
1196
- liffError: liffError,
1197
- initializeLiff: function() {
1198
- return initializeLiff(false);
1199
- },
1200
- liffProfile: liffProfile,
1201
- isFriendship: isFriendship,
1202
- ensureLiffTokenValid: ensureLiffTokenValid,
1203
- accountLogin: accountLogin,
1204
- loginType: loginType
1205
- };
1124
+ var contextValue = useMemo(function() {
1125
+ return {
1126
+ liffObject: liffObject,
1127
+ loginData: loginData,
1128
+ userInfo: userInfo,
1129
+ accessToken: accessToken,
1130
+ liffError: liffError,
1131
+ initializeLiff: function() {
1132
+ return initializeLiff(false);
1133
+ },
1134
+ isFriendship: isFriendship,
1135
+ ensureLiffTokenValid: ensureLiffTokenValid,
1136
+ accountLogin: accountLogin,
1137
+ loginType: loginType,
1138
+ liffProfile: liffProfile
1139
+ };
1140
+ }, [
1141
+ liffObject,
1142
+ loginData,
1143
+ userInfo,
1144
+ accessToken,
1145
+ liffError,
1146
+ isFriendship,
1147
+ ensureLiffTokenValid,
1148
+ accountLogin,
1149
+ loginType,
1150
+ liffProfile
1151
+ ]);
1206
1152
  return /*#__PURE__*/ jsx(LiffContext.Provider, {
1207
1153
  value: contextValue,
1208
1154
  children: children
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunggang/ui-lib",
3
- "version": "0.4.46",
3
+ "version": "0.4.48",
4
4
  "sideEffects": [
5
5
  "*.css",
6
6
  "./src/style.css",
@@ -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;