source: sources/client/src/components/user/Session/SessionUser/index.js@ bc20307

Last change on this file since bc20307 was bc20307, checked in by Tasevski2 <39170279+Tasevski2@…>, 2 years ago

Push before video

  • Property mode set to 100644
File size: 7.3 KB
Line 
1import { useState } from 'react';
2import {
3 SessionInfo,
4 PlateSelectInput,
5 PlateAndAddPlateBtnWrapper,
6 ZoneSelectInput,
7 DropdownItem,
8 AddIcon,
9 AddPlate,
10 Input,
11 SavePlate,
12 SaveIcon,
13 PlateDropdownItem,
14 RemoveIcon,
15} from './styles';
16
17import { sessionStatus as enumsSessionStatus } from '../../../../config/enums';
18import useForm from '../../../../hooks/useForm';
19import useSaveUserPlate from '../../../../hooks/useSaveUserPlate';
20import useDeleteUserPlate from '../../../../hooks/useDeleteUserPlate';
21import AbsoluteLoader from '../../../Loaders/AbsoluteLoader';
22import { IconButton } from '@mui/material';
23import useGetData from '../../../../hooks/useGetData';
24
25const MenuProps = {
26 PaperProps: {
27 style: {
28 maxHeight: 150,
29 width: '35px',
30 },
31 },
32};
33
34const SessionUser = ({
35 sessionStatus,
36 zones,
37 data,
38 onFormChange,
39 setNewData,
40}) => {
41 const { data: plates, isLoading: isLoadingPlates, setData: setPlates } = useGetData({
42 url: '/registiranParkirac/tablici',
43 });
44 const [newPlate, setNewPlate] = useState('');
45 const [toggleAddPlate, setToggleAddPlate] = useState(false);
46 const { saveUserPlate } = useSaveUserPlate();
47 const { deleteUserPlate } = useDeleteUserPlate();
48 const [isLoadingSavePlate, setIsLoadingSavePlate] = useState(false);
49 const [isLoadingDeletePlate, setIsLoadingDeletePlate] = useState({
50 state: false,
51 itemInd: null,
52 });
53 const savePlate = (plate) => {
54 setPlates(prevState => [...prevState, plate]);
55 setToggleAddPlate(false);
56 setNewData({ ...data, plate: newPlate });
57 setNewPlate('');
58 };
59
60 const handleSavePlate = () => {
61 saveUserPlate({
62 savePlate,
63 plate: newPlate,
64 setIsLoadingSavePlate,
65 });
66 };
67
68 const deletePlate = (plate) => {
69 let index = plates.indexOf(plate);
70 let _plates = [...plates];
71 _plates.splice(index, 1);
72 if (_plates.length > index) {
73 setNewData({ ...data, plate: _plates[index] });
74 } else {
75 index--;
76 if (_plates.length !== 0) {
77 setNewData({
78 ...data,
79 plate: _plates[_plates.length - 1],
80 });
81 } else {
82 setNewData({ ...data, plate: 'NONE' });
83 }
84 }
85 setPlates(_plates);
86 };
87
88 const handleDeletePlate = (e, plate) => {
89 e.stopPropagation();
90 let ind = plates.indexOf(plate);
91 deleteUserPlate({ deletePlate, plate, ind, setIsLoadingDeletePlate });
92 };
93
94 return (
95 <SessionInfo>
96 <PlateAndAddPlateBtnWrapper
97 center={sessionStatus !== null}
98 >
99 {!toggleAddPlate ? (
100 <PlateSelectInput
101 MenuProps={MenuProps}
102 name='plate'
103 onChange={onFormChange}
104 value={data.plate}
105 renderValue={(v) => v}
106 inputProps={{
107 readOnly:
108 sessionStatus === null
109 ? false
110 : true,
111 }}
112 $show={sessionStatus === null}
113 >
114 <DropdownItem value='NONE'>
115 <em>NONE</em>
116 </DropdownItem>
117 {!isLoadingPlates &&
118 plates.map((p, ind) => (
119 <PlateDropdownItem key={ind} value={p}>
120 {p}
121 {isLoadingDeletePlate.state &&
122 isLoadingDeletePlate.itemInd === ind ? (
123 <AbsoluteLoader
124 containerStyle={{
125 width: '41.19px',
126 height: '41.19px',
127 }}
128 />
129 ) : (
130 <IconButton
131 style={{
132 padding: '3px',
133 zIndex: 100,
134 }}
135 onClick={(e) =>
136 handleDeletePlate(e, p, ind)
137 }
138 >
139 <RemoveIcon />
140 </IconButton>
141 )}
142 </PlateDropdownItem>
143 ))}
144 </PlateSelectInput>
145 ) : (
146 <Input
147 autoFocus
148 disabled={
149 sessionStatus === null
150 ? false
151 : true
152 }
153 name='newPlate'
154 style={{
155 width: '49%',
156 textAlign: 'center',
157 }}
158 value={newPlate}
159 onChange={(e) => setNewPlate(e.target.value)}
160 />
161 )}
162 {sessionStatus === null ? (
163 !toggleAddPlate ? (
164 <AddPlate onClick={() => setToggleAddPlate(true)}>
165 <AddIcon />
166 таблица
167 </AddPlate>
168 ) : isLoadingSavePlate ? (
169 <AbsoluteLoader
170 containerStyle={{
171 width: '59.44px',
172 height: '59.44px',
173 margin: 'auto',
174 }}
175 />
176 ) : (
177 <SavePlate onClick={handleSavePlate}>
178 <SaveIcon />
179 сочувај
180 </SavePlate>
181 )
182 ) : null}
183 </PlateAndAddPlateBtnWrapper>
184 <ZoneSelectInput
185 MenuProps={MenuProps}
186 name='zone'
187 onChange={onFormChange}
188 value={data.zone}
189 inputProps={{
190 readOnly:
191 sessionStatus === null
192 ? false
193 : true,
194 }}
195 $show={sessionStatus === null}
196 >
197 <DropdownItem value='NONE'>
198 <em>NONE</em>
199 </DropdownItem>
200 {zones.map((z, ind) => (
201 <DropdownItem key={ind} value={z}>
202 {z}
203 </DropdownItem>
204 ))}
205 </ZoneSelectInput>
206 </SessionInfo>
207 );
208};
209
210export default SessionUser;
Note: See TracBrowser for help on using the repository browser.