board.tsx 2.71 KB
Newer Older
Lee Soobeom's avatar
Lee Soobeom committed
1
2
import React, { useState, MouseEvent } from "react";
import { Link } from "react-router-dom";
Lee Soobeom's avatar
Lee Soobeom committed
3
4
import { PostType } from "./typesrc";
import Post from "./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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  {
    id: "a",
    title: "여행가고싶다...",
    date: "2022-06-30",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "b",
    title: "바다!바다!바다!",
    date: "2022-08-01",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "c",
    title: "Jeju-island",
    date: "2022-9-10",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "d",
    title: "마! 부싼 가봤나!",
    date: "2022-9-22",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "e",
    title: "Daegu",
    date: "2022-10-1",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "f",
    title: "강원도 감자는 맛있다.",
    date: "2022-12-12",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
  {
    id: "g",
    title: "부산남자의 서울여행",
    date: "2022-12-25",
    counts: 0,
    theme: "surfing",
    city: "seoul",
  },
Lee Soobeom's avatar
Lee Soobeom committed
71
72
];

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

Kim, MinGyu's avatar
Kim, MinGyu committed
76
77
78
79
80
81
82
83
84
85
86
  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);
  };
87

Kim, MinGyu's avatar
Kim, MinGyu committed
88
89
90
91
92
93
  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
94

Kim, MinGyu's avatar
Kim, MinGyu committed
95
96
97
98
99
100
101
102
      <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
103
        </div>
Kim, MinGyu's avatar
Kim, MinGyu committed
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
        <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>
  );
}