Skip to content

Commit 1115268

Browse files
committed
feat: refactor IterableEmbedded components to utilize useEmbeddedView hook
1 parent 383e308 commit 1115268

13 files changed

Lines changed: 81 additions & 94 deletions

File tree

src/embedded/components/IterableEmbeddedBanner/IterableEmbeddedBanner.tsx

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { useCallback, useMemo } from 'react';
21
import {
32
Image,
43
Text,
@@ -8,13 +7,9 @@ import {
87
type ViewStyle,
98
} from 'react-native';
109

11-
import { Iterable } from '../../../core/classes/Iterable';
12-
import type { IterableEmbeddedMessageElementsButton } from '../../classes/IterableEmbeddedMessageElementsButton';
1310
import { IterableEmbeddedViewType } from '../../enums';
14-
import type { IterableEmbeddedComponentProps } from '../IterableEmbeddedViewProps';
15-
import { getMedia } from '../utils/getMedia';
16-
import { getStyles } from '../utils/getStyles';
17-
import { getUrlFromButton } from '../utils/getUrlFromButton';
11+
import { useEmbeddedView } from '../../hooks/useEmbeddedView';
12+
import type { IterableEmbeddedComponentProps } from '../../types/IterableEmbeddedViewProps';
1813
import { styles } from './IterableEmbeddedBanner.styles';
1914

2015
/**
@@ -26,22 +21,9 @@ export const IterableEmbeddedBanner = ({
2621
message,
2722
onButtonClick = () => {},
2823
}: IterableEmbeddedComponentProps) => {
29-
const parsedStyles = useMemo(() => {
30-
return getStyles(IterableEmbeddedViewType.Banner, config);
31-
}, [config]);
32-
const media = useMemo(() => {
33-
return getMedia(IterableEmbeddedViewType.Banner, message);
34-
}, [message]);
35-
const handleButtonClick = useCallback(
36-
(button: IterableEmbeddedMessageElementsButton) => {
37-
onButtonClick(button);
38-
Iterable.embeddedManager.handleClick(
39-
message,
40-
button.id,
41-
getUrlFromButton(button) ?? null
42-
);
43-
},
44-
[onButtonClick, message]
24+
const { parsedStyles, media, handleButtonClick } = useEmbeddedView(
25+
IterableEmbeddedViewType.Banner,
26+
{ message, config, onButtonClick }
4527
);
4628

4729
const buttons = message.elements?.buttons ?? [];

src/embedded/components/IterableEmbeddedCard/IterableEmbeddedCard.tsx

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { useCallback, useMemo } from 'react';
21
import {
32
Image,
43
Text,
@@ -8,39 +7,21 @@ import {
87
type ViewStyle,
98
} from 'react-native';
109

11-
import { Iterable } from '../../../core/classes/Iterable';
12-
import type { IterableEmbeddedMessageElementsButton } from '../../classes/IterableEmbeddedMessageElementsButton';
1310
import { IterableEmbeddedViewType } from '../../enums';
14-
import type { IterableEmbeddedComponentProps } from '../IterableEmbeddedViewProps';
15-
import { getMedia } from '../utils/getMedia';
16-
import { getStyles } from '../utils/getStyles';
17-
import { getUrlFromButton } from '../utils/getUrlFromButton';
11+
import type { IterableEmbeddedComponentProps } from '../../types/IterableEmbeddedViewProps';
1812
import { styles } from './IterableEmbeddedCard.styles';
13+
import { useEmbeddedView } from '../../hooks/useEmbeddedView';
1914

2015
export const IterableEmbeddedCard = ({
2116
config,
2217
message,
2318
onButtonClick = () => {},
2419
}: IterableEmbeddedComponentProps) => {
25-
const parsedStyles = useMemo(() => {
26-
return getStyles(IterableEmbeddedViewType.Card, config);
27-
}, [config]);
28-
const media = useMemo(() => {
29-
return getMedia(IterableEmbeddedViewType.Card, message);
30-
}, [message]);
31-
const handleButtonClick = useCallback(
32-
(button: IterableEmbeddedMessageElementsButton) => {
33-
onButtonClick(button);
34-
Iterable.embeddedManager.handleClick(
35-
message,
36-
button.id,
37-
getUrlFromButton(button) ?? null
38-
);
39-
},
40-
[onButtonClick, message]
20+
const { parsedStyles, media, handleButtonClick } = useEmbeddedView(
21+
IterableEmbeddedViewType.Card,
22+
{ message, config, onButtonClick }
4123
);
42-
43-
const buttons = message.elements?.buttons ?? [];
24+
const buttons = message?.elements?.buttons ?? [];
4425

4526
return (
4627
<View

src/embedded/components/IterableEmbeddedNotification/IterableEmbeddedNotification.tsx

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,19 @@ import {
66
type ViewStyle,
77
} from 'react-native';
88

9-
import { useCallback, useMemo } from 'react';
10-
import { Iterable } from '../../../core/classes/Iterable';
11-
import type { IterableEmbeddedMessageElementsButton } from '../../classes/IterableEmbeddedMessageElementsButton';
12-
import { IterableEmbeddedViewType } from '../../enums';
13-
import type { IterableEmbeddedComponentProps } from '../IterableEmbeddedViewProps';
14-
import { getStyles } from '../utils/getStyles';
15-
import { getUrlFromButton } from '../utils/getUrlFromButton';
9+
import { IterableEmbeddedViewType } from '../../enums/IterableEmbeddedViewType';
10+
import { useEmbeddedView } from '../../hooks/useEmbeddedView';
11+
import type { IterableEmbeddedComponentProps } from '../../types/IterableEmbeddedViewProps';
1612
import { styles } from './IterableEmbeddedNotification.styles';
1713

1814
export const IterableEmbeddedNotification = ({
1915
config,
2016
message,
2117
onButtonClick = () => {},
2218
}: IterableEmbeddedComponentProps) => {
23-
const parsedStyles = useMemo(() => {
24-
return getStyles(IterableEmbeddedViewType.Notification, config);
25-
}, [config]);
26-
27-
const handleButtonClick = useCallback(
28-
(button: IterableEmbeddedMessageElementsButton) => {
29-
onButtonClick(button);
30-
Iterable.embeddedManager.handleClick(
31-
message,
32-
button.id,
33-
getUrlFromButton(button) ?? null
34-
);
35-
},
36-
[onButtonClick, message]
19+
const { parsedStyles, handleButtonClick } = useEmbeddedView(
20+
IterableEmbeddedViewType.Notification,
21+
{ message, config, onButtonClick }
3722
);
3823

3924
const buttons = message.elements?.buttons ?? [];

src/embedded/components/IterableEmbeddedView/IterableEmbeddedView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { IterableEmbeddedViewType } from '../../enums';
55
import { IterableEmbeddedBanner } from '../IterableEmbeddedBanner';
66
import { IterableEmbeddedCard } from '../IterableEmbeddedCard';
77
import { IterableEmbeddedNotification } from '../IterableEmbeddedNotification';
8-
import type { IterableEmbeddedComponentProps } from '../IterableEmbeddedViewProps';
8+
import type { IterableEmbeddedComponentProps } from '../../types/IterableEmbeddedViewProps';
99

1010
interface IterableEmbeddedViewProps extends IterableEmbeddedComponentProps {
1111
viewType: IterableEmbeddedViewType;

src/embedded/components/utils/getMedia.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { useCallback, useMemo } from 'react';
2+
import { Iterable } from '../../core/classes/Iterable';
3+
import type { IterableEmbeddedMessageElementsButton } from '../classes/IterableEmbeddedMessageElementsButton';
4+
import { IterableEmbeddedViewType } from '../enums';
5+
import type { IterableEmbeddedComponentProps } from '../types/IterableEmbeddedViewProps';
6+
import { getMedia } from '../utils/getMedia';
7+
import { getStyles } from '../utils/getStyles';
8+
import { getUrlFromButton } from '../utils/getUrlFromButton';
9+
10+
export const useEmbeddedView = (
11+
viewType: IterableEmbeddedViewType,
12+
{ message, config, onButtonClick = () => {} }: IterableEmbeddedComponentProps
13+
) => {
14+
const parsedStyles = useMemo(() => {
15+
return getStyles(viewType, config);
16+
}, [viewType, config]);
17+
18+
const media = useMemo(() => {
19+
return getMedia(viewType, message);
20+
}, [viewType, message]);
21+
22+
const handleButtonClick = useCallback(
23+
(button: IterableEmbeddedMessageElementsButton) => {
24+
onButtonClick(button);
25+
Iterable.embeddedManager.handleClick(
26+
message,
27+
button.id,
28+
getUrlFromButton(button) ?? null
29+
);
30+
},
31+
[onButtonClick, message]
32+
);
33+
34+
return {
35+
parsedStyles,
36+
media,
37+
handleButtonClick,
38+
};
39+
};
File renamed without changes.

src/embedded/components/utils/getButtons.ts renamed to src/embedded/utils/getButtons.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import type { IterableEmbeddedMessage } from '../../classes/IterableEmbeddedMessage';
2-
import type { IterableEmbeddedMessageElementsButton } from '../../classes/IterableEmbeddedMessageElementsButton';
3-
import type { IterableEmbeddedViewButtonInfo } from '../../types/IterableEmbeddedViewButtonInfo';
1+
import type { IterableEmbeddedMessage } from '../classes/IterableEmbeddedMessage';
2+
import type { IterableEmbeddedMessageElementsButton } from '../classes/IterableEmbeddedMessageElementsButton';
3+
import type { IterableEmbeddedViewButtonInfo } from '../types/IterableEmbeddedViewButtonInfo';
44

55
export const getButtons = (message: IterableEmbeddedMessage) => {
66
const buttons = message.elements?.buttons ?? null;

src/embedded/components/utils/getDefaultActionUrl.ts renamed to src/embedded/utils/getDefaultActionUrl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { IterableEmbeddedMessage } from '../../classes/IterableEmbeddedMessage';
1+
import type { IterableEmbeddedMessage } from '../classes/IterableEmbeddedMessage';
22

33
export const getDefaultActionUrl = (message: IterableEmbeddedMessage) => {
44
const defaultAction = message.elements?.defaultAction ?? null;

src/embedded/components/utils/getDefaultStyle.ts renamed to src/embedded/utils/getDefaultStyle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IterableEmbeddedViewType } from '../../enums/IterableEmbeddedViewType';
1+
import { IterableEmbeddedViewType } from '../enums';
22

33
export const getDefaultStyle = (
44
viewType: IterableEmbeddedViewType,

0 commit comments

Comments
 (0)