From e5021187e96b78b53203bd95d08d6818aea47d17 Mon Sep 17 00:00:00 2001 From: "Thomas F. K. Jorna" Date: Wed, 14 Jul 2021 15:10:31 +0200 Subject: New Ignite 7.0.6 app --- app/components/header/header.props.ts | 45 +++++++++++++++++++++++++ app/components/header/header.story.tsx | 43 ++++++++++++++++++++++++ app/components/header/header.tsx | 61 ++++++++++++++++++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 app/components/header/header.props.ts create mode 100644 app/components/header/header.story.tsx create mode 100644 app/components/header/header.tsx (limited to 'app/components/header') diff --git a/app/components/header/header.props.ts b/app/components/header/header.props.ts new file mode 100644 index 0000000..07f2c4d --- /dev/null +++ b/app/components/header/header.props.ts @@ -0,0 +1,45 @@ +import { StyleProp, TextStyle, ViewStyle } from "react-native" +import { IconTypes } from "../icon/icons" +import { TxKeyPath } from "../../i18n" + +export interface HeaderProps { + /** + * Main header, e.g. POWERED BY IGNITE + */ + headerTx?: TxKeyPath + + /** + * header non-i18n + */ + headerText?: string + + /** + * Icon that should appear on the left + */ + leftIcon?: IconTypes + + /** + * What happens when you press the left icon + */ + onLeftPress?(): void + + /** + * Icon that should appear on the right + */ + rightIcon?: IconTypes + + /** + * What happens when you press the right icon + */ + onRightPress?(): void + + /** + * Container style overrides. + */ + style?: StyleProp + + /** + * Title style overrides. + */ + titleStyle?: StyleProp +} diff --git a/app/components/header/header.story.tsx b/app/components/header/header.story.tsx new file mode 100644 index 0000000..05093b3 --- /dev/null +++ b/app/components/header/header.story.tsx @@ -0,0 +1,43 @@ +import * as React from "react" +import { View, Alert } from "react-native" +import { storiesOf } from "@storybook/react-native" +import { StoryScreen, Story, UseCase } from "../../../storybook/views" +import { Header } from "./header" +import { color } from "../../theme" + +declare let module + +const VIEWSTYLE = { + flex: 1, + backgroundColor: color.storybookDarkBg, +} + +storiesOf("Header", module) + .addDecorator((fn) => {fn()}) + .add("Behavior", () => ( + + + +
+ + + + +
Alert.alert("left nav")} + /> + + + + +
Alert.alert("right nav")} + /> + + + + )) diff --git a/app/components/header/header.tsx b/app/components/header/header.tsx new file mode 100644 index 0000000..b4a6634 --- /dev/null +++ b/app/components/header/header.tsx @@ -0,0 +1,61 @@ +import React from "react" +import { View, ViewStyle, TextStyle } from "react-native" +import { HeaderProps } from "./header.props" +import { Button } from "../button/button" +import { Text } from "../text/text" +import { Icon } from "../icon/icon" +import { spacing } from "../../theme" +import { translate } from "../../i18n/" + +// static styles +const ROOT: ViewStyle = { + flexDirection: "row", + paddingHorizontal: spacing[4], + alignItems: "center", + paddingTop: spacing[5], + paddingBottom: spacing[5], + justifyContent: "flex-start", +} +const TITLE: TextStyle = { textAlign: "center" } +const TITLE_MIDDLE: ViewStyle = { flex: 1, justifyContent: "center" } +const LEFT: ViewStyle = { width: 32 } +const RIGHT: ViewStyle = { width: 32 } + +/** + * Header that appears on many screens. Will hold navigation buttons and screen title. + */ +export function Header(props: HeaderProps) { + const { + onLeftPress, + onRightPress, + rightIcon, + leftIcon, + headerText, + headerTx, + style, + titleStyle, + } = props + const header = headerText || (headerTx && translate(headerTx)) || "" + + return ( + + {leftIcon ? ( + + ) : ( + + )} + + + + {rightIcon ? ( + + ) : ( + + )} + + ) +} -- cgit v1.2.3