From 3b5abc4ab44fb899b92ea0e40e0719454c057f52 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 11 Feb 2026 01:38:22 +0000
Subject: [PATCH] =attempt to fix race condition that overrides image changes immediately after processing them
---
assets/js/concise/CRUD.js | 89 ++++++++++++++++++++++++++++++++++++--------
1 files changed, 72 insertions(+), 17 deletions(-)
diff --git a/assets/js/concise/CRUD.js b/assets/js/concise/CRUD.js
index 8c29ab2..7bad8c8 100644
--- a/assets/js/concise/CRUD.js
+++ b/assets/js/concise/CRUD.js
@@ -350,6 +350,21 @@
});
}
}
+
+ if (event === 'sent-to-queue' && data.field) {
+ const fieldName = data.field.config.name;
+ const itemId = data.field.config.itemID;
+ if (itemId && fieldName && this.changes.has(itemId)) {
+ delete this.changes.get(itemId)[fieldName];
+ }
+ // Also clear from IndexedDB store
+ this.changesStore.get(itemId).then(stored => {
+ if (stored && stored[fieldName] !== undefined) {
+ delete stored[fieldName];
+ this.changesStore.save(stored);
+ }
+ });
+ }
});
}
initModals() {
@@ -496,22 +511,19 @@
&& data.status === 'completed') {
this.store.clearCache();
}
- console.log('CRUD.js queue subscription');
- console.log(event, data);
+
+
if (event === 'operation-status'
&& data.status === 'completed'
&& data.endpoint === 'uploads/groups') {
- console.log('Grouped Uploads completed');
if (data.result && data.result.group_mappings) {
this.handleGroupMappings(data.result.group_mappings);
}
- console.log('Cleared local cache. Refresh to see changes');
this.store.clearCache();
}
if (event === 'operation-status'
&& data.status === 'completed'
&& data.type === 'content_update') {
- console.log('Cleared local cache. Refresh to see changes');
this.store.clearCache();
// Check for result data (from ContentExecutor)
@@ -639,14 +651,62 @@
const form = e.target;
const modal = form.closest('dialog');
if (!modal) return;
- let title = `Saving changes for multiple ${this.plural}`;
- if (modal.classList.contains('edit')) {
- title = 'Saving your edits...';
- } else if (modal.classList.contains('create')) {
- title = `Creating your new ${this.singular}`;
+
+ if (modal.classList.contains('create')) {
+ this.handleCreateSubmit(modal);
+ return;
}
+
+ let title = `Saving changes for multiple ${this.plural}`;
+
this.scheduleSave(0);
}
+
+ async handleCreateSubmit(modal) {
+ const itemId = modal.dataset.itemId;
+
+ // 1. Flush changes to store
+ if (this.changes.size > 0) {
+ this.cancelBackup();
+ await this.handleBackup();
+ }
+
+ const changes = await this.changesStore.getAll();
+ if (changes.length === 0) return;
+
+ let allChanges = {};
+ changes.forEach(change => {
+ const { id, ...rest } = change;
+ allChanges[id] = rest;
+ });
+
+ // 2. Queue content creation, get operationId
+ let contentOpId = this.queue.addToQueue({
+ endpoint: this.endpoint,
+ headers: {
+ 'X-Action-Nonce': window.auth.getNonce('dash'),
+ },
+ data: {
+ posts: allChanges,
+ },
+ popup: `Creating your new ${this.singular}`,
+ title: `Creating your new ${this.singular}`,
+ });
+
+ if (!contentOpId) return;
+
+ // 3. Queue any pending uploads with dependency on content creation
+ const uploadFields = modal.querySelectorAll('[data-upload-field]');
+ for (const fieldEl of uploadFields) {
+ const fieldId = fieldEl.dataset.uploader;
+ if (!fieldId) continue;
+
+ const uploads = window.jvbUploads.stores.uploads.filterByIndex({ field: fieldId });
+ if (uploads.length === 0) continue;
+
+ await window.jvbUploads.queueUploads('uploads', fieldId, contentOpId);
+ }
+ }
handleChange(e) {
// Early bailout - target must be in an item or be a filter
const inItem = e.target.closest('[data-item-id]');
@@ -1137,7 +1197,8 @@
this.ui.modals.edit.h2.textContent = `Editing ${item.fields.post_title === '' ? this.singular : item.fields.post_title}`;
this.ui.modals.edit.form.dataset.formId = `edit-${itemID}`;
- this.forms.registerForm(this.ui.modals.edit.form, {cache: false});
+ this.forms.registerForm(this.ui.modals.edit.form, {cache: false,
+ autoUpload: true,});
this.isPopulating = true;
this.populate.populate(this.ui.modals.edit.form, item);
@@ -1186,7 +1247,6 @@
await this.handleBackup();
}
const changes = await this.changesStore.getAll();
- console.log('Saving Changes: ', changes);
if (changes.length === 0) return;
if (title === '') {
@@ -1423,10 +1483,6 @@
let uploader = window.jvbUploads;
let field = uploader.fields.get(fieldId);
-
- console.log(posts);
- console.log(field);
-
let added = [];
posts.forEach(post => {
const placeholderPost = {
@@ -1491,7 +1547,6 @@
}
handleGroupMappings(mappings) {
- console.log('[CRUD] Applying group mappings:', mappings);
// mappings = { "group_abc123": 456, "group_def456": 789 }
for (const [groupId, postId] of Object.entries(mappings)) {
--
Gitblit v1.10.0