|
1 |
| -import { useState } from 'react'; |
| 1 | +import React, { useState } from 'react'; |
2 | 2 | import profile_pic1 from '../Misc/8-bit-dog-nobg.png';
|
3 | 3 | import 'bootstrap/dist/css/bootstrap.min.css';
|
4 | 4 | import LinkDevice from "../Components/LinkDevice";
|
5 | 5 |
|
6 | 6 | interface SettingsProps {
|
7 |
| - username: string; |
| 7 | + username: string; |
8 | 8 | }
|
9 | 9 |
|
10 | 10 | function Settings(
|
11 |
| - { username }: SettingsProps |
| 11 | + { username }: SettingsProps |
12 | 12 | ) {
|
13 |
| - const [items, setItems] = useState(['Device 1', 'Device 2', 'Device 3']); |
14 |
| - const [showLinkDevice, setShowLinkDevice] = useState<boolean>(true); |
15 |
| - |
16 |
| - const removeItem = (index: number) => { |
17 |
| - setItems(items.filter((_, i) => i !== index)); |
18 |
| - }; |
19 |
| - |
20 |
| - // const resetItem = (index: number) => { |
21 |
| - // setItems(items.map((item, i) => (i === index ? `Item ${index + 1}` : item))); |
22 |
| - // }; |
23 |
| - |
24 |
| - return ( |
25 |
| - <div className='d-flex justify-content-center pt-4 pb-2'> |
26 |
| - <div className="card align-items-center text-bg-light" style={{ width: "500px" }}> |
27 |
| - <img src={profile_pic1} className="card-img-top py-3" alt="profile picture" style={{ width: "100%", height: "auto" }} /> |
28 |
| - <h2 className="card-title text-center"><kbd className='bg-success text-white'>PROFILE</kbd></h2> |
29 |
| - <div className="card-body" style={{ width: "100%" }}> |
30 |
| - <div className="input-group mb-4" style={{ height: "60px" }}> |
31 |
| - <div className="input-group-prepend"> |
32 |
| - <div className="input-group-text" style={{ fontSize: "1.5rem", height: "60px", display: 'flex', alignItems: 'center' }}>@</div> |
| 13 | + const [items, setItems] = useState(['Device 1', 'Device 2', 'Device 3']); |
| 14 | + const [showLinkDevice, setShowLinkDevice] = useState<boolean>(true); |
| 15 | + const [selectedIndex, setSelectedIndex] = useState<number | null>(null); |
| 16 | + const [showModal, setShowModal] = useState<boolean>(false); |
| 17 | + const [itemToRemove, setItemToRemove] = useState<number | null>(null); |
| 18 | + |
| 19 | + const handleRemoveItem = (index: number) => { |
| 20 | + setShowModal(true); |
| 21 | + setItemToRemove(index); |
| 22 | + }; |
| 23 | + |
| 24 | + const confirmRemoveItem = () => { |
| 25 | + if (itemToRemove !== null) { |
| 26 | + setItems(items.filter((_, i) => i !== itemToRemove)); |
| 27 | + if (selectedIndex === itemToRemove) { |
| 28 | + setSelectedIndex(null); |
| 29 | + } |
| 30 | + setItemToRemove(null); |
| 31 | + } |
| 32 | + setShowModal(false); |
| 33 | + }; |
| 34 | + |
| 35 | + const cancelRemoveItem = () => { |
| 36 | + setShowModal(false); |
| 37 | + setItemToRemove(null); |
| 38 | + }; |
| 39 | + |
| 40 | + const resetItem = (index: number) => { |
| 41 | + setItems(items.map((item, i) => (i === index ? `Item ${index + 1}` : item))); |
| 42 | + }; |
| 43 | + |
| 44 | + const selectItem = (index: number) => { |
| 45 | + setSelectedIndex(index); |
| 46 | + }; |
| 47 | + |
| 48 | + return ( |
| 49 | + <div className='d-flex justify-content-center pt-4 pb-2'> |
| 50 | + <div className="card align-items-center text-bg-light" style={{ width: "500px" }}> |
| 51 | + <img src={profile_pic1} className="card-img-top py-3" alt="profile picture" style={{ width: "100%", height: "auto" }} /> |
| 52 | + <h2 className="card-title text-center"><kbd className='bg-success text-white'>PROFILE</kbd></h2> |
| 53 | + <div className="card-body" style={{ width: "100%" }}> |
| 54 | + <div className="input-group mb-4" style={{ height: "60px" }}> |
| 55 | + <div className="input-group-prepend"> |
| 56 | + <div className="input-group-text" style={{ fontSize: "1.5rem", height: "60px", display: 'flex', alignItems: 'center' }}>@</div> |
| 57 | + </div> |
| 58 | + <input type="text" className="form-control text-black" placeholder={username} disabled style={{ fontSize: "1.5rem", height: "60px" }}></input> |
| 59 | + </div> |
| 60 | + <div className='d-flex justify-content-center pt-2'> |
| 61 | + <button type="button" className="btn btn-success btn-block w-100" style={{ fontSize: "1.5rem", height: "60px" }} onClick={() => setShowLinkDevice(false)} >Link Device</button> |
| 62 | + </div> |
| 63 | + <div className='pt-4' style={{ width: "100%" }}> |
| 64 | + <ul className="list-group" style={{ fontSize: "1.2rem" }}> |
| 65 | + {items.map((item, index) => ( |
| 66 | + <li key={index} className="list-group-item d-flex justify-content-between align-items-center py-3"> |
| 67 | + {item} |
| 68 | + <div> |
| 69 | + <button |
| 70 | + className="btn btn-primary btn-lg mx-1" |
| 71 | + onClick={() => selectItem(index)} |
| 72 | + disabled={selectedIndex === index} |
| 73 | + > |
| 74 | + {selectedIndex === index ? 'Selected' : 'Select'} |
| 75 | + </button> |
| 76 | + <button className="btn btn-danger btn-lg mx-1" onClick={() => handleRemoveItem(index)}>Remove</button> |
| 77 | + </div> |
| 78 | + </li> |
| 79 | + ))} |
| 80 | + </ul> |
| 81 | + </div> |
| 82 | + </div> |
33 | 83 | </div>
|
34 |
| - <input type="text" className="form-control text-black" placeholder={username} disabled style={{ fontSize: "1.5rem", height: "60px" }}></input> |
35 |
| - </div> |
36 |
| - <div className='d-flex justify-content-center pt-2'> |
37 |
| - <button type="button" className="btn btn-success btn-block w-100" style={{ fontSize: "1.5rem", height: "60px" }} onClick={() => setShowLinkDevice(false)} >Link Device</button> |
38 |
| - </div> |
39 |
| - <div className='pt-4' style={{ width: "100%" }}> |
40 |
| - <ul className="list-group" style={{ fontSize: "1.2rem" }}> |
41 |
| - {items.map((item, index) => ( |
42 |
| - <li key={index} className="list-group-item d-flex justify-content-between align-items-center py-3"> |
43 |
| - {item} |
44 |
| - <div> |
45 |
| - <button className="btn btn-danger btn-lg mx-1" onClick={() => removeItem(index)}>Remove</button> |
46 |
| - </div> |
47 |
| - </li> |
48 |
| - ))} |
49 |
| - </ul> |
50 |
| - </div> |
| 84 | + {showLinkDevice === false && ( |
| 85 | + <LinkDevice onClose={() => setShowLinkDevice(true)} /> |
| 86 | + )} |
| 87 | + |
| 88 | + {showModal && ( |
| 89 | + <div className="modal show d-block" tabIndex={-1} role="dialog"> |
| 90 | + <div className="modal-dialog" role="document"> |
| 91 | + <div className="modal-content"> |
| 92 | + <div className="modal-header"> |
| 93 | + <h5 className="modal-title">Confirm Removal</h5> |
| 94 | + </div> |
| 95 | + <div className="modal-body"> |
| 96 | + <p>Are you sure you want to remove this pet?</p> |
| 97 | + </div> |
| 98 | + <div className="modal-footer"> |
| 99 | + <button type="button" className="btn btn-secondary" onClick={cancelRemoveItem}>No</button> |
| 100 | + <button type="button" className="btn btn-danger" onClick={confirmRemoveItem}>Yes</button> |
| 101 | + </div> |
| 102 | + </div> |
| 103 | + </div> |
| 104 | + </div> |
| 105 | + )} |
51 | 106 | </div>
|
52 |
| - </div> |
53 |
| - {showLinkDevice==false && ( |
54 |
| - <LinkDevice onClose={() => setShowLinkDevice(true)} /> |
55 |
| - )} |
56 |
| - </div> |
57 |
| - ); |
| 107 | + ); |
58 | 108 | }
|
59 | 109 |
|
60 | 110 | export default Settings;
|
0 commit comments