mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Simple search filtering for part list
- Needs to be 'generecised' - Working well for now
This commit is contained in:
parent
08ed128bea
commit
25fcd3e9f1
@ -25,6 +25,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="{% static 'script/delay.js' %}"></script>
|
||||||
<script type="text/javascript" src="{% static 'script/filter_company.js' %}">
|
<script type="text/javascript" src="{% static 'script/filter_company.js' %}">
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,12 +1,88 @@
|
|||||||
<table class="table table-striped">
|
<div class='container'>
|
||||||
|
<div class='input-group'>
|
||||||
|
<input class='form-control' id='part-filter' type='text' placeholder='Search...'>
|
||||||
|
<span class='input-group-btn'>
|
||||||
|
<button type='button' class='btn' id='clear-filter'>Clear</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="table table-striped" id="part-list">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Part</th>
|
<th>Part</th>
|
||||||
<th>Description</th>
|
<th>Description</th>
|
||||||
|
<th>Category</th>
|
||||||
</tr>
|
</tr>
|
||||||
{% for part in parts %}
|
|
||||||
<tr>
|
|
||||||
<td><a href="{% url 'part-detail' part.id %}">{{ part.name }}</a></td>
|
|
||||||
<td>{{ part.description }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
<script type="text/javascript" src="{% static 'script/delay.js' %}">
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function add_part(part) {
|
||||||
|
var text = "<tr>";
|
||||||
|
|
||||||
|
text += "<td><a href='" + part.url + "'>" + part.name + "</a></td>";
|
||||||
|
text += "<td>" + part.description + "</td>";
|
||||||
|
|
||||||
|
text += "<td>";
|
||||||
|
|
||||||
|
// TODO - Work out how to add in category name + link...
|
||||||
|
if (part.category){
|
||||||
|
text += "category: " + part.category;
|
||||||
|
}
|
||||||
|
|
||||||
|
text += "</td>";
|
||||||
|
|
||||||
|
text += "</tr>";
|
||||||
|
|
||||||
|
$("#part-list").append(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
function filter_parts(text) {
|
||||||
|
$.ajax({
|
||||||
|
url: "{% url 'api-part-list' %}",
|
||||||
|
data: {
|
||||||
|
{% if category %}
|
||||||
|
'category': {{ category.id }},
|
||||||
|
{% endif %}
|
||||||
|
'search': text
|
||||||
|
},
|
||||||
|
success: function(result) {
|
||||||
|
$("#part-list").find("tr:gt(0)").remove();
|
||||||
|
$.each(result.results, function(i, part) {
|
||||||
|
add_part(part);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$("#part-filter").keyup(function(e) {
|
||||||
|
if (e.keyCode == 27){ // Escape key
|
||||||
|
cancelTimer();
|
||||||
|
$("#part-filter").val('');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var value = $(this).val().toLowerCase();
|
||||||
|
|
||||||
|
delay(function() {
|
||||||
|
filter_parts(value);
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#clear-filter").click(function(){
|
||||||
|
clearTimeout(keyDelay);
|
||||||
|
$("#company-filter").val('');
|
||||||
|
filter_parts('');
|
||||||
|
});
|
||||||
|
|
||||||
|
filter_parts('');
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
@ -24,7 +24,7 @@ class PartIndex(ListView):
|
|||||||
context_object_name = 'parts'
|
context_object_name = 'parts'
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Part.objects.filter(category=None)
|
return Part.objects.all() # filter(category=None)
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
|
|
||||||
|
12
InvenTree/static/script/delay.js
Normal file
12
InvenTree/static/script/delay.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var msDelay = 0;
|
||||||
|
|
||||||
|
var delay = (function(){
|
||||||
|
return function(callback, ms){
|
||||||
|
clearTimeout(msDelay);
|
||||||
|
msDelay = setTimeout(callback, ms);
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
|
function cancelTimer(){
|
||||||
|
clearTimeout(msDelay);
|
||||||
|
}
|
@ -1,12 +1,3 @@
|
|||||||
var keyDelay = 0;
|
|
||||||
|
|
||||||
var delay = (function(){
|
|
||||||
return function(callback, ms){
|
|
||||||
clearTimeout(keyDelay);
|
|
||||||
keyDelay = setTimeout(callback, ms);
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
|
|
||||||
|
|
||||||
function add_company(company){
|
function add_company(company){
|
||||||
|
|
||||||
@ -47,8 +38,8 @@ $(document).ready(function(){
|
|||||||
$("#company-filter").keyup(function(e) {
|
$("#company-filter").keyup(function(e) {
|
||||||
|
|
||||||
if (e.keyCode == 27){ // Escape key
|
if (e.keyCode == 27){ // Escape key
|
||||||
clearTimeout(keyDelay);
|
|
||||||
$("#company-filter").val('');
|
$("#company-filter").val('');
|
||||||
|
cancelTimer();
|
||||||
filter('');
|
filter('');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user