| | |
| | | grid: new Map(), |
| | | table: new Map(), |
| | | } |
| | | this.currentView = 'grid'; |
| | | this.currentView = this.container.dataset.view ?? 'grid'; |
| | | this.selectedItems = new Set(); |
| | | this.subscribers = new Set(); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Handle data updates from store |
| | | */ |
| | | handleDataUpdate(data) { |
| | | console.log(data); |
| | | const items = data.data?.items || data.items || []; |
| | | this.render(items); |
| | | } |
| | | |
| | | /** |
| | | * Handle items update |
| | | */ |
| | | handleItemsUpdate() { |
| | |
| | | |
| | | // Handle empty state |
| | | if (items.length === 0) { |
| | | console.log('Nothing to show'); |
| | | this.renderEmpty(); |
| | | return; |
| | | } |
| | |
| | | } |
| | | |
| | | toggleTable(on) { |
| | | this.ui.table.selectedColumns.hidden = !on; |
| | | if (this.ui.table.selectedColumns) { |
| | | this.ui.table.selectedColumns.hidden = !on; |
| | | } |
| | | |
| | | if (on && !this.ui.table.table) { |
| | | let table = window.getTemplate('contentTable'); |
| | | this.container.append(table); |
| | |
| | | window.removeChildren(this.ui.table.body); |
| | | } |
| | | } |
| | | this.ui.table.selectedColumns.hidden = !on; |
| | | |
| | | if (this.ui.table.selectedColumns) { |
| | | this.ui.table.selectedColumns.hidden = !on; |
| | | } |
| | | } |
| | | |
| | | toggleGrid() { |
| | |
| | | row.querySelector('.select-item').value, |
| | | row.querySelector('.select-item').checked, |
| | | row.querySelector('.select-item + label').htmlFor, |
| | | row.querySelector(`input[name="post_status"][value="${item.status}"]`).checked |
| | | ] = [ |
| | | item.id, |
| | | item.id, |
| | | this.selectedItems.has(`${item.id}`), |
| | | item.id, |
| | | item.status |
| | | ]; |
| | | let status = row.querySelector(`input[name="post_status"][value="${item.status}"]`); |
| | | if (status) { |
| | | status.checked = true; |
| | | } |
| | | |
| | | // Let jvbPopulate do its thing - NO prefixing needed! |
| | | new window.jvbPopulate(row, item.fields, item.images); |
| | | if (Object.hasOwn(this.ui.table.table.dataset, 'edit')) { |
| | | new window.jvbPopulate(row, item.fields, item.images); |
| | | } else { |
| | | for (let [key, value] of Object.entries(item)) { |
| | | let col = row.querySelector(`[data-field="${key}"]`); |
| | | if (col) { |
| | | let p = col.querySelector('p'); |
| | | if (col.dataset.fieldType === 'date') { |
| | | value = window.formatTimeAgo(value); |
| | | } |
| | | p.textContent = value; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // Clean up after population |
| | | this.cleanupTableRow(row); |