thors1's picture
Initial DeepSite commit
b6f3763 verified
Raw
History Blame Contribute Delete
6.85 kB
let currentStep = 1;
const totalSteps = 7;
// Initialize
document.addEventListener('DOMContentLoaded', function() {
updateUI();
setupEventListeners();
setupFileUploads();
setupConditionalFields();
});
function setupEventListeners() {
// Checkbox card styling
document.querySelectorAll('.condition-checkbox').forEach(checkbox => {
checkbox.addEventListener('change', function() {
const card = this.closest('.checkbox-card');
if (this.checked) {
card.classList.add('selected');
} else {
card.classList.remove('selected');
}
});
});
// Keyboard navigation
document.addEventListener('keydown', function(e) {
if (e.key === 'Enter' && e.target.tagName !== 'TEXTAREA') {
e.preventDefault();
if (currentStep < totalSteps) {
changeStep(1);
}
}
});
}
function setupFileUploads() {
// File drop zones
document.querySelectorAll('.file-drop-zone').forEach(zone => {
const input = zone.querySelector('input[type="file"]');
zone.addEventListener('dragover', (e) => {
e.preventDefault();
zone.classList.add('dragover');
});
zone.addEventListener('dragleave', () => {
zone.classList.remove('dragover');
});
zone.addEventListener('drop', (e) => {
e.preventDefault();
zone.classList.remove('dragover');
const files = e.dataTransfer.files;
if (files.length > 0) {
handleFileSelect(zone, files[0]);
}
});
input.addEventListener('change', (e) => {
if (e.target.files.length > 0) {
handleFileSelect(zone, e.target.files[0]);
}
});
});
}
function handleFileSelect(zone, file) {
// Visual feedback for file selection
zone.style.borderColor = '#0e9692';
zone.style.backgroundColor = '#e6f5f4';
const icon = zone.querySelector('i');
const text = zone.querySelector('p.font-medium');
icon.setAttribute('data-lucide', 'check-circle');
icon.classList.remove('text-gray-400');
icon.classList.add('text-primary');
lucide.createIcons();
text.textContent = file.name;
text.classList.add('text-primary', 'font-medium');
// Add file size info
const sizeText = zone.querySelector('p.text-xs');
sizeText.textContent = `${(file.size / 1024 / 1024).toFixed(2)} MB uploaded`;
sizeText.classList.add('text-primary');
}
function setupConditionalFields() {
// Show/hide expiration date based on current patient status
const currentPatientRadios = document.querySelectorAll('input[name="current-patient"]');
const expirationField = document.getElementById('expiration-field');
currentPatientRadios.forEach(radio => {
radio.addEventListener('change', function() {
if (this.value === 'yes') {
expirationField.classList.remove('hidden');
} else {
expirationField.classList.add('hidden');
}
});
});
}
function changeStep(direction) {
const newStep = currentStep + direction;
if (newStep >= 1 && newStep <= totalSteps) {
// Hide current step
document.getElementById(`step-${currentStep}`).classList.add('hidden');
// Show new step
document.getElementById(`step-${newStep}`).classList.remove('hidden');
currentStep = newStep;
updateUI();
// Scroll to top of form
document.querySelector('main').scrollTop = 0;
}
}
function updateUI() {
// Update progress bar
const progress = (currentStep / totalSteps) * 100;
document.getElementById('progress-bar').style.width = `${progress}%`;
document.getElementById('step-indicator').textContent = `Step ${currentStep} of ${totalSteps}`;
document.getElementById('progress-percent').textContent = `${Math.round(progress)}%`;
// Update buttons
const backBtn = document.getElementById('btn-back');
const nextBtn = document.getElementById('btn-next');
const submitBtn = document.getElementById('btn-submit');
// Back button visibility
if (currentStep === 1) {
backBtn.classList.add('opacity-0', 'pointer-events-none');
} else {
backBtn.classList.remove('opacity-0', 'pointer-events-none');
}
// Next/Submit button toggle
if (currentStep === totalSteps) {
nextBtn.classList.add('hidden');
submitBtn.classList.remove('hidden');
} else {
nextBtn.classList.remove('hidden');
submitBtn.classList.add('hidden');
}
}
function submitForm() {
// Simulate form submission
const container = document.getElementById('form-container');
const currentSection = document.getElementById(`step-${currentStep}`);
// Hide current step
currentSection.classList.add('hidden');
// Hide footer buttons
document.getElementById('btn-back').style.visibility = 'hidden';
document.getElementById('btn-submit').classList.add('hidden');
// Show success message
const successSection = document.getElementById('step-success');
successSection.classList.remove('hidden');
// Update progress to 100%
document.getElementById('progress-bar').style.width = '100%';
document.getElementById('step-indicator').textContent = 'Complete';
document.getElementById('progress-percent').textContent = '100%';
// Success animation
container.style.transform = 'scale(0.98)';
setTimeout(() => {
container.style.transform = 'scale(1)';
}, 200);
// In a real application, you would submit the form data here
console.log('Form submitted successfully');
}
// Auto-format phone numbers
document.querySelectorAll('input[type="tel"]').forEach(input => {
input.addEventListener('input', function(e) {
let value = e.target.value.replace(/\D/g, '');
if (value.length > 0 && value.length <= 10) {
if (value.length > 6) {
value = `(${value.slice(0, 3)}) ${value.slice(3, 6)}-${value.slice(6)}`;
} else if (value.length > 3) {
value = `(${value.slice(0, 3)}) ${value.slice(3)}`;
} else if (value.length > 0) {
value = `(${value}`;
}
}
e.target.value = value;
});
});
// Handle window resize for mobile optimization
let resizeTimer;
window.addEventListener('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
// Ensure layout stays optimized
document.querySelector('main').scrollTop = 0;
}, 250);
});