mirror of
https://github.com/khairul169/vaulterm.git
synced 2025-04-28 16:49:39 +07:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import React, { useEffect, useMemo, useRef } from "react";
|
|
import InteractiveSession from "@/components/containers/interactive-session";
|
|
import PagerView, { PagerViewRef } from "@/components/ui/pager-view";
|
|
import { useTermSession } from "@/stores/terminal-sessions";
|
|
import { Button, useMedia } from "tamagui";
|
|
import SessionTabs from "./components/session-tabs";
|
|
import HostList from "../hosts/components/host-list";
|
|
import Drawer from "expo-router/drawer";
|
|
import { router } from "expo-router";
|
|
import Icons from "@/components/ui/icons";
|
|
import { useDebounceCallback } from "@/hooks/useDebounce";
|
|
|
|
const TerminalPage = () => {
|
|
const pagerViewRef = useRef<PagerViewRef>(null!);
|
|
const { sessions, curSession, setSession } = useTermSession();
|
|
const session = sessions[curSession];
|
|
const media = useMedia();
|
|
|
|
const setCurSession = useDebounceCallback((idx: number) => {
|
|
pagerViewRef.current?.setPage(idx);
|
|
}, 100);
|
|
|
|
useEffect(() => {
|
|
setCurSession(curSession);
|
|
}, [curSession]);
|
|
|
|
const pagerView = useMemo(() => {
|
|
if (!sessions.length) {
|
|
return null;
|
|
}
|
|
return (
|
|
<PagerView
|
|
ref={pagerViewRef}
|
|
style={{ flex: 1 }}
|
|
onChangePage={setSession}
|
|
initialPage={0}
|
|
>
|
|
{sessions.map((session) => (
|
|
<InteractiveSession key={session.id} {...session} />
|
|
))}
|
|
</PagerView>
|
|
);
|
|
}, [sessions]);
|
|
|
|
return (
|
|
<>
|
|
<Drawer.Screen
|
|
options={{
|
|
headerTitle: session?.label || "Terminal",
|
|
headerRight: () => (
|
|
<Button
|
|
bg="$colorTransparent"
|
|
icon={<Icons name="view-list" size={24} />}
|
|
onPress={() => router.push("/terminal/sessions")}
|
|
/>
|
|
),
|
|
}}
|
|
/>
|
|
|
|
{sessions.length > 0 && media.gtSm ? <SessionTabs /> : null}
|
|
{!sessions.length ? <HostList allowEdit={false} /> : pagerView}
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default TerminalPage;
|