Skip to content

Commit 951c9f8

Browse files
authored
Merge pull request #32 from a-company-jp/feature/ui-update
UIの改修
2 parents 5eb8e52 + 5214514 commit 951c9f8

File tree

15 files changed

+196
-148
lines changed

15 files changed

+196
-148
lines changed

public/LGTM_logo.png

27.5 KB
Loading

src/App.tsx

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
1-
import Header from "./components/Header";
21
import "./App.css";
2+
import "./font/LINESeedJP_OTF_Rg.woff";
3+
import "./font/LINESeedJP_OTF_Bd.woff";
4+
import "./font/LINESeedJP_OTF_Th.woff";
35
import CardList from "./components/CardList";
4-
import SendImageButton from "./components/SendImageButton";
56
import { UIProvider } from "@yamada-ui/react";
6-
import { Pagination } from "./components/Pagination";
77
import { useState } from "react";
88
import useLGTMFetch from "./hooks/useLGTMFetch";
9-
import Banner from "./components/Banner";
9+
import Sidebar from "./components/Sidebar";
1010

1111
function App() {
12-
const [activePage, setActivePage] = useState(1);
1312
const [uploaded, setUploaded] = useState(false);
13+
const [activePage, setActivePage] = useState(1);
1414
const { LGTMUrls } = useLGTMFetch(activePage, uploaded, setUploaded);
1515

16+
const styles = {
17+
container: "grid grid-cols-7 h-screen w-screen",
18+
content:
19+
"col-span-5 flex text-center justify-center max-h-full overflow-auto",
20+
};
21+
1622
return (
1723
<UIProvider>
18-
<div className="App">
19-
<Banner />
20-
<Header />
21-
<SendImageButton setUploaded={setUploaded} />
22-
<CardList {...LGTMUrls} />
23-
<Pagination activePage={activePage} setActivePage={setActivePage} />
24+
<div className={styles.container} style={{ fontFamily: "regular" }}>
25+
<Sidebar
26+
className="col-span-2"
27+
uploaded={uploaded}
28+
setUploaded={setUploaded}
29+
/>
30+
<div className={styles.content}>
31+
<CardList {...LGTMUrls} />
32+
</div>
2433
</div>
2534
</UIProvider>
2635
);

src/components/Card/index.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ const Card = ({ imageUrl }: CardProps) => {
1919

2020
// TODO: refactor css
2121
const styles = {
22-
centering: "",
2322
card: "relative",
2423
linkWrapper: "group relative",
2524
image:
@@ -33,9 +32,16 @@ const Card = ({ imageUrl }: CardProps) => {
3332
};
3433

3534
return (
36-
<div className={`${styles.centering} ${styles.card}`}>
37-
<button onClick={handleCopyClick} className={`${styles.linkWrapper}`}>
38-
<img alt="LGTMの画像" src={imageUrl} className={`${styles.image}`} />
35+
<div className="h-64 w-64 flex flex-col rounded bg-white shadow-lg">
36+
<button
37+
onClick={handleCopyClick}
38+
className="group relative flex h-40 flex-grow items-center justify-center p-2"
39+
>
40+
<img
41+
alt="LGTMの画像"
42+
src={imageUrl}
43+
className="max-h-48 max-w-100 transition-opacity group-hover:opacity-30"
44+
/>
3945
{isCopying ? (
4046
<div className={styles.checkCircleWrapper}>
4147
<FaRegCheckCircle

src/components/CardList/index.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
import React from "react";
22
import Card, { CardProps } from "../Card";
3+
import { Pagination } from "@yamada-ui/react";
34

45
type CardListProps = CardProps[];
56

67
function CardList(props: CardListProps) {
78
const cardDataArray = Object.values(props);
89

910
const styles = {
10-
grid: "grid grid-cols-1 gap-4 lg:grid-cols-4 lg:gap-8 md:grid-cols-2 md:gap-4 sm:grid-cols-2 sm:gap-4 mt-4 mx-6 lg:mx-36",
11-
gridItem: "rounded-lg",
11+
container: "flex flex-col",
12+
grid: "grid grid-cols-3 gap-4",
1213
};
1314

1415
return (
15-
<div className={`${styles.grid}`}>
16-
{cardDataArray.map((card) => (
17-
<div className={`${styles.gridItem}`}>
16+
<div className={styles.container}>
17+
<div className={`${styles.grid} my-4`}>
18+
{cardDataArray.map((card) => (
1819
<Card {...card} />
19-
</div>
20-
))}
20+
))}
21+
</div>
22+
<Pagination total={10} />
2123
</div>
2224
);
2325
}

src/components/Header/index.tsx

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/components/SendImageButton/index.tsx

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
1-
'use client';
1+
"use client";
22

3-
import React from 'react';
4-
import InputImage from '../InputImage';
5-
import { useSendImage, IMAGE_ID } from '../../hooks/useSendImage';
3+
import React from "react";
4+
import InputImage from "../InputImage";
5+
import { useSendImage, IMAGE_ID } from "../../hooks/useSendImage";
66

77
type SendImageButtonProps = {
88
setUploaded: (uploaded: boolean) => void;
9-
109
};
1110

12-
const SendImageButton = ({ setUploaded }: SendImageButtonProps): JSX.Element => {
11+
const SendImageButton = ({
12+
setUploaded,
13+
}: SendImageButtonProps): JSX.Element => {
1314
const { fileInputRef, rest, ref, selectFile } = useSendImage(setUploaded);
1415

15-
const style = {
16-
container: "flex justify-center md:justify-end mt-4 md:mr-36",
17-
btn: 'text-white bg-gradient-to-r from-gray-400 via-gray-500 to-gray-600 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-gray-300 dark:focus:ring-gray-800 shadow-lg shadow-gray-500/50 dark:shadow-lg dark:shadow-gray-800/80 font-medium rounded-full text-sm px-5 py-2.5 text-center me-2 mb-2',
18-
};
19-
2016
return (
21-
<div className={style.container}>
22-
<button onClick={selectFile} role="presentation" type="button" className={`${style.btn}`}>
23-
<p className="text-4xl">
24-
➕ New LGTM
25-
</p>
26-
<InputImage fileInputRef={fileInputRef} refCallback={ref} id={IMAGE_ID} {...rest} />
27-
</button>
28-
</div>
29-
17+
<button
18+
onClick={selectFile}
19+
className="py-2 px-8 text-[#FF8C8C] bg-white rounded-3xl shadow border border-red-400"
20+
>
21+
<p className="text-3xl" style={{ fontFamily: "bold" }}>
22+
+ New LGTM
23+
</p>
24+
<InputImage
25+
fileInputRef={fileInputRef}
26+
refCallback={ref}
27+
id={IMAGE_ID}
28+
{...rest}
29+
/>
30+
</button>
3031
);
3132
};
3233

src/components/Sidebar/index.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import React, { useState } from "react";
2+
import Logo from "../atoms/Logo";
3+
import { Divider } from "@yamada-ui/react";
4+
import ButtonToGitHub from "../atoms/ButtonToGitHub";
5+
import CopyrightPolicyButton from "../atoms/CopyrightPolicyButton";
6+
import SendImageButton from "../SendImageButton";
7+
import useLGTMFetch from "../../hooks/useLGTMFetch";
8+
9+
interface Props {
10+
className: string;
11+
uploaded: boolean;
12+
setUploaded: (uploaded: boolean) => void;
13+
}
14+
15+
const Sidebar = ({ className, uploaded, setUploaded }: Props) => {
16+
const styles = {
17+
container: "flex flex-col h-full justify-between shadow-lg",
18+
top: "flex flex-col items-center text-center",
19+
subTitle: "text-[#D9ACAC] font-bold",
20+
divider: "my-8",
21+
bottom: "flex justify-center my-8",
22+
};
23+
24+
return (
25+
<div className={className}>
26+
<div className={styles.container}>
27+
<div className={styles.top}>
28+
<Logo />
29+
<p className={styles.subTitle}>
30+
Let's give team members awesome LGTM easily
31+
</p>
32+
<Divider className={styles.divider} width="80%" />
33+
<ButtonToGitHub />
34+
<CopyrightPolicyButton />
35+
</div>
36+
<div className={styles.bottom}>
37+
<SendImageButton setUploaded={setUploaded} />
38+
</div>
39+
</div>
40+
</div>
41+
);
42+
};
43+
44+
export default Sidebar;

src/components/atoms/ButtonToGitHub/index.tsx

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,14 @@
11
const ButtonToGitHub = (): JSX.Element => {
22
const gitHubUrl = process.env.REACT_APP_GITHUB_URL;
33

4-
const styles = {
5-
btn: "inline-flex items-center justify-center gap-1.5 rounded-lg px-5 py-3 text-gray-500 transition hover:text-gray-700 focus:outline-none focus:ring",
6-
text: "text-sm font-medium",
7-
};
8-
94
return (
10-
<a
11-
href={gitHubUrl}
12-
className={styles.btn}
13-
type="button"
14-
target="_blank"
15-
rel="noopener noreferrer"
16-
>
17-
<span className={styles.text}> GitHub Page </span>
18-
19-
<svg
20-
xmlns="http://www.w3.org/2000/svg"
21-
className="h-4 w-4"
22-
fill="none"
23-
viewBox="0 0 24 24"
24-
stroke="currentColor"
25-
stroke-width="2"
5+
<a href={gitHubUrl} target="_blank" rel="noopener noreferrer">
6+
<span
7+
className="text-2xl mb-2 hover:transition-all hover:font-bold"
8+
style={{ fontFamily: "thin" }}
269
>
27-
<path
28-
stroke-linecap="round"
29-
stroke-linejoin="round"
30-
d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
31-
/>
32-
</svg>
10+
GitHub Page
11+
</span>
3312
</a>
3413
);
3514
};
Lines changed: 59 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,62 @@
11
import {
2-
Modal,
3-
ModalHeader,
4-
ModalBody,
5-
ModalFooter,
6-
Button,
7-
useDisclosure,
8-
DiscList,
9-
ListItem,
10-
} from "@yamada-ui/react"
2+
Modal,
3+
ModalHeader,
4+
ModalBody,
5+
ModalFooter,
6+
Button,
7+
useDisclosure,
8+
DiscList,
9+
ListItem,
10+
} from "@yamada-ui/react";
1111

1212
const CopyrightPolicyButton = () => {
13-
14-
const styles = {
15-
btn: "block rounded-lg bg-indigo-600 px-5 py-3 text-sm font-medium text-white transition hover:bg-indigo-700 focus:outline-none focus:ring"
16-
}
17-
18-
const { isOpen, onOpen, onClose } = useDisclosure()
19-
20-
return (
21-
<>
22-
<button
23-
className={styles.btn}
24-
type="button"
25-
onClick={onOpen}
26-
>
27-
Policies
28-
</button>
29-
<Modal isOpen={isOpen} onClose={onClose} style={{ backgroundColor: 'white' }} duration={0.4}>
30-
<ModalHeader>免責事項&プライバシーポリシー</ModalHeader>
31-
32-
<ModalBody>
33-
<DiscList>
34-
<ListItem>サービスを利用して生成された画像に関する一切の責任はご利用者様に負担いただくものとします。ご利用者様が生成した画像に関し、第三者が損害を被った場合、運営者はご利用者様に代わっての責任は一切負いません。</ListItem>
35-
<ListItem>本サービスを利用して生成された画像はインターネット上に公開されます。元画像の著作権や関連法規に注意してください。公序良俗に反する画像や違法な画像を作成しないでください。これらの画像、その他運営者が不適切と判断した画像は予告無しに削除することがあります。</ListItem>
36-
<ListItem>過剰な数のリクエストを送信してサービスに負荷をかける行為はおやめください。</ListItem>
37-
<ListItem>その他、悪質な利用方法が確認された場合、特定のご利用者様を予告無しにアクセス禁止にすることがあります。</ListItem>
38-
<ListItem>プライバシーポリシー変更について当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。修正された最新のプライバシーポリシーは常に本ページにて開示されます。</ListItem>
39-
</DiscList>
40-
</ModalBody>
41-
42-
43-
<ModalFooter>
44-
<Button variant="ghost" onClick={onClose}>
45-
とじる
46-
</Button>
47-
</ModalFooter>
48-
</Modal>
49-
</>
50-
)
51-
}
52-
53-
export default CopyrightPolicyButton
13+
const { isOpen, onOpen, onClose } = useDisclosure();
14+
15+
return (
16+
<>
17+
<button
18+
className="text-2xl hover:transition-all hover:font-bold"
19+
style={{ fontFamily: "thin" }}
20+
onClick={onOpen}
21+
>
22+
Policies
23+
</button>
24+
<Modal
25+
isOpen={isOpen}
26+
onClose={onClose}
27+
style={{ backgroundColor: "white" }}
28+
duration={0.4}
29+
>
30+
<ModalHeader>免責事項&プライバシーポリシー</ModalHeader>
31+
32+
<ModalBody>
33+
<DiscList>
34+
<ListItem>
35+
サービスを利用して生成された画像に関する一切の責任はご利用者様に負担いただくものとします。ご利用者様が生成した画像に関し、第三者が損害を被った場合、運営者はご利用者様に代わっての責任は一切負いません。
36+
</ListItem>
37+
<ListItem>
38+
本サービスを利用して生成された画像はインターネット上に公開されます。元画像の著作権や関連法規に注意してください。公序良俗に反する画像や違法な画像を作成しないでください。これらの画像、その他運営者が不適切と判断した画像は予告無しに削除することがあります。
39+
</ListItem>
40+
<ListItem>
41+
過剰な数のリクエストを送信してサービスに負荷をかける行為はおやめください。
42+
</ListItem>
43+
<ListItem>
44+
その他、悪質な利用方法が確認された場合、特定のご利用者様を予告無しにアクセス禁止にすることがあります。
45+
</ListItem>
46+
<ListItem>
47+
プライバシーポリシー変更について当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。修正された最新のプライバシーポリシーは常に本ページにて開示されます。
48+
</ListItem>
49+
</DiscList>
50+
</ModalBody>
51+
52+
<ModalFooter>
53+
<Button variant="ghost" onClick={onClose}>
54+
とじる
55+
</Button>
56+
</ModalFooter>
57+
</Modal>
58+
</>
59+
);
60+
};
61+
62+
export default CopyrightPolicyButton;

0 commit comments

Comments
 (0)