UNPKG

@gaddario98/react-native-tabs

Version:
1 lines 6.66 kB
{"version":3,"file":"index.mjs","sources":["../../Tabs.tsx"],"sourcesContent":["import { HrefObject, Tabs } from \"expo-router\";\nimport { useTranslation } from \"react-i18next\";\nimport { Ionicons } from \"@expo/vector-icons\";\nimport { BottomTabHeaderProps } from \"@react-navigation/bottom-tabs\";\nimport {\n Header,\n useBreakpoint,\n useThemeColors,\n} from \"@gaddario98/react-native-ui\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { tabLabel } from \"@gaddario98/react-native-ui\";\nimport { ViewStyle } from \"react-native\";\nimport { ComponentProps } from \"react\";\n\nconst TabLayout: React.FC<{\n headerProps?: ComponentProps<typeof Header>;\n tabs: Array<{\n name: string;\n icon?: ComponentProps<typeof Ionicons>[\"name\"];\n title?: string;\n initialParams?: Record<string, any>;\n href?: string | HrefObject; // Aggiunto per supportare i link\n }>;\n ns?: string;\n initialRouteName?: string;\n}> = ({ headerProps, tabs, ns = \"tabs\", initialRouteName }) => {\n const { t } = useTranslation(ns);\n const colors = useThemeColors();\n const { valueWithBreakpoint: mobileView } = useBreakpoint(\n true,\n true,\n false,\n false\n );\n\n return (\n <Tabs\n initialRouteName={initialRouteName ?? tabs[0].name}\n screenOptions={{\n tabBarHideOnKeyboard: true,\n // Se siamo sul web, non usiamo il componente custom Header\n ...(!mobileView\n ? {\n headerShown: false,\n // Stile modificato per apparire come un header moderno\n tabBarStyle: {\n backgroundColor: colors.primary,\n height: 65,\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n borderTopWidth: 0,\n borderBottomWidth: 0,\n },\n tabBarLabelStyle: [tabLabel, { textAlign: \"left\" }],\n tabBarItemStyle: {\n padding: 10,\n minWidth: \"auto\" as ViewStyle[\"minWidth\"],\n },\n tabBarPosition: \"top\",\n tabBarLabelPosition: \"beside-icon\",\n }\n : {\n header: (props: BottomTabHeaderProps) => (\n <TabsHeader {...props} headerProps={headerProps} />\n ),\n tabBarStyle: {\n backgroundColor: colors.primary,\n height: 65,\n justifyContent: \"flex-end\",\n borderTopWidth: 0,\n borderBottomWidth: 0,\n },\n tabBarLabelPosition: \"below-icon\",\n tabBarItemStyle: {\n paddingTop: 5,\n },\n }),\n tabBarActiveTintColor: colors.secondary,\n tabBarInactiveTintColor: colors.onSurfaceVariant,\n }}\n >\n {tabs.map(({ name, icon, title, initialParams, href }) => (\n <Tabs.Screen\n key={name}\n name={name}\n options={{\n title: title ? t(title) : \"\",\n tabBarIcon: icon\n ? ({ color }) => <Ionicons name={icon} color={color} size={22} />\n : undefined,\n href,\n tabBarItemStyle: {\n paddingTop: 5,\n },\n }}\n initialParams={initialParams}\n /* listeners={{\n tabPress: () => {\n if (Platform.OS === \"web\" && window.location.pathname !== \"/\") {\n router.push(\"/\");\n }\n },\n }}*/\n />\n ))}\n </Tabs>\n );\n};\n\nconst TabsHeader: React.FC<\n BottomTabHeaderProps & { headerProps?: ComponentProps<typeof Header> }\n> = ({ options, headerProps }) => {\n const insets = useSafeAreaInsets();\n return (\n <Header\n backgroundColor=\"primary\"\n {...headerProps}\n title={options.title ?? headerProps?.title ?? \"\"}\n style={{\n marginTop: insets.top,\n ...headerProps?.style,\n }}\n hiddenLeftAction\n />\n );\n};\n\nexport default TabLayout;\n"],"names":["_jsx"],"mappings":"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"}