mirror of
https://github.com/khairul169/vaulterm.git
synced 2025-04-28 16:49:39 +07:00
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { View, Text, ScrollView, Button } from "react-native";
|
|
import React, { useState } from "react";
|
|
import { Stack } from "expo-router";
|
|
import InteractiveSession from "@/components/containers/interactive-session";
|
|
import PagerView from "@/components/ui/pager-view";
|
|
|
|
let nextSession = 1;
|
|
|
|
const HomePage = () => {
|
|
const [sessions, setSessions] = useState<string[]>(["1"]);
|
|
const [curSession, setSession] = useState(0);
|
|
|
|
return (
|
|
<View style={{ flex: 1 }}>
|
|
<Stack.Screen options={{ title: "Home" }} />
|
|
|
|
<ScrollView
|
|
horizontal
|
|
style={{ flexGrow: 0 }}
|
|
contentContainerStyle={{ flexDirection: "row", gap: 8 }}
|
|
>
|
|
{sessions.map((session, idx) => (
|
|
<View
|
|
key={session}
|
|
style={{ flexDirection: "row", alignItems: "center" }}
|
|
>
|
|
<Button
|
|
title={"Session " + session}
|
|
color="#222"
|
|
onPress={() => setSession(idx)}
|
|
/>
|
|
<Button
|
|
title="X"
|
|
onPress={() => {
|
|
const newSessions = sessions.filter((s) => s !== session);
|
|
setSessions(newSessions);
|
|
setSession(
|
|
Math.min(Math.max(curSession, 0), newSessions.length - 1)
|
|
);
|
|
}}
|
|
/>
|
|
</View>
|
|
))}
|
|
|
|
<Button
|
|
title="[ + ]"
|
|
onPress={() => {
|
|
nextSession += 1;
|
|
setSessions([...sessions, nextSession.toString()]);
|
|
setSession(sessions.length);
|
|
}}
|
|
/>
|
|
</ScrollView>
|
|
|
|
<PagerView style={{ flex: 1 }} page={curSession}>
|
|
{sessions.map((session) => (
|
|
<InteractiveSession
|
|
key={session}
|
|
type="ssh"
|
|
options={{ serverId: session }}
|
|
/>
|
|
))}
|
|
</PagerView>
|
|
</View>
|
|
);
|
|
};
|
|
|
|
export default HomePage;
|