Refactor submission item handling

This commit is contained in:
gpt-engineer-app[bot]
2025-11-03 14:28:58 +00:00
parent 8d6cf9ceb5
commit c3f30b8417
5 changed files with 340 additions and 22 deletions

View File

@@ -76,9 +76,18 @@ export const EntityEditPreview = ({ submissionId, entityType, entityName }: Enti
try {
setLoading(true);
// Fetch items with relational data
const { data: items, error } = await supabase
.from('submission_items')
.select('*')
.select(`
*,
park_submission:park_submissions!item_data_id(*),
ride_submission:ride_submissions!item_data_id(*),
photo_submission:photo_submissions!item_data_id(
*,
photo_items:photo_submission_items(*)
)
`)
.eq('submission_id', submissionId)
.order('order_index', { ascending: true });
@@ -86,8 +95,28 @@ export const EntityEditPreview = ({ submissionId, entityType, entityName }: Enti
if (items && items.length > 0) {
const firstItem = items[0];
setItemData(firstItem.item_data as Record<string, unknown>);
setOriginalData(firstItem.original_data as Record<string, unknown> | null);
// Transform relational data to item_data format
let itemDataObj: Record<string, unknown> = {};
switch (firstItem.item_type) {
case 'park':
itemDataObj = (firstItem as any).park_submission || {};
break;
case 'ride':
itemDataObj = (firstItem as any).ride_submission || {};
break;
case 'photo':
itemDataObj = {
...(firstItem as any).photo_submission,
photos: (firstItem as any).photo_submission?.photo_items || []
};
break;
default:
itemDataObj = {};
}
setItemData(itemDataObj);
setOriginalData(null); // Original data not used in new relational model
// Check for photo edit/delete operations
if (firstItem.item_type === 'photo_edit' || firstItem.item_type === 'photo_delete') {
@@ -144,16 +173,13 @@ export const EntityEditPreview = ({ submissionId, entityType, entityName }: Enti
}
// Check for other field changes by comparing with original_data
if (firstItem.original_data) {
const originalData = firstItem.original_data as Record<string, unknown>;
const excludeFields = ['images', 'updated_at', 'created_at'];
Object.keys(data).forEach(key => {
if (!excludeFields.includes(key)) {
// Use deep equality check for objects and arrays
const isEqual = deepEqual(data[key], originalData[key]);
if (!isEqual) {
changed.push(key);
}
// Note: In new relational model, we don't track original_data at item level
// Field changes are determined by comparing current vs approved entity data
if (itemDataObj) {
const excludeFields = ['images', 'updated_at', 'created_at', 'id'];
Object.keys(itemDataObj).forEach(key => {
if (!excludeFields.includes(key) && itemDataObj[key] !== null && itemDataObj[key] !== undefined) {
changed.push(key);
}
});
}