Skip to content

Commit

Permalink
🧑‍💻(lld): add braze generator tools in dev settings (#8026)
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasWerey authored Oct 8, 2024
1 parent 644c671 commit c7bc0d7
Show file tree
Hide file tree
Showing 12 changed files with 474 additions and 4 deletions.
5 changes: 5 additions & 0 deletions .changeset/little-comics-help.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ledger-live-desktop": patch
---

Add mocked generator braze CCs in dev settings
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,13 @@ export const useDefaultSlides = (): {
: currentCard.id &&
dispatch(setDismissedContentCards({ id: currentCard.id, timestamp: Date.now() }));
setCachedContentCards(cachedContentCards.filter(n => n.id !== currentCard.id));
dispatch(setPortfolioCards(portfolioCards.filter(n => n.id !== slide.id)));
}
dispatch(setPortfolioCards(portfolioCards.filter(n => n.id !== slide.id)));
}
}
},
[portfolioCards, cachedContentCards, isTrackedUser, dispatch],
);

const logSlideClick = useCallback(
(cardId: string) => {
const currentCard = cachedContentCards.find(card => card.id === cardId);
Expand Down
10 changes: 8 additions & 2 deletions apps/ledger-live-desktop/src/renderer/hooks/useActionCards.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { openURL } from "~/renderer/linking";
import { track } from "../analytics/segment";
import { trackingEnabledSelector } from "../reducers/settings";
import { setDismissedContentCards } from "../actions/settings";
import { ActionContentCard } from "~/types/dynamicContent";

const useActionCards = () => {
const dispatch = useDispatch();
Expand Down Expand Up @@ -37,9 +38,10 @@ const useActionCards = () => {
: currentCard.id &&
dispatch(setDismissedContentCards({ id: currentCard.id, timestamp: Date.now() }));
setCachedContentCards(cachedContentCards.filter(n => n.id !== currentCard.id));
dispatch(setActionCards(actionCards.filter(n => n.id !== currentCard.id)));
}
if (actionCard) {
dispatch(setActionCards(actionCards.filter((n: ActionContentCard) => n.id !== actionCard?.id)));

if (actionCard && !actionCard.isMock) {
track("contentcard_dismissed", {
contentcard: actionCard.title,
campaign: actionCard.id,
Expand All @@ -53,6 +55,10 @@ const useActionCards = () => {
const currentCard = findCard(cardId);
const actionCard = findActionCard(cardId);

if (actionCard?.isMock) {
link && openURL(link);
}

if (currentCard) {
// For some reason braze won't log the click event if the card url is empty
// Setting it as the card id just to have a dummy non empty value
Expand Down
2 changes: 2 additions & 0 deletions apps/ledger-live-desktop/src/renderer/modals/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import MODAL_HIDE_INSCRIPTION from "LLD/features/Collectibles/Ordinals/component

import MODAL_WALLET_SYNC_DEBUGGER from "./WalletSyncDebugger";
import MODAL_SIMPLEHASH_TOOLS from "./SimpleHashTools";
import MODAL_BRAZE_TOOLS from "../screens/settings/sections/Developer/BrazeTools/Modal";

type GlobalModals = MakeModalsType<GlobalModalData>;

Expand Down Expand Up @@ -65,6 +66,7 @@ const globalModals: GlobalModals = {
MODAL_WALLET_SYNC_DEBUGGER,
MODAL_SIMPLEHASH_TOOLS,
MODAL_HIDE_INSCRIPTION,
MODAL_BRAZE_TOOLS,

// Platform
MODAL_PLATFORM_EXCHANGE_START,
Expand Down
1 change: 1 addition & 0 deletions apps/ledger-live-desktop/src/renderer/modals/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export type GlobalModalData = {
MODAL_LOTTIE_DEBUGGER: undefined;
MODAL_WALLET_SYNC_DEBUGGER: undefined;
MODAL_SIMPLEHASH_TOOLS: undefined;
MODAL_BRAZE_TOOLS: undefined;
MODAL_CREATE_LOCAL_APP: {
manifest?: LiveAppManifest;
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import { useDispatch, useSelector } from "react-redux";
import {
setPortfolioCards,
setActionCards,
setNotificationsCards,
} from "~/renderer/actions/dynamicContent";
import {
portfolioContentCardSelector,
actionContentCardSelector,
notificationsContentCardSelector,
} from "~/renderer/reducers/dynamicContent";
import {
PortfolioContentCard,
ActionContentCard,
NotificationContentCard,
LocationContentCard,
} from "~/types/dynamicContent";

const generateNewPortfolioCard = (
title: string,
description: string,
image: string,
order?: number,
url?: string,
): PortfolioContentCard => ({
id: String(Date.now()),
title,
description,
location: LocationContentCard.Portfolio,
image,
created: new Date(),
onClickOnSlide: () => {},
order,
isMock: true,
url,
});

const generateNewActionCard = (
title: string,
description: string,
image: string,
mainCta: string,
link: string,
secondaryCta: string,
order?: number,
): ActionContentCard => ({
id: String(Date.now()),
title,
description,
location: LocationContentCard.Action,
image,
mainCta,
link,
secondaryCta,
created: new Date(),
order,
isMock: true,
});

const generateNewNotificationCard = (
title: string,
description: string,
cta: string,
viewed: boolean,
url?: string,
path?: string,
order?: number,
): NotificationContentCard => ({
id: String(Date.now()),
title,
description,
location: LocationContentCard.NotificationCenter,
cta,
viewed,
url,
path,
created: new Date(),
order,
isMock: true,
});

export const useGenerateLocalBraze = () => {
const dispatch = useDispatch();

const portfolioCards = useSelector(portfolioContentCardSelector);
const actionCards = useSelector(actionContentCardSelector);
const notificationCards = useSelector(notificationsContentCardSelector);

const addLocalPortfolioCard = (
title: string,
description: string,
image: string,
order?: number,
url?: string,
) => {
const newCard = generateNewPortfolioCard(title, description, image, order, url);
dispatch(setPortfolioCards([...portfolioCards, newCard]));
};

const addLocalActionCard = (
title: string,
description: string,
image: string,
mainCta: string,
link: string,
secondaryCta: string,
order?: number,
) => {
const newCard = generateNewActionCard(
title,
description,
image,
mainCta,
link,
secondaryCta,
order,
);
dispatch(setActionCards([...actionCards, newCard]));
};

const addLocalNotificationCard = (
title: string,
description: string,
cta: string,
viewed: boolean,
url?: string,
path?: string,
order?: number,
) => {
const newCard = generateNewNotificationCard(title, description, cta, viewed, url, path, order);
dispatch(setNotificationsCards([...notificationCards, newCard]));
};

const dismissLocalCards = () => {
dispatch(setPortfolioCards([]));
dispatch(setActionCards([]));
dispatch(setNotificationsCards([]));
};

return { addLocalPortfolioCard, addLocalActionCard, addLocalNotificationCard, dismissLocalCards };
};
Loading

0 comments on commit c7bc0d7

Please sign in to comment.