board.tsx 2.86 KB
Newer Older
Lee Soobeom's avatar
Lee Soobeom committed
1
2
import React, { useState, MouseEvent } from "react";
import { Link } from "react-router-dom";
3
4
import { PostType } from "../types";
import Post from "../post/post";
Lee Soobeom's avatar
Lee Soobeom committed
5

Lee Soobeom's avatar
Lee Soobeom committed
6
function range(start: number, end: number) {
Kim, MinGyu's avatar
Kim, MinGyu committed
7
  return new Array(end - start + 1).fill(undefined).map((_, i) => i + start);
Lee Soobeom's avatar
Lee Soobeom committed
8
9
}

10
interface Posts {
Kim, MinGyu's avatar
Kim, MinGyu committed
11
  posts: PostType[];
12
13
}

Lee Soobeom's avatar
Lee Soobeom committed
14
export const fakes = [
Kim, MinGyu's avatar
Kim, MinGyu committed
15
16
  {
    id: "a",
17
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
18
19
20
21
22
23
24
25
    title: "여행가고싶다...",
    date: "2022-06-30",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "b",
26
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
27
28
29
30
31
32
33
34
    title: "바다!바다!바다!",
    date: "2022-08-01",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "c",
35
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
36
37
38
39
40
41
42
43
    title: "Jeju-island",
    date: "2022-9-10",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "d",
44
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
45
46
47
48
49
50
51
52
    title: "마! 부싼 가봤나!",
    date: "2022-9-22",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "e",
53
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
54
55
56
    title: "Daegu",
    date: "2022-10-1",
    counts: 0,
57
58
    theme: "ski",
    city: "Daegu",
Kim, MinGyu's avatar
Kim, MinGyu committed
59
60
61
  },
  {
    id: "f",
62
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
63
64
65
    title: "강원도 감자는 맛있다.",
    date: "2022-12-12",
    counts: 0,
66
67
    theme: "camping",
    city: "강원도",
Kim, MinGyu's avatar
Kim, MinGyu committed
68
69
70
  },
  {
    id: "g",
71
    username: "lsb",
Kim, MinGyu's avatar
Kim, MinGyu committed
72
73
74
    title: "부산남자의 서울여행",
    date: "2022-12-25",
    counts: 0,
75
    theme: "activity",
Kim, MinGyu's avatar
Kim, MinGyu committed
76
77
    city: "seoul",
  },
Lee Soobeom's avatar
Lee Soobeom committed
78
79
];

Lee Soobeom's avatar
Lee Soobeom committed
80
export default function BoardPage() {
Kim, MinGyu's avatar
Kim, MinGyu committed
81
  const [posts, setPosts] = useState<PostType[]>(fakes);
Lee Soobeom's avatar
Lee Soobeom committed
82

Kim, MinGyu's avatar
Kim, MinGyu committed
83
84
85
86
87
88
89
90
91
92
93
  const titleHandleClick = (event: MouseEvent<HTMLButtonElement>) => {
    const postId = event.currentTarget.id;
    const newposts = [...posts];
    newposts.forEach((post) => {
      if (post.id === postId) {
        post.counts = post.counts + 1;
        return;
      }
    });
    setPosts(newposts);
  };
94

Kim, MinGyu's avatar
Kim, MinGyu committed
95
96
97
98
99
100
  return (
    <div className="flex flex-col items-center">
      <div className="flex flex-col items-center mt-6">
        <div>`Travel Report's Board`</div>
        <div>`여행지 후기를 남겨주세요!`</div>
      </div>
Lee Soobeom's avatar
Lee Soobeom committed
101

Kim, MinGyu's avatar
Kim, MinGyu committed
102
103
104
105
106
107
108
109
      <div className="flex flex-col w-10/12 mt-16">
        <div className="flex justify-end">
          <div className="border-2 mb-2">
            <Link to="/posting">
              <button>글쓰기+</button>
            </Link>
          </div>{" "}
          {/* Link */}
Lee Soobeom's avatar
Lee Soobeom committed
110
        </div>
Kim, MinGyu's avatar
Kim, MinGyu committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
        <div className="sm:overflow-y-scroll">
          <div className="flex flex-row divide-x-2 border-2 border-solid bg-gray-500 border-y-2 h-10 ">
            <div className="basis-full">Title</div>
            <div className="basis-3/12">Date</div>
            <div className="basis-2/12">Clicks</div>
          </div>
          <div>
            {posts.map((post) => (
              <Post key={post.id} post={post} handleClick={titleHandleClick} />
            ))}
          </div>
        </div>
      </div>
    </div>
  );
}