src/pages/Prepaid.jsx   A
last analyzed

Complexity

Total Complexity 8
Complexity/F 8

Size

Lines of Code 154
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 125
dl 0
loc 154
rs 10
c 0
b 0
f 0
wmc 8
mnd 7
bc 7
fnc 1
bpm 7
cpm 8
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A Prepaid.jsx ➔ fetchData 0 5 1
1
import React, { useEffect, useState } from "react";
2
import {
3
  PrepaidList,
4
  PrepaidUses,
5
  Filterbar,
6
  PrepaidForm,
7
  PrepaidEdit,
8
} from "../components";
9
import prepaid from "../models/prepaid";
10
const Prepaid = () => {
11
  const [prepaidData, setPrepaidData] = useState();
12
  const [filterPhrase, setFilterPhrase] = useState("");
13
  const [displayForm, setDisplayForm] = useState(false);
14
  const [editForm, setEditForm] = useState(false);
15
  const [logForm, setLogForm] = useState(false);
16
  const [selectedCard, setSelectedCard] = useState();
17
  const [logData, setLogData] = useState();
18
19
  useEffect(() => {
20
    fetchData();
21
  }, []);
22
23
  async function fetchData() {
24
    const res = await prepaid.getPrePaid();
25
    const data = res.prepaids;
26
    setPrepaidData(data);
27
  }
28
29
  const handleAddCard = async (newCard) => {
30
    await prepaid.addPrepaid(newCard);
31
    await fetchData();
32
  };
33
34
  const handleForm = () => {
35
    //event.preventDefault();
36
    if (displayForm) {
37
      setDisplayForm(false);
38
    } else {
39
      setDisplayForm(true);
40
    }
41
  };
42
43
  const handleEditForm = () => {
44
    if (editForm) {
45
      setEditForm(false);
46
    } else {
47
      setEditForm(true);
48
    }
49
  };
50
51
  const handleLogForm = (card) => {
52
    setSelectedCard(card);
53
    if (logForm) {
54
      setLogForm(false);
55
    } else {
56
      setLogForm(true);
57
    }
58
  };
59
60
  const handleEditCard = async (card) => {
61
    await prepaid.editPrepaid(card);
62
    await fetchData();
63
  };
64
65
  const handleRemoveCard = async (id) => {
66
    await prepaid.removePrepaid(id);
67
    await fetchData();
68
  };
69
70
  const overlay = () => {
71
    let state = { click: "auto", backdrop: "blur(0px)" };
72
    if (displayForm || editForm || logForm) {
73
      state = { click: "none", backdrop: "blur(4px)" };
74
    }
75
    return state;
76
  };
77
78
  return (
79
    <>
80
      {editForm ? (
81
        <div
82
          className="fixed top-1/2 left-1/2 z-10
83
        transform -translate-x-1/2 -translate-y-1/2"
84
        >
85
          <PrepaidEdit
86
            handleEditForm={handleEditForm}
87
            selected={selectedCard}
88
            handleEditCard={handleEditCard}
89
          />
90
        </div>
91
      ) : null}
92
      {logForm ? (
93
        <div
94
          className="fixed top-1/2 left-1/2 z-10
95
        transform -translate-x-1/2 -translate-y-1/2"
96
        >
97
          <PrepaidUses handleForm={handleLogForm} logData={logData} />
98
        </div>
99
      ) : null}
100
      {displayForm ? (
101
        <div
102
          className="fixed top-1/2 left-1/2 z-10
103
          transform -translate-x-1/2 -translate-y-1/2"
104
        >
105
          <PrepaidForm handleForm={handleForm} handleAddCard={handleAddCard} />
106
        </div>
107
      ) : null}
108
      <div
109
        style={{
110
          pointerEvents: overlay().click,
111
          filter: overlay().backdrop,
112
        }}
113
        className="flex flex-col w-full px-11"
114
      >
115
        <div className="text-4xl font-semibold p-3">
116
          <h1>Prepaid Cards</h1>
117
        </div>
118
        <div className="flex flex-row justify-between">
119
          <div className="py-3">
120
            <Filterbar
121
              filterPhrase={filterPhrase}
122
              setFilterPhrase={setFilterPhrase}
123
              placeholder={"Filter Cards"}
124
            />
125
          </div>
126
          <div>
127
            <button
128
              onClick={handleForm}
129
              className="
130
                py-2 px-3 transition-colors bg-sidebarHover
131
                 hover:bg-sidebarBlue text-white rounded-full"
132
            >
133
              Create Prepaid
134
            </button>
135
          </div>
136
        </div>
137
        <div className="mt-5">
138
          <PrepaidList
139
            setLogData={setLogData}
140
            prepaidData={prepaidData}
141
            filterPhrase={filterPhrase}
142
            handleRemoveCard={handleRemoveCard}
143
            setSelectedCard={setSelectedCard}
144
            handleEditForm={handleEditForm}
145
            handleLogForm={handleLogForm}
146
          />
147
        </div>
148
      </div>
149
    </>
150
  );
151
};
152
153
export default Prepaid;
154