feat(import_edit2): expand entire column including header and fix sticky columns
This commit is contained in:
parent
d8eddb3aa5
commit
82d6a2ee18
@ -278,6 +278,7 @@ function fixedDefaultValue(array $f): string
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Sticky columns - first column (Actions) */
|
/* Sticky columns - first column (Actions) */
|
||||||
|
.grid-top .grid-cell.save-all-cell,
|
||||||
.grid-header.button-header,
|
.grid-header.button-header,
|
||||||
.grid-cell.button-cell {
|
.grid-cell.button-cell {
|
||||||
position: sticky !important;
|
position: sticky !important;
|
||||||
@ -300,6 +301,7 @@ function fixedDefaultValue(array $f): string
|
|||||||
background-color: #e9ecef;
|
background-color: #e9ecef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grid-top .grid-cell:nth-child(2),
|
||||||
.grid-row .grid-header:nth-child(2),
|
.grid-row .grid-header:nth-child(2),
|
||||||
.grid-row .grid-cell:nth-child(2) {
|
.grid-row .grid-cell:nth-child(2) {
|
||||||
position: sticky !important;
|
position: sticky !important;
|
||||||
@ -326,7 +328,8 @@ function fixedDefaultValue(array $f): string
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.grid-cell.expanded {
|
.grid-cell.expanded,
|
||||||
|
.grid-header.expanded {
|
||||||
max-width: 500px !important;
|
max-width: 500px !important;
|
||||||
white-space: normal !important;
|
white-space: normal !important;
|
||||||
overflow-wrap: break-word !important;
|
overflow-wrap: break-word !important;
|
||||||
@ -334,6 +337,10 @@ function fixedDefaultValue(array $f): string
|
|||||||
flex: 0 0 500px !important;
|
flex: 0 0 500px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.grid-header.expanded {
|
||||||
|
background-color: #e0f7fa !important;
|
||||||
|
}
|
||||||
|
|
||||||
.resizer {
|
.resizer {
|
||||||
width: 5px;
|
width: 5px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -351,7 +358,7 @@ function fixedDefaultValue(array $f): string
|
|||||||
|
|
||||||
.grid-top {
|
.grid-top {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: stretch;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
@ -1115,16 +1122,32 @@ function fixedDefaultValue(array $f): string
|
|||||||
<script src="tracking.js"></script>
|
<script src="tracking.js"></script>
|
||||||
<script src="export_to_lims.js"></script>
|
<script src="export_to_lims.js"></script>
|
||||||
<script>
|
<script>
|
||||||
// Initialize Flatpickr for all date inputs
|
function expandColumn(cell, expand) {
|
||||||
|
const columnIndex = cell.getAttribute('data-index');
|
||||||
|
if (!columnIndex) return;
|
||||||
|
|
||||||
|
const allColumnCells = document.querySelectorAll(`.grid-cell[data-index="${columnIndex}"], .grid-header[data-index="${columnIndex}"], .grid-top-cell[data-index="${columnIndex}"]`);
|
||||||
|
|
||||||
|
allColumnCells.forEach(colCell => {
|
||||||
|
if (expand) {
|
||||||
|
colCell.classList.add('expanded');
|
||||||
|
} else {
|
||||||
|
colCell.classList.remove('expanded');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
flatpickr(".date-picker", {
|
flatpickr(".date-picker", {
|
||||||
dateFormat: "Y-m-d",
|
dateFormat: "Y-m-d",
|
||||||
allowInput: true,
|
allowInput: true,
|
||||||
onOpen: function(selectedDates, dateStr, instance) {
|
onOpen: function(selectedDates, dateStr, instance) {
|
||||||
instance.input.closest('.grid-cell').classList.add('expanded');
|
const cell = instance.input.closest('.grid-cell');
|
||||||
|
expandColumn(cell, true);
|
||||||
},
|
},
|
||||||
onClose: function(selectedDates, dateStr, instance) {
|
onClose: function(selectedDates, dateStr, instance) {
|
||||||
instance.input.closest('.grid-cell').classList.remove('expanded');
|
const cell = instance.input.closest('.grid-cell');
|
||||||
|
expandColumn(cell, false);
|
||||||
// Trigger change event to handle unsaved changes
|
// Trigger change event to handle unsaved changes
|
||||||
const event = new Event('change');
|
const event = new Event('change');
|
||||||
instance.input.dispatchEvent(event);
|
instance.input.dispatchEvent(event);
|
||||||
@ -1493,10 +1516,12 @@ function fixedDefaultValue(array $f): string
|
|||||||
input.type === 'number' ||
|
input.type === 'number' ||
|
||||||
input.type === 'date') {
|
input.type === 'date') {
|
||||||
input.addEventListener('focus', function() {
|
input.addEventListener('focus', function() {
|
||||||
this.closest('.grid-cell').classList.add('expanded');
|
const cell = this.closest('.grid-cell');
|
||||||
|
expandColumn(cell, true);
|
||||||
});
|
});
|
||||||
input.addEventListener('blur', function() {
|
input.addEventListener('blur', function() {
|
||||||
this.closest('.grid-cell').classList.remove('expanded');
|
const cell = this.closest('.grid-cell');
|
||||||
|
expandColumn(cell, false);
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1505,7 +1530,7 @@ function fixedDefaultValue(array $f): string
|
|||||||
input.addEventListener('focus', function() {
|
input.addEventListener('focus', function() {
|
||||||
const cell = this.closest('.grid-cell');
|
const cell = this.closest('.grid-cell');
|
||||||
|
|
||||||
cell.classList.add('expanded');
|
expandColumn(cell, true);
|
||||||
cell.dataset.convertingToTextarea = 'true';
|
cell.dataset.convertingToTextarea = 'true';
|
||||||
|
|
||||||
const textarea = document.createElement('textarea');
|
const textarea = document.createElement('textarea');
|
||||||
@ -1531,7 +1556,8 @@ function fixedDefaultValue(array $f): string
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
input.addEventListener('focus', function() {
|
input.addEventListener('focus', function() {
|
||||||
this.closest('.grid-cell').classList.add('expanded');
|
const cell = this.closest('.grid-cell');
|
||||||
|
expandColumn(cell, true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1555,11 +1581,11 @@ function fixedDefaultValue(array $f): string
|
|||||||
|
|
||||||
element.parentNode.replaceChild(input, element);
|
element.parentNode.replaceChild(input, element);
|
||||||
|
|
||||||
cell.classList.remove('expanded');
|
expandColumn(cell, false);
|
||||||
|
|
||||||
input.addEventListener('focus', function() {
|
input.addEventListener('focus', function() {
|
||||||
const cell = this.closest('.grid-cell');
|
const cell = this.closest('.grid-cell');
|
||||||
cell.classList.add('expanded');
|
expandColumn(cell, true);
|
||||||
cell.dataset.convertingToTextarea = 'true';
|
cell.dataset.convertingToTextarea = 'true';
|
||||||
|
|
||||||
const textarea = document.createElement('textarea');
|
const textarea = document.createElement('textarea');
|
||||||
@ -1587,7 +1613,7 @@ function fixedDefaultValue(array $f): string
|
|||||||
} else if (element.tagName === 'INPUT' && element.type === 'text') {
|
} else if (element.tagName === 'INPUT' && element.type === 'text') {
|
||||||
const cell = element.closest('.grid-cell');
|
const cell = element.closest('.grid-cell');
|
||||||
if (cell && !cell.dataset.convertingToTextarea) {
|
if (cell && !cell.dataset.convertingToTextarea) {
|
||||||
cell.classList.remove('expanded');
|
expandColumn(cell, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, true);
|
}, true);
|
||||||
@ -2240,6 +2266,22 @@ function fixedDefaultValue(array $f): string
|
|||||||
row.style.minWidth = 'max-content';
|
row.style.minWidth = 'max-content';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const gridTop = document.querySelector('.grid-top');
|
||||||
|
if (gridTop && !gridTop.style.minWidth) {
|
||||||
|
gridTop.style.minWidth = 'max-content';
|
||||||
|
}
|
||||||
|
|
||||||
|
const stickyTopCells = document.querySelectorAll('.grid-top .grid-cell.save-all-cell, .grid-top .grid-cell:nth-child(2)');
|
||||||
|
stickyTopCells.forEach(cell => {
|
||||||
|
if (!cell.style.minWidth && !cell.style.flex) {
|
||||||
|
|
||||||
|
const computedStyle = window.getComputedStyle(cell);
|
||||||
|
if (computedStyle.flex === '0 0 auto' || !computedStyle.flex.includes('0 0')) {
|
||||||
|
cell.style.minWidth = cell.offsetWidth + 'px';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user