diff --git a/apps/web/components/Body.tsx b/apps/web/components/Body.tsx new file mode 100644 index 0000000..ff9a41b --- /dev/null +++ b/apps/web/components/Body.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +/** + * Body Component. + * @param {{children: JSX.Element}} param0 BodyComponent props. + * @return {JSX.Element} + */ +export const BodyComponent = ({ + children, +}: { + children: JSX.Element; +}): JSX.Element => { + return ( + +
+
{children}
+
+
+ ); +}; diff --git a/apps/web/components/FormInput.tsx b/apps/web/components/FormInput.tsx new file mode 100644 index 0000000..b816a88 --- /dev/null +++ b/apps/web/components/FormInput.tsx @@ -0,0 +1,44 @@ +import React from 'react'; + +/** + * FormInput Component. + * @return {JSX.Element} + */ +export const FormInputComponent = (): JSX.Element => { + const [url, setUrl] = React.useState(''); + + return ( + +
+

+ Fill TikTok's Video URL below: +

+
{}} + > +
+ setUrl(event.target.value)} + value={url} + className="p-3 border border-gray-300 font-sans h-auto w-auto outline-solid-blue-500" + /> +
+ +
+ +
+
+
+
+ ); +}; + +export default FormInputComponent; diff --git a/apps/web/components/Header.tsx b/apps/web/components/Header.tsx new file mode 100644 index 0000000..2243235 --- /dev/null +++ b/apps/web/components/Header.tsx @@ -0,0 +1,36 @@ +/** + * Next Head Component. + * @param {{title: string, children: JSX.Element }} param0 NextHeadComponent args. + * @return {JSX.Element} + */ +export const NextHeadComponent = ({ + title, + children, +}: { + title?: string; + children?: JSX.Element; +}): JSX.Element => { + return ( + <> + {title ?? 'TikTok Downloader'} + + + + + + {children} + + ); +}; diff --git a/apps/web/components/TabSelector.tsx b/apps/web/components/TabSelector.tsx new file mode 100644 index 0000000..72e663e --- /dev/null +++ b/apps/web/components/TabSelector.tsx @@ -0,0 +1,42 @@ +import React, {ComponentType} from 'react'; + +type TabPage = { + name: string; + component: ComponentType; +}; + +/** + * + * @param {{tabs: TabPage[]}} param0 TabSelector props. + * @return {JSX.Element} + */ +export const TabSelectorComponent = ({ + tabs, +}: { + tabs: TabPage[]; +}): JSX.Element => { + const [tab, setTab] = React.useState(); + + return ( + <> + + {tab ? tab.component : <>} + + ); +}; diff --git a/apps/web/pages/_document.tsx b/apps/web/pages/_document.tsx new file mode 100644 index 0000000..9870228 --- /dev/null +++ b/apps/web/pages/_document.tsx @@ -0,0 +1,28 @@ +import Document, {Head, Html, Main, NextScript} from 'next/document'; +import {BodyComponent} from '../components/Body'; +import {NextHeadComponent} from '../components/Header'; + +/** + * @class TikTokDocument + */ +export default class TikTokDocument extends Document { + /** + * Render TikTokDocument + * @return {JSX.Element} + */ + render(): JSX.Element { + return ( + + + + + + +
+ + + + + ); + } +} diff --git a/apps/web/pages/index.tsx b/apps/web/pages/index.tsx index b0c334e..d743092 100644 --- a/apps/web/pages/index.tsx +++ b/apps/web/pages/index.tsx @@ -1,40 +1,34 @@ -import Head from 'next/head'; +import dynamic from 'next/dynamic'; +import {TabSelectorComponent} from '../components/TabSelector'; export default () => { return ( - <> - - TikTok Downloader - - {/** - Body - */} -
- {/** Header 1*/} -
-

- TikTok Downloader -

-

- Free, and open-source TikTok Video Downloader -

-
+
+

+ TikTok-DL{' '} + + Download TikTok Video without watermark and free ads. + +

- {/** Content */} -
-
-                        Hello, this page is still in development. Do you want to
-                        help me? Visit{' '}
-                        
-                            github.com/hansputera/tiktok-dl
-                        
-                        . Thanks!
-                    
-
-
- + import('../components/FormInput'), + { + loading: () => ( +

+ Wait a minute! +

+ ), + ssr: false, + }, + ), + }, + ]} + /> + ); };