Remove unused class column from enquiries data table and enhance form validation
This commit is contained in:
@@ -30,9 +30,6 @@ class DashboardController extends Controller
|
|||||||
$model = Enquiry::query()->where('is_read', 0)->latest();
|
$model = Enquiry::query()->where('is_read', 0)->latest();
|
||||||
return DataTables::eloquent($model)
|
return DataTables::eloquent($model)
|
||||||
->addIndexColumn()
|
->addIndexColumn()
|
||||||
->editColumn('class', function (Enquiry $enquiry) {
|
|
||||||
return $enquiry->class ?? '-';
|
|
||||||
})
|
|
||||||
->editColumn('subject', function (Enquiry $enquiry) {
|
->editColumn('subject', function (Enquiry $enquiry) {
|
||||||
return $enquiry->subject ?? '-';
|
return $enquiry->subject ?? '-';
|
||||||
})
|
})
|
||||||
|
@@ -152,7 +152,7 @@
|
|||||||
<label
|
<label
|
||||||
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
||||||
for="{{ $country->id }}"> <input type="radio" name="country_id"
|
for="{{ $country->id }}"> <input type="radio" name="country_id"
|
||||||
value="{{ $country->id }}" id="{{ $country->id }}">
|
value="{{ $country->id }}" id="{{ $country->id }}" required>
|
||||||
{{ $country->title }} </label>
|
{{ $country->title }} </label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -173,7 +173,7 @@
|
|||||||
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
||||||
for="{{ $status }}"> <input type="radio"
|
for="{{ $status }}"> <input type="radio"
|
||||||
name="status_type_id" value="{{ $status }}"
|
name="status_type_id" value="{{ $status }}"
|
||||||
id="{{ $status }}"> {{ $status }}</label>
|
id="{{ $status }}" required> {{ $status }}</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
<label
|
<label
|
||||||
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
||||||
for="yes"> <input name="services" type="radio" id="yes"
|
for="yes"> <input name="services" type="radio" id="yes"
|
||||||
value="yes"> Yes</label>
|
value="yes" required> Yes</label>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -224,9 +224,9 @@
|
|||||||
|
|
||||||
<label
|
<label
|
||||||
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
class="text-20 text-ter p-0 m-0 flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs"
|
||||||
for="{{ $level }}"> <input type="radio" name=""
|
for="{{ $level }}"> <input type="radio"
|
||||||
id="{{ $level }}" value="">
|
name="program_level" id="level_{{ $loop->index }}"
|
||||||
{{ $level }}</label>
|
value="{{ $level }}" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -239,14 +239,12 @@
|
|||||||
<div class="row flex py-20">
|
<div class="row flex py-20">
|
||||||
<div class="col col-sm-12">
|
<div class="col col-sm-12">
|
||||||
<div class="flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs">
|
<div class="flex items-center gap-10 px-10 py-12 bg-white rounded-30 tabs">
|
||||||
@foreach ($programss as $key => $program)
|
<select name="program_id" class="cost-select" required>
|
||||||
<select name="program_id" class="cost-select" id="" required>
|
|
||||||
<option value="">Select Program</option>
|
<option value="">Select Program</option>
|
||||||
|
@foreach ($programss as $key => $program)
|
||||||
<option value="{{ $key }}">{{ $program }}</option>
|
<option value="{{ $key }}">{{ $program }}</option>
|
||||||
</select>
|
|
||||||
@endforeach
|
@endforeach
|
||||||
|
</select>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -331,75 +329,61 @@
|
|||||||
|
|
||||||
</section>
|
</section>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@push('js')
|
@push('js')
|
||||||
{{-- <script>
|
<script>
|
||||||
const form = document.getElementById('multiStepForm');
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
const tabs = document.querySelectorAll('.tab-pane');
|
let currentStep = 1;
|
||||||
const nextBtns = document.querySelectorAll('.btn-next');
|
const totalSteps = 5;
|
||||||
const prevBtns = document.querySelectorAll('.btn-prev');
|
|
||||||
const navButtons = document.querySelectorAll('#step-nav button');
|
|
||||||
|
|
||||||
let currentStep = 0;
|
function validateStep(step) {
|
||||||
|
const stepContent = document.querySelector(`#step${step}`);
|
||||||
|
const requiredInputs = stepContent.querySelectorAll("input[required], select[required]");
|
||||||
|
let valid = false;
|
||||||
|
|
||||||
function showStep(step) {
|
requiredInputs.forEach(input => {
|
||||||
tabs.forEach((tab, idx) => {
|
if ((input.type === "radio" || input.type === "checkbox")) {
|
||||||
tab.classList.toggle('active', idx === step);
|
const group = stepContent.querySelectorAll(`input[name="${input.name}"]:checked`);
|
||||||
});
|
if (group.length > 0) valid = true;
|
||||||
navButtons.forEach((btn, idx) => {
|
} else if (input.value.trim() !== "") {
|
||||||
btn.classList.toggle('active', idx === step);
|
valid = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!valid) {
|
||||||
|
alert("Please complete this step before proceeding.");
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
nextBtns.forEach(btn => {
|
document.getElementById("nextBtn").addEventListener("click", function() {
|
||||||
btn.addEventListener('click', () => {
|
if (validateStep(currentStep)) {
|
||||||
if (currentStep < tabs.length - 1) {
|
document.getElementById(`step${currentStep}`).classList.remove("active");
|
||||||
currentStep++;
|
currentStep++;
|
||||||
showStep(currentStep);
|
document.getElementById(`step${currentStep}`).classList.add("active");
|
||||||
|
|
||||||
|
if (currentStep === totalSteps) {
|
||||||
|
document.getElementById("nextBtn").style.display = "none";
|
||||||
|
document.getElementById("doneBtn").style.display = "inline-flex";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
prevBtns.forEach(btn => {
|
document.getElementById("prevBtn").addEventListener("click", function() {
|
||||||
btn.addEventListener('click', () => {
|
document.getElementById(`step${currentStep}`).classList.remove("active");
|
||||||
if (currentStep > 0) {
|
|
||||||
currentStep--;
|
currentStep--;
|
||||||
showStep(currentStep);
|
document.getElementById(`step${currentStep}`).classList.add("active");
|
||||||
|
|
||||||
|
document.getElementById("nextBtn").style.display = "inline-flex";
|
||||||
|
document.getElementById("doneBtn").style.display = "none";
|
||||||
|
});
|
||||||
|
|
||||||
|
// Final check before submit
|
||||||
|
document.getElementById("cost-calculator").addEventListener("submit", function(e) {
|
||||||
|
if (!validateStep(currentStep)) {
|
||||||
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
</script>
|
||||||
navButtons.forEach((btn, idx) => {
|
|
||||||
btn.addEventListener('click', () => {
|
|
||||||
currentStep = idx;
|
|
||||||
showStep(currentStep);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Proficiency test toggle
|
|
||||||
const yesRadio = document.getElementById('yes');
|
|
||||||
const noRadio = document.getElementById('no');
|
|
||||||
const testDetailsGroup = document.getElementById('testDetailsGroup');
|
|
||||||
const testScoreGroup = document.getElementById('testScoreGroup');
|
|
||||||
const consideringGroup = document.getElementById('consideringGroup');
|
|
||||||
|
|
||||||
function toggleProficiencySections() {
|
|
||||||
if (yesRadio.checked) {
|
|
||||||
testDetailsGroup.classList.remove('d-none');
|
|
||||||
testScoreGroup.classList.remove('d-none');
|
|
||||||
consideringGroup.classList.add('d-none');
|
|
||||||
} else if (noRadio.checked) {
|
|
||||||
testDetailsGroup.classList.add('d-none');
|
|
||||||
testScoreGroup.classList.add('d-none');
|
|
||||||
consideringGroup.classList.remove('d-none');
|
|
||||||
} else {
|
|
||||||
testDetailsGroup.classList.add('d-none');
|
|
||||||
testScoreGroup.classList.add('d-none');
|
|
||||||
consideringGroup.classList.add('d-none');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
yesRadio.addEventListener('change', toggleProficiencySections);
|
|
||||||
noRadio.addEventListener('change', toggleProficiencySections);
|
|
||||||
toggleProficiencySections();
|
|
||||||
</script> --}}
|
|
||||||
@endpush
|
@endpush
|
||||||
|
@@ -145,8 +145,7 @@
|
|||||||
],
|
],
|
||||||
['title' => 'Name', 'data' => 'name', 'name' => 'name'],
|
['title' => 'Name', 'data' => 'name', 'name' => 'name'],
|
||||||
['title' => 'Email', 'data' => 'email', 'name' => 'email'],
|
['title' => 'Email', 'data' => 'email', 'name' => 'email'],
|
||||||
['title' => 'Contact', 'data' => 'mobile', 'name' => 'mobile'],
|
['title' => 'Mobile', 'data' => 'mobile', 'name' => 'mobile'],
|
||||||
['title' => 'Class', 'data' => 'class', 'name' => 'class'],
|
|
||||||
['title' => 'Subject', 'data' => 'subject', 'name' => 'subject'],
|
['title' => 'Subject', 'data' => 'subject', 'name' => 'subject'],
|
||||||
['title' => 'Message', 'data' => 'message', 'name' => 'message'],
|
['title' => 'Message', 'data' => 'message', 'name' => 'message'],
|
||||||
[
|
[
|
||||||
|
Reference in New Issue
Block a user