[d7b7f00] | 1 | import styles from "../../css/AdminPanelCss/modal-style.module.css";
|
---|
| 2 |
|
---|
| 3 | const ApplicationModal = ({ isOpen, onClose, applicationData, setReload }) => {
|
---|
| 4 | if (!isOpen || !applicationData) return null;
|
---|
| 5 |
|
---|
| 6 | const { userData, motivationalLetter, cv } = applicationData;
|
---|
| 7 |
|
---|
| 8 | const downloadCV = () => {
|
---|
| 9 | const base64String = applicationData.cv.startsWith('data:application/pdf;base64,')
|
---|
| 10 | ? cv
|
---|
| 11 | : 'data:application/pdf;base64,' + applicationData.cv;
|
---|
| 12 |
|
---|
| 13 | const base64Data = base64String.split(',')[1];
|
---|
| 14 |
|
---|
| 15 | const byteCharacters = atob(base64Data);
|
---|
| 16 | const byteNumbers = new Array(byteCharacters.length);
|
---|
| 17 |
|
---|
| 18 | for (let i = 0; i < byteCharacters.length; i++) {
|
---|
| 19 | byteNumbers[i] = byteCharacters.charCodeAt(i);
|
---|
| 20 | }
|
---|
| 21 |
|
---|
| 22 | const byteArray = new Uint8Array(byteNumbers);
|
---|
| 23 | const blob = new Blob([byteArray], { type: 'application/pdf' });
|
---|
| 24 |
|
---|
| 25 | const link = document.createElement('a');
|
---|
| 26 | link.href = window.URL.createObjectURL(blob);
|
---|
| 27 | link.download = `CV_${userData.userName}_${userData.userSurname}.pdf`;
|
---|
| 28 | link.click();
|
---|
| 29 | };
|
---|
| 30 |
|
---|
| 31 | const handleAccept = async () => {
|
---|
| 32 | const token = localStorage.getItem("token");
|
---|
| 33 | const { userId } = applicationData
|
---|
| 34 | try {
|
---|
| 35 | const response = await fetch(`http://localhost:8080/api/admin/accept/${userId}`, {
|
---|
| 36 | method: 'POST',
|
---|
| 37 | headers: {
|
---|
| 38 | 'Content-Type': 'application/json',
|
---|
| 39 | 'Authorization': `Bearer ${token}`
|
---|
| 40 | }
|
---|
| 41 | })
|
---|
| 42 |
|
---|
| 43 | if(response.ok)
|
---|
| 44 | {
|
---|
| 45 | //alert("Updated user role successfully!");
|
---|
| 46 | await handleDecline()
|
---|
| 47 | }
|
---|
| 48 | else
|
---|
| 49 | {
|
---|
| 50 | alert(response.status)
|
---|
| 51 | }
|
---|
| 52 | }
|
---|
| 53 | catch (error) {
|
---|
| 54 | alert(error);
|
---|
| 55 | }
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | const handleDecline = async () => {
|
---|
| 59 | const token = localStorage.getItem("token");
|
---|
| 60 | const { id } = applicationData
|
---|
| 61 |
|
---|
| 62 | try {
|
---|
| 63 | const response = await fetch(`http://localhost:8080/api/admin/decline/${id}`, {
|
---|
| 64 | method: 'DELETE',
|
---|
| 65 | headers: {
|
---|
| 66 | 'Content-Type': 'application/json',
|
---|
| 67 | 'Authorization': `Bearer ${token}`
|
---|
| 68 | }
|
---|
| 69 | })
|
---|
| 70 | if(response.ok)
|
---|
| 71 | {
|
---|
| 72 | //alert("Deleted user application successfully!");
|
---|
| 73 | setReload(true)
|
---|
| 74 | onClose();
|
---|
| 75 | }
|
---|
| 76 | else
|
---|
| 77 | {
|
---|
| 78 | alert(response.status)
|
---|
| 79 | }
|
---|
| 80 | }
|
---|
| 81 | catch (error) {
|
---|
| 82 | alert(error);
|
---|
| 83 | }
|
---|
| 84 | }
|
---|
| 85 |
|
---|
| 86 | return (
|
---|
| 87 | <div className={styles.modalOverlay}>
|
---|
| 88 | <div className={styles.modalContent}>
|
---|
| 89 | <button className={styles.closeButton} onClick={onClose}>×</button>
|
---|
| 90 | <h2>Application Details</h2>
|
---|
| 91 | <p><strong>Name:</strong> {userData.userName} {userData.userSurname}</p>
|
---|
| 92 | <p><strong>Email:</strong> {userData.email}</p>
|
---|
| 93 | <p><strong>Phone Number:</strong> {userData.phoneNumber}</p>
|
---|
| 94 | <p><strong>Motivational Letter:</strong> {motivationalLetter}</p>
|
---|
| 95 | <button onClick={downloadCV} className={styles.downloadButton}>
|
---|
| 96 | Download CV
|
---|
| 97 | </button>
|
---|
| 98 | <div className={styles.buttons}>
|
---|
| 99 | <button className={styles.buttonAccept} onClick={handleAccept}>Accept</button>
|
---|
| 100 | <button className={styles.buttonDecline} onClick={handleDecline}>Decline</button>
|
---|
| 101 | </div>
|
---|
| 102 | </div>
|
---|
| 103 | </div>
|
---|
| 104 | );
|
---|
| 105 | };
|
---|
| 106 |
|
---|
| 107 | export default ApplicationModal;
|
---|