Skip to content

Commit

Permalink
add time field filtering
Browse files Browse the repository at this point in the history
  • Loading branch information
cselod committed Jul 25, 2018
1 parent dbfe18c commit 5ffe2e8
Show file tree
Hide file tree
Showing 5 changed files with 177 additions and 4 deletions.
4 changes: 4 additions & 0 deletions v3/board/scss/field/time.scss
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
}
}

.col:last-child {
margin-right: 0;
}

.form-control {
width: 4em;
}
Expand Down
46 changes: 45 additions & 1 deletion v3/board/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,15 @@ function App(record) {

this.applyFilters = function () {

//helper function
var stringToFloat = function (s) {
if ( isNaN(s) || s == "" ) {
s = 0;
}

return parseFloat(s);
}; // stringToFloat

var self = this;

if (null === kanban.app.current_board()) {
Expand All @@ -830,7 +839,7 @@ function App(record) {
}

var filters = [];
$('#modal .field-filter').each(function(){
$('#modal .field-filter').not('.field-filter-time').each(function(){
var fieldId = $(this).attr('data-id');
var operator = $(this).find('select').find(':selected').val();

Expand All @@ -849,6 +858,41 @@ function App(record) {
})
})

//add time filters - handled separately than other filter fields because it contains two inputs
$('#modal .field-filter-time').each(function(){
var fieldId = $(this).attr('data-id');
var operator = $(this).find('select').find(':selected').val();
var $field = $(this);

var $hours = $('.form-control-hours', $field);
var $estimate = $('.form-control-estimate', $field);

var hours = $hours.val();
hours = stringToFloat(hours);

var estimate = 0;
if ( $estimate.length == 1 ) {
var estimate = $estimate.val();
estimate = stringToFloat(estimate);
}

var returnValue = {
hours,
estimate
}
if ($hours.val() == "" && $estimate.val() == "") {
returnValue = ""
}

filters.push({
fieldId,
operator,
value: returnValue
});


})


self.current_board().applyFilters(filters);

Expand Down
16 changes: 13 additions & 3 deletions v3/board/src/Board.js
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,15 @@ function Board(record) {
filterValue = Date.prototype.formatDate(filterValue, userAppOptions.date_view_format);
}

if (field.fieldType() === "time") {
if (filterValue == "") {
filterValue = {
hours: "",
estimate: ""
}
}
}

var storedFilter = {};
storedFilter.filterValue = filterValue;
storedFilter["filterOperator" + filterOperator] = true;
Expand Down Expand Up @@ -604,6 +613,7 @@ function Board(record) {
});
});


}; // toggleFilterModal

