feat: Add show select button option to case search widget and related templates for improved case selection
This commit is contained in:
@@ -480,7 +480,7 @@
|
||||
{{ move_series_form.destination_case }}
|
||||
<div class="small text-muted">Click any case row below to select the destination case.</div>
|
||||
<div id="selected-move-case" class="small text-muted">No destination case selected.</div>
|
||||
{% case_search_widget collection=None input_id='move-series-case-search-input' target_id='move-series-case-search-results' %}
|
||||
{% case_search_widget collection=None input_id='move-series-case-search-input' target_id='move-series-case-search-results' show_select_button=True %}
|
||||
<button type="button"
|
||||
id="move-selected-series-submit"
|
||||
class="btn btn-sm btn-outline-primary text-start"
|
||||
|
||||
@@ -28,8 +28,12 @@
|
||||
</form>
|
||||
<a class="btn btn-sm btn-outline-secondary ms-2" href="{% url 'atlas:case_detail' case.pk %}" target="_blank" rel="noopener">View</a>
|
||||
{% else %}
|
||||
{% if show_select_button %}
|
||||
<button type="button" class="btn btn-sm btn-outline-primary case-select-btn" data-case-select="{{ case.pk }}">Select</button>
|
||||
<a class="btn btn-sm btn-outline-secondary ms-2" href="{% url 'atlas:case_detail' case.pk %}">View</a>
|
||||
{% else %}
|
||||
<a class="btn btn-sm btn-outline-secondary" href="{% url 'atlas:case_detail' case.pk %}">View</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{% if cases and cases|length > 0 %}
|
||||
<div class="list-group mb-2">
|
||||
{% for case in cases %}
|
||||
{% include 'atlas/partials/_case_search_item.html' with case=case collection=collection %}
|
||||
{% include 'atlas/partials/_case_search_item.html' with case=case collection=collection show_select_button=show_select_button %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
@@ -15,7 +15,7 @@
|
||||
<div class="small text-muted mb-1">Recently created</div>
|
||||
<div class="list-group">
|
||||
{% for case in recent_cases %}
|
||||
{% include 'atlas/partials/_case_search_item.html' with case=case collection=collection %}
|
||||
{% include 'atlas/partials/_case_search_item.html' with case=case collection=collection show_select_button=show_select_button %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
<div class="case-search-widget">
|
||||
{% with input_id=input_id|default:'case-search-input' target_id=target_id|default:'case-search-results' %}
|
||||
<label for="{{ input_id }}" class="form-label">Search cases</label>
|
||||
{% if collection %}
|
||||
<input type="hidden" id="{{ input_id }}-collection" name="collection" value="{{ collection.pk }}">
|
||||
{% endif %}
|
||||
{% if show_select_button %}
|
||||
<input type="hidden" id="{{ input_id }}-show-select" name="show_select" value="1">
|
||||
{% endif %}
|
||||
<input id="{{ input_id }}" name="q" class="form-control" type="search"
|
||||
placeholder="Type to search cases..."
|
||||
hx-get="{% url 'atlas:case_search' %}"
|
||||
hx-include="#{{ input_id }}"
|
||||
{% if collection %}hx-vals='{"collection": "{{ collection.pk }}"}'{% endif %}
|
||||
hx-include="closest .case-search-widget"
|
||||
hx-target="#{{ target_id }}"
|
||||
hx-trigger="keyup changed delay:400ms"
|
||||
autocomplete="off">
|
||||
|
||||
<div id="{{ target_id }}" class="mt-2">
|
||||
{# Render initial results (search + recent) on initial GET; HTMX searches will replace this div with partial results #}
|
||||
{% include 'atlas/partials/case_search_results.html' with cases=cases recent_cases=recent_cases collection=collection %}
|
||||
{% include 'atlas/partials/case_search_results.html' with cases=cases recent_cases=recent_cases collection=collection show_select_button=show_select_button %}
|
||||
</div>
|
||||
{% endwith %}
|
||||
</div>
|
||||
@@ -28,7 +33,7 @@
|
||||
timer = setTimeout(function(){
|
||||
try {
|
||||
var q = encodeURIComponent(input.value || '');
|
||||
var url = "{% url 'atlas:case_search' %}?q=" + q + ({% if collection %} "&collection={{ collection.pk }}" {% else %} '' {% endif %});
|
||||
var url = "{% url 'atlas:case_search' %}?q=" + q + ({% if collection %} "&collection={{ collection.pk }}" {% else %} '' {% endif %}) + ({% if show_select_button %} "&show_select=1" {% else %} '' {% endif %});
|
||||
var target = '#{{ target_id|default:"case-search-results" }}';
|
||||
if (window.htmx && typeof window.htmx.ajax === 'function') {
|
||||
window.htmx.ajax('GET', url, { target: target, swap: 'innerHTML' });
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="mb-2">
|
||||
{% case_search_widget collection=None input_id='case-search-input-modal' target_id='case-search-results-modal' %}
|
||||
{% case_search_widget collection=None input_id='case-search-input-modal' target_id='case-search-results-modal' show_select_button=True %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
@@ -6,7 +6,17 @@ register = template.Library()
|
||||
|
||||
|
||||
@register.inclusion_tag('atlas/partials/case_search_widget.html', takes_context=True)
|
||||
def case_search_widget(context, collection=None, cases=None, recent_cases=None, input_id='case-search-input', target_id='case-search-results', selection_mode='single', action_url=None):
|
||||
def case_search_widget(
|
||||
context,
|
||||
collection=None,
|
||||
cases=None,
|
||||
recent_cases=None,
|
||||
input_id='case-search-input',
|
||||
target_id='case-search-results',
|
||||
selection_mode='single',
|
||||
action_url=None,
|
||||
show_select_button=False,
|
||||
):
|
||||
"""Render a reusable case search widget.
|
||||
|
||||
Parameters:
|
||||
@@ -35,6 +45,7 @@ def case_search_widget(context, collection=None, cases=None, recent_cases=None,
|
||||
'target_id': target_id,
|
||||
'selection_mode': selection_mode,
|
||||
'action_url': action_url,
|
||||
'show_select_button': show_select_button,
|
||||
}
|
||||
|
||||
|
||||
|
||||
+8
-1
@@ -2137,6 +2137,7 @@ def case_search(request):
|
||||
|
||||
q = request.GET.get("q", "").strip()
|
||||
collection_id = request.GET.get("collection")
|
||||
show_select = str(request.GET.get("show_select", "")).lower() in ("1", "true", "yes", "on")
|
||||
collection = None
|
||||
if collection_id:
|
||||
try:
|
||||
@@ -2172,7 +2173,13 @@ def case_search(request):
|
||||
return render(
|
||||
request,
|
||||
"atlas/partials/case_search_results.html",
|
||||
{"cases": cases, "collection": collection, "recent_cases": recent_cases, "q": q},
|
||||
{
|
||||
"cases": cases,
|
||||
"collection": collection,
|
||||
"recent_cases": recent_cases,
|
||||
"q": q,
|
||||
"show_select_button": show_select,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user