ux pattern cleanup.

This commit is contained in:
Bryce
2025-08-08 08:46:56 -07:00
parent 65c00e062b
commit 608cd7357c
9 changed files with 304 additions and 102 deletions

View File

@@ -78,12 +78,8 @@ def add_folder():
db.session.add(folder)
db.session.commit()
# Get updated list of folders for the current user
folders = Folder.query.filter_by(user_id=current_user.id).all()
response = make_response(render_template('partials/folders_list.html', folders=folders))
response.headers['HX-Trigger'] = 'close-modal'
response.headers["HX-Target"] = '#folders-list'
response = make_response('')
response.headers['HX-Trigger'] = 'close-modal, folder-list-invalidated'
response.status_code = 201
return response
@@ -110,8 +106,9 @@ def delete_folder(folder_id):
if not folder:
# Folder not found
folders = Folder.query.filter_by(user_id=current_user.id).all()
return render_template('partials/folders_list.html', folders=folders)
response = make_response('')
response.headers['HX-Trigger'] = 'folder-list-invalidated'
return response
# Delete all associated processed emails first
from app.models import ProcessedEmail
@@ -121,17 +118,18 @@ def delete_folder(folder_id):
db.session.delete(folder)
db.session.commit()
folders = Folder.query.filter_by(user_id=current_user.id).all()
return render_template('partials/folders_list.html', folders=folders)
response = make_response('')
response.headers['HX-Trigger'] = 'folder-list-invalidated'
return response
except Exception as e:
# Print unhandled exceptions to the console as required
logging.exception("Error deleting folder: %s", e)
db.session.rollback()
# Return the folders list unchanged
folders = Folder.query.filter_by(user_id=current_user.id).all()
# Return both sections
return render_template('partials/folders_list.html', folders=folders)
response = make_response('')
response.headers['HX-Trigger'] = 'folder-list-invalidated'
return response
@folders_bp.route('/api/folders/<folder_id>/type', methods=['PUT'])
@login_required
@@ -160,10 +158,9 @@ def update_folder_type(folder_id):
db.session.commit()
# Get updated list of folders for the current user
folders = Folder.query.filter_by(user_id=current_user.id).all()
return render_template('partials/folders_list.html', folders=folders)
response = make_response('')
response.headers['HX-Trigger'] = 'folder-list-invalidated'
return response
except Exception as e:
# Print unhandled exceptions to the console as required
@@ -202,8 +199,9 @@ def update_folder(folder_id):
if not folder:
# Folder not found
folders = Folder.query.filter_by(user_id=current_user.id).all()
return render_template('partials/folders_list.html', folders=folders)
response = make_response('')
response.headers['HX-Trigger'] = 'close-modal, folder-list-invalidated'
return response
# Get form data
name = request.form.get('name')
@@ -229,8 +227,6 @@ def update_folder(folder_id):
# If there are validation errors, return the modal with errors
if errors:
response = make_response(render_template('partials/folder_modal.html', folder=folder, errors=errors, name=name, rule_text=rule_text, priority=priority))
response.headers['HX-Retarget'] = '#folder-modal'
response.headers['HX-Reswap'] = 'outerHTML'
return response
# Update folder
@@ -248,13 +244,8 @@ def update_folder(folder_id):
db.session.commit()
# Get updated list of folders for the current user
folders = Folder.query.filter_by(user_id=current_user.id).all()
# Return both sections
section = render_template('partials/folders_list.html', folders=folders)
response = make_response(section)
response.headers['HX-Trigger'] = 'close-modal'
response = make_response('')
response.headers['HX-Trigger'] = 'close-modal, folder-list-invalidated'
return response
except Exception as e:
@@ -272,11 +263,22 @@ def update_folder(folder_id):
@login_required
def get_folders():
"""Get folders with optional filtering."""
# Check if this is an event-triggered request
is_event_triggered = request.headers.get('HX-Trigger') == 'folder-list-invalidated'
# Get filter parameter from query string
filter_type = request.args.get('filter', 'all')
folder_type = request.args.get('type', None)
show_hidden = request.args.get('show_hidden', 'off').lower() == 'on'
# For event-triggered requests, maintain current filter state
if is_event_triggered:
# If this is an event trigger, we need to preserve the current filter state
# The event listener will have the current state in the DOM
# So we just return the full list with current show_hidden state
folders = Folder.query.filter_by(user_id=current_user.id).all()
return render_template('partials/folders_list.html', folders=folders, show_hidden=show_hidden)
# Get folders for the current authenticated user
if folder_type:
# Filter by folder type

View File

@@ -192,13 +192,13 @@ def sync_imap_folders():
if synced_count > 0:
# Return the folder type selection modal
response = make_response(render_template('partials/folder_type_selection_modal.html', folders=folders_to_process))
response.headers['hx-retarget'] = "#modal-holder"
response.headers['HX-Trigger'] = 'open-modal'
return response
else:
# Just return the updated folders list
folders = Folder.query.filter_by(user_id=current_user.id).all()
response=make_response(render_template('partials/folders_list.html', folders=folders))
response.headers['HX-Trigger'] = 'close-modal'
# Just trigger the folder list update
response = make_response('')
response.headers['HX-Trigger'] = 'close-modal, folder-list-invalidated'
return response
except Exception as e: