1st commit
This commit is contained in:
87
wwws/admin/src/components/dropdown.js
Normal file
87
wwws/admin/src/components/dropdown.js
Normal file
@@ -0,0 +1,87 @@
|
||||
const dropdownData = [
|
||||
{ label: 'Options', placeholder: 'Select an option', description: 'Choose one of the following items', items: ['Item 1', 'Item 2', 'Item 3'] },
|
||||
{ placeholder: 'Select without label', items: ['Item A', 'Item B', 'Item C', 'Item D', 'Item E', 'Item F', 'Item G', 'Item H', 'Item I', 'Item J', 'Item K'] },
|
||||
{ label: 'Options 2', placeholder: 'Choose an item', description: 'Additional description lorem ipsum', items: ['Option 1', 'Option 2', 'Option 3'] },
|
||||
];
|
||||
|
||||
function createDropdownComponent({ label, placeholder, description, items }) {
|
||||
const dropdownContainer = document.createElement('div');
|
||||
dropdownContainer.className = 'dropdown-container mb-6';
|
||||
|
||||
if (label) {
|
||||
const labelElement = document.createElement('label');
|
||||
labelElement.className = 'dropdown-label block text-gray-700 text-sm font-bold mb-2';
|
||||
labelElement.innerText = label;
|
||||
dropdownContainer.appendChild(labelElement);
|
||||
}
|
||||
|
||||
const buttonElement = document.createElement('div');
|
||||
buttonElement.className = 'dropdown-button';
|
||||
buttonElement.innerText = placeholder || 'Select an option';
|
||||
dropdownContainer.appendChild(buttonElement);
|
||||
|
||||
const dropdownList = document.createElement('div');
|
||||
dropdownList.className = 'dropdown-list';
|
||||
dropdownList.style.display = 'none';
|
||||
|
||||
if (description) {
|
||||
dropdownList.classList.add('dropdown-list-with-description');
|
||||
} else {
|
||||
dropdownList.classList.add('dropdown-list-no-description');
|
||||
}
|
||||
|
||||
items.forEach(item => {
|
||||
const itemElement = document.createElement('div');
|
||||
itemElement.className = 'dropdown-item';
|
||||
|
||||
const itemText = document.createElement('span');
|
||||
itemText.className = 'dropdown-item-text';
|
||||
itemText.innerText = item;
|
||||
|
||||
itemElement.appendChild(itemText);
|
||||
itemElement.addEventListener('click', () => {
|
||||
buttonElement.innerHTML = '';
|
||||
buttonElement.className = 'dropdown-button selected-dropdown-item';
|
||||
|
||||
const selectedItemText = document.createElement('span');
|
||||
selectedItemText.className = 'selected-dropdown-item-text';
|
||||
selectedItemText.innerText = item;
|
||||
buttonElement.appendChild(selectedItemText);
|
||||
|
||||
dropdownList.style.display = 'none';
|
||||
});
|
||||
|
||||
dropdownList.appendChild(itemElement);
|
||||
});
|
||||
|
||||
buttonElement.addEventListener('click', (event) => {
|
||||
event.stopPropagation();
|
||||
dropdownList.style.display = dropdownList.style.display === 'none' ? 'flex' : 'none';
|
||||
});
|
||||
|
||||
document.addEventListener('click', (event) => {
|
||||
if (!dropdownContainer.contains(event.target)) {
|
||||
dropdownList.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
dropdownContainer.appendChild(dropdownList);
|
||||
|
||||
if (description) {
|
||||
const descriptionElement = document.createElement('p');
|
||||
descriptionElement.className = 'dropdown-description text-gray-600 text-xs italic mt-2';
|
||||
descriptionElement.innerText = description;
|
||||
dropdownContainer.appendChild(descriptionElement);
|
||||
}
|
||||
|
||||
return dropdownContainer;
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
console.log("Document loaded, rendering dropdowns...");
|
||||
const dropdownContainer = document.getElementById('dropdown-container');
|
||||
dropdownData.forEach(dropdownConfig => {
|
||||
const dropdownComponent = createDropdownComponent(dropdownConfig);
|
||||
dropdownContainer.appendChild(dropdownComponent);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user