« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/static/js/client/sidebar-search.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/static/js/client/sidebar-search.js')
-rw-r--r--src/static/js/client/sidebar-search.js32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/static/js/client/sidebar-search.js b/src/static/js/client/sidebar-search.js
index d63b9708..18ee6dfa 100644
--- a/src/static/js/client/sidebar-search.js
+++ b/src/static/js/client/sidebar-search.js
@@ -74,6 +74,7 @@ export const info = {
   albumResultKindString: null,
   artistResultKindString: null,
   groupResultKindString: null,
+  singleResultKindString: null,
   tagResultKindString: null,
 
   groupResultDisambiguatorString: null,
@@ -207,6 +208,9 @@ export function getPageReferences() {
   info.groupResultKindString =
     findString('group-result-kind');
 
+  info.singleResultKindString =
+    findString('single-result-kind');
+
   info.tagResultKindString =
     findString('tag-result-kind');
 
@@ -879,10 +883,26 @@ function fillResultElements(results, {
 } = {}) {
   const tidiedResults = tidyResults(results);
 
-  const filteredResults =
-    (filterType
-      ? tidiedResults.filter(result => result.referenceType === filterType)
-      : tidiedResults);
+  let filteredResults = tidiedResults;
+
+  if (filterType) {
+    filteredResults = filteredResults
+      .filter(result => result.referenceType === filterType);
+  }
+
+  if (!filterType) {
+    filteredResults = filteredResults
+      .filter(result => {
+        if (result.referenceType !== 'track') return true;
+        if (result.data.classification !== 'single') return true;
+        return !filteredResults.find(otherResult => {
+          if (otherResult.referenceType !== 'album') return false;
+          return otherResult.name === result.parentName;
+        });
+      });
+  }
+
+  filteredResults = filteredResults
 
   while (info.results.firstChild) {
     info.results.firstChild.remove();
@@ -992,7 +1012,9 @@ function generateSidebarSearchResult(result, results) {
         openAlbum(result.directory);
 
       preparedSlots.kindString =
-        info.albumResultKindString;
+        (result.data.classification === 'single'
+          ? info.singleResultKindString
+          : info.albumResultKindString);
 
       break;
     }