body.tsx 4.62 KB
Newer Older
1
2
3
4
5
import React, { useEffect, MouseEvent, useState } from "react";
import { Outlet, useSearchParams } from "react-router-dom";
import Theme from "./theme";
import Citylist from "../Pages/citylist";
import { getPicure } from "../Pages/pic";
백승민's avatar
백승민 committed
6
import { PaginationLeft, PaginationRight } 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
17
  const offset1 = (page - 1) * limit;
  const offset2 = page * limit;
  const offset3 = (page + 1) * limit;
  // const [selected, setSelected] = useState(1);
18
19
20
21
  let getPics = getPicure();

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

  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 == "")
    );
  });

백승민's avatar
백승민 committed
53
54
55
  // const pre = () => {
  //   setSelected(selected - 1)
  // };
백승민's avatar
백승민 committed
56

백승민's avatar
백승민 committed
57
58
59
  // const next = () => {
  //   setSelected(selected + 1)
  // };
백승민's avatar
백승민 committed
60

61
62
63
64
  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
65
66
67
        <div className="w-50">
          <Citylist handleClick={cityHandleClick} />
        </div>
백승민's avatar
백승민 committed
68
        <div className="flex flex-col overflow-hidden">
백승민's avatar
백승민 committed
69
          <div>
백승민's avatar
백승민 committed
70
71
            <PaginationLeft total={Idpics.length} page={page} setPage={setPage} />
            <PaginationRight total={Idpics.length} page={page} setPage={setPage} />
백승민's avatar
백승민 committed
72
          </div>
백승민's avatar
백승민 committed
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
          <div className=" md:mr-10 md:basis-4/5  flex flex-row  transition duration-500 relative w-full " style={{ "transform": 'translate(-' + (page - 1) * 100 + '%)' }}>
            <div className= "min-w-full">
              <div className="inline-grid grid-cols-5">
                {Idpics.slice(0,15).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>
                  
                ))}
              </div>
            </div>
            <div className= "min-w-full">
              <div className="inline-grid grid-rows-3 grid-cols-5">
                {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>
                  
                ))}
              </div>
            </div>
            <div className= "min-w-full">
              <div className="inline-grid grid-rows-3 grid-cols-5">
                {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
125
              </div>
126
            </div>
백승민's avatar
백승민 committed
127
          </div>
128
129
        </div>
      </div>
백승민's avatar
백승민 committed
130

131
132
133
134
135
      <Outlet />
    </div>
    // Body Page
  );
}