Skip to content

Commit 25428b1

Browse files
committed
Filter extractor catalog by label
1 parent 5ca3026 commit 25428b1

File tree

2 files changed

+51
-29
lines changed

2 files changed

+51
-29
lines changed

app/controllers/Extractors.scala

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class Extractors @Inject() (extractions: ExtractionService,
5555
implicit val user = request.user
5656
// Filter extractors by the trigger type if necessary
5757
var runningExtractors: List[ExtractorInfo] = extractorService.listExtractorsInfo(List.empty)
58+
5859
request.getQueryString("processTriggerSearchFilter") match {
5960
case Some("file/*") => runningExtractors = runningExtractors.filter(re => re.process.file.length > 0)
6061
case Some("dataset/*") => runningExtractors = runningExtractors.filter(re => re.process.dataset.length > 0)
@@ -63,8 +64,17 @@ class Extractors @Inject() (extractions: ExtractionService,
6364
}
6465
val selectedExtractors: List[String] = extractorService.getEnabledExtractors()
6566
val groups = extractions.groupByType(extractions.findAll())
66-
val labels = extractorService.listExtractorsLabels().groupBy(_.category.getOrElse("Other"))
67-
Ok(views.html.updateExtractors(runningExtractors, selectedExtractors, groups, labels))
67+
val allLabels = extractorService.listExtractorsLabels()
68+
val categorizedLabels = allLabels.groupBy(_.category.getOrElse("Other"))
69+
request.getQueryString("labelFilter") match {
70+
case None => {}
71+
case Some(lblName) => allLabels.find(lbl => lblName == lbl.name) match {
72+
case Some(label) => runningExtractors = runningExtractors.filter(re => label.extractors.contains(re.name))
73+
case None => {}
74+
}
75+
}
76+
77+
Ok(views.html.updateExtractors(runningExtractors, selectedExtractors, groups, categorizedLabels))
6878
}
6979

7080
def manageLabels = ServerAdminAction { implicit request =>

app/views/updateExtractors.scala.html

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ <h1>Extractor Catalog</h1>
4444
<div class="control-group">
4545
<div class="btn-group" data-toggle="buttons">
4646
@for(label <- catLabels) {
47-
<label class="btn btn-primary active">
48-
<input id="[email protected]" class="label-checkbox" type="checkbox" autocomplete="off" checked> @label.name
49-
</label>
47+
<button onclick="submitFilters('@label.name', this)" id="[email protected]" role="button" class="btn btn-primary label-filter-btn">
48+
<input type="checkbox" autocomplete="off" checked> @label.name
49+
</button>
5050
}
5151
</div>
5252
</div>
@@ -71,11 +71,11 @@ <h1>Extractor Catalog</h1>
7171
</div>
7272
</div>
7373

74-
<!-- TODO: Process trigger search filter -->
74+
<!-- Process trigger search filter -->
7575
<div class="form-group">
7676
<label for="processTriggerSearchFilter" class="col-sm-3 control-label">Triggers On:</label>
7777
<div class="col-sm-9">
78-
<select class="form-control" name="processTriggerSearchFilter" id="processTriggerSearchFilter" onchange="this.form.submit()">
78+
<select class="form-control" name="processTriggerSearchFilter" id="processTriggerSearchFilter" onchange="submitFilters(null, this)">
7979
<option>file/*</option>
8080
<option>dataset/*</option>
8181
<option>metadata/*</option>
@@ -344,26 +344,38 @@ <h1>Extractor Catalog</h1>
344344
</div>
345345
</div>
346346

347-
@if(showOptional("filterSection")) {
348-
<script>
349-
$('document').ready(function () {
350-
var params = new URLSearchParams(window.location.search);
351-
var processTriggerParam = "processTriggerSearchFilter"
352-
if (params.has(processTriggerParam)) {
353-
document.getElementById(processTriggerParam).value = params.get(processTriggerParam);
354-
}
355-
var labelsParam = "labelsFilter"
356-
if (params.has(labelsParam)) {
357-
// If we have a label param, uncheck all other labels
358-
var labelNames = params.get(labelsParam).split(',');
359-
if (labels => 1) { $('.label-checkbox').prop("checked", false); }
360-
361-
// Check only the labels in the query string
362-
labelNames.forEach(function(labelName) {
363-
$('label-' + labelName).prop("checked", true);
364-
});
365-
}
366-
});
367-
</script>
368-
}
347+
<script>
348+
function submitFilters(labelName, context) {
349+
// Grab existing query string values
350+
var currentParams = new URLSearchParams(window.location.search);
351+
var targets = context.formAction.split('@routes.Extractors.selectExtractors()')
352+
353+
// Set new query strings parameters based on form value
354+
var newParams = new URLSearchParams(targets[1]);
355+
var newLabelName = labelName || currentParams.get('labelFilter')
356+
if (newLabelName) {
357+
newParams.set('labelFilter', newLabelName);
358+
}
359+
window.location.search = newParams.toString();
360+
}
361+
362+
$('document').ready(function () {
363+
var params = new URLSearchParams(window.location.search);
364+
var processTriggerParam = "processTriggerSearchFilter"
365+
if (params.has(processTriggerParam)) {
366+
$(processTriggerParam).val(params.get(processTriggerParam));
367+
}
368+
var labelParam = "labelFilter"
369+
if (params.has(labelParam)) {
370+
// If we have a label param, uncheck all other labels
371+
$('.label-filter-btn').removeClass("btn-primary");
372+
$('.label-filter-btn').addClass("btn-default");
373+
374+
// Check only the label in the query string
375+
var labelName = params.get(labelParam);
376+
$('#label-' + labelName).removeClass("btn-default");
377+
$('#label-' + labelName).addClass("btn-primary");
378+
}
379+
});
380+
</script>
369381
}

0 commit comments

Comments
 (0)