TicketFeeTable.js 8.25 KB
Newer Older
1
import { useState, useEffect } from "react";
Kim, Subin's avatar
Kim, Subin committed
2
import { useHistory } from "react-router-dom";
3
4
import cinemaApi from "../../apis/cinema.api.js";
import catchErrors from "../../utils/catchErrors.js";
5
import styles from "./admin.module.scss";
6

Kim, Subin's avatar
Kim, Subin committed
7
const TicketFeeTable = ({ selectTheater, setEditFee, formRef }) => {
8
9
    const [ticketFee, setTicketFee] = useState([])
    const [error, setError] = useState("")
Kim, Subin's avatar
Kim, Subin committed
10
    const history = useHistory()
11
12

    useEffect(() => {
Kim, Subin's avatar
Kim, Subin committed
13
14
        if (selectTheater !== 0) getOne(selectTheater)
    }, [selectTheater])
15

Kim, Subin's avatar
Kim, Subin committed
16
    async function getOne(theatertypeId) {
Kim, Subin's avatar
Kim, Subin committed
17
        try {
Kim, Subin's avatar
Kim, Subin committed
18
19
20
            setError("")
            const res = await cinemaApi.getTicketFeeOne(theatertypeId)
            setTicketFee([res])
Kim, Subin's avatar
Kim, Subin committed
21
22
23
        } catch (error) {
            catchErrors(error, setError)
        }
24
25
    }

26
    async function editRow(theatertypeId) {
27
28
        try {
            setError("")
29
            const res = await cinemaApi.getTicketFeeOne(theatertypeId)
Kim, Subin's avatar
Kim, Subin committed
30
            setEditFee({ ...res })
31
            formRef?.current.scrollIntoView({ behavior: "smooth", block: "center" })
32
33
34
35
36
        } catch (error) {
            catchErrors(error, setError)
        }
    }

37
    async function deleteData(theatertypeId) {
38
39
        try {
            setError("")
40
            await cinemaApi.removeTicketFee(theatertypeId)
41
            alert("해당 관람료 정보를 성공적으로 삭제했습니다.")
Kim, Subin's avatar
Kim, Subin committed
42
            window.location.reload()
43
44
45
46
47
        } catch (error) {
            catchErrors(error, setError)
        }
    }

Kim, Subin's avatar
Kim, Subin committed
48
49
50
51
    function priceToString(price) {
        return price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
    }

52
    return (
Kim, Subin's avatar
Kim, Subin committed
53
        <table className={`table text-center align-middle ${styles.tableForm}`} style={{ color: (/admin/g.test(history.location.pathname)) ? "" : "white" }}>
54
            <thead className={`table-dark align-middle ${styles.dNone}`}>
Kim, Subin's avatar
Kim, Subin committed
55
                <tr>
56
                    <th className={styles.word}>상영관 종류</th>
Kim, Subin's avatar
Kim, Subin committed
57
58
59
60
61
                    <th>주중 / 주말</th>
                    <th>시간대</th>
                    <th>청소년</th>
                    <th>일반</th>
                    <th>경로</th>
Kim, Subin's avatar
Kim, Subin committed
62
                    {(/admin/g.test(history.location.pathname)) ? <th style={{ width: "14%" }}></th> : <></>}
Kim, Subin's avatar
Kim, Subin committed
63
64
65
66
67
68
                </tr>
            </thead>
            <tbody>
                {ticketFee.length !== 0 ? ticketFee.map(info =>
                    <>
                        <tr>
69
                            <td rowSpan="6" className={`d-block d-md-table-cell ${styles.Row} ${styles.type}`}>{info.theatertype.theaterTypeName}</td>
70
71
72
73
74
                            <td rowSpan="3" className={`d-block d-md-table-cell ${styles.Row} ${styles.moreData}`} data-label="- 청소년 / 성인 / 경로">주중(~)</td>
                            <td className="d-inline-block d-md-table-cell">조조 (06:00 ~ )</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.morning + info.youth + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.morning + info.adult + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.morning + info.senior + info.defaultPrice)}</td>
Kim, Subin's avatar
Kim, Subin committed
75
                            {(/admin/g.test(history.location.pathname))
Kim, Subin's avatar
Kim, Subin committed
76
77
78
79
80
81
82
83
                                ?
                                <td rowSpan="6" className="d-none d-md-table-cell">
                                    <div className="d-flex flex-column">
                                        <button type="button" className="btn btn-primary my-1" onClick={() => editRow(info.theatertypeId)}>수정</button>
                                        <button type="button" className="btn btn-danger my-1" onClick={() => deleteData(info.theatertypeId)}>삭제</button>
                                    </div>
                                </td>
                                : <></>}
Kim, Subin's avatar
Kim, Subin committed
84
85
                        </tr>
                        <tr>
86
87
88
89
                            <td className="d-inline-block d-md-table-cell">일반 (11:00 ~ )</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.day + info.youth + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.day + info.adult + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.day + info.senior + info.defaultPrice)}</td>
