@apps-in-toss/framework 2.9.0 → 2.9.2
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/dist/index.cjs +223 -121
- package/dist/index.js +133 -31
- package/package.json +7 -7
package/dist/index.cjs
CHANGED
|
@@ -56,7 +56,7 @@ var import_analytics2 = require("@apps-in-toss/analytics");
|
|
|
56
56
|
var import_analytics = require("@apps-in-toss/analytics");
|
|
57
57
|
var import_native_modules10 = require("@apps-in-toss/native-modules");
|
|
58
58
|
var import_react_native27 = require("@granite-js/react-native");
|
|
59
|
-
var
|
|
59
|
+
var import_tds_react_native12 = require("@toss/tds-react-native");
|
|
60
60
|
var import_react_native28 = require("react-native");
|
|
61
61
|
|
|
62
62
|
// src/core/components/AppEvent.tsx
|
|
@@ -185,7 +185,7 @@ function useNavigationBarContext() {
|
|
|
185
185
|
|
|
186
186
|
// src/components/RNAppContainer.tsx
|
|
187
187
|
var import_native_modules9 = require("@apps-in-toss/native-modules");
|
|
188
|
-
var
|
|
188
|
+
var import_react17 = require("react");
|
|
189
189
|
var import_react_native26 = require("react-native");
|
|
190
190
|
|
|
191
191
|
// src/components/GameInitializer.tsx
|
|
@@ -657,7 +657,28 @@ function useHardwareBackPress(handler) {
|
|
|
657
657
|
|
|
658
658
|
// src/components/NavigationBar/RNNavigationBar/hooks/useNavigationEvent.ts
|
|
659
659
|
var import_react_native13 = require("@granite-js/react-native");
|
|
660
|
+
var import_react13 = require("react");
|
|
661
|
+
|
|
662
|
+
// src/components/NavigationBar/RNNavigationBar/hooks/useCloseConfirm.ts
|
|
663
|
+
var import_tds_react_native5 = require("@toss/tds-react-native");
|
|
664
|
+
var import_es_hangul2 = require("es-hangul");
|
|
660
665
|
var import_react12 = require("react");
|
|
666
|
+
function useCloseConfirm() {
|
|
667
|
+
const { brandDisplayName } = getAppsInTossGlobals();
|
|
668
|
+
const { openConfirm } = (0, import_tds_react_native5.useDialog)();
|
|
669
|
+
return (0, import_react12.useCallback)(
|
|
670
|
+
async ({ onEntered }) => {
|
|
671
|
+
return await openConfirm({
|
|
672
|
+
title: `${(0, import_es_hangul2.josa)(brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
|
|
673
|
+
leftButton: "\uB2EB\uAE30",
|
|
674
|
+
rightButton: "\uC885\uB8CC\uD558\uAE30",
|
|
675
|
+
closeOnDimmerClick: true,
|
|
676
|
+
onEntered
|
|
677
|
+
});
|
|
678
|
+
},
|
|
679
|
+
[brandDisplayName, openConfirm]
|
|
680
|
+
);
|
|
681
|
+
}
|
|
661
682
|
|
|
662
683
|
// src/utils/eventEmitter.ts
|
|
663
684
|
var EventEmitter = class {
|
|
@@ -703,8 +724,12 @@ var safeAreaInsetsChange = createEvent("safeAreaInsetsChange");
|
|
|
703
724
|
var import_react_native12 = require("@granite-js/react-native");
|
|
704
725
|
var NAVI_BAR_IMPRESSION_SCHEMA_ID = 1596837;
|
|
705
726
|
var NAVI_BAR_IMPRESSION_LOG_NAME = "appsintoss_app_visit__common_module::impression__navigation_bar";
|
|
727
|
+
var CLOSE_POPUP_SHOW_SCHEMA_ID = 1644490;
|
|
728
|
+
var CLOSE_POPUP_SHOW_LOG_NAME = "appsintoss_app_visit__common_module::popup__close_app";
|
|
706
729
|
var CLOSE_BUTTON_CLICK_SCHEMA_ID = 1596831;
|
|
707
730
|
var CLOSE_BUTTON_CLICK_LOG_NAME = "appsintoss_app_visit__common_module::click__icon_close";
|
|
731
|
+
var CLOSE_POPUP_CTA_CLICK_SCHEMA_ID = 1644492;
|
|
732
|
+
var CLOSE_POPUP_CTA_CLICK_LOG_NAME = "appsintoss_app_visit__common_module::popup__close_app::click__cta";
|
|
708
733
|
var HOME_BUTTON_CLICK_SCHEMA_ID = 1596839;
|
|
709
734
|
var HOME_BUTTON_CLICK_LOG_NAME = "appsintoss_app_visit__common_module::click__icon_home";
|
|
710
735
|
function useNavigationBarLogging() {
|
|
@@ -747,8 +772,32 @@ function useNavigationBarLogging() {
|
|
|
747
772
|
}
|
|
748
773
|
});
|
|
749
774
|
};
|
|
775
|
+
const logClosePopupShow = () => {
|
|
776
|
+
sendLog({
|
|
777
|
+
log_name: CLOSE_POPUP_SHOW_LOG_NAME,
|
|
778
|
+
log_type: "popup",
|
|
779
|
+
params: {
|
|
780
|
+
...baseParams,
|
|
781
|
+
schema_id: CLOSE_POPUP_SHOW_SCHEMA_ID
|
|
782
|
+
}
|
|
783
|
+
});
|
|
784
|
+
};
|
|
785
|
+
const logClosePopupCtaClick = (confirm) => {
|
|
786
|
+
sendLog({
|
|
787
|
+
log_name: CLOSE_POPUP_CTA_CLICK_LOG_NAME,
|
|
788
|
+
log_type: "event",
|
|
789
|
+
params: {
|
|
790
|
+
...baseParams,
|
|
791
|
+
close_yn: confirm ? "Y" : "N",
|
|
792
|
+
schema_id: CLOSE_POPUP_CTA_CLICK_SCHEMA_ID,
|
|
793
|
+
event_type: "click"
|
|
794
|
+
}
|
|
795
|
+
});
|
|
796
|
+
};
|
|
750
797
|
return {
|
|
751
798
|
navBarImpression: logNavBarImpression,
|
|
799
|
+
closePopupShow: logClosePopupShow,
|
|
800
|
+
closePopupCtaClick: logClosePopupCtaClick,
|
|
752
801
|
closeButtonClick: logCloseButtonClick,
|
|
753
802
|
homeButtonClick: logHomeButtonClick
|
|
754
803
|
};
|
|
@@ -759,15 +808,30 @@ function useNavigationEvent() {
|
|
|
759
808
|
const backEventContext = (0, import_react_native13.useBackEventContext)();
|
|
760
809
|
const logging = useNavigationBarLogging();
|
|
761
810
|
const navigation = (0, import_react_native13.useNavigation)();
|
|
762
|
-
|
|
763
|
-
|
|
811
|
+
const closeConfirm = useCloseConfirm();
|
|
812
|
+
const global2 = getAppsInTossGlobals();
|
|
813
|
+
return (0, import_react13.useMemo)(() => {
|
|
814
|
+
const close = async () => {
|
|
815
|
+
if (global2.appType !== "game") {
|
|
816
|
+
(0, import_react_native13.closeView)();
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
const hasConfirmed = await closeConfirm({
|
|
820
|
+
onEntered: logging.closePopupShow
|
|
821
|
+
});
|
|
822
|
+
logging.closePopupCtaClick(hasConfirmed);
|
|
823
|
+
if (hasConfirmed) {
|
|
824
|
+
(0, import_react_native13.closeView)();
|
|
825
|
+
}
|
|
826
|
+
};
|
|
827
|
+
return {
|
|
764
828
|
handleBack: () => {
|
|
765
829
|
if (backEventContext.hasBackEvent) {
|
|
766
830
|
backEventContext.onBack();
|
|
767
831
|
} else if (navigation.canGoBack()) {
|
|
768
832
|
navigation.goBack();
|
|
769
833
|
} else {
|
|
770
|
-
(
|
|
834
|
+
close();
|
|
771
835
|
}
|
|
772
836
|
},
|
|
773
837
|
handleHomeButtonClick: () => {
|
|
@@ -780,27 +844,26 @@ function useNavigationEvent() {
|
|
|
780
844
|
},
|
|
781
845
|
handleCloseButtonClick: () => {
|
|
782
846
|
logging.closeButtonClick();
|
|
783
|
-
(
|
|
847
|
+
close();
|
|
784
848
|
}
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
);
|
|
849
|
+
};
|
|
850
|
+
}, [global2.appType, backEventContext, navigation, closeConfirm, logging]);
|
|
788
851
|
}
|
|
789
852
|
|
|
790
853
|
// src/core/hooks/useMoreButtonBottomSheet/index.tsx
|
|
791
854
|
var import_native_modules8 = require("@apps-in-toss/native-modules");
|
|
792
855
|
var import_react_native18 = require("@granite-js/react-native");
|
|
793
|
-
var
|
|
856
|
+
var import_tds_react_native8 = require("@toss/tds-react-native");
|
|
794
857
|
var import_private4 = require("@toss/tds-react-native/private");
|
|
795
|
-
var
|
|
858
|
+
var import_react14 = require("react");
|
|
796
859
|
|
|
797
860
|
// src/core/hooks/useMoreButtonBottomSheet/AppShareListMenu.tsx
|
|
798
861
|
var import_native_modules5 = require("@apps-in-toss/native-modules");
|
|
799
862
|
var import_react_native16 = require("@granite-js/react-native");
|
|
800
|
-
var
|
|
863
|
+
var import_tds_react_native7 = require("@toss/tds-react-native");
|
|
801
864
|
|
|
802
865
|
// src/core/hooks/useMoreButtonBottomSheet/Menu.tsx
|
|
803
|
-
var
|
|
866
|
+
var import_tds_react_native6 = require("@toss/tds-react-native");
|
|
804
867
|
var import_private3 = require("@toss/tds-react-native/private");
|
|
805
868
|
var import_react_native15 = require("react-native");
|
|
806
869
|
|
|
@@ -882,7 +945,7 @@ function Menu({ title, iconURL, onPress }) {
|
|
|
882
945
|
const brandPrimaryColorRGB = hexToRGB(globals.brandPrimaryColor);
|
|
883
946
|
const iconBackgroundColor = brandPrimaryColorRGB ? `rgba(${brandPrimaryColorRGB.join(",")},0.1)` : adaptive.grey100;
|
|
884
947
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
885
|
-
|
|
948
|
+
import_tds_react_native6.ListRow,
|
|
886
949
|
{
|
|
887
950
|
left: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
888
951
|
import_react_native15.View,
|
|
@@ -897,10 +960,10 @@ function Menu({ title, iconURL, onPress }) {
|
|
|
897
960
|
marginRight: 16,
|
|
898
961
|
backgroundColor: iconBackgroundColor
|
|
899
962
|
},
|
|
900
|
-
children: iconName ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
963
|
+
children: iconName ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_tds_react_native6.Asset.Icon, { frameShape: { width: 20, height: 20 }, color: globals.brandPrimaryColor, name: iconName }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_tds_react_native6.Asset.Image, { frameShape: { width: 20, height: 20 }, source: { uri: iconURL } })
|
|
901
964
|
}
|
|
902
965
|
),
|
|
903
|
-
contents: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
966
|
+
contents: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_tds_react_native6.ListRow.Texts, { type: "1RowTypeA", top: title, topProps: { color: adaptive.grey700 } }),
|
|
904
967
|
verticalPadding: "extraSmall",
|
|
905
968
|
onPress: () => {
|
|
906
969
|
logging.menuClick({ title });
|
|
@@ -947,7 +1010,7 @@ var APP_SHARE_MENU_INFO = {
|
|
|
947
1010
|
function AppShareListMenu() {
|
|
948
1011
|
const initialScheme = (0, import_react_native16.getSchemeUri)();
|
|
949
1012
|
const isSandbox = (0, import_native_modules5.getOperationalEnvironment)() === "sandbox";
|
|
950
|
-
const { openConfirm } = (0,
|
|
1013
|
+
const { openConfirm } = (0, import_tds_react_native7.useDialog)();
|
|
951
1014
|
const schemeForShare = addParamsToUrl(initialScheme, {
|
|
952
1015
|
referrer: SHARE_SCHEME_REFERRER
|
|
953
1016
|
});
|
|
@@ -1057,7 +1120,7 @@ var MIN_VERSION = {
|
|
|
1057
1120
|
function useMoreButtonBottomSheet() {
|
|
1058
1121
|
const globals = getAppsInTossGlobals();
|
|
1059
1122
|
const adaptive = (0, import_private4.useAdaptive)();
|
|
1060
|
-
const [itemList, setItemList] = (0,
|
|
1123
|
+
const [itemList, setItemList] = (0, import_react14.useState)([]);
|
|
1061
1124
|
const appUpdateDialog = useAppUpdateDialog();
|
|
1062
1125
|
const logging = useMoreButtonBottomSheetLogging();
|
|
1063
1126
|
const overlay = (0, import_private4.useOverlay)();
|
|
@@ -1066,7 +1129,7 @@ function useMoreButtonBottomSheet() {
|
|
|
1066
1129
|
const isBottomSheetSupported = (0, import_native_modules8.isMinVersionSupported)(MIN_VERSION.BOTTOM_SHEET);
|
|
1067
1130
|
const isShareListMenuSupported = (0, import_native_modules8.isMinVersionSupported)(MIN_VERSION.SHARE_LIST_MENU);
|
|
1068
1131
|
const isSettingsMenuSupported = (0, import_native_modules8.isMinVersionSupported)(MIN_VERSION.SETTINGS_MENU);
|
|
1069
|
-
(0,
|
|
1132
|
+
(0, import_react14.useEffect)(() => {
|
|
1070
1133
|
if (!isBottomSheetSupported) {
|
|
1071
1134
|
return;
|
|
1072
1135
|
}
|
|
@@ -1094,17 +1157,17 @@ function useMoreButtonBottomSheet() {
|
|
|
1094
1157
|
close();
|
|
1095
1158
|
};
|
|
1096
1159
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(BottomSheetImpressionArea, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1097
|
-
|
|
1160
|
+
import_tds_react_native8.BottomSheet.Root,
|
|
1098
1161
|
{
|
|
1099
1162
|
header: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1100
|
-
|
|
1163
|
+
import_tds_react_native8.ListHeader,
|
|
1101
1164
|
{
|
|
1102
|
-
title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1165
|
+
title: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_tds_react_native8.ListHeader.TitleParagraph, { color: adaptive.grey800, fontWeight: "bold", typography: "t5", children: title })
|
|
1103
1166
|
}
|
|
1104
1167
|
),
|
|
1105
1168
|
open: isOpen,
|
|
1106
1169
|
cta: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1107
|
-
|
|
1170
|
+
import_tds_react_native8.BottomSheet.CTA,
|
|
1108
1171
|
{
|
|
1109
1172
|
size: "large",
|
|
1110
1173
|
type: "dark",
|
|
@@ -1117,7 +1180,7 @@ function useMoreButtonBottomSheet() {
|
|
|
1117
1180
|
),
|
|
1118
1181
|
onClose: handleClose,
|
|
1119
1182
|
onExited: exit,
|
|
1120
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
1183
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_tds_react_native8.List, { rowSeparator: "none", children: [
|
|
1121
1184
|
itemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1122
1185
|
Menu,
|
|
1123
1186
|
{
|
|
@@ -1139,7 +1202,7 @@ function useMoreButtonBottomSheet() {
|
|
|
1139
1202
|
}
|
|
1140
1203
|
function BottomSheetImpressionArea({ children }) {
|
|
1141
1204
|
const logging = useMoreButtonBottomSheetLogging();
|
|
1142
|
-
(0,
|
|
1205
|
+
(0, import_react14.useEffect)(() => {
|
|
1143
1206
|
logging.show();
|
|
1144
1207
|
}, [logging]);
|
|
1145
1208
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children });
|
|
@@ -1148,14 +1211,14 @@ function BottomSheetImpressionArea({ children }) {
|
|
|
1148
1211
|
// src/components/NavigationBar/TopNavigation/TopNavigation.tsx
|
|
1149
1212
|
var import_react_native_safe_area_context = require("@granite-js/native/react-native-safe-area-context");
|
|
1150
1213
|
var import_react_native19 = require("@granite-js/react-native");
|
|
1151
|
-
var
|
|
1152
|
-
var
|
|
1214
|
+
var import_tds_react_native9 = require("@toss/tds-react-native");
|
|
1215
|
+
var import_react15 = require("react");
|
|
1153
1216
|
var import_react_native20 = require("react-native");
|
|
1154
1217
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1155
1218
|
function TopNavigation({ left, center, right }) {
|
|
1156
1219
|
const insets = (0, import_react_native_safe_area_context.useSafeAreaInsets)();
|
|
1157
1220
|
const navigation = (0, import_react_native19.useNavigation)();
|
|
1158
|
-
(0,
|
|
1221
|
+
(0, import_react15.useEffect)(() => {
|
|
1159
1222
|
const { navigationBar } = getAppsInTossGlobals();
|
|
1160
1223
|
const parsedNavigationBar = navigationBar ? safeParseNavigationBar(navigationBar) : null;
|
|
1161
1224
|
const transparent = parsedNavigationBar?.transparentBackground ?? false;
|
|
@@ -1167,7 +1230,7 @@ function TopNavigation({ left, center, right }) {
|
|
|
1167
1230
|
{
|
|
1168
1231
|
style: {
|
|
1169
1232
|
width: "100%",
|
|
1170
|
-
backgroundColor: transparent ? void 0 : theme === "light" ?
|
|
1233
|
+
backgroundColor: transparent ? void 0 : theme === "light" ? import_tds_react_native9.colors.lightThemeBackground : import_tds_react_native9.colors.darkThemeBackground
|
|
1171
1234
|
},
|
|
1172
1235
|
pointerEvents: "box-none",
|
|
1173
1236
|
children: [
|
|
@@ -1251,7 +1314,7 @@ function BackButton({ theme = "light", onPress, ...restProps }) {
|
|
|
1251
1314
|
var BACK_BUTTON_XML = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24"><path d="m20.8 20.7c-.3 0-.6-.1-.8-.4l-7.5-7.5c-.5-.5-.5-1.2 0-1.7l7.5-7.5c.5-.5 1.2-.5 1.7 0s.5 1.2 0 1.7l-6.8 6.7 6.7 6.7c.5.5.5 1.2 0 1.7-.2.2-.5.3-.8.3z" fill="__COLOR__"/></svg>`;
|
|
1252
1315
|
|
|
1253
1316
|
// src/components/NavigationBar/TopNavigation/HomeButton.tsx
|
|
1254
|
-
var
|
|
1317
|
+
var import_tds_react_native10 = require("@toss/tds-react-native");
|
|
1255
1318
|
var import_react_native22 = require("react-native");
|
|
1256
1319
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1257
1320
|
function HomeButton({ theme = "light", onPress, children }) {
|
|
@@ -1266,12 +1329,12 @@ function HomeButton({ theme = "light", onPress, children }) {
|
|
|
1266
1329
|
height: 34,
|
|
1267
1330
|
paddingLeft: 10,
|
|
1268
1331
|
paddingRight: 10,
|
|
1269
|
-
backgroundColor: theme === "light" ?
|
|
1332
|
+
backgroundColor: theme === "light" ? import_tds_react_native10.colors.greyOpacity50 : "rgba(0, 0, 1, 0.58)",
|
|
1270
1333
|
borderRadius: 99
|
|
1271
1334
|
},
|
|
1272
1335
|
children: [
|
|
1273
1336
|
children,
|
|
1274
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1337
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tds_react_native10.Icon, { name: "icon-home-mono", size: 18 })
|
|
1275
1338
|
]
|
|
1276
1339
|
}
|
|
1277
1340
|
);
|
|
@@ -1322,12 +1385,12 @@ function AppTitle({ title, iconUrl, theme = "light" }) {
|
|
|
1322
1385
|
}
|
|
1323
1386
|
|
|
1324
1387
|
// src/components/NavigationBar/TopNavigation/Menu.tsx
|
|
1325
|
-
var
|
|
1388
|
+
var import_tds_react_native11 = require("@toss/tds-react-native");
|
|
1326
1389
|
var import_react_native25 = require("react-native");
|
|
1327
1390
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1328
1391
|
function Menu2({ theme = "light", accessoryButton, onPressDots, onLongPressDots, onPressClose }) {
|
|
1329
|
-
const backgroundColor = theme === "light" ?
|
|
1330
|
-
const iconColor = theme === "light" ?
|
|
1392
|
+
const backgroundColor = theme === "light" ? import_tds_react_native11.colors.greyOpacity50 : "rgba(0, 0, 1, 0.58)";
|
|
1393
|
+
const iconColor = theme === "light" ? import_tds_react_native11.colors.greyOpacity600 : "rgba(253, 253, 255, 0.75)";
|
|
1331
1394
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_react_native25.View, { style: { flexDirection: "row", alignItems: "center", gap: 4 }, children: [
|
|
1332
1395
|
accessoryButton && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1333
1396
|
import_react_native25.View,
|
|
@@ -1345,12 +1408,12 @@ function Menu2({ theme = "light", accessoryButton, onPressDots, onLongPressDots,
|
|
|
1345
1408
|
backgroundColor
|
|
1346
1409
|
},
|
|
1347
1410
|
onPress: () => {
|
|
1348
|
-
|
|
1411
|
+
import_tds_react_native11.tdsEvent.emit("navigationAccessoryEvent", { id: accessoryButton.id });
|
|
1349
1412
|
accessoryButton.onPress?.();
|
|
1350
1413
|
},
|
|
1351
1414
|
disabled: accessoryButton.disabled,
|
|
1352
1415
|
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1353
|
-
|
|
1416
|
+
import_tds_react_native11.Icon,
|
|
1354
1417
|
{
|
|
1355
1418
|
name: accessoryButton.icon.name ?? "",
|
|
1356
1419
|
accessibilityLabel: accessoryButton.title,
|
|
@@ -1375,18 +1438,18 @@ function Menu2({ theme = "light", accessoryButton, onPressDots, onLongPressDots,
|
|
|
1375
1438
|
backgroundColor
|
|
1376
1439
|
},
|
|
1377
1440
|
children: [
|
|
1378
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native25.TouchableOpacity, { onPress: onPressDots, onLongPress: onLongPressDots, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1441
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native25.TouchableOpacity, { onPress: onPressDots, onLongPress: onLongPressDots, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_tds_react_native11.Icon, { name: "icon-dots-mono", accessibilityLabel: "\uB354\uBCF4\uAE30", color: iconColor, size: 20 }) }),
|
|
1379
1442
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1380
1443
|
import_react_native25.View,
|
|
1381
1444
|
{
|
|
1382
1445
|
style: {
|
|
1383
1446
|
width: 1,
|
|
1384
1447
|
height: 16,
|
|
1385
|
-
backgroundColor: theme === "light" ?
|
|
1448
|
+
backgroundColor: theme === "light" ? import_tds_react_native11.colors.greyOpacity200 : "rgba(222, 222, 255, 0.19)"
|
|
1386
1449
|
}
|
|
1387
1450
|
}
|
|
1388
1451
|
),
|
|
1389
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native25.TouchableOpacity, { onPress: onPressClose, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1452
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native25.TouchableOpacity, { onPress: onPressClose, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_tds_react_native11.Icon, { name: "icon-appsintoss-close-mono", accessibilityLabel: "\uB2EB\uAE30", color: iconColor, size: 20 }) })
|
|
1390
1453
|
]
|
|
1391
1454
|
}
|
|
1392
1455
|
) })
|
|
@@ -1394,15 +1457,15 @@ function Menu2({ theme = "light", accessoryButton, onPressDots, onLongPressDots,
|
|
|
1394
1457
|
}
|
|
1395
1458
|
|
|
1396
1459
|
// src/components/NavigationBar/common/NavigationBarImpressionArea.tsx
|
|
1397
|
-
var
|
|
1460
|
+
var import_react16 = require("react");
|
|
1398
1461
|
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1399
1462
|
function NavigationBarImpressionArea({
|
|
1400
1463
|
children,
|
|
1401
1464
|
withHomeButton
|
|
1402
1465
|
}) {
|
|
1403
|
-
const hasLogged = (0,
|
|
1466
|
+
const hasLogged = (0, import_react16.useRef)(false);
|
|
1404
1467
|
const logging = useNavigationBarLogging();
|
|
1405
|
-
(0,
|
|
1468
|
+
(0, import_react16.useEffect)(() => {
|
|
1406
1469
|
if (hasLogged.current === false) {
|
|
1407
1470
|
logging.navBarImpression({ home_icon_yn: withHomeButton ? "Y" : "N" });
|
|
1408
1471
|
hasLogged.current = true;
|
|
@@ -1491,7 +1554,7 @@ function RNAppContainer({ children }) {
|
|
|
1491
1554
|
}
|
|
1492
1555
|
}
|
|
1493
1556
|
function GameAppContainer({ children }) {
|
|
1494
|
-
(0,
|
|
1557
|
+
(0, import_react17.useEffect)(() => {
|
|
1495
1558
|
if (import_react_native26.Platform.OS === "ios") {
|
|
1496
1559
|
(0, import_native_modules9.setIosSwipeGestureEnabled)({ isEnabled: false });
|
|
1497
1560
|
return () => {
|
|
@@ -1526,7 +1589,7 @@ function AppsInTossContainer(Container, { children, ...initialProps }) {
|
|
|
1526
1589
|
}
|
|
1527
1590
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
|
|
1528
1591
|
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AppEvent.System, { ...initialProps }),
|
|
1529
|
-
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Container, { ...initialProps, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1592
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Container, { ...initialProps, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_tds_react_native12.TDSProvider, { colorPreference: "light", token: { color: { primary: getAppsInTossGlobals().brandPrimaryColor } }, children }) })
|
|
1530
1593
|
] });
|
|
1531
1594
|
}
|
|
1532
1595
|
function registerApp(container, { context, analytics }) {
|
|
@@ -1598,32 +1661,44 @@ var appsInTossEventBridges = __toESM(require("@apps-in-toss/native-modules/event
|
|
|
1598
1661
|
var import_user_scripts = require("@apps-in-toss/user-scripts");
|
|
1599
1662
|
var import_react_native_safe_area_context3 = require("@granite-js/native/react-native-safe-area-context");
|
|
1600
1663
|
var import_react_native41 = require("@granite-js/react-native");
|
|
1601
|
-
var
|
|
1602
|
-
var
|
|
1664
|
+
var import_tds_react_native16 = require("@toss/tds-react-native");
|
|
1665
|
+
var import_react28 = require("react");
|
|
1603
1666
|
var import_react_native42 = require("react-native");
|
|
1604
1667
|
|
|
1605
1668
|
// src/components/GameWebView.tsx
|
|
1606
1669
|
var import_native_modules11 = require("@apps-in-toss/native-modules");
|
|
1607
1670
|
var import_react_native_webview = require("@granite-js/native/react-native-webview");
|
|
1608
|
-
var
|
|
1671
|
+
var import_react19 = require("react");
|
|
1609
1672
|
var import_react_native30 = require("react-native");
|
|
1610
1673
|
|
|
1611
1674
|
// src/components/NavigationBar/GameWebviewNavigationBar.tsx
|
|
1612
1675
|
var import_react_native29 = require("@granite-js/react-native");
|
|
1613
|
-
var
|
|
1614
|
-
var
|
|
1676
|
+
var import_tds_react_native13 = require("@toss/tds-react-native");
|
|
1677
|
+
var import_es_hangul3 = require("es-hangul");
|
|
1678
|
+
var import_react18 = require("react");
|
|
1615
1679
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1616
1680
|
function GameWebviewNavigationBar() {
|
|
1617
|
-
const { openConfirm } = (0,
|
|
1681
|
+
const { openConfirm } = (0, import_tds_react_native13.useDialog)();
|
|
1682
|
+
const global2 = getAppsInTossGlobals();
|
|
1618
1683
|
const logging = useNavigationBarLogging();
|
|
1619
1684
|
const { open: openMoreButtonBottomSheet } = useMoreButtonBottomSheet();
|
|
1620
1685
|
const { navigationRightButton } = useNavigationBarContext();
|
|
1621
1686
|
const { navigationBar } = getAppsInTossGlobals();
|
|
1622
1687
|
const parsedNavigationBar = navigationBar ? safeParseNavigationBar(navigationBar) : null;
|
|
1623
|
-
const handleGameWebviewClose = (0,
|
|
1688
|
+
const handleGameWebviewClose = (0, import_react18.useCallback)(async () => {
|
|
1624
1689
|
logging.closeButtonClick();
|
|
1625
|
-
|
|
1626
|
-
|
|
1690
|
+
const isConfirmed = await openConfirm({
|
|
1691
|
+
title: `${(0, import_es_hangul3.josa)(global2.brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
|
|
1692
|
+
leftButton: "\uB2EB\uAE30",
|
|
1693
|
+
rightButton: "\uC885\uB8CC\uD558\uAE30",
|
|
1694
|
+
closeOnDimmerClick: true,
|
|
1695
|
+
onEntered: logging.closePopupShow
|
|
1696
|
+
});
|
|
1697
|
+
logging.closePopupCtaClick(isConfirmed);
|
|
1698
|
+
if (isConfirmed) {
|
|
1699
|
+
(0, import_react_native29.closeView)();
|
|
1700
|
+
}
|
|
1701
|
+
}, [global2.brandDisplayName, logging, openConfirm]);
|
|
1627
1702
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1628
1703
|
TopNavigation,
|
|
1629
1704
|
{
|
|
@@ -1642,8 +1717,8 @@ function GameWebviewNavigationBar() {
|
|
|
1642
1717
|
|
|
1643
1718
|
// src/components/GameWebView.tsx
|
|
1644
1719
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1645
|
-
var GameWebView = (0,
|
|
1646
|
-
(0,
|
|
1720
|
+
var GameWebView = (0, import_react19.forwardRef)(function GameWebView2(props, ref) {
|
|
1721
|
+
(0, import_react19.useEffect)(() => {
|
|
1647
1722
|
if (import_react_native30.Platform.OS === "ios") {
|
|
1648
1723
|
(0, import_native_modules11.setIosSwipeGestureEnabled)({ isEnabled: false });
|
|
1649
1724
|
return () => {
|
|
@@ -1660,11 +1735,11 @@ var GameWebView = (0, import_react18.forwardRef)(function GameWebView2(props, re
|
|
|
1660
1735
|
|
|
1661
1736
|
// src/components/PartnerWebView.tsx
|
|
1662
1737
|
var import_react_native_webview2 = require("@granite-js/native/react-native-webview");
|
|
1663
|
-
var
|
|
1738
|
+
var import_react21 = require("react");
|
|
1664
1739
|
|
|
1665
1740
|
// src/components/NavigationBar/PartnerWebviewNavigationBar.tsx
|
|
1666
1741
|
var import_react_native31 = require("@granite-js/react-native");
|
|
1667
|
-
var
|
|
1742
|
+
var import_react20 = require("react");
|
|
1668
1743
|
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1669
1744
|
function PartnerWebviewNavigationBar({ onBackButtonClick, onHomeButtonClick }) {
|
|
1670
1745
|
const globals = getAppsInTossGlobals();
|
|
@@ -1675,7 +1750,7 @@ function PartnerWebviewNavigationBar({ onBackButtonClick, onHomeButtonClick }) {
|
|
|
1675
1750
|
const withBackButton = parsedNavigationBar?.withBackButton ?? true;
|
|
1676
1751
|
const theme = parsedNavigationBar?.theme ?? "light";
|
|
1677
1752
|
const { navigationRightButton } = useNavigationBarContext();
|
|
1678
|
-
const handleClose = (0,
|
|
1753
|
+
const handleClose = (0, import_react20.useCallback)(async () => {
|
|
1679
1754
|
logging.closeButtonClick();
|
|
1680
1755
|
(0, import_react_native31.closeView)();
|
|
1681
1756
|
}, [logging]);
|
|
@@ -1699,7 +1774,7 @@ function PartnerWebviewNavigationBar({ onBackButtonClick, onHomeButtonClick }) {
|
|
|
1699
1774
|
|
|
1700
1775
|
// src/components/PartnerWebView.tsx
|
|
1701
1776
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1702
|
-
var PartnerWebView = (0,
|
|
1777
|
+
var PartnerWebView = (0, import_react21.forwardRef)(function PartnerWebViewScreen({ onBackButtonClick, onHomeButtonClick, ...webViewProps }, ref) {
|
|
1703
1778
|
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
1704
1779
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(PartnerWebviewNavigationBar, { onBackButtonClick, onHomeButtonClick }),
|
|
1705
1780
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_native_webview2.WebView, { ref, ...webViewProps, style: { flex: 1 } })
|
|
@@ -2124,7 +2199,7 @@ async function tossAdEventLog(params) {
|
|
|
2124
2199
|
}
|
|
2125
2200
|
|
|
2126
2201
|
// src/bridge-handler/useBridgeHandler.tsx
|
|
2127
|
-
var
|
|
2202
|
+
var import_react22 = require("react");
|
|
2128
2203
|
function serializeError(error) {
|
|
2129
2204
|
return JSON.stringify(error, (_, value) => {
|
|
2130
2205
|
if (value instanceof Error) {
|
|
@@ -2176,8 +2251,8 @@ function useBridgeHandler({
|
|
|
2176
2251
|
asyncHandlerMap,
|
|
2177
2252
|
eventListenerMap
|
|
2178
2253
|
}) {
|
|
2179
|
-
const ref = (0,
|
|
2180
|
-
const injectedJavaScript = (0,
|
|
2254
|
+
const ref = (0, import_react22.useRef)(null);
|
|
2255
|
+
const injectedJavaScript = (0, import_react22.useMemo)(
|
|
2181
2256
|
() => `window.__CONSTANT_HANDLER_MAP = ${JSON.stringify(
|
|
2182
2257
|
Object.entries(constantHandlerMap).reduce(
|
|
2183
2258
|
(acc, [key, value]) => {
|
|
@@ -2189,7 +2264,7 @@ function useBridgeHandler({
|
|
|
2189
2264
|
)};`,
|
|
2190
2265
|
[constantHandlerMap]
|
|
2191
2266
|
);
|
|
2192
|
-
(0,
|
|
2267
|
+
(0, import_react22.useEffect)(() => {
|
|
2193
2268
|
ref.current?.injectJavaScript(injectedJavaScript);
|
|
2194
2269
|
}, [injectedJavaScript]);
|
|
2195
2270
|
const createHandleOnEvent = (functionName, eventId) => (response) => {
|
|
@@ -2203,7 +2278,7 @@ function useBridgeHandler({
|
|
|
2203
2278
|
window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/onError/${eventId}', ${serializedError});
|
|
2204
2279
|
`);
|
|
2205
2280
|
};
|
|
2206
|
-
const $onMessage = (0,
|
|
2281
|
+
const $onMessage = (0, import_react22.useCallback)(
|
|
2207
2282
|
async (e) => {
|
|
2208
2283
|
onMessage?.(e);
|
|
2209
2284
|
const data = parseNativeEventData(e.nativeEvent.data);
|
|
@@ -2263,13 +2338,13 @@ function parseNativeEventData(data) {
|
|
|
2263
2338
|
|
|
2264
2339
|
// src/core/hooks/useSafeAreaInsetsEvent.tsx
|
|
2265
2340
|
var import_react_native_safe_area_context2 = require("@granite-js/native/react-native-safe-area-context");
|
|
2266
|
-
var
|
|
2341
|
+
var import_react23 = require("react");
|
|
2267
2342
|
function useSafeAreaInsetsEvent() {
|
|
2268
2343
|
const insets = (0, import_react_native_safe_area_context2.useSafeAreaInsets)();
|
|
2269
|
-
(0,
|
|
2344
|
+
(0, import_react23.useEffect)(() => {
|
|
2270
2345
|
safeAreaInsetsChange.emit(insets);
|
|
2271
2346
|
}, [insets]);
|
|
2272
|
-
(0,
|
|
2347
|
+
(0, import_react23.useEffect)(() => {
|
|
2273
2348
|
return () => safeAreaInsetsChange.clearSubscriptions();
|
|
2274
2349
|
}, []);
|
|
2275
2350
|
return safeAreaInsetsChange;
|
|
@@ -2277,10 +2352,12 @@ function useSafeAreaInsetsEvent() {
|
|
|
2277
2352
|
|
|
2278
2353
|
// src/core/hooks/useWebBackHandler.tsx
|
|
2279
2354
|
var import_react_native35 = require("@granite-js/react-native");
|
|
2280
|
-
var
|
|
2355
|
+
var import_tds_react_native14 = require("@toss/tds-react-native");
|
|
2356
|
+
var import_es_hangul4 = require("es-hangul");
|
|
2357
|
+
var import_react25 = require("react");
|
|
2281
2358
|
|
|
2282
2359
|
// src/hooks/useWebviewHistoryStack.tsx
|
|
2283
|
-
var
|
|
2360
|
+
var import_react24 = require("react");
|
|
2284
2361
|
var INITIAL_STATE = { stack: [], index: -1 };
|
|
2285
2362
|
function reducer(state, action) {
|
|
2286
2363
|
switch (action.type) {
|
|
@@ -2311,11 +2388,11 @@ function reducer(state, action) {
|
|
|
2311
2388
|
}
|
|
2312
2389
|
}
|
|
2313
2390
|
function useWebViewHistory() {
|
|
2314
|
-
const [state, dispatch] = (0,
|
|
2315
|
-
const onNavigationStateChange = (0,
|
|
2391
|
+
const [state, dispatch] = (0, import_react24.useReducer)(reducer, INITIAL_STATE);
|
|
2392
|
+
const onNavigationStateChange = (0, import_react24.useCallback)(({ url, canGoForward: canGoForward2 }) => {
|
|
2316
2393
|
dispatch({ type: "NAVIGATION_CHANGE", url, canGoForward: canGoForward2 });
|
|
2317
2394
|
}, []);
|
|
2318
|
-
const { canGoBack, canGoForward } = (0,
|
|
2395
|
+
const { canGoBack, canGoForward } = (0, import_react24.useMemo)(() => {
|
|
2319
2396
|
const canBack = state.index > 0;
|
|
2320
2397
|
const canFwd = state.index >= 0 && state.index < state.stack.length - 1;
|
|
2321
2398
|
return { canGoBack: canBack, canGoForward: canFwd };
|
|
@@ -2333,19 +2410,21 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
|
|
|
2333
2410
|
removeEventListener: removeWebBackEventListener
|
|
2334
2411
|
} = (0, import_react_native35.useBackEventState)();
|
|
2335
2412
|
const logging = useNavigationBarLogging();
|
|
2336
|
-
const
|
|
2413
|
+
const { openConfirm } = (0, import_tds_react_native14.useDialog)();
|
|
2414
|
+
const global2 = getAppsInTossGlobals();
|
|
2415
|
+
const addEventListener = (0, import_react25.useCallback)(
|
|
2337
2416
|
(handler) => {
|
|
2338
2417
|
addWebBackEventListener(handler);
|
|
2339
2418
|
},
|
|
2340
2419
|
[addWebBackEventListener]
|
|
2341
2420
|
);
|
|
2342
|
-
const removeEventListener = (0,
|
|
2421
|
+
const removeEventListener = (0, import_react25.useCallback)(
|
|
2343
2422
|
(handler) => {
|
|
2344
2423
|
removeWebBackEventListener(handler);
|
|
2345
2424
|
},
|
|
2346
2425
|
[removeWebBackEventListener]
|
|
2347
2426
|
);
|
|
2348
|
-
const handleWebBack = (0,
|
|
2427
|
+
const handleWebBack = (0, import_react25.useCallback)(async () => {
|
|
2349
2428
|
if (hasWebBackEvent) {
|
|
2350
2429
|
for (const handler of webBackHandlersRef) {
|
|
2351
2430
|
handler();
|
|
@@ -2355,10 +2434,33 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
|
|
|
2355
2434
|
if (hasHistory) {
|
|
2356
2435
|
webViewRef.current?.injectJavaScript("window.history.back();");
|
|
2357
2436
|
} else {
|
|
2358
|
-
(
|
|
2437
|
+
if (global2.webViewType !== "game") {
|
|
2438
|
+
(0, import_react_native35.closeView)();
|
|
2439
|
+
return;
|
|
2440
|
+
}
|
|
2441
|
+
const isConfirmed = await openConfirm({
|
|
2442
|
+
title: `${(0, import_es_hangul4.josa)(global2.brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
|
|
2443
|
+
leftButton: "\uB2EB\uAE30",
|
|
2444
|
+
rightButton: "\uC885\uB8CC\uD558\uAE30",
|
|
2445
|
+
closeOnDimmerClick: true,
|
|
2446
|
+
onEntered: logging.closePopupShow
|
|
2447
|
+
});
|
|
2448
|
+
logging.closePopupCtaClick(isConfirmed);
|
|
2449
|
+
if (isConfirmed) {
|
|
2450
|
+
(0, import_react_native35.closeView)();
|
|
2451
|
+
}
|
|
2359
2452
|
}
|
|
2360
|
-
}, [
|
|
2361
|
-
|
|
2453
|
+
}, [
|
|
2454
|
+
global2.webViewType,
|
|
2455
|
+
global2.brandDisplayName,
|
|
2456
|
+
hasHistory,
|
|
2457
|
+
hasWebBackEvent,
|
|
2458
|
+
webBackHandlersRef,
|
|
2459
|
+
logging,
|
|
2460
|
+
openConfirm,
|
|
2461
|
+
webViewRef
|
|
2462
|
+
]);
|
|
2463
|
+
const handleWebHome = (0, import_react25.useCallback)(() => {
|
|
2362
2464
|
logging.homeButtonClick();
|
|
2363
2465
|
if (homeEvent.hasSubscriptions()) {
|
|
2364
2466
|
homeEvent.emit({});
|
|
@@ -2371,7 +2473,7 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
|
|
|
2371
2473
|
})();
|
|
2372
2474
|
`);
|
|
2373
2475
|
}, [hasWebBackEvent, webBackHandlersRef, logging, webViewInitialURL, webViewRef]);
|
|
2374
|
-
return (0,
|
|
2476
|
+
return (0, import_react25.useMemo)(
|
|
2375
2477
|
() => ({ addEventListener, removeEventListener, handleWebBack, handleWebHome, onNavigationStateChange }),
|
|
2376
2478
|
[addEventListener, removeEventListener, handleWebBack, handleWebHome, onNavigationStateChange]
|
|
2377
2479
|
);
|
|
@@ -2550,11 +2652,11 @@ function useCreateUserAgent({
|
|
|
2550
2652
|
// src/hooks/useGeolocation.ts
|
|
2551
2653
|
var import_native_modules16 = require("@apps-in-toss/native-modules");
|
|
2552
2654
|
var import_react_native37 = require("@granite-js/react-native");
|
|
2553
|
-
var
|
|
2655
|
+
var import_react26 = require("react");
|
|
2554
2656
|
function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
|
|
2555
2657
|
const isVisible = (0, import_react_native37.useVisibility)();
|
|
2556
|
-
const [location, setLocation] = (0,
|
|
2557
|
-
(0,
|
|
2658
|
+
const [location, setLocation] = (0, import_react26.useState)(null);
|
|
2659
|
+
(0, import_react26.useEffect)(() => {
|
|
2558
2660
|
if (!isVisible) {
|
|
2559
2661
|
return;
|
|
2560
2662
|
}
|
|
@@ -2573,11 +2675,11 @@ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
|
|
|
2573
2675
|
|
|
2574
2676
|
// src/hooks/useWaitForReturnNavigator.tsx
|
|
2575
2677
|
var import_react_native38 = require("@granite-js/react-native");
|
|
2576
|
-
var
|
|
2678
|
+
var import_react27 = require("react");
|
|
2577
2679
|
function useWaitForReturnNavigator() {
|
|
2578
|
-
const callbacks = (0,
|
|
2680
|
+
const callbacks = (0, import_react27.useRef)([]).current;
|
|
2579
2681
|
const navigation = (0, import_react_native38.useNavigation)();
|
|
2580
|
-
const startNavigating = (0,
|
|
2682
|
+
const startNavigating = (0, import_react27.useCallback)(
|
|
2581
2683
|
(route, params) => {
|
|
2582
2684
|
return new Promise((resolve) => {
|
|
2583
2685
|
callbacks.push(resolve);
|
|
@@ -2586,7 +2688,7 @@ function useWaitForReturnNavigator() {
|
|
|
2586
2688
|
},
|
|
2587
2689
|
[callbacks, navigation]
|
|
2588
2690
|
);
|
|
2589
|
-
const handleVisibilityChange = (0,
|
|
2691
|
+
const handleVisibilityChange = (0, import_react27.useCallback)(
|
|
2590
2692
|
(state) => {
|
|
2591
2693
|
if (state === "visible" && callbacks.length > 0) {
|
|
2592
2694
|
for (const callback of callbacks) {
|
|
@@ -2613,9 +2715,9 @@ function useTopNavigation() {
|
|
|
2613
2715
|
// src/hooks/useWebViewMemoryDebug.tsx
|
|
2614
2716
|
var import_native_modules17 = require("@apps-in-toss/native-modules");
|
|
2615
2717
|
var import_react_native39 = require("@granite-js/react-native");
|
|
2616
|
-
var
|
|
2718
|
+
var import_tds_react_native15 = require("@toss/tds-react-native");
|
|
2617
2719
|
function useHandleWebViewProcessDidTerminate(webViewRef) {
|
|
2618
|
-
const toast = (0,
|
|
2720
|
+
const toast = (0, import_tds_react_native15.useToast)();
|
|
2619
2721
|
return () => {
|
|
2620
2722
|
webViewDebugLog("AppsInTossWebViewProcessDidTerminate", {});
|
|
2621
2723
|
toast.open("\uBB38\uC81C\uAC00 \uC0DD\uACA8\uC11C \uBBF8\uB2C8\uC571\uC744 \uB2E4\uC2DC \uC2DC\uC791\uD588\uC5B4\uC694.", {
|
|
@@ -2719,7 +2821,7 @@ var operationalEnvironment = appsInTossConstantBridges.getOperationalEnvironment
|
|
|
2719
2821
|
var TYPES = ["partner", "external", "game"];
|
|
2720
2822
|
var WEBVIEW_TYPES = {
|
|
2721
2823
|
partner: PartnerWebView,
|
|
2722
|
-
external:
|
|
2824
|
+
external: import_tds_react_native16.ExternalWebViewScreen,
|
|
2723
2825
|
game: GameWebView
|
|
2724
2826
|
};
|
|
2725
2827
|
function mergeSchemeQueryParamsInto(url) {
|
|
@@ -2751,21 +2853,21 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
2751
2853
|
if (!TYPES.includes(type)) {
|
|
2752
2854
|
throw new Error(`Invalid WebView type: '${type}'`);
|
|
2753
2855
|
}
|
|
2754
|
-
const webViewRef = (0,
|
|
2755
|
-
const url = (0,
|
|
2856
|
+
const webViewRef = (0, import_react28.useRef)(null);
|
|
2857
|
+
const url = (0, import_react28.useMemo)(() => getWebViewURL(local), [local]);
|
|
2756
2858
|
const webBackHandler = useWebBackHandler(url, webViewRef);
|
|
2757
2859
|
const global2 = getAppsInTossGlobals();
|
|
2758
2860
|
const insets = (0, import_react_native_safe_area_context3.useSafeAreaInsets)();
|
|
2759
2861
|
const navigationBarContext = useNavigationBarContext();
|
|
2760
2862
|
const safeAreaInsetsEvent = useSafeAreaInsetsEvent();
|
|
2761
|
-
const [allowsBackForwardNavigationGestures, setAllowsBackForwardNavigationGestures] = (0,
|
|
2863
|
+
const [allowsBackForwardNavigationGestures, setAllowsBackForwardNavigationGestures] = (0, import_react28.useState)(
|
|
2762
2864
|
props.allowsBackForwardNavigationGestures
|
|
2763
2865
|
);
|
|
2764
2866
|
const handler = useBridgeHandler({
|
|
2765
2867
|
onMessage,
|
|
2766
2868
|
eventListenerMap: {
|
|
2767
2869
|
...appsInTossEventBridges,
|
|
2768
|
-
navigationAccessoryEvent: ({ onEvent, onError }) =>
|
|
2870
|
+
navigationAccessoryEvent: ({ onEvent, onError }) => import_tds_react_native16.tdsEvent.addEventListener("navigationAccessoryEvent", { onEvent, onError }),
|
|
2769
2871
|
backEvent: ({ onEvent }) => {
|
|
2770
2872
|
webBackHandler.addEventListener(onEvent);
|
|
2771
2873
|
return () => {
|
|
@@ -2854,7 +2956,7 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
2854
2956
|
}
|
|
2855
2957
|
}
|
|
2856
2958
|
});
|
|
2857
|
-
const headerPropForExternalWebView = (0,
|
|
2959
|
+
const headerPropForExternalWebView = (0, import_react28.useMemo)(() => {
|
|
2858
2960
|
const parsedNavigationBar = global2.navigationBar != null ? safeParseNavigationBar(global2.navigationBar) : null;
|
|
2859
2961
|
const initialAccessoryButton = parsedNavigationBar?.initialAccessoryButton;
|
|
2860
2962
|
const withBackButton = parsedNavigationBar?.withBackButton ?? true;
|
|
@@ -2875,7 +2977,7 @@ function WebView({ type, local, onMessage, ...props }) {
|
|
|
2875
2977
|
colorPreference: "light"
|
|
2876
2978
|
});
|
|
2877
2979
|
const refs = mergeRefs(handler.ref, webViewRef);
|
|
2878
|
-
(0,
|
|
2980
|
+
(0, import_react28.useEffect)(() => {
|
|
2879
2981
|
const callback = () => {
|
|
2880
2982
|
webBackHandler.handleWebBack();
|
|
2881
2983
|
return true;
|
|
@@ -2954,7 +3056,7 @@ var import_types = require("@apps-in-toss/types");
|
|
|
2954
3056
|
|
|
2955
3057
|
// src/ads/inlineAd/InlineAd.tsx
|
|
2956
3058
|
var import_react_native46 = require("@granite-js/react-native");
|
|
2957
|
-
var
|
|
3059
|
+
var import_react31 = require("react");
|
|
2958
3060
|
var import_react_native47 = require("react-native");
|
|
2959
3061
|
|
|
2960
3062
|
// src/ads/inlineAd/constants.ts
|
|
@@ -3336,7 +3438,7 @@ var EventTracker = class {
|
|
|
3336
3438
|
|
|
3337
3439
|
// src/ads/inlineAd/ui/FeedBannerAdView.tsx
|
|
3338
3440
|
var import_react_native_svg2 = require("@granite-js/native/react-native-svg");
|
|
3339
|
-
var
|
|
3441
|
+
var import_react29 = require("react");
|
|
3340
3442
|
var import_react_native44 = require("react-native");
|
|
3341
3443
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
3342
3444
|
var ARROW_PATH = "m7.5 20.4c-.5-.5-.5-1.2 0-1.7l6.7-6.7-6.8-6.7c-.5-.5-.5-1.2 0-1.7s1.2-.5 1.7 0l7.5 7.5c.5.5.5 1.2 0 1.7l-7.5 7.5c-.2.3-.5.4-.8.4s-.6-.1-.8-.3z";
|
|
@@ -3355,7 +3457,7 @@ function FeedBannerAdView({
|
|
|
3355
3457
|
paddingStyle,
|
|
3356
3458
|
onPress
|
|
3357
3459
|
}) {
|
|
3358
|
-
const scale = (0,
|
|
3460
|
+
const scale = (0, import_react29.useRef)(new import_react_native44.Animated.Value(1)).current;
|
|
3359
3461
|
const animateScale = (toValue) => {
|
|
3360
3462
|
import_react_native44.Animated.timing(scale, {
|
|
3361
3463
|
toValue,
|
|
@@ -3591,7 +3693,7 @@ var styles = import_react_native44.StyleSheet.create({
|
|
|
3591
3693
|
|
|
3592
3694
|
// src/ads/inlineAd/ui/ListBannerAdView.tsx
|
|
3593
3695
|
var import_react_native_svg3 = require("@granite-js/native/react-native-svg");
|
|
3594
|
-
var
|
|
3696
|
+
var import_react30 = require("react");
|
|
3595
3697
|
var import_react_native45 = require("react-native");
|
|
3596
3698
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
3597
3699
|
var SQUIRCLE_PATH = "M0 17.352C0 3.564 3.564 0 17.352 0H18.648C32.436 0 36 3.564 36 17.352V18.648C36 32.436 32.436 36 18.648 36H17.352C3.564 36 0 32.436 0 18.648V17.352Z";
|
|
@@ -3605,8 +3707,8 @@ function ListBannerAdView({
|
|
|
3605
3707
|
colors: colors4,
|
|
3606
3708
|
onPress
|
|
3607
3709
|
}) {
|
|
3608
|
-
const scale = (0,
|
|
3609
|
-
const clipIdRef = (0,
|
|
3710
|
+
const scale = (0, import_react30.useRef)(new import_react_native45.Animated.Value(1)).current;
|
|
3711
|
+
const clipIdRef = (0, import_react30.useRef)(`clip-${Math.random().toString(36).slice(2)}`);
|
|
3610
3712
|
const animateScale = (toValue) => {
|
|
3611
3713
|
import_react_native45.Animated.timing(scale, {
|
|
3612
3714
|
toValue,
|
|
@@ -3914,21 +4016,21 @@ function InlineAd(props) {
|
|
|
3914
4016
|
onAdFailedToRender,
|
|
3915
4017
|
onNoFill
|
|
3916
4018
|
} = props;
|
|
3917
|
-
const slotIdRef = (0,
|
|
3918
|
-
const [ad, setAd] = (0,
|
|
3919
|
-
const [isAdBadgeEnabled, setIsAdBadgeEnabled] = (0,
|
|
3920
|
-
const eventTrackerRef = (0,
|
|
3921
|
-
const eventPayloadRef = (0,
|
|
3922
|
-
const hasRenderedRef = (0,
|
|
3923
|
-
const hasLoggedImp1pxRef = (0,
|
|
3924
|
-
const hasLoggedImp100pRef = (0,
|
|
3925
|
-
const hasNotifiedViewableRef = (0,
|
|
3926
|
-
const viewableTimerRef = (0,
|
|
3927
|
-
const refetchIntervalMsRef = (0,
|
|
3928
|
-
const lastImp1pxAtRef = (0,
|
|
3929
|
-
const loadingRef = (0,
|
|
3930
|
-
const loadRef = (0,
|
|
3931
|
-
const callbacksRef = (0,
|
|
4019
|
+
const slotIdRef = (0, import_react31.useRef)(createSlotId());
|
|
4020
|
+
const [ad, setAd] = (0, import_react31.useState)(null);
|
|
4021
|
+
const [isAdBadgeEnabled, setIsAdBadgeEnabled] = (0, import_react31.useState)(true);
|
|
4022
|
+
const eventTrackerRef = (0, import_react31.useRef)(null);
|
|
4023
|
+
const eventPayloadRef = (0, import_react31.useRef)(null);
|
|
4024
|
+
const hasRenderedRef = (0, import_react31.useRef)(false);
|
|
4025
|
+
const hasLoggedImp1pxRef = (0, import_react31.useRef)(false);
|
|
4026
|
+
const hasLoggedImp100pRef = (0, import_react31.useRef)(false);
|
|
4027
|
+
const hasNotifiedViewableRef = (0, import_react31.useRef)(false);
|
|
4028
|
+
const viewableTimerRef = (0, import_react31.useRef)(null);
|
|
4029
|
+
const refetchIntervalMsRef = (0, import_react31.useRef)(null);
|
|
4030
|
+
const lastImp1pxAtRef = (0, import_react31.useRef)(null);
|
|
4031
|
+
const loadingRef = (0, import_react31.useRef)(false);
|
|
4032
|
+
const loadRef = (0, import_react31.useRef)(null);
|
|
4033
|
+
const callbacksRef = (0, import_react31.useRef)({
|
|
3932
4034
|
onAdRendered,
|
|
3933
4035
|
onAdViewable,
|
|
3934
4036
|
onAdClicked,
|
|
@@ -3936,7 +4038,7 @@ function InlineAd(props) {
|
|
|
3936
4038
|
onAdFailedToRender,
|
|
3937
4039
|
onNoFill
|
|
3938
4040
|
});
|
|
3939
|
-
const isMountedRef = (0,
|
|
4041
|
+
const isMountedRef = (0, import_react31.useRef)(false);
|
|
3940
4042
|
const colorScheme = (0, import_react_native47.useColorScheme)();
|
|
3941
4043
|
const selectedTheme = theme ?? DEFAULT_INLINE_AD_THEME;
|
|
3942
4044
|
const resolvedTheme = selectedTheme === "auto" ? colorScheme === "dark" ? "dark" : "light" : selectedTheme;
|
|
@@ -3953,7 +4055,7 @@ function InlineAd(props) {
|
|
|
3953
4055
|
onAdFailedToRender,
|
|
3954
4056
|
onNoFill
|
|
3955
4057
|
};
|
|
3956
|
-
(0,
|
|
4058
|
+
(0, import_react31.useEffect)(() => {
|
|
3957
4059
|
isMountedRef.current = true;
|
|
3958
4060
|
return () => {
|
|
3959
4061
|
isMountedRef.current = false;
|
|
@@ -3963,7 +4065,7 @@ function InlineAd(props) {
|
|
|
3963
4065
|
}
|
|
3964
4066
|
};
|
|
3965
4067
|
}, []);
|
|
3966
|
-
(0,
|
|
4068
|
+
(0, import_react31.useEffect)(() => {
|
|
3967
4069
|
const normalizedAdGroupId = normalizeAdGroupId(adGroupId);
|
|
3968
4070
|
const loadAdRequest = () => {
|
|
3969
4071
|
if (loadingRef.current) {
|
|
@@ -4048,7 +4150,7 @@ function InlineAd(props) {
|
|
|
4048
4150
|
loadRef.current?.();
|
|
4049
4151
|
}
|
|
4050
4152
|
});
|
|
4051
|
-
(0,
|
|
4153
|
+
(0, import_react31.useEffect)(() => {
|
|
4052
4154
|
if (!ad || hasRenderedRef.current) {
|
|
4053
4155
|
return;
|
|
4054
4156
|
}
|
package/dist/index.js
CHANGED
|
@@ -622,6 +622,27 @@ function useHardwareBackPress(handler) {
|
|
|
622
622
|
import { closeView as closeView3, useBackEventContext, useNavigation } from "@granite-js/react-native";
|
|
623
623
|
import { useMemo as useMemo2 } from "react";
|
|
624
624
|
|
|
625
|
+
// src/components/NavigationBar/RNNavigationBar/hooks/useCloseConfirm.ts
|
|
626
|
+
import { useDialog as useDialog3 } from "@toss/tds-react-native";
|
|
627
|
+
import { josa as josa2 } from "es-hangul";
|
|
628
|
+
import { useCallback as useCallback6 } from "react";
|
|
629
|
+
function useCloseConfirm() {
|
|
630
|
+
const { brandDisplayName } = getAppsInTossGlobals();
|
|
631
|
+
const { openConfirm } = useDialog3();
|
|
632
|
+
return useCallback6(
|
|
633
|
+
async ({ onEntered }) => {
|
|
634
|
+
return await openConfirm({
|
|
635
|
+
title: `${josa2(brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
|
|
636
|
+
leftButton: "\uB2EB\uAE30",
|
|
637
|
+
rightButton: "\uC885\uB8CC\uD558\uAE30",
|
|
638
|
+
closeOnDimmerClick: true,
|
|
639
|
+
onEntered
|
|
640
|
+
});
|
|
641
|
+
},
|
|
642
|
+
[brandDisplayName, openConfirm]
|
|
643
|
+
);
|
|
644
|
+
}
|
|
645
|
+
|
|
625
646
|
// src/utils/eventEmitter.ts
|
|
626
647
|
var EventEmitter = class {
|
|
627
648
|
listeners = {};
|
|
@@ -666,8 +687,12 @@ var safeAreaInsetsChange = createEvent("safeAreaInsetsChange");
|
|
|
666
687
|
import { Granite as Granite3 } from "@granite-js/react-native";
|
|
667
688
|
var NAVI_BAR_IMPRESSION_SCHEMA_ID = 1596837;
|
|
668
689
|
var NAVI_BAR_IMPRESSION_LOG_NAME = "appsintoss_app_visit__common_module::impression__navigation_bar";
|
|
690
|
+
var CLOSE_POPUP_SHOW_SCHEMA_ID = 1644490;
|
|
691
|
+
var CLOSE_POPUP_SHOW_LOG_NAME = "appsintoss_app_visit__common_module::popup__close_app";
|
|
669
692
|
var CLOSE_BUTTON_CLICK_SCHEMA_ID = 1596831;
|
|
670
693
|
var CLOSE_BUTTON_CLICK_LOG_NAME = "appsintoss_app_visit__common_module::click__icon_close";
|
|
694
|
+
var CLOSE_POPUP_CTA_CLICK_SCHEMA_ID = 1644492;
|
|
695
|
+
var CLOSE_POPUP_CTA_CLICK_LOG_NAME = "appsintoss_app_visit__common_module::popup__close_app::click__cta";
|
|
671
696
|
var HOME_BUTTON_CLICK_SCHEMA_ID = 1596839;
|
|
672
697
|
var HOME_BUTTON_CLICK_LOG_NAME = "appsintoss_app_visit__common_module::click__icon_home";
|
|
673
698
|
function useNavigationBarLogging() {
|
|
@@ -710,8 +735,32 @@ function useNavigationBarLogging() {
|
|
|
710
735
|
}
|
|
711
736
|
});
|
|
712
737
|
};
|
|
738
|
+
const logClosePopupShow = () => {
|
|
739
|
+
sendLog({
|
|
740
|
+
log_name: CLOSE_POPUP_SHOW_LOG_NAME,
|
|
741
|
+
log_type: "popup",
|
|
742
|
+
params: {
|
|
743
|
+
...baseParams,
|
|
744
|
+
schema_id: CLOSE_POPUP_SHOW_SCHEMA_ID
|
|
745
|
+
}
|
|
746
|
+
});
|
|
747
|
+
};
|
|
748
|
+
const logClosePopupCtaClick = (confirm) => {
|
|
749
|
+
sendLog({
|
|
750
|
+
log_name: CLOSE_POPUP_CTA_CLICK_LOG_NAME,
|
|
751
|
+
log_type: "event",
|
|
752
|
+
params: {
|
|
753
|
+
...baseParams,
|
|
754
|
+
close_yn: confirm ? "Y" : "N",
|
|
755
|
+
schema_id: CLOSE_POPUP_CTA_CLICK_SCHEMA_ID,
|
|
756
|
+
event_type: "click"
|
|
757
|
+
}
|
|
758
|
+
});
|
|
759
|
+
};
|
|
713
760
|
return {
|
|
714
761
|
navBarImpression: logNavBarImpression,
|
|
762
|
+
closePopupShow: logClosePopupShow,
|
|
763
|
+
closePopupCtaClick: logClosePopupCtaClick,
|
|
715
764
|
closeButtonClick: logCloseButtonClick,
|
|
716
765
|
homeButtonClick: logHomeButtonClick
|
|
717
766
|
};
|
|
@@ -722,15 +771,30 @@ function useNavigationEvent() {
|
|
|
722
771
|
const backEventContext = useBackEventContext();
|
|
723
772
|
const logging = useNavigationBarLogging();
|
|
724
773
|
const navigation = useNavigation();
|
|
725
|
-
|
|
726
|
-
|
|
774
|
+
const closeConfirm = useCloseConfirm();
|
|
775
|
+
const global2 = getAppsInTossGlobals();
|
|
776
|
+
return useMemo2(() => {
|
|
777
|
+
const close = async () => {
|
|
778
|
+
if (global2.appType !== "game") {
|
|
779
|
+
closeView3();
|
|
780
|
+
return;
|
|
781
|
+
}
|
|
782
|
+
const hasConfirmed = await closeConfirm({
|
|
783
|
+
onEntered: logging.closePopupShow
|
|
784
|
+
});
|
|
785
|
+
logging.closePopupCtaClick(hasConfirmed);
|
|
786
|
+
if (hasConfirmed) {
|
|
787
|
+
closeView3();
|
|
788
|
+
}
|
|
789
|
+
};
|
|
790
|
+
return {
|
|
727
791
|
handleBack: () => {
|
|
728
792
|
if (backEventContext.hasBackEvent) {
|
|
729
793
|
backEventContext.onBack();
|
|
730
794
|
} else if (navigation.canGoBack()) {
|
|
731
795
|
navigation.goBack();
|
|
732
796
|
} else {
|
|
733
|
-
|
|
797
|
+
close();
|
|
734
798
|
}
|
|
735
799
|
},
|
|
736
800
|
handleHomeButtonClick: () => {
|
|
@@ -743,11 +807,10 @@ function useNavigationEvent() {
|
|
|
743
807
|
},
|
|
744
808
|
handleCloseButtonClick: () => {
|
|
745
809
|
logging.closeButtonClick();
|
|
746
|
-
|
|
810
|
+
close();
|
|
747
811
|
}
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
);
|
|
812
|
+
};
|
|
813
|
+
}, [global2.appType, backEventContext, navigation, closeConfirm, logging]);
|
|
751
814
|
}
|
|
752
815
|
|
|
753
816
|
// src/core/hooks/useMoreButtonBottomSheet/index.tsx
|
|
@@ -760,7 +823,7 @@ import { useEffect as useEffect5, useState as useState4 } from "react";
|
|
|
760
823
|
// src/core/hooks/useMoreButtonBottomSheet/AppShareListMenu.tsx
|
|
761
824
|
import { getOperationalEnvironment, shareWithScheme } from "@apps-in-toss/native-modules";
|
|
762
825
|
import { getSchemeUri as getSchemeUri4 } from "@granite-js/react-native";
|
|
763
|
-
import { useDialog as
|
|
826
|
+
import { useDialog as useDialog4 } from "@toss/tds-react-native";
|
|
764
827
|
|
|
765
828
|
// src/core/hooks/useMoreButtonBottomSheet/Menu.tsx
|
|
766
829
|
import { ListRow, Asset as Asset2 } from "@toss/tds-react-native";
|
|
@@ -910,7 +973,7 @@ var APP_SHARE_MENU_INFO = {
|
|
|
910
973
|
function AppShareListMenu() {
|
|
911
974
|
const initialScheme = getSchemeUri4();
|
|
912
975
|
const isSandbox = getOperationalEnvironment() === "sandbox";
|
|
913
|
-
const { openConfirm } =
|
|
976
|
+
const { openConfirm } = useDialog4();
|
|
914
977
|
const schemeForShare = addParamsToUrl(initialScheme, {
|
|
915
978
|
referrer: SHARE_SCHEME_REFERRER
|
|
916
979
|
});
|
|
@@ -1591,20 +1654,32 @@ import { Platform as Platform3 } from "react-native";
|
|
|
1591
1654
|
|
|
1592
1655
|
// src/components/NavigationBar/GameWebviewNavigationBar.tsx
|
|
1593
1656
|
import { closeView as closeView4 } from "@granite-js/react-native";
|
|
1594
|
-
import { useDialog as
|
|
1595
|
-
import {
|
|
1657
|
+
import { useDialog as useDialog5 } from "@toss/tds-react-native";
|
|
1658
|
+
import { josa as josa3 } from "es-hangul";
|
|
1659
|
+
import { useCallback as useCallback7 } from "react";
|
|
1596
1660
|
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1597
1661
|
function GameWebviewNavigationBar() {
|
|
1598
|
-
const { openConfirm } =
|
|
1662
|
+
const { openConfirm } = useDialog5();
|
|
1663
|
+
const global2 = getAppsInTossGlobals();
|
|
1599
1664
|
const logging = useNavigationBarLogging();
|
|
1600
1665
|
const { open: openMoreButtonBottomSheet } = useMoreButtonBottomSheet();
|
|
1601
1666
|
const { navigationRightButton } = useNavigationBarContext();
|
|
1602
1667
|
const { navigationBar } = getAppsInTossGlobals();
|
|
1603
1668
|
const parsedNavigationBar = navigationBar ? safeParseNavigationBar(navigationBar) : null;
|
|
1604
|
-
const handleGameWebviewClose =
|
|
1669
|
+
const handleGameWebviewClose = useCallback7(async () => {
|
|
1605
1670
|
logging.closeButtonClick();
|
|
1606
|
-
|
|
1607
|
-
|
|
1671
|
+
const isConfirmed = await openConfirm({
|
|
1672
|
+
title: `${josa3(global2.brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
|
|
1673
|
+
leftButton: "\uB2EB\uAE30",
|
|
1674
|
+
rightButton: "\uC885\uB8CC\uD558\uAE30",
|
|
1675
|
+
closeOnDimmerClick: true,
|
|
1676
|
+
onEntered: logging.closePopupShow
|
|
1677
|
+
});
|
|
1678
|
+
logging.closePopupCtaClick(isConfirmed);
|
|
1679
|
+
if (isConfirmed) {
|
|
1680
|
+
closeView4();
|
|
1681
|
+
}
|
|
1682
|
+
}, [global2.brandDisplayName, logging, openConfirm]);
|
|
1608
1683
|
return /* @__PURE__ */ jsx20(
|
|
1609
1684
|
TopNavigation,
|
|
1610
1685
|
{
|
|
@@ -1647,7 +1722,7 @@ import { forwardRef as forwardRef2 } from "react";
|
|
|
1647
1722
|
|
|
1648
1723
|
// src/components/NavigationBar/PartnerWebviewNavigationBar.tsx
|
|
1649
1724
|
import { closeView as closeView5 } from "@granite-js/react-native";
|
|
1650
|
-
import { useCallback as
|
|
1725
|
+
import { useCallback as useCallback8 } from "react";
|
|
1651
1726
|
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1652
1727
|
function PartnerWebviewNavigationBar({ onBackButtonClick, onHomeButtonClick }) {
|
|
1653
1728
|
const globals = getAppsInTossGlobals();
|
|
@@ -1658,7 +1733,7 @@ function PartnerWebviewNavigationBar({ onBackButtonClick, onHomeButtonClick }) {
|
|
|
1658
1733
|
const withBackButton = parsedNavigationBar?.withBackButton ?? true;
|
|
1659
1734
|
const theme = parsedNavigationBar?.theme ?? "light";
|
|
1660
1735
|
const { navigationRightButton } = useNavigationBarContext();
|
|
1661
|
-
const handleClose =
|
|
1736
|
+
const handleClose = useCallback8(async () => {
|
|
1662
1737
|
logging.closeButtonClick();
|
|
1663
1738
|
closeView5();
|
|
1664
1739
|
}, [logging]);
|
|
@@ -2111,7 +2186,7 @@ async function tossAdEventLog(params) {
|
|
|
2111
2186
|
}
|
|
2112
2187
|
|
|
2113
2188
|
// src/bridge-handler/useBridgeHandler.tsx
|
|
2114
|
-
import { useCallback as
|
|
2189
|
+
import { useCallback as useCallback9, useEffect as useEffect10, useMemo as useMemo3, useRef as useRef3 } from "react";
|
|
2115
2190
|
function serializeError(error) {
|
|
2116
2191
|
return JSON.stringify(error, (_, value) => {
|
|
2117
2192
|
if (value instanceof Error) {
|
|
@@ -2190,7 +2265,7 @@ function useBridgeHandler({
|
|
|
2190
2265
|
window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/onError/${eventId}', ${serializedError});
|
|
2191
2266
|
`);
|
|
2192
2267
|
};
|
|
2193
|
-
const $onMessage =
|
|
2268
|
+
const $onMessage = useCallback9(
|
|
2194
2269
|
async (e) => {
|
|
2195
2270
|
onMessage?.(e);
|
|
2196
2271
|
const data = parseNativeEventData(e.nativeEvent.data);
|
|
@@ -2264,10 +2339,12 @@ function useSafeAreaInsetsEvent() {
|
|
|
2264
2339
|
|
|
2265
2340
|
// src/core/hooks/useWebBackHandler.tsx
|
|
2266
2341
|
import { closeView as closeView6, useBackEventState } from "@granite-js/react-native";
|
|
2267
|
-
import {
|
|
2342
|
+
import { useDialog as useDialog6 } from "@toss/tds-react-native";
|
|
2343
|
+
import { josa as josa4 } from "es-hangul";
|
|
2344
|
+
import { useCallback as useCallback11, useMemo as useMemo5 } from "react";
|
|
2268
2345
|
|
|
2269
2346
|
// src/hooks/useWebviewHistoryStack.tsx
|
|
2270
|
-
import { useCallback as
|
|
2347
|
+
import { useCallback as useCallback10, useMemo as useMemo4, useReducer } from "react";
|
|
2271
2348
|
var INITIAL_STATE = { stack: [], index: -1 };
|
|
2272
2349
|
function reducer(state, action) {
|
|
2273
2350
|
switch (action.type) {
|
|
@@ -2299,7 +2376,7 @@ function reducer(state, action) {
|
|
|
2299
2376
|
}
|
|
2300
2377
|
function useWebViewHistory() {
|
|
2301
2378
|
const [state, dispatch] = useReducer(reducer, INITIAL_STATE);
|
|
2302
|
-
const onNavigationStateChange =
|
|
2379
|
+
const onNavigationStateChange = useCallback10(({ url, canGoForward: canGoForward2 }) => {
|
|
2303
2380
|
dispatch({ type: "NAVIGATION_CHANGE", url, canGoForward: canGoForward2 });
|
|
2304
2381
|
}, []);
|
|
2305
2382
|
const { canGoBack, canGoForward } = useMemo4(() => {
|
|
@@ -2320,19 +2397,21 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
|
|
|
2320
2397
|
removeEventListener: removeWebBackEventListener
|
|
2321
2398
|
} = useBackEventState();
|
|
2322
2399
|
const logging = useNavigationBarLogging();
|
|
2323
|
-
const
|
|
2400
|
+
const { openConfirm } = useDialog6();
|
|
2401
|
+
const global2 = getAppsInTossGlobals();
|
|
2402
|
+
const addEventListener = useCallback11(
|
|
2324
2403
|
(handler) => {
|
|
2325
2404
|
addWebBackEventListener(handler);
|
|
2326
2405
|
},
|
|
2327
2406
|
[addWebBackEventListener]
|
|
2328
2407
|
);
|
|
2329
|
-
const removeEventListener =
|
|
2408
|
+
const removeEventListener = useCallback11(
|
|
2330
2409
|
(handler) => {
|
|
2331
2410
|
removeWebBackEventListener(handler);
|
|
2332
2411
|
},
|
|
2333
2412
|
[removeWebBackEventListener]
|
|
2334
2413
|
);
|
|
2335
|
-
const handleWebBack =
|
|
2414
|
+
const handleWebBack = useCallback11(async () => {
|
|
2336
2415
|
if (hasWebBackEvent) {
|
|
2337
2416
|
for (const handler of webBackHandlersRef) {
|
|
2338
2417
|
handler();
|
|
@@ -2342,10 +2421,33 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
|
|
|
2342
2421
|
if (hasHistory) {
|
|
2343
2422
|
webViewRef.current?.injectJavaScript("window.history.back();");
|
|
2344
2423
|
} else {
|
|
2345
|
-
|
|
2424
|
+
if (global2.webViewType !== "game") {
|
|
2425
|
+
closeView6();
|
|
2426
|
+
return;
|
|
2427
|
+
}
|
|
2428
|
+
const isConfirmed = await openConfirm({
|
|
2429
|
+
title: `${josa4(global2.brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
|
|
2430
|
+
leftButton: "\uB2EB\uAE30",
|
|
2431
|
+
rightButton: "\uC885\uB8CC\uD558\uAE30",
|
|
2432
|
+
closeOnDimmerClick: true,
|
|
2433
|
+
onEntered: logging.closePopupShow
|
|
2434
|
+
});
|
|
2435
|
+
logging.closePopupCtaClick(isConfirmed);
|
|
2436
|
+
if (isConfirmed) {
|
|
2437
|
+
closeView6();
|
|
2438
|
+
}
|
|
2346
2439
|
}
|
|
2347
|
-
}, [
|
|
2348
|
-
|
|
2440
|
+
}, [
|
|
2441
|
+
global2.webViewType,
|
|
2442
|
+
global2.brandDisplayName,
|
|
2443
|
+
hasHistory,
|
|
2444
|
+
hasWebBackEvent,
|
|
2445
|
+
webBackHandlersRef,
|
|
2446
|
+
logging,
|
|
2447
|
+
openConfirm,
|
|
2448
|
+
webViewRef
|
|
2449
|
+
]);
|
|
2450
|
+
const handleWebHome = useCallback11(() => {
|
|
2349
2451
|
logging.homeButtonClick();
|
|
2350
2452
|
if (homeEvent.hasSubscriptions()) {
|
|
2351
2453
|
homeEvent.emit({});
|
|
@@ -2560,11 +2662,11 @@ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
|
|
|
2560
2662
|
|
|
2561
2663
|
// src/hooks/useWaitForReturnNavigator.tsx
|
|
2562
2664
|
import { useNavigation as useNavigation3, useVisibilityChange } from "@granite-js/react-native";
|
|
2563
|
-
import { useCallback as
|
|
2665
|
+
import { useCallback as useCallback12, useRef as useRef4 } from "react";
|
|
2564
2666
|
function useWaitForReturnNavigator() {
|
|
2565
2667
|
const callbacks = useRef4([]).current;
|
|
2566
2668
|
const navigation = useNavigation3();
|
|
2567
|
-
const startNavigating =
|
|
2669
|
+
const startNavigating = useCallback12(
|
|
2568
2670
|
(route, params) => {
|
|
2569
2671
|
return new Promise((resolve) => {
|
|
2570
2672
|
callbacks.push(resolve);
|
|
@@ -2573,7 +2675,7 @@ function useWaitForReturnNavigator() {
|
|
|
2573
2675
|
},
|
|
2574
2676
|
[callbacks, navigation]
|
|
2575
2677
|
);
|
|
2576
|
-
const handleVisibilityChange =
|
|
2678
|
+
const handleVisibilityChange = useCallback12(
|
|
2577
2679
|
(state) => {
|
|
2578
2680
|
if (state === "visible" && callbacks.length > 0) {
|
|
2579
2681
|
for (const callback of callbacks) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apps-in-toss/framework",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.9.
|
|
4
|
+
"version": "2.9.2",
|
|
5
5
|
"description": "The framework for Apps In Toss",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"typecheck": "tsc --noEmit",
|
|
@@ -55,12 +55,12 @@
|
|
|
55
55
|
"ait": "./bin/ait.js"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@apps-in-toss/analytics": "2.9.
|
|
59
|
-
"@apps-in-toss/cli": "2.9.
|
|
60
|
-
"@apps-in-toss/native-modules": "2.9.
|
|
61
|
-
"@apps-in-toss/plugins": "2.9.
|
|
62
|
-
"@apps-in-toss/types": "2.9.
|
|
63
|
-
"@apps-in-toss/user-scripts": "^2.9.
|
|
58
|
+
"@apps-in-toss/analytics": "2.9.2",
|
|
59
|
+
"@apps-in-toss/cli": "2.9.2",
|
|
60
|
+
"@apps-in-toss/native-modules": "2.9.2",
|
|
61
|
+
"@apps-in-toss/plugins": "2.9.2",
|
|
62
|
+
"@apps-in-toss/types": "2.9.2",
|
|
63
|
+
"@apps-in-toss/user-scripts": "^2.9.2",
|
|
64
64
|
"es-hangul": "^2.3.2"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|