diff --git a/frontend/app/(drawer)/_layout.tsx b/frontend/app/(drawer)/_layout.tsx index b67685b..fc20c2d 100644 --- a/frontend/app/(drawer)/_layout.tsx +++ b/frontend/app/(drawer)/_layout.tsx @@ -16,6 +16,7 @@ export default function Layout() { }} > + - + diff --git a/frontend/app/_providers.tsx b/frontend/app/_providers.tsx index ae9a3c3..15dc0d3 100644 --- a/frontend/app/_providers.tsx +++ b/frontend/app/_providers.tsx @@ -36,20 +36,16 @@ const Providers = ({ children }: Props) => { }, [theme, colorScheme]); return ( - <> + - - - {children} - - + {children} - + ); }; diff --git a/frontend/components/containers/xtermjs.tsx b/frontend/components/containers/xtermjs.tsx index 353788f..4ad9d3e 100644 --- a/frontend/components/containers/xtermjs.tsx +++ b/frontend/components/containers/xtermjs.tsx @@ -122,7 +122,6 @@ const XTermJs = forwardRef((props, ref) => { } function onOpen() { - console.log("WS Open"); resizeTerminal(); } diff --git a/frontend/components/ui/grid-view.tsx b/frontend/components/ui/grid-view.tsx new file mode 100644 index 0000000..6cc9ed3 --- /dev/null +++ b/frontend/components/ui/grid-view.tsx @@ -0,0 +1,53 @@ +import React, { useMemo } from "react"; +import { GetProps, ScrollView, View, ViewStyle } from "tamagui"; + +type GridItem = { key: string }; + +type GridViewProps = GetProps & { + data?: T[] | null; + renderItem: (item: T, index: number) => React.ReactNode; + columns: { + xs?: number; + sm?: number; + md?: number; + lg?: number; + xl?: number; + }; +}; + +const GridView = ({ + data, + renderItem, + columns, + gap, + ...props +}: GridViewProps) => { + const basisProps = useMemo(() => { + const basis: ViewStyle = { flexBasis: "100%" }; + if (columns.xs) basis.flexBasis = `${100 / columns.xs}%`; + if (columns.sm) basis.$gtXs = { flexBasis: `${100 / columns.sm}%` }; + if (columns.md) basis.$gtSm = { flexBasis: `${100 / columns.md}%` }; + if (columns.lg) basis.$gtMd = { flexBasis: `${100 / columns.lg}%` }; + if (columns.xl) basis.$gtLg = { flexBasis: `${100 / columns.xl}%` }; + return basis; + }, [columns]); + + return ( + + {data?.map((item, idx) => ( + + {renderItem(item, idx)} + + ))} + + ); +}; + +export default GridView; diff --git a/frontend/components/ui/input.tsx b/frontend/components/ui/input.tsx index e4101b0..4b9acec 100644 --- a/frontend/components/ui/input.tsx +++ b/frontend/components/ui/input.tsx @@ -1,6 +1,6 @@ import { Controller, FieldValues } from "react-hook-form"; import { FormFieldBaseProps } from "./utility"; -import { Input, View } from "tamagui"; +import { Input, TextArea } from "tamagui"; import { ComponentPropsWithoutRef } from "react"; import { ErrorMessage } from "./form"; @@ -24,4 +24,24 @@ export const InputField = ({ /> ); +type TextAreaFieldProps = FormFieldBaseProps & + ComponentPropsWithoutRef; + +export const TextAreaField = ({ + form, + name, + ...props +}: TextAreaFieldProps) => ( + ( + <> +