Kim, Subin's avatar
Kim, Subin committed
90
91
                        </tr>
                        <tr>
92
93
94
95
                            <td className="d-inline-block d-md-table-cell">심야 (00:00 ~ )</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.night + info.youth + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.night + info.adult + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekdays + info.night + info.senior + info.defaultPrice)}</td>
Kim, Subin's avatar
Kim, Subin committed
96
97
                        </tr>
                        <tr>
98
                            <td rowSpan="3" className={`d-block d-md-table-cell ${styles.Row} ${styles.moreData} ${styles.word}`} data-label="- 청소년 / 성인 / 경로">주말(~)  공휴일</td>
99
100
101
102
                            <td className="d-inline-block d-md-table-cell">조조 (06:00 ~ )</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.morning + info.youth + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.morning + info.adult + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.morning + info.senior + info.defaultPrice)}</td>
Kim, Subin's avatar
Kim, Subin committed
103
104
                        </tr>
                        <tr>
105
106
107
108
                            <td className="d-inline-block d-md-table-cell">일반 (11:00 ~ )</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.day + info.youth + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.day + info.adult + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.day + info.senior + info.defaultPrice)}</td>
Kim, Subin's avatar
Kim, Subin committed
109
                        </tr>
110
111
112
113
114
                        <tr className={styles.Row}>
                            <td className="d-inline-block d-md-table-cell">심야 (00:00 ~ )</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.night + info.youth + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.night + info.adult + info.defaultPrice)}</td>
                            <td className="d-inline-block d-md-table-cell">{priceToString(info.weekend + info.night + info.senior + info.defaultPrice)}</td>
Kim, Subin's avatar
Kim, Subin committed
115
                            {(/admin/g.test(history.location.pathname))
Kim, Subin's avatar
Kim, Subin committed
116
117
118
119
120
121
122
123
                                ?
                                <td className={`d-block d-md-none ${styles.borderTop}`}>
                                    <div className="d-flex justify-content-end">
                                        <button type="button" className="btn btn-primary" onClick={() => editRow(info.theatertypeId)}>수정</button>
                                        <button type="button" className="btn btn-danger ms-2" onClick={() => deleteData(info.theatertypeId)}>삭제</button>
                                    </div>
                                </td>
                                : <></>}
Kim, Subin's avatar
Kim, Subin committed
124
125
126
                        </tr>
                    </>)
                    : <tr>
Kim, Subin's avatar
Kim, Subin committed
127
                        <td colSpan="7">상단의 상영관을 선택해주십시오.</td>
Kim, Subin's avatar
Kim, Subin committed
128
129
130
                    </tr>}
            </tbody>
        </table>
131
132
133
    )
}

Kim, Subin's avatar
Kim, Subin committed
134
export default TicketFeeTable