feat: add about page
This commit is contained in:
parent
49dbd18606
commit
651e8e2633
@ -8,7 +8,7 @@ const TabLayout: React.FC = () => {
|
||||
const { user } = useAuthentication()
|
||||
|
||||
if (user == null) {
|
||||
return <Redirect href="/authentication/login" />
|
||||
return <Redirect href="/authentication/about" />
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -1,7 +1,6 @@
|
||||
import { Text } from "react-native"
|
||||
import { Button } from "react-native-paper"
|
||||
import { SafeAreaView } from "react-native-safe-area-context"
|
||||
|
||||
import { About } from "@/presentation/react-native/components/About"
|
||||
import { useAuthentication } from "@/presentation/react/contexts/Authentication"
|
||||
|
||||
const SettingsPage: React.FC = () => {
|
||||
@ -12,26 +11,19 @@ const SettingsPage: React.FC = () => {
|
||||
}
|
||||
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={[
|
||||
{
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Text>Settings</Text>
|
||||
|
||||
<About
|
||||
actionButton={
|
||||
<Button
|
||||
mode="contained"
|
||||
labelStyle={{ fontSize: 18 }}
|
||||
onPress={handleLogout}
|
||||
loading={logout.state === "loading"}
|
||||
disabled={logout.state === "loading"}
|
||||
>
|
||||
Logout
|
||||
</Button>
|
||||
</SafeAreaView>
|
||||
}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,15 @@ const TabLayout: React.FC = () => {
|
||||
headerShown: false,
|
||||
}}
|
||||
>
|
||||
<Tabs.Screen
|
||||
name="about"
|
||||
options={{
|
||||
title: "About",
|
||||
tabBarIcon: ({ color }) => {
|
||||
return <TabBarIcon name="info" color={color} />
|
||||
},
|
||||
}}
|
||||
/>
|
||||
<Tabs.Screen
|
||||
name="login"
|
||||
options={{
|
||||
|
26
app/authentication/about.tsx
Normal file
26
app/authentication/about.tsx
Normal file
@ -0,0 +1,26 @@
|
||||
import { Button } from "react-native-paper"
|
||||
import { useRouter } from "expo-router"
|
||||
|
||||
import { About } from "@/presentation/react-native/components/About"
|
||||
|
||||
const AboutPage: React.FC = () => {
|
||||
const router = useRouter()
|
||||
|
||||
return (
|
||||
<About
|
||||
actionButton={
|
||||
<Button
|
||||
mode="contained"
|
||||
labelStyle={{ fontSize: 18 }}
|
||||
onPress={() => {
|
||||
router.push("/authentication/login")
|
||||
}}
|
||||
>
|
||||
Get Started 🚀
|
||||
</Button>
|
||||
}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default AboutPage
|
@ -67,6 +67,7 @@ const LoginPage: React.FC = () => {
|
||||
|
||||
<Button
|
||||
mode="contained"
|
||||
labelStyle={{ fontSize: 18 }}
|
||||
onPress={handleSubmit(onSubmit)}
|
||||
loading={login.state === "loading"}
|
||||
disabled={login.state === "loading"}
|
||||
|
@ -107,6 +107,7 @@ const RegisterPage: React.FC = () => {
|
||||
|
||||
<Button
|
||||
mode="contained"
|
||||
labelStyle={{ fontSize: 18 }}
|
||||
onPress={handleSubmit(onSubmit)}
|
||||
loading={register.state === "loading"}
|
||||
disabled={register.state === "loading"}
|
||||
|
@ -6,7 +6,7 @@ const HomePage: React.FC = () => {
|
||||
const { user } = useAuthentication()
|
||||
|
||||
if (user == null) {
|
||||
return <Redirect href="/authentication/login" />
|
||||
return <Redirect href="/authentication/about" />
|
||||
}
|
||||
|
||||
return <Redirect href="/application/habits/" />
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
81
presentation/react-native/components/About.tsx
Normal file
81
presentation/react-native/components/About.tsx
Normal file
@ -0,0 +1,81 @@
|
||||
import { View } from "react-native"
|
||||
import { Text } from "react-native-paper"
|
||||
import { SafeAreaView } from "react-native-safe-area-context"
|
||||
|
||||
import { ExternalLink } from "@/presentation/react-native/ui/ExternalLink"
|
||||
import { getVersion } from "@/utils/version"
|
||||
|
||||
export interface AboutProps {
|
||||
actionButton: React.ReactNode
|
||||
}
|
||||
|
||||
export const About: React.FC<AboutProps> = (props) => {
|
||||
const { actionButton } = props
|
||||
|
||||
const version = getVersion()
|
||||
|
||||
return (
|
||||
<SafeAreaView
|
||||
style={{
|
||||
flex: 1,
|
||||
paddingHorizontal: 20,
|
||||
}}
|
||||
>
|
||||
<View style={{ alignItems: "center", marginVertical: 20 }}>
|
||||
<Text
|
||||
style={{
|
||||
fontWeight: "bold",
|
||||
fontSize: 28,
|
||||
textAlign: "center",
|
||||
}}
|
||||
>
|
||||
Habits Tracker
|
||||
</Text>
|
||||
|
||||
<Text
|
||||
style={{
|
||||
marginTop: 6,
|
||||
fontWeight: "bold",
|
||||
fontSize: 18,
|
||||
textAlign: "center",
|
||||
}}
|
||||
>
|
||||
To perform at work and in everyday life.
|
||||
</Text>
|
||||
|
||||
<Text
|
||||
style={{
|
||||
marginTop: 6,
|
||||
fontWeight: "bold",
|
||||
fontSize: 16,
|
||||
textAlign: "center",
|
||||
}}
|
||||
>
|
||||
v{version}
|
||||
</Text>
|
||||
</View>
|
||||
|
||||
<Text variant="bodyLarge" style={{ textAlign: "center" }}>
|
||||
<ExternalLink href="https://unistra.fr" style={{ color: "#006CFF" }}>
|
||||
Université de Strasbourg
|
||||
</ExternalLink>
|
||||
</Text>
|
||||
<Text variant="bodyLarge" style={{ textAlign: "center" }}>
|
||||
BUT Informatique - IUT Robert Schuman
|
||||
</Text>
|
||||
<Text variant="bodyLarge" style={{ textAlign: "center" }}>
|
||||
P61 Mobile Development
|
||||
</Text>
|
||||
|
||||
<View
|
||||
style={{
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
marginVertical: 20,
|
||||
}}
|
||||
>
|
||||
{actionButton}
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
)
|
||||
}
|
39
utils/__tests__/version.test.ts
Normal file
39
utils/__tests__/version.test.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import { getVersion } from "../version"
|
||||
import { version } from "@/package.json"
|
||||
|
||||
describe("utils/version", () => {
|
||||
const env = process.env
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetModules()
|
||||
process.env = { ...env }
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
process.env = env
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
|
||||
it("should return '0.0.0-development' when NODE_ENV is 'development'", () => {
|
||||
// Arrange - Given
|
||||
process.env["NODE_ENV"] = "development"
|
||||
|
||||
// Act - When
|
||||
const result = getVersion()
|
||||
|
||||
// Assert - Then
|
||||
const expected = "0.0.0-development"
|
||||
expect(result).toEqual(expected)
|
||||
})
|
||||
|
||||
it("should return the version from package.json when NODE_ENV is not 'development'", () => {
|
||||
// Arrange - Given
|
||||
process.env["NODE_ENV"] = "production"
|
||||
|
||||
// Act - When
|
||||
const result = getVersion()
|
||||
|
||||
// Assert - Then
|
||||
expect(result).toEqual(version)
|
||||
})
|
||||
})
|
8
utils/version.ts
Normal file
8
utils/version.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { version } from "@/package.json"
|
||||
|
||||
export const getVersion = (): string => {
|
||||
if (process.env["NODE_ENV"] === "development") {
|
||||
return "0.0.0-development"
|
||||
}
|
||||
return version
|
||||
}
|
Reference in New Issue
Block a user