diff --git a/App/common/interface/components/TooltipData.ts b/App/common/interface/components/TooltipData.ts new file mode 100644 index 0000000000..ad889c8d7f --- /dev/null +++ b/App/common/interface/components/TooltipData.ts @@ -0,0 +1,18 @@ +import { ViewStyle } from "react-native"; +import { TextFieldData } from "../widgets/widgetData/TitleWidgetData"; + +export interface TooltipData { + title?: TextFieldData; + style?: TooltipStyle; +} + +export interface TooltipStyle { + containerStyle?: ViewStyle; + contentBoxStyle?: ViewStyle; + tooltipSize?: number; +} + +export interface TooltipProps { + children: React.ReactNode; + tooltipStyle?: TooltipStyle; +} diff --git a/App/common/interface/widgets/widgetData/TitleWidgetData.ts b/App/common/interface/widgets/widgetData/TitleWidgetData.ts index 3f23281ebf..e654d46d23 100644 --- a/App/common/interface/widgets/widgetData/TitleWidgetData.ts +++ b/App/common/interface/widgets/widgetData/TitleWidgetData.ts @@ -1,7 +1,7 @@ import { ImageStyle, TextStyle, ViewStyle } from "react-native"; import { CtaData } from "../.."; -import { GenericWidgetData } from "../Widget"; import { GenericActionPayload } from "../../../actions/GenericAction"; +import { GenericWidgetData } from "../Widget"; export interface TitleWidgetData extends GenericWidgetData { title?: TextFieldData; @@ -12,12 +12,14 @@ export interface TitleWidgetData extends GenericWidgetData { export interface TextFieldData { text: string; + ellipsizeMode?: "head" | "middle" | "tail" | "clip"; + numberOfLines?: number; textStyle?: TextStyle; substringStyles?: SubstringStyle[]; textDrawableData?: TextDrawableData; cta?: CtaData; - actions?: GenericActionPayload, - viewStyle?: ViewStyle + actions?: GenericActionPayload; + viewStyle?: ViewStyle; } export interface SubstringStyle { @@ -49,4 +51,4 @@ export interface LottieFieldData { lottieStyle?: ImageStyle; cta?: CtaData; delayAnimationBy?: number; -} \ No newline at end of file +} diff --git a/App/common/interface/widgets/widgetData/TitleWithListWidgetData.ts b/App/common/interface/widgets/widgetData/TitleWithListWidgetData.ts index d40b9412d2..873f5e28de 100644 --- a/App/common/interface/widgets/widgetData/TitleWithListWidgetData.ts +++ b/App/common/interface/widgets/widgetData/TitleWithListWidgetData.ts @@ -1,20 +1,22 @@ -import { TextStyle, ViewStyle } from "react-native"; +import { ViewStyle } from "react-native"; +import { AnalyticsEvent } from "../.."; +import { TooltipData } from "../../components/TooltipData"; import { GenericWidgetData } from "../Widget"; import { TextFieldData } from "./TitleWidgetData"; -import { AnalyticsEvent } from "../.."; export interface TitleWithListWidgetData extends GenericWidgetData { title?: TextFieldData; rightTitle?: TextFieldData; listData?: ListItem[]; - listStyle?: ViewStyle + listFooter?: ListItem; + listStyle?: ViewStyle; + tooltip?: TooltipData; } export interface ListItem extends GenericWidgetData { id: string; title?: TextFieldData; rightTitle?: TextFieldData; - onViewEvent?: AnalyticsEvent + itemStyle?: ViewStyle; + onViewEvent?: AnalyticsEvent; } - - diff --git a/components/reusable/tooltip/Tooltip.tsx b/components/reusable/tooltip/Tooltip.tsx new file mode 100644 index 0000000000..1ef41c7354 --- /dev/null +++ b/components/reusable/tooltip/Tooltip.tsx @@ -0,0 +1,53 @@ +import React from "react"; +import { View } from "react-native"; +import { TooltipProps } from "../../../App/common/interface/components/TooltipData"; +import styles from "./TooltipStyle"; + +const Tooltip = ({ children, tooltipStyle }: TooltipProps) => { + const { + containerStyle, + contentBoxStyle, + tooltipSize = 6, + } = tooltipStyle || {}; + + const borderColor = contentBoxStyle?.borderColor || "black"; + const backgroundColor = contentBoxStyle?.backgroundColor || "black"; + const borderWidth = contentBoxStyle?.borderWidth || 0; + return ( + + + + + + + {children} + + + ); +}; + +export default Tooltip; diff --git a/components/reusable/tooltip/TooltipStyle.ts b/components/reusable/tooltip/TooltipStyle.ts new file mode 100644 index 0000000000..c25d5bccd9 --- /dev/null +++ b/components/reusable/tooltip/TooltipStyle.ts @@ -0,0 +1,25 @@ +import { StyleSheet } from "react-native"; + +const styles = StyleSheet.create({ + container: { + flexDirection: "column", + alignItems: "center", + }, + box: { + position: "relative", + }, + tooltipBorder: { + borderLeftColor: "transparent", + borderRightColor: "transparent", + borderStyle: "solid", + }, + tooltipInner: { + position: "absolute", + borderLeftColor: "transparent", + borderRightColor: "transparent", + borderStyle: "solid", + zIndex: 2, + }, +}); + +export default styles; \ No newline at end of file diff --git a/components/widgets/styled-text/StyledText.tsx b/components/widgets/styled-text/StyledText.tsx index 0b9b2ea676..a56e83730e 100644 --- a/components/widgets/styled-text/StyledText.tsx +++ b/components/widgets/styled-text/StyledText.tsx @@ -1,5 +1,6 @@ import React from "react"; -import { View, Text, StyleSheet, Image } from "react-native"; +import { View } from "react-native"; +import Animated from "react-native-reanimated"; import { ImageFieldData, LottieFieldData, @@ -7,9 +8,8 @@ import { TextFieldData, } from "../../../App/common/interface/widgets/widgetData/TitleWidgetData"; import { StyledImage } from "../../StyledImage"; -import styles from "./StyledTextComponentStyle"; import { StyledLottie } from "../styled-lottie/StyledLottie"; -import Animated from "react-native-reanimated"; +import styles from "./StyledTextComponentStyle"; export const StyledText = ({ textFieldData, @@ -60,7 +60,11 @@ export const StyledText = ({ {leftImage && } {leftLottie && } - + {substringStyleMap.length !== 0 ? substringStyleMap.map((substringStyle, index) => { return ( diff --git a/components/widgets/title-with-list-widget/TitleWithListWidget.tsx b/components/widgets/title-with-list-widget/TitleWithListWidget.tsx index dda5e32edb..09c61a20b5 100644 --- a/components/widgets/title-with-list-widget/TitleWithListWidget.tsx +++ b/components/widgets/title-with-list-widget/TitleWithListWidget.tsx @@ -1,16 +1,17 @@ +import throttle from "lodash/throttle"; +import { useCallback, useEffect } from "react"; import { FlatList, View, ViewStyle } from "react-native"; import { GenericActionPayload } from "../../../App/common/actions/GenericAction"; +import { sendAsAnalyticsEvent } from "../../../App/common/hooks/useAnalyticsEvent"; import { CtaData } from "../../../App/common/interface"; import { ListItem, TitleWithListWidgetData, } from "../../../App/common/interface/widgets/widgetData/TitleWithListWidgetData"; +import Tooltip from "../../reusable/tooltip/Tooltip"; +import { StyledText } from "../styled-text/StyledText"; import TitleWidget from "../title-widget/TitleWidget"; import styles from "./TitleWithListWidgetStyle"; -import { useEffect } from "react"; -import { sendAsAnalyticsEvent } from "../../../App/common/hooks/useAnalyticsEvent"; -import { useCallback } from "react"; -import throttle from "lodash/throttle"; const ListItemComponent = ({ item, @@ -32,6 +33,22 @@ const ListItemComponent = ({ ); }; +const ListFooterItemComponent = ({ + item, + handleClick, +}: { + item: ListItem; + handleClick?: (cta: CtaData) => void; +}) => { + return ( + + ); +}; + const TitleWithListWidget = ({ widgetData, widgetStyle, @@ -73,7 +90,18 @@ const TitleWithListWidget = ({ )} keyExtractor={(item, index) => item.id || index.toString()} /> + {widgetData.listFooter?.title?.text && ( + + )} + {widgetData.tooltip?.title && ( + + + + )} ); }; diff --git a/components/widgets/title-with-list-widget/TitleWithListWidgetStyle.ts b/components/widgets/title-with-list-widget/TitleWithListWidgetStyle.ts index a902a180c3..f740ef067a 100644 --- a/components/widgets/title-with-list-widget/TitleWithListWidgetStyle.ts +++ b/components/widgets/title-with-list-widget/TitleWithListWidgetStyle.ts @@ -24,6 +24,16 @@ const styles = StyleSheet.create({ justifyContent: "space-between", paddingVertical: 10, }, + listFooterContainer: { + marginHorizontal: -16, + marginTop: 6, + marginBottom: -14, + borderBottomStartRadius: 3, + borderBottomEndRadius: 3, + paddingHorizontal: 16, + flexDirection: "row", + justifyContent: "space-between", + }, }); -export default styles; \ No newline at end of file +export default styles; diff --git a/package.json b/package.json index 45f3751d4e..6d54cf55d8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "NaviApp", - "version": "0.1.1", - "versionCode": 2, + "version": "0.1.2", + "versionCode": 3, "private": true, "scripts": { "start": "yarn react-native start",