| | |
| | | .map(upload => upload.dataset.uploadId) |
| | | .filter(id => id); |
| | | |
| | | console.log('Reordered items:', items); |
| | | |
| | | // Update hidden input (for form submission) |
| | | let hiddenInput = fieldWrapper.querySelector('input[type="hidden"]'); |
| | |
| | | hiddenInput.value = items.join(','); |
| | | } |
| | | |
| | | // ✅ Update fieldState with new order |
| | | // Update fieldState with new order |
| | | const fieldId = this.getFieldIdFromElement(grid); |
| | | if (fieldId) { |
| | | const fieldData = this.getFieldData(fieldId); |
| | |
| | | // If reordering in preview, the order is implicit by DOM position |
| | | // (we don't store preview order separately) |
| | | |
| | | this.schedulePersistance(fieldId); // ✅ Persist changes |
| | | this.schedulePersistance(fieldId); |
| | | } |
| | | |
| | | this.a11y.announce('Item reordered'); |
| | |
| | | popup: `Creating ${posts.length} post${posts.length > 1 ? 's' : ''}...`, |
| | | canMerge: false, |
| | | headers: { |
| | | 'action_nonce': jvbSettings.dash |
| | | 'action_nonce': window.auth.getNonce('dash') |
| | | }, |
| | | append: '_upload', |
| | | }; |
| | |
| | | title: `Uploading ${uploads.length} file${uploads.length > 1 ? 's' : ''} to server...`, |
| | | popup: `Uploading ${uploads.length} file${uploads.length > 1 ? 's' : ''}...`, |
| | | canMerge: false, |
| | | headers: { 'action_nonce': jvbSettings.dash }, |
| | | headers: { 'action_nonce': window.auth.getNonce('dash') }, |
| | | append: '_upload' |
| | | }; |
| | | |
| | |
| | | data: queueData, |
| | | title: 'Updating meta', |
| | | canMerge: true, |
| | | headers: { 'action_nonce': jvbSettings.dash } |
| | | headers: { 'action_nonce': window.auth.getNonce('dash') } |
| | | }; |
| | | |
| | | try { |
| | |
| | | storedGroup.changes = { ...groupData.changes }; |
| | | } |
| | | |
| | | // ✅ Preserve upload order |
| | | // Preserve upload order |
| | | if (groupData.uploads) { |
| | | storedGroup.uploads = [...groupData.uploads]; |
| | | } |
| | |
| | | * Save field data to store, converting Sets to Arrays |
| | | */ |
| | | async saveFieldData(fieldData) { |
| | | console.log('💾 Saving:', fieldData.id, { |
| | | uploads: fieldData.uploads?.size, |
| | | groups: fieldData.groups?.length |
| | | }); |
| | | |
| | | await this.fieldStore.save({ |
| | | ...fieldData, |
| | | timestamp: Date.now() |
| | |
| | | async checkForStoredUploads() { |
| | | const allFieldStates = this.fieldStore.getAll(); |
| | | |
| | | console.log('Checking for stored uploads...', { |
| | | fieldStates: allFieldStates.length, |
| | | uploadStoreSize: this.uploadStore.data.size |
| | | }); |
| | | console.log(this.uploadStore.getAll()); |
| | | console.log(this.fieldStore.getAll()); |
| | | const pendingFields = allFieldStates.filter(field => { |
| | | if (!field.uploads) return false; |
| | | |
| | |
| | | ['completed', 'processed', 'local_processing', 'processed-original'].includes(upload.status); |
| | | }); |
| | | }); |
| | | console.log('Found pending fields:', pendingFields.length); |
| | | if (pendingFields.length === 0) return; |
| | | |
| | | this.showRecoveryNotification(pendingFields); |
| | |
| | | } |
| | | |
| | | // Initialize when DOM is ready |
| | | document.addEventListener('DOMContentLoaded', () => { |
| | | window.jvbUploads = new UploadManager(); |
| | | document.addEventListener('DOMContentLoaded', async function () { |
| | | window.auth.subscribe((event) => { |
| | | if (event === 'auth-loaded') { |
| | | window.jvbUploads = new UploadManager(); |
| | | } |
| | | }); |
| | | }); |