Feat: Home 컴포넌트 추가
This commit is contained in:
parent
943b443080
commit
ed15f4df4a
35
frontend/src/components/Home/index.stories.tsx
Normal file
35
frontend/src/components/Home/index.stories.tsx
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import '@/index.css';
|
||||||
|
import { Meta, StoryObj } from '@storybook/react';
|
||||||
|
import Home from '.';
|
||||||
|
import { useState } from 'react';
|
||||||
|
|
||||||
|
const HomeWrapper = ({ initialLoggedIn }: { initialLoggedIn: boolean }) => {
|
||||||
|
const [isLoggedIn, setIsLoggedIn] = useState(initialLoggedIn);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Home
|
||||||
|
isLoggedIn={isLoggedIn}
|
||||||
|
setIsLoggedIn={setIsLoggedIn}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const meta: Meta<typeof Home> = {
|
||||||
|
title: 'Components/Home',
|
||||||
|
component: Home,
|
||||||
|
parameters: {
|
||||||
|
layout: 'fullscreen',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
|
||||||
|
type Story = StoryObj<typeof Home>;
|
||||||
|
|
||||||
|
export const GoogleLogin: Story = {
|
||||||
|
render: () => <HomeWrapper initialLoggedIn={false} />,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const SelectWorkspace: Story = {
|
||||||
|
render: () => <HomeWrapper initialLoggedIn={true} />,
|
||||||
|
};
|
80
frontend/src/components/Home/index.tsx
Normal file
80
frontend/src/components/Home/index.tsx
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
import { useState } from 'react';
|
||||||
|
import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue, SelectGroup } from '../ui/select';
|
||||||
|
import GoogleLogo from '@/assets/icons/web_neutral_rd_ctn@1x.png';
|
||||||
|
|
||||||
|
interface HomeProps {
|
||||||
|
isLoggedIn?: boolean;
|
||||||
|
setIsLoggedIn?: (loggedIn: boolean) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function Home({ isLoggedIn = false, setIsLoggedIn }: HomeProps) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
const [selectedWorkspace, setSelectedWorkspace] = useState('');
|
||||||
|
|
||||||
|
const workspaces = [
|
||||||
|
{ id: 1, name: 'Workspace 1' },
|
||||||
|
{ id: 2, name: 'Workspace 2' },
|
||||||
|
{ id: 3, name: 'Workspace 3' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleGoogleSignIn = () => {
|
||||||
|
console.log('구글로 계속하기');
|
||||||
|
if (setIsLoggedIn) {
|
||||||
|
setIsLoggedIn(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex h-full flex-col items-center justify-center bg-gray-50 p-8">
|
||||||
|
<div className="mb-6 max-w-xl rounded-lg bg-white p-6 shadow-lg">
|
||||||
|
<h2 className="mb-4 text-2xl font-bold text-gray-900">서비스 설명</h2>
|
||||||
|
<p className="mb-4 text-base text-gray-700">
|
||||||
|
본 서비스는 인공 지능(AI) 모델의 학습을 지원하기 위해 웹 기반의 자동 라벨링 도구를 개발하는 것을 목표로
|
||||||
|
합니다. 이 도구는 이미지나 텍스트와 같은 비정형 데이터에 레이블을 자동으로 부여하는 기능을 제공합니다.
|
||||||
|
</p>
|
||||||
|
<p className="mb-4 text-base text-gray-700">
|
||||||
|
기존의 수동적인 방법으로는 대량의 학습 데이터를 처리하는데 시간과 비용이 많이 소모되었습니다. 그러나 본
|
||||||
|
서비스의 결과물인 Auto Labeler를 사용하면, 이러한 문제를 해결할 수 있을 것으로 기대됩니다.
|
||||||
|
</p>
|
||||||
|
<p className="mb-4 text-base text-gray-700">
|
||||||
|
Auto Labeler는 웹 기반으로 동작하므로, 별도의 설치 과정 없이 인터넷 연결 환경에서 쉽게 사용할 수 있습니다.
|
||||||
|
또한, 사용자 친화적인 인터페이스를 제공하여 비전문가도 손쉽게 이용할 수 있도록 설계될 예정입니다.
|
||||||
|
</p>
|
||||||
|
<p className="text-base text-gray-700">
|
||||||
|
본 서비스는 특히 학습 데이터 구축 과정의 효율성과 정확도를 향상시키는 데 중점을 두고 있습니다.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{!isLoggedIn ? (
|
||||||
|
<button
|
||||||
|
onClick={handleGoogleSignIn}
|
||||||
|
className="mb-4 transition hover:opacity-90 focus:outline-none focus:ring-2 focus:ring-gray-300 active:opacity-80"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
src={GoogleLogo}
|
||||||
|
alt="Sign in with Google"
|
||||||
|
className="h-auto w-full"
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
) : (
|
||||||
|
<Select onValueChange={(value) => setSelectedWorkspace(value)}>
|
||||||
|
<SelectTrigger className="mb-4 w-72">
|
||||||
|
<SelectValue placeholder="워크스페이스를 선택하세요" />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectGroup>
|
||||||
|
{workspaces.map((workspace) => (
|
||||||
|
<SelectItem
|
||||||
|
key={workspace.id}
|
||||||
|
value={workspace.name}
|
||||||
|
>
|
||||||
|
{workspace.name}
|
||||||
|
</SelectItem>
|
||||||
|
))}
|
||||||
|
</SelectGroup>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user