Files
discord-decomp/modules/quests/native/QuestContextMenu.tsx
T
2026-11-01 12:12:55 +02:00

195 lines
8.7 KiB
TypeScript

// Metro module 14176 (f14177).
import _objectWithoutProperties from "../../../_bundle/_objectWithoutProperties";
import * as Module19 from "react";
import { useCallback, useMemo } from "react";
import QuestStore from "../QuestStore";
import { LinkingTypes } from "../../../Constants";
import { IconButton } from "../../../design/components/Button/native/IconButton.native";
import Module8964 from "../../../_bundle/Module8964";
import { intl, t } from "../../../intl/index.native";
import { useQuestPreviewActions, useShouldShowQuestPreviewOverrides } from "../hooks/QuestHooks";
import { useStateFromStores } from "../../../_bundle/Module589";
import { QuestContent } from "../QuestTypes";
import { useTrackQuestContentClickedWithImpression } from "../lib/analytics/AnalyticsHooks";
import { useQuestImpressionId } from "../lib/analytics/ContentImpressionTrackerHooks";
import { getExternalCtaLabel, getCtaLink, copyShareLink } from "../utils/QuestCopyUtils";
import * as _QuestUtils from "../utils/QuestUtils";
import { isIOS } from "../../../utils/PlatformUtils";
import parseURL from "../../../utils/native/parseURL";
import { dismissOverlayScreens } from "./QuestUtils.native";
import { openGameLinkDirectly } from "../utils/QuestPlatformUtils";
import { QuestContentCTA } from "../lib/analytics/AnalyticsTypes";
import { AccessibilityAnnouncer } from "../../../_bundle/Module3902";
import QuestDisclosureModalActionCreators from "./QuestDisclosureModal/QuestDisclosureModalActionCreators";
import { manuallyStartConsoleQuest, manualStopConsoleQuest } from "../QuestActionCreators";
import { LinkExternalSmallIcon } from "../../../design/components/Icon/native/redesign/generated/LinkExternalSmallIcon";
import Module14177 from "../../../_bundle/Module14177";
import { CopyIcon } from "../../../design/components/Icon/native/redesign/generated/CopyIcon";
import { isConsoleQuest } from "../utils/QuestTaskUtils";
import { copy } from "../../../utils/ClipboardUtils.native";
import { CheckmarkLargeIcon } from "../../../design/components/Icon/native/redesign/generated/CheckmarkLargeIcon";
import { shouldMigrateToAdAnalyticsInterface, AdAnalyticsInterfaceExperimentStep } from "../experiments/AdAnalyticsInterfaceExperiment";
import { captureAdUserAction } from "../../ads/analytics/captureAdUserAction";
import { AdUserActionType } from "../../ads/analytics/captureAdUserActionTypes";
import { AdCreativeType } from "../../../_bundle/Module6013";
import { ContextMenu } from "../../../design/components/ContextMenu/native/ContextMenu.native";
let _excluded;
const renderDefaultButton = function renderDefaultButton(a0) {
return <IconButton ref={a0.ref} {..._objectWithoutProperties(a0, _excluded)} icon={Module8964} variant="secondary" accessibilityLabel={intl.string(t.CAgr1w)} accessibilityHint={intl.string(t.hd0b7t)} />;
};
_excluded = ["ref"];
const r29 = Module19.memo(function(a0) {
let children = a0.children;
if (children === void 0) {
children = renderDefaultButton;
}
let trackQuestContentClickedWithImpression, questImpressionId, externalCtaLabel, isShareableQuest, callback, callback2, callback3, callback4, callback5, memo, memo2, memo3, shouldShowQuestPreviewOverrides, memo4;
const quest = a0.quest;
let showShareLink = a0.showShareLink;
if (showShareLink === void 0) {
showShareLink = false;
}
let additionalItems = a0.additionalItems;
if (additionalItems === void 0) {
additionalItems = [];
}
let c21007_1 = additionalItems;
const sourceQuestContent = a0.sourceQuestContent;
trackQuestContentClickedWithImpression = void 0;
questImpressionId = void 0;
externalCtaLabel = void 0;
isShareableQuest = void 0;
callback = void 0;
callback2 = void 0;
callback3 = void 0;
callback4 = void 0;
callback5 = void 0;
memo = void 0;
memo2 = void 0;
memo3 = void 0;
shouldShowQuestPreviewOverrides = void 0;
memo4 = void 0;
const questPreviewActions = useQuestPreviewActions(quest.id);
const { handleComplete, handleProgress, handleResetDismissibilityClick, handleResetStatusClick, handleOverridePreviewClick, handleResetHasBeenSeenClick } = questPreviewActions;
const stateFromStores = useStateFromStores([QuestStore], () => QuestStore.getQuestPreviewOverride(QuestContent.QUEST_BAR_MOBILE), []);
trackQuestContentClickedWithImpression = useTrackQuestContentClickedWithImpression();
questImpressionId = useQuestImpressionId();
externalCtaLabel = getExternalCtaLabel(quest);
if (showShareLink) {
showShareLink = _QuestUtils.isShareableQuest(quest.config);
}
isShareableQuest = showShareLink;
callback = useCallback(() => {
if (isIOS() && parseURL(getCtaLink(quest.config)).payload.type === LinkingTypes.INVITE) {
dismissOverlayScreens();
}
openGameLinkDirectly(quest, {
content: QuestContent.QUEST_HOME_MOBILE,
ctaContent: QuestContentCTA.CONTEXT_MENU_OPEN_GAME_LINK,
impressionId: questImpressionId,
sourceQuestContent
});
}, [quest, questImpressionId, sourceQuestContent]);
callback2 = useCallback(() => {
if (isShareableQuest) {
copyShareLink(quest.id, {
content: QuestContent.QUEST_HOME_MOBILE,
ctaContent: QuestContentCTA.CONTEXT_MENU_COPY_LINK,
impressionId: questImpressionId,
sourceQuestContent
});
AccessibilityAnnouncer.announce(intl.string(t["+5kSoW"]));
}
}, [isShareableQuest, quest.id, questImpressionId, sourceQuestContent]);
callback3 = useCallback(() => {
QuestDisclosureModalActionCreators.showModal({
quest,
isTargetedDisclosure: false,
trackingCtx: {
content: QuestContent.QUEST_HOME_MOBILE,
ctaContent: QuestContentCTA.CONTEXT_MENU_OPEN_DISCLOSURE,
sourceQuestContent
}
});
}, [quest, sourceQuestContent]);
callback4 = useCallback(() => manuallyStartConsoleQuest(quest.id, true), [quest.id]);
callback5 = useCallback(() => manualStopConsoleQuest(quest.id), [quest.id]);
memo = useMemo(() => [{
label: externalCtaLabel,
IconComponent: LinkExternalSmallIcon,
action: callback,
accessibilityRole: "link"
}, {
label: intl.string(t.GcsZKJ),
action: callback3,
iconSource: Module14177
}, ...isShareableQuest ? [{
label: intl.string(t.WqhZss),
IconComponent: CopyIcon,
action: callback2
}] : []], [externalCtaLabel, callback, callback3, isShareableQuest, callback2]);
memo2 = useMemo(() => isConsoleQuest(quest) ? [{
label: "Start Console Heartbeat",
action: callback4
}, {
label: "Stop Console Heartbeat",
action: callback5
}] : [], [quest, callback4, callback5]);
memo3 = useMemo(() => [{
label: "Set Random Quest Progress",
action: () => handleProgress(0.9 * Math.random() + 0.03)
}, {
label: "Complete Quest",
action: handleComplete
}, {
label: "Reset Quest",
action: handleResetStatusClick
}, {
label: "Reset Dismissibility",
action: handleResetDismissibilityClick
}, {
label: "Reset Quest Seen",
action: handleResetHasBeenSeenClick
}, ...memo2, {
label: "Copy Quest ID",
action: () => copy(quest.id)
}], [memo2, handleComplete, handleResetDismissibilityClick, handleProgress, handleResetStatusClick, handleResetHasBeenSeenClick, quest.id]);
shouldShowQuestPreviewOverrides = useShouldShowQuestPreviewOverrides(quest);
const r90 = [handleOverridePreviewClick, quest.id, ,];
const id = stateFromStores?.id;
const r93 = () => ({
label: "Show in Quest Bar",
action: () => handleOverridePreviewClick(QuestContent.QUEST_BAR_MOBILE),
IconComponent: stateFromStores?.id === quest.id ? CheckmarkLargeIcon : void 0
});
r90[2] = id;
memo4 = useMemo(r93, r90);
return <ContextMenu items={useMemo(() => {
const r5 = c21007_1 != null ? [memo, c21007_1] : [memo];
if (shouldShowQuestPreviewOverrides) {
r5.push([memo4]);
}
return quest.preview ? [...r5, memo3] : r5;
}, [memo, memo3, quest.preview, shouldShowQuestPreviewOverrides, memo4, additionalItems])} onOpen={useCallback(() => {
if (shouldMigrateToAdAnalyticsInterface(AdAnalyticsInterfaceExperimentStep.STEP_2_CLICKED_INTERNAL, "quest_context_menu")) {
captureAdUserAction({
type: AdUserActionType.CLICK_INTERNAL,
adCreativeType: AdCreativeType.QUEST,
adCreativeId: quest.id,
questContentCTA: QuestContentCTA.OPEN_CONTEXT_MENU,
surfaceId: QuestContent.QUEST_HOME_MOBILE,
sourceQuestContent,
impressionId: questImpressionId
});
} else {
trackQuestContentClickedWithImpression({
questId: quest.id,
questContent: QuestContent.QUEST_HOME_MOBILE,
questContentCTA: QuestContentCTA.OPEN_CONTEXT_MENU,
sourceQuestContent
});
}
}, [quest.id, trackQuestContentClickedWithImpression, questImpressionId, sourceQuestContent])} triggerOnTap>{children}</ContextMenu>;
});
export default r29;