{% load i18n %} /* globals checkPermission, getModelRenderer, inventreeGet, inventreePut, sanitizeInputString, user_settings, */ /* exported closeSearchPanel, openSearchPanel, searchTextChanged, */ /* * Callback when the search panel is closed */ function closeSearchPanel() { } /* * Callback when the search panel is opened. * Ensure the panel is in a known state */ function openSearchPanel() { var panel = $('#offcanvas-search'); let search_input = panel.find('#search-input'); search_input.find('#search-input').val(''); search_input.focus(); clearSearchResults(); // Callback for text input changed search_input.on('keyup change', searchTextChanged); // Callback for "clear search" button panel.find('#search-clear').click(function(event) { // Prevent this button from actually submitting the form event.preventDefault(); search_input('#search-input').val(''); clearSearchResults(); }); // Callback for the "close search" button panel.find('#search-close').click(function(event) { // Prevent this button from actually submitting the form event.preventDefault(); }); } var searchInputTimer = null; var searchText = null; var searchTextCurrent = null; var searchQuery = null; var searchResultTypes = []; var searchRequest = null; /* * Callback for when the search text is changed */ function searchTextChanged(event) { var text = $('#offcanvas-search').find('#search-input').val(); searchText = sanitizeInputString(text); clearTimeout(searchInputTimer); searchInputTimer = setTimeout(updateSearch, 250); } /* * Update the search results */ function updateSearch() { if (searchText == searchTextCurrent) { return; } clearSearchResults(); if (searchText.length == 0) { return; } searchTextCurrent = searchText; // Cancel previous search request if (searchRequest != null) { searchRequest.abort(); searchRequest = null; } // Show the "searching" text $('#offcanvas-search').find('#search-pending').show(); searchResultTypes = []; // Construct base query searchQuery = { search: searchTextCurrent, search_regex: user_settings.SEARCH_REGEX ? true : false, search_whole: user_settings.SEARCH_WHOLE ? true : false, limit: user_settings.SEARCH_PREVIEW_RESULTS, offset: 0, }; // Search for 'part' results if (checkPermission('part') && user_settings.SEARCH_PREVIEW_SHOW_PARTS) { let filters = {}; if (user_settings.SEARCH_HIDE_INACTIVE_PARTS) { // Return *only* active parts filters.active = true; } addSearchQuery('part', '{% jstrans "Parts" %}', filters); } if (checkPermission('part') && checkPermission('purchase_order')) { let filters = { part_detail: true, supplier_detail: true, manufacturer_detail: true, }; if (user_settings.SEARCH_HIDE_INACTIVE_PARTS) { // Return *only* active parts filters.active = true; } if (user_settings.SEARCH_PREVIEW_SHOW_SUPPLIER_PARTS) { addSearchQuery('supplierpart', '{% jstrans "Supplier Parts" %}', filters); } if (user_settings.SEARCH_PREVIEW_SHOW_MANUFACTURER_PARTS) { addSearchQuery('manufacturerpart', '{% jstrans "Manufacturer Parts" %}', filters); } } if (checkPermission('part_category') && user_settings.SEARCH_PREVIEW_SHOW_CATEGORIES) { let filters = {}; addSearchQuery('partcategory', '{% jstrans "Part Categories" %}', filters); } if (checkPermission('stock') && user_settings.SEARCH_PREVIEW_SHOW_STOCK) { let filters = { part_detail: true, location_detail: true, }; if (user_settings.SEARCH_PREVIEW_HIDE_UNAVAILABLE_STOCK) { // Only show 'in stock' items in the preview windoww filters.in_stock = true; } addSearchQuery('stockitem', '{% jstrans "Stock Items" %}', filters); } if (checkPermission('stock_location') && user_settings.SEARCH_PREVIEW_SHOW_LOCATIONS) { let filters = {}; addSearchQuery('stocklocation', '{% jstrans "Stock Locations" %}', filters); } if (checkPermission('build') && user_settings.SEARCH_PREVIEW_SHOW_BUILD_ORDERS) { let filters = { part_detail: true }; addSearchQuery('build', '{% jstrans "Build Orders" %}', filters); } if ((checkPermission('sales_order') || checkPermission('purchase_order')) && user_settings.SEARCH_PREVIEW_SHOW_COMPANIES) { let filters = {}; addSearchQuery('company', '{% jstrans "Companies" %}', filters); } if (checkPermission('purchase_order') && user_settings.SEARCH_PREVIEW_SHOW_PURCHASE_ORDERS) { let filters = { supplier_detail: true, }; if (user_settings.SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS) { filters.outstanding = true; } addSearchQuery('purchaseorder', '{% jstrans "Purchase Orders" %}', filters); } if (checkPermission('sales_order') && user_settings.SEARCH_PREVIEW_SHOW_SALES_ORDERS) { let filters = { customer_detail: true, }; // Hide inactive (not "outstanding" orders) if (user_settings.SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS) { filters.outstanding = true; } addSearchQuery('salesorder', '{% jstrans "Sales Orders" %}', filters); } if (checkPermission('return_order') && user_settings.SEARCH_PREVIEW_SHOW_RETURN_ORDERS) { let filters = { customer_detail: true, }; // Hide inactive (not "outstanding" orders) if (user_settings.SEARCH_PREVIEW_EXCLUDE_INACTIVE_RETURN_ORDERS) { filters.outstanding = true; } addSearchQuery('returnorder', '{% jstrans "Return Orders" %}', filters); } let ctx = $('#offcanvas-search').find('#search-context'); ctx.html(`