this.applyFilters = function(filters){
Expand Down Expand Up @@ -641,12 +651,12 @@ function Board(record) {
filteredFieldCount++;
continue;
}
for(var k = 0; k < fieldValues.length; k++) {
if ('undefined' === typeof kanban.fieldvalues[fieldValues[k]]) {
for(var k = 0; k < fieldvaluesByField.length; k++) {
if ('undefined' === typeof kanban.fieldvalues[fieldvaluesByField[k]]) {
continue;
}

var fieldvalue = kanban.fieldvalues[fieldValues[k]];
var fieldvalue = kanban.fieldvalues[fieldvaluesByField[k]];

if ('undefined' === typeof kanban.fields[fieldvalue.fieldId()]) {
continue;
Expand Down
30 changes: 30 additions & 0 deletions v3/board/src/Field/Time.js
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,36 @@ function Field_Time(record) {
return content.hours + 'h / ' + content.estimate + 'h';
}; // formatContentForComment

this.applyFilter = function(fieldValue, filterElement) {
var fieldContent = fieldValue.field().formatContentForComment(fieldValue.content());
var strContent = fieldContent.trim();
var strFilter = this.formatContentForComment(filterElement.value);

var contentHours = Number(fieldValue.content().hours);
var filterHours = Number(filterElement.value.hours);

switch (filterElement.operator) {
//Operator: =
case "0":
return strContent.localeCompare(strFilter) === 0;
//Operator: !=
case "1":
return strContent.localeCompare(strFilter) !== 0;
//Operator: <
case "2":
return contentHours < filterHours;
//Operator: <=
case "3":
return contentHours <= filterHours;
//Operator: >
case "4":
return contentHours > filterHours;
//Operator: >=
case "5":
return contentHours >= filterHours;
}
}

} // Field_Time

// inherit Field
Expand Down
85 changes: 85 additions & 0 deletions v3/board/templates/filter/time.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<script class="template" type="t/template" data-id="filter-time">

<div class="list-group-item field-filter field-filter-time" data-id="{{%fieldId}}">
<div class="row">
<div class="col col-sm-4">
<?php _e( 'Time', 'kanban' ) ?>
</div><!--col-->
<div class="col col-sm-4">
<select class="form-control">
<option value="<?php _e( '0', 'kanban' ) ?>" {{storedFilter.filterOperator0}}selected="selected"{{/storedFilter.filterOperator0}}><?php _e( '=', 'kanban' ) ?></option>
<option value="<?php _e( '1', 'kanban' ) ?>" {{storedFilter.filterOperator1}}selected="selected"{{/storedFilter.filterOperator1}}><?php _e( '!=', 'kanban' ) ?></option>
<option value="<?php _e( '2', 'kanban' ) ?>" {{storedFilter.filterOperator2}}selected="selected"{{/storedFilter.filterOperator2}}><?php _e( '<', 'kanban' ) ?></option>
<option value="<?php _e( '3', 'kanban' ) ?>" {{storedFilter.filterOperator3}}selected="selected"{{/storedFilter.filterOperator3}}><?php _e( '<=', 'kanban' ) ?></option>
<option value="<?php _e( '4', 'kanban' ) ?>" {{storedFilter.filterOperator4}}selected="selected"{{/storedFilter.filterOperator4}}><?php _e( '>', 'kanban' ) ?></option>
<option value="<?php _e( '5', 'kanban' ) ?>" {{storedFilter.filterOperator5}}selected="selected"{{/storedFilter.filterOperator5}}><?php _e( '>=', 'kanban' ) ?></option>
</select>
</div><!--col-->
<div class="col col-sm-4 form-group form-group-time">
<!-- <input type="text" class="form-control time-filter-value" value="{{%storedFilter.filterValue}}"> -->
<div class="clearfix">
<div class="col xxcol-sm-6 col-hours" data-label="<?php _e('h', 'kanban') ?>">

<input class="form-control form-control-hours" type="number" step="{{%fieldOptions.step}}"
min="0"
onfocus="kanban.fields[{{%field.id}}].onFocus(this, event);"
onkeydown="kanban.fields[{{%field.id}}].onKeydown(this, event);"
onblur="kanban.fields[{{%field.id}}].onBlur(this, event);"
value="{{%storedFilter.filterValue.hours}}"></input>
<div class="btn-group btn-group-justified">
<a class="btn btn-default btn-sm"
href="javascript:void(0);"
data-input="hours"
data-operator="1"
onclick="kanban.fields[{{%field.id}}].onClickbutton(this);">
<i class=" ei ei-plus"></i>
</a>
<a class="btn btn-default btn-sm"
href="javascript:void(0);"
data-input="hours"
data-operator="-1"
onclick="kanban.fields[{{%field.id}}].onClickbutton(this);">
<i class=" ei ei-minus-06"></i>
</a>
</div>
</div>

{{fieldOptions.show_estimate}}

<div class="col">
/
</div>

<div class="col xxcol-sm-6 col-estimate" data-label="<?php _e('h', 'estimate') ?>">

<input class="form-control form-control-estimate" type="number" step="{{%fieldOptions.step}}"
min="0"
onfocus="kanban.fields[{{%field.id}}].onFocus(this, event);"
onkeydown="kanban.fields[{{%field.id}}].onKeydown(this, event);"
onblur="kanban.fields[{{%field.id}}].onBlur(this, event);"
value="{{%storedFilter.filterValue.estimate}}"></input>
<div class="btn-group btn-group-justified">
<a class="btn btn-default btn-sm"
href="javascript:void(0);"
data-input="estimate"
data-operator="1"
onclick="kanban.fields[{{%field.id}}].onClickbutton(this);">
<i class=" ei ei-plus"></i>
</a>
<a class="btn btn-default btn-sm"
href="javascript:void(0);"
data-input="estimate"
data-operator="-1"
onclick="kanban.fields[{{%field.id}}].onClickbutton(this);">
<i class=" ei ei-minus-06"></i>
</a>
</div>
</div>

{{/fieldOptions.show_estimate}}
</div>
</div><!--col-->
</div><!--row-->
</div><!--list-group-item-->

</script>

0 comments on commit 5ffe2e8

Please sign in to comment.