@sunggang/ui-lib 0.4.56 → 0.4.58

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.
@@ -463,7 +463,6 @@ var LiffProvider = function(param) {
463
463
  var _useState5 = _sliced_to_array(React.useState(null), 2), liffProfile = _useState5[0], setLiffProfile = _useState5[1];
464
464
  var _useState6 = _sliced_to_array(React.useState(null), 2), isFriendship = _useState6[0], setFriendship = _useState6[1];
465
465
  var _useState7 = _sliced_to_array(React.useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
466
- var isProcessingLiffCallback = React.useRef(false);
467
466
  // userInfo 的 localStorage key
468
467
  var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
469
468
  // liff profile 的 localStorage key
@@ -768,15 +767,15 @@ var LiffProvider = function(param) {
768
767
  // 初始化 LIFF
769
768
  var initializeLiff = function() {
770
769
  var _ref = _async_to_generator(function(isValid) {
771
- var customFetch, liff, urlParams, hasLiffParams, originalFetch, storedProfileExists, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
770
+ var customFetch, liff, originalFetch, redirectUri, tempFriendship, lineToken, profile, profileErr, friendship, friendFlag, error, err;
772
771
  return _ts_generator(this, function(_state) {
773
772
  switch(_state.label){
774
773
  case 0:
775
774
  _state.trys.push([
776
775
  0,
777
- 15,
776
+ 13,
778
777
  ,
779
- 16
778
+ 14
780
779
  ]);
781
780
  customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
782
781
  // eslint-disable-next-line no-inner-declarations
@@ -792,17 +791,12 @@ var LiffProvider = function(param) {
792
791
  ];
793
792
  case 1:
794
793
  liff = _state.sent().liff;
795
- urlParams = new URLSearchParams(window.location.search);
796
- hasLiffParams = urlParams.has("liffClientId") || urlParams.has("liffRedirectUri");
797
794
  originalFetch = window.fetch;
798
795
  window.fetch = customFetch;
799
796
  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);
800
- if (hasLiffParams || isProcessingLiffCallback.current) {
801
- isProcessingLiffCallback.current = true;
802
- return [
803
- 2
804
- ];
805
- }
797
+ if (isValid) return [
798
+ 2
799
+ ];
806
800
  return [
807
801
  4,
808
802
  liff.init({
@@ -813,20 +807,27 @@ var LiffProvider = function(param) {
813
807
  case 2:
814
808
  _state.sent();
815
809
  console.log("LIFF init succeeded.");
816
- isProcessingLiffCallback.current = true;
817
810
  setLiffObject(liff);
818
- // 如果 localStorage 或 state 已有 profile,就跳過重複呼叫
819
- storedProfileExists = false;
820
- try {
821
- storedProfileExists = !!window.localStorage.getItem(liffUserInfoStorageKey);
822
- } catch (e) {
823
- storedProfileExists = false;
824
- isProcessingLiffCallback.current = false;
811
+ // 未登入先進行登入
812
+ if (!liff.isLoggedIn()) {
813
+ redirectUri = customerRedirectUrl || "".concat(window.location.href);
814
+ if (liffLogin) {
815
+ liff.login({
816
+ redirectUri: redirectUri
817
+ });
818
+ return [
819
+ 2
820
+ ];
821
+ }
822
+ if (loginByUser || ignoreRoute) return [
823
+ 2
824
+ ];
825
+ liff.login({
826
+ redirectUri: redirectUri
827
+ });
825
828
  }
826
- if (!(!storedProfileExists && !liffProfile)) return [
827
- 3,
828
- 7
829
- ];
829
+ tempFriendship = null;
830
+ lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
830
831
  _state.label = 3;
831
832
  case 3:
832
833
  _state.trys.push([
@@ -849,58 +850,29 @@ var LiffProvider = function(param) {
849
850
  ];
850
851
  case 5:
851
852
  profileErr = _state.sent();
852
- console.warn("取得 LIFF profile 失敗(非致命):", profileErr);
853
+ console.warn("取得 LIFF profile 失敗:", profileErr);
853
854
  return [
854
855
  3,
855
856
  6
856
857
  ];
857
858
  case 6:
858
- return [
859
- 3,
860
- 8
861
- ];
862
- case 7:
863
- // 已有快取,跳過呼叫
864
- console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
865
- _state.label = 8;
866
- case 8:
867
- lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
868
- // 未登入先進行登入
869
- if (!liff.isLoggedIn()) {
870
- redirectUri = customerRedirectUrl || "".concat(window.location.href);
871
- if (liffLogin) {
872
- liff.login({
873
- redirectUri: redirectUri
874
- });
875
- return [
876
- 2
877
- ];
878
- }
879
- if (loginByUser || ignoreRoute) return [
880
- 2
881
- ];
882
- liff.login({
883
- redirectUri: redirectUri
884
- });
885
- }
886
- tempFriendship = null;
887
859
  if (!lineToken) return [
888
860
  3,
889
- 14
861
+ 12
890
862
  ];
891
- _state.label = 9;
892
- case 9:
863
+ _state.label = 7;
864
+ case 7:
893
865
  _state.trys.push([
866
+ 7,
894
867
  9,
895
- 11,
896
868
  ,
897
- 12
869
+ 10
898
870
  ]);
899
871
  return [
900
872
  4,
901
873
  liff.getFriendship()
902
874
  ];
903
- case 10:
875
+ case 8:
904
876
  friendship = _state.sent();
905
877
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
906
878
  setFriendship(friendFlag);
@@ -908,16 +880,16 @@ var LiffProvider = function(param) {
908
880
  console.log("isFriendship", friendFlag);
909
881
  return [
910
882
  3,
911
- 12
883
+ 10
912
884
  ];
913
- case 11:
885
+ case 9:
914
886
  error = _state.sent();
915
887
  console.error("Error in liff.getFriendship():", error);
916
888
  return [
917
889
  3,
918
- 12
890
+ 10
919
891
  ];
920
- case 12:
892
+ case 10:
921
893
  console.log("isValid", isValid);
922
894
  if (tempFriendship && isValid) return [
923
895
  2
@@ -926,23 +898,23 @@ var LiffProvider = function(param) {
926
898
  4,
927
899
  loginInit(lineToken)
928
900
  ];
929
- case 13:
901
+ case 11:
930
902
  _state.sent();
931
- _state.label = 14;
932
- case 14:
903
+ _state.label = 12;
904
+ case 12:
933
905
  return [
934
906
  3,
935
- 16
907
+ 14
936
908
  ];
937
- case 15:
909
+ case 13:
938
910
  err = _state.sent();
939
911
  setLiffError(err.toString());
940
912
  console.log("LIFF init failed.", err);
941
913
  return [
942
914
  3,
943
- 16
915
+ 14
944
916
  ];
945
- case 16:
917
+ case 14:
946
918
  return [
947
919
  2
948
920
  ];
@@ -1209,6 +1181,56 @@ var LiffProvider = function(param) {
1209
1181
  var contextValue = React.useMemo(function() {
1210
1182
  return {
1211
1183
  liffObject: liffObject,
1184
+ // 為相容性保留 liffObject,另提供 liff 屬性(直接暴露 SDK 物件)
1185
+ liff: liffObject,
1186
+ // 非同步取得 LIFF SDK 的 helper(lazy-load),使用時可以呼叫 `await getLiff()`
1187
+ getLiff: /*#__PURE__*/ _async_to_generator(function() {
1188
+ var mod, sdk, e;
1189
+ return _ts_generator(this, function(_state) {
1190
+ switch(_state.label){
1191
+ case 0:
1192
+ if (liffObject) return [
1193
+ 2,
1194
+ liffObject
1195
+ ];
1196
+ if (typeof window === "undefined") return [
1197
+ 2,
1198
+ null
1199
+ ];
1200
+ _state.label = 1;
1201
+ case 1:
1202
+ _state.trys.push([
1203
+ 1,
1204
+ 3,
1205
+ ,
1206
+ 4
1207
+ ]);
1208
+ return [
1209
+ 4,
1210
+ Promise.resolve().then(function () { return require('./index.cjs3.js'); })
1211
+ ];
1212
+ case 2:
1213
+ mod = _state.sent();
1214
+ sdk = mod === null || mod === void 0 ? void 0 : mod.liff;
1215
+ if (sdk) setLiffObject(sdk);
1216
+ return [
1217
+ 2,
1218
+ sdk || null
1219
+ ];
1220
+ case 3:
1221
+ e = _state.sent();
1222
+ console.error("lazy import @line/liff failed", e);
1223
+ return [
1224
+ 2,
1225
+ null
1226
+ ];
1227
+ case 4:
1228
+ return [
1229
+ 2
1230
+ ];
1231
+ }
1232
+ });
1233
+ }),
1212
1234
  loginData: loginData,
1213
1235
  userInfo: userInfo,
1214
1236
  accessToken: accessToken,
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { createContext, useState, useRef, useCallback, useEffect, useMemo, 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 {
@@ -459,7 +459,6 @@ var LiffProvider = function(param) {
459
459
  var _useState5 = _sliced_to_array(useState(null), 2), liffProfile = _useState5[0], setLiffProfile = _useState5[1];
460
460
  var _useState6 = _sliced_to_array(useState(null), 2), isFriendship = _useState6[0], setFriendship = _useState6[1];
461
461
  var _useState7 = _sliced_to_array(useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
462
- var isProcessingLiffCallback = useRef(false);
463
462
  // userInfo 的 localStorage key
464
463
  var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
465
464
  // liff profile 的 localStorage key
@@ -764,15 +763,15 @@ var LiffProvider = function(param) {
764
763
  // 初始化 LIFF
765
764
  var initializeLiff = function() {
766
765
  var _ref = _async_to_generator(function(isValid) {
767
- var customFetch, liff, urlParams, hasLiffParams, originalFetch, storedProfileExists, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
766
+ var customFetch, liff, originalFetch, redirectUri, tempFriendship, lineToken, profile, profileErr, friendship, friendFlag, error, err;
768
767
  return _ts_generator(this, function(_state) {
769
768
  switch(_state.label){
770
769
  case 0:
771
770
  _state.trys.push([
772
771
  0,
773
- 15,
772
+ 13,
774
773
  ,
775
- 16
774
+ 14
776
775
  ]);
777
776
  customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
778
777
  // eslint-disable-next-line no-inner-declarations
@@ -788,17 +787,12 @@ var LiffProvider = function(param) {
788
787
  ];
789
788
  case 1:
790
789
  liff = _state.sent().liff;
791
- urlParams = new URLSearchParams(window.location.search);
792
- hasLiffParams = urlParams.has("liffClientId") || urlParams.has("liffRedirectUri");
793
790
  originalFetch = window.fetch;
794
791
  window.fetch = customFetch;
795
792
  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);
796
- if (hasLiffParams || isProcessingLiffCallback.current) {
797
- isProcessingLiffCallback.current = true;
798
- return [
799
- 2
800
- ];
801
- }
793
+ if (isValid) return [
794
+ 2
795
+ ];
802
796
  return [
803
797
  4,
804
798
  liff.init({
@@ -809,20 +803,27 @@ var LiffProvider = function(param) {
809
803
  case 2:
810
804
  _state.sent();
811
805
  console.log("LIFF init succeeded.");
812
- isProcessingLiffCallback.current = true;
813
806
  setLiffObject(liff);
814
- // 如果 localStorage 或 state 已有 profile,就跳過重複呼叫
815
- storedProfileExists = false;
816
- try {
817
- storedProfileExists = !!window.localStorage.getItem(liffUserInfoStorageKey);
818
- } catch (e) {
819
- storedProfileExists = false;
820
- isProcessingLiffCallback.current = false;
807
+ // 未登入先進行登入
808
+ if (!liff.isLoggedIn()) {
809
+ redirectUri = customerRedirectUrl || "".concat(window.location.href);
810
+ if (liffLogin) {
811
+ liff.login({
812
+ redirectUri: redirectUri
813
+ });
814
+ return [
815
+ 2
816
+ ];
817
+ }
818
+ if (loginByUser || ignoreRoute) return [
819
+ 2
820
+ ];
821
+ liff.login({
822
+ redirectUri: redirectUri
823
+ });
821
824
  }
822
- if (!(!storedProfileExists && !liffProfile)) return [
823
- 3,
824
- 7
825
- ];
825
+ tempFriendship = null;
826
+ lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
826
827
  _state.label = 3;
827
828
  case 3:
828
829
  _state.trys.push([
@@ -845,58 +846,29 @@ var LiffProvider = function(param) {
845
846
  ];
846
847
  case 5:
847
848
  profileErr = _state.sent();
848
- console.warn("取得 LIFF profile 失敗(非致命):", profileErr);
849
+ console.warn("取得 LIFF profile 失敗:", profileErr);
849
850
  return [
850
851
  3,
851
852
  6
852
853
  ];
853
854
  case 6:
854
- return [
855
- 3,
856
- 8
857
- ];
858
- case 7:
859
- // 已有快取,跳過呼叫
860
- console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
861
- _state.label = 8;
862
- case 8:
863
- lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
864
- // 未登入先進行登入
865
- if (!liff.isLoggedIn()) {
866
- redirectUri = customerRedirectUrl || "".concat(window.location.href);
867
- if (liffLogin) {
868
- liff.login({
869
- redirectUri: redirectUri
870
- });
871
- return [
872
- 2
873
- ];
874
- }
875
- if (loginByUser || ignoreRoute) return [
876
- 2
877
- ];
878
- liff.login({
879
- redirectUri: redirectUri
880
- });
881
- }
882
- tempFriendship = null;
883
855
  if (!lineToken) return [
884
856
  3,
885
- 14
857
+ 12
886
858
  ];
887
- _state.label = 9;
888
- case 9:
859
+ _state.label = 7;
860
+ case 7:
889
861
  _state.trys.push([
862
+ 7,
890
863
  9,
891
- 11,
892
864
  ,
893
- 12
865
+ 10
894
866
  ]);
895
867
  return [
896
868
  4,
897
869
  liff.getFriendship()
898
870
  ];
899
- case 10:
871
+ case 8:
900
872
  friendship = _state.sent();
901
873
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
902
874
  setFriendship(friendFlag);
@@ -904,16 +876,16 @@ var LiffProvider = function(param) {
904
876
  console.log("isFriendship", friendFlag);
905
877
  return [
906
878
  3,
907
- 12
879
+ 10
908
880
  ];
909
- case 11:
881
+ case 9:
910
882
  error = _state.sent();
911
883
  console.error("Error in liff.getFriendship():", error);
912
884
  return [
913
885
  3,
914
- 12
886
+ 10
915
887
  ];
916
- case 12:
888
+ case 10:
917
889
  console.log("isValid", isValid);
918
890
  if (tempFriendship && isValid) return [
919
891
  2
@@ -922,23 +894,23 @@ var LiffProvider = function(param) {
922
894
  4,
923
895
  loginInit(lineToken)
924
896
  ];
925
- case 13:
897
+ case 11:
926
898
  _state.sent();
927
- _state.label = 14;
928
- case 14:
899
+ _state.label = 12;
900
+ case 12:
929
901
  return [
930
902
  3,
931
- 16
903
+ 14
932
904
  ];
933
- case 15:
905
+ case 13:
934
906
  err = _state.sent();
935
907
  setLiffError(err.toString());
936
908
  console.log("LIFF init failed.", err);
937
909
  return [
938
910
  3,
939
- 16
911
+ 14
940
912
  ];
941
- case 16:
913
+ case 14:
942
914
  return [
943
915
  2
944
916
  ];
@@ -1205,6 +1177,56 @@ var LiffProvider = function(param) {
1205
1177
  var contextValue = useMemo(function() {
1206
1178
  return {
1207
1179
  liffObject: liffObject,
1180
+ // 為相容性保留 liffObject,另提供 liff 屬性(直接暴露 SDK 物件)
1181
+ liff: liffObject,
1182
+ // 非同步取得 LIFF SDK 的 helper(lazy-load),使用時可以呼叫 `await getLiff()`
1183
+ getLiff: /*#__PURE__*/ _async_to_generator(function() {
1184
+ var mod, sdk, e;
1185
+ return _ts_generator(this, function(_state) {
1186
+ switch(_state.label){
1187
+ case 0:
1188
+ if (liffObject) return [
1189
+ 2,
1190
+ liffObject
1191
+ ];
1192
+ if (typeof window === "undefined") return [
1193
+ 2,
1194
+ null
1195
+ ];
1196
+ _state.label = 1;
1197
+ case 1:
1198
+ _state.trys.push([
1199
+ 1,
1200
+ 3,
1201
+ ,
1202
+ 4
1203
+ ]);
1204
+ return [
1205
+ 4,
1206
+ import('./index.esm3.js')
1207
+ ];
1208
+ case 2:
1209
+ mod = _state.sent();
1210
+ sdk = mod === null || mod === void 0 ? void 0 : mod.liff;
1211
+ if (sdk) setLiffObject(sdk);
1212
+ return [
1213
+ 2,
1214
+ sdk || null
1215
+ ];
1216
+ case 3:
1217
+ e = _state.sent();
1218
+ console.error("lazy import @line/liff failed", e);
1219
+ return [
1220
+ 2,
1221
+ null
1222
+ ];
1223
+ case 4:
1224
+ return [
1225
+ 2
1226
+ ];
1227
+ }
1228
+ });
1229
+ }),
1208
1230
  loginData: loginData,
1209
1231
  userInfo: userInfo,
1210
1232
  accessToken: accessToken,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunggang/ui-lib",
3
- "version": "0.4.56",
3
+ "version": "0.4.58",
4
4
  "sideEffects": [
5
5
  "*.css",
6
6
  "./src/style.css",
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  type LiffContextType = {
3
+ getLiff: any;
3
4
  liffObject: any;
4
5
  loginData: any;
5
6
  userInfo?: any;