body.tsx 4.16 KB
Newer Older
백승민's avatar
백승민 committed
1
import React, { useEffect, MouseEvent, useState, useRef } from "react";
2
3
4
5
import { Outlet, useSearchParams } from "react-router-dom";
import Theme from "./theme";
import Citylist from "../Pages/citylist";
import { getPicure } from "../Pages/pic";
백승민's avatar
1    
백승민 committed
6
import { Pagination} from "../Pages/picpagination";
7
8
9
10
11
12
13

const initSearchParams = { theme: "", city: "" };

export default function Body() {
  let limit = 15;
  const [searchParams, setSearchParams] = useSearchParams(initSearchParams);
  const [page, setPage] = useState(1);
백승민's avatar
백승민 committed
14
15
16
  const offset1 = (page - 1) * limit;
  const offset2 = page * limit;
  const offset3 = (page + 1) * limit;
17
18
19
20
  let getPics = getPicure();

  useEffect(() => {
    console.log(searchParams.get("theme"), searchParams.get("city"));
백승민's avatar
백승민 committed
21
    setSearchParams(searchParams)
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
  }, []);

  const themeHandleClick = (event: MouseEvent<HTMLButtonElement>) => {
    console.log(`theme id= ${event.currentTarget.id}`);
    setSearchParams({
      ...Object.fromEntries(searchParams),
      theme: event.currentTarget.id,
    });
  };

  const cityHandleClick = (event: MouseEvent<HTMLButtonElement>) => {
    console.log(`city id= ${event.currentTarget.id}`);
    setSearchParams({
      ...Object.fromEntries(searchParams),
      city: event.currentTarget.id,
    });
  };

  let themechange = searchParams.get("theme");
  let citylistchange = searchParams.get("city");

  const Idpics = getPics.filter((p) => {
    return (
      (p.themeid == themechange && p.cityid == citylistchange) ||
      (p.themeid == themechange && citylistchange == "") ||
      (themechange == "" && p.cityid == citylistchange) ||
      (themechange == "" && citylistchange == "")
    );
  });

  return (
    <div className="flex flex-col px-1 py-1">
      <Theme handleClick={themeHandleClick} />
      <div className="flex flex-col md:flex-row py-10 ">
백승민's avatar
백승민 committed
56
57
58
        <div className="w-50">
          <Citylist handleClick={cityHandleClick} />
        </div>
백승민's avatar
백승민 committed
59
        <div className="flex flex-col  overflow-hidden">
백승민's avatar
1    
백승민 committed
60
61
          <Pagination total={Idpics.length} page={page} setPage={setPage} />
          <div className=" md:mr-10 md:basis-4/5  flex flex-row  transition duration-500 relative w-full " style={{"transform" : "translate(-"+(page-1)*100+"%)"}}>  
백승민's avatar
백승민 committed
62
            <div className="min-w-full">
백승민's avatar
백승민 committed
63
              <div className="inline-grid grid-cols-5">
백승민's avatar
백승민 committed
64
65
66
67
68
69
70
71
72
73
74
75
                {Idpics.slice(offset1, offset1 + limit).map((pic, index: number) => (

                  <div
                    className="m-1 shrink-0 bg-gray-200 rounded shadow-md"
                    key={index}>
                    <img
                      src={pic.url}
                      className="w-full h-10 md:h-20 object-center"
                    />
                    <p className="text-center text-xs">{pic.name}</p>
                  </div>

백승민's avatar
백승민 committed
76
77
78
                ))}
              </div>
            </div>
백승민's avatar
백승민 committed
79
            <div className="min-w-full">
백승민's avatar
백승민 committed
80
              <div className="inline-grid grid-rows-3 grid-cols-5">
백승민's avatar
백승민 committed
81
82
83
84
85
86
87
88
89
90
91
92
93
                {Idpics.slice(offset2, offset2 + limit).map((pic, index: number) => (

                  <div
                    className="m-1 shrink-0 bg-gray-200 rounded shadow-md"
                    key={index}
                  >
                    <img
                      src={pic.url}
                      className="w-full h-10 md:h-20 object-center"
                    />
                    <p className="text-center text-xs">{pic.name}</p>
                  </div>

백승민's avatar
백승민 committed
94
95
96
                ))}
              </div>
            </div>
백승민's avatar
백승민 committed
97
            <div className="min-w-full">
백승민's avatar
백승민 committed
98
              <div className="inline-grid grid-rows-3 grid-cols-5">
백승민's avatar
백승민 committed
99
100
101
102
103
104
105
106
107
108
109
110
111
                {Idpics.slice(offset3, offset3 + limit).map((pic, index: number) => (

                  <div
                    className="m-1 shrink-0 bg-gray-200 rounded shadow-md"
                    key={index}
                  >
                    <img
                      src={pic.url}
                      className="w-full h-10 md:h-20 object-center"
                    />
                    <p className="text-center text-xs">{pic.name}</p>
                  </div>

백승민's avatar
백승민 committed
112
                ))}
백승민's avatar
백승민 committed
113
              </div>
114
            </div>
백승민's avatar
백승민 committed
115
          </div>
116
117
        </div>
      </div>
백승민's avatar
백승민 committed
118

119
120
121
122
123
      <Outlet />
    </div>
    // Body Page
  );
}
백승민's avatar
백승민 committed
124