!7 srecord Result(S text, S moduleID, double value) {} module QuickSearchManager > DynQuickSearch { transient S resultsQuery; transient Map> resultsByModule = synchroMap(); LS calc_impl() { L results = concatLists(cloneValues(getResultsByModule())); sortByFieldDesc_inPlace(results, 'value); ret takeFirst(50, results); } // clear if query changed Map> getResultsByModule() { synchronized(resultsByModule) { if (neq(resultsQuery, query)) resultsByModule.clear(); ret resultsByModule; } } // API void setResultsForModule(fS moduleID, S query, LS results) { synchronized(resultsByModule) { if (neq(resultsQuery, query)) ret; getResultsByModule().put(moduleID, map(results, func(S s) -> Result { Result(s, moduleID, 0) })); } // show/update list if (nempty(results)) doSearch(resultsQuery); } }