Files
gujurly.com/resources/views/web/components/application_modal.blade.php

122 lines
6.7 KiB
PHP

<div class="modal fade" id="applyInternshipModal" tabindex="-1" aria-labelledby="applyInternshipModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content rounded-3">
<div class="modal-header">
<h5 class="modal-title" id="applicationModalLabel">{{ __('Apply for') }} <span id="jobTitle"></span></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{{ __('Close') }}"></button>
</div>
<div class="modal-body">
<h6 id="jobLocation"></h6>
<p id="jobSalary"></p>
<p id="jobDescription"></p>
<form id="applicationForm" enctype="multipart/form-data" action="{{ $jobType === 'internship' ? route('internship.store') : route('career.store') }}" method="POST">
@csrf
@if($jobType === 'internship')
<input type="hidden" name="internship_id" id="jobIdInput" value="{{ $jobId }}">
@else
<input type="hidden" name="career_id" id="jobIdInput" value="{{ $jobId }}">
@endif
<div class="row">
<div class="col-md-6 mb-3">
<label for="name" class="form-label">{{ __('Name') }} <span> *</span></label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<div class="col-md-6 mb-3">
<label for="birthdate" class="form-label">{{ __('Birthdate') }} <span> *</span></label>
<input type="date" class="form-control" id="birthdate" name="birthdate" required>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="email" class="form-label">{{ __('Email') }} <span> *</span></label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="col-md-6 mb-3">
<label for="phone_number" class="form-label">{{ __('Phone Number') }} <span> *</span></label>
<input type="text" class="form-control" id="phone_number" name="phone_number" required>
</div>
</div>
<div class="mb-3">
<label for="resume_file" class="form-label">{{ __('Resume (PDF, DOC, DOCX)') }} <span> *</span></label>
<input type="file" class="form-control" id="resume_file" name="resume_file" accept=".pdf,.doc,.docx" required>
</div>
<div class="mb-3">
<label for="cover_letter" class="form-label">{{ __('Cover Letter (Optional)') }}</label>
<textarea class="form-control" id="cover_letter" name="cover_letter" rows="5"></textarea>
</div>
<button type="submit" class="btn btn-primary">{{ __('Submit Application') }}</button>
</form>
</div>
</div>
</div>
</div>
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', function () {
var applicationModal = document.getElementById('applyInternshipModal'); // Changed ID here
if (applicationModal) { // Add a check for modal existence
applicationModal.addEventListener('show.bs.modal', function (event) {
var button = event.relatedTarget; // Button that triggered the modal
var jobId = button.getAttribute('data-job-id'); // Generic attribute for job ID
var jobType = button.getAttribute('data-job-type'); // Generic attribute for job type
var modalTitle = applicationModal.querySelector('#jobTitle');
var modalLocation = applicationModal.querySelector('#jobLocation');
var modalSalary = applicationModal.querySelector('#jobSalary');
var modalDescription = applicationModal.querySelector('#jobDescription');
var jobIdInput = applicationModal.querySelector('#jobIdInput');
var applicationForm = applicationModal.querySelector('#applicationForm');
// Set dynamic values
modalTitle.textContent = button.getAttribute('data-' + jobType + '-title');
modalLocation.textContent = '{{ __('Location') }}: ' + button.getAttribute('data-' + jobType + '-location');
modalSalary.textContent = '{{ __('Salary') }}: ' + button.getAttribute('data-' + jobType + '-salary') + ' / {{ __('Per monthly') }}';
modalDescription.textContent = button.getAttribute('data-' + jobType + '-description');
jobIdInput.value = jobId;
// Set form action dynamically
if (jobType === 'internship') {
applicationForm.action = '{{ route('internship.store') }}';
jobIdInput.name = 'internship_id';
} else if (jobType === 'career') {
applicationForm.action = '{{ route('applications.store') }}'; // Assuming careers still use applications.store
jobIdInput.name = 'career_id';
}
});
// Handle form submission with AJAX
document.getElementById('applicationForm').addEventListener('submit', function (e) {
e.preventDefault();
let form = e.target;
let formData = new FormData(form);
fetch(form.action, {
method: 'POST',
body: formData,
headers: {
'Accept': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
}
})
.then(response => response.json())
.then(data => {
if (data.message) {
alert(data.message);
var modal = bootstrap.Modal.getInstance(applicationModal);
modal.hide();
form.reset();
} else {
alert('{{ __('Error') }}: ' + data.message);
}
})
.catch(error => {
console.error('{{ __('Error') }}:', error);
alert('{{ __('An error occurred. Please try again.') }}');
});
});
}
});
</script>
@endpush