Skip to content

Commit

Permalink
[#4556] override interface for text search
Browse files Browse the repository at this point in the history
  • Loading branch information
wardi committed Dec 7, 2018
1 parent dd41f50 commit 380b4cb
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 13 deletions.
24 changes: 24 additions & 0 deletions ckan/lib/helpers.py
Expand Up @@ -2312,6 +2312,30 @@ def resource_view_get_fields(resource):
return sorted(fields)


@core_helper
def resource_view_get_field_filters(resource):
'''
Returns [{'id': field_id, 'filter': view_filter_type or None}, ...]
with all columns in the resource, or [] if resource is not stored
in datastore
'''

if not resource.get('datastore_active'):
return []

data = {
'resource_id': resource['id'],
'limit': 0,
'include_total': False,
}
result = logic.get_action('datastore_search')({}, data)

return [{
'id': field['id'],
'filter': field.get('info', {}).get('view_filter') or None}
for field in result.get('fields', [])]


@core_helper
def resource_view_is_iframed(resource_view):
'''
Expand Down
28 changes: 16 additions & 12 deletions ckan/public/base/javascript/modules/resource-view-filters.js
Expand Up @@ -4,36 +4,36 @@ this.ckan.module('resource-view-filters', function (jQuery) {
function initialize() {
var self = this,
resourceId = self.options.resourceId,
fields = self.options.fields,
fieldFilters = self.options.fieldFilters,
dropdownTemplate = self.options.dropdownTemplate,
addFilterTemplate = '<a class="btn btn-primary" href="#">' + self._('Add Filter') + '</a>',
filtersDiv = $('<div></div>');

var filters = ckan.views.filters.get();
_appendDropdowns(filtersDiv, resourceId, dropdownTemplate, fields, filters);
_appendDropdowns(filtersDiv, resourceId, dropdownTemplate, fieldFilters, filters);
var addFilterButton = _buildAddFilterButton(self, filtersDiv, addFilterTemplate,
fields, filters, function (evt) {
fieldFilters, filters, function (evt) {
// Build filters object with this element's val as key and a placeholder
// value so _appendDropdowns() will create its dropdown
var filters = {};
filters[evt.val] = [];

$(this).select2('destroy');
_appendDropdowns(filtersDiv, resourceId, dropdownTemplate, fields, filters);
_appendDropdowns(filtersDiv, resourceId, dropdownTemplate, fieldFilters, filters);
evt.preventDefault();
});
self.el.append(filtersDiv);
self.el.append(addFilterButton);
}

function _buildAddFilterButton(self, el, template, fields, filters, onChangeCallback) {
function _buildAddFilterButton(self, el, template, fieldFilters, filters, onChangeCallback) {
var addFilterButton = $(template),
currentFilters = Object.keys(filters),
fieldsNotFiltered = $.grep(fields, function (field) {
return !filters.hasOwnProperty(field);
fieldsNotFiltered = $.grep(fieldFilters, function (field) {
return !filters.hasOwnProperty(field.id);
}),
data = $.map(fieldsNotFiltered, function (d) {
return { id: d, text: d };
return { id: d.id, text: d.id };
});

if (data.length === 0) {
Expand All @@ -59,10 +59,14 @@ this.ckan.module('resource-view-filters', function (jQuery) {
return addFilterButton;
}

function _appendDropdowns(dropdowns, resourceId, template, fields, filters) {
$.each(fields, function (i, field) {
if (filters.hasOwnProperty(field)) {
dropdowns.append(_buildDropdown(self.el, template, field));
function _appendDropdowns(dropdowns, resourceId, template, fieldFilters, filters) {
$.each(fieldFilters, function (i, field) {
if (filters.hasOwnProperty(field.id)) {
if (field.filter === 'search') {
dropdowns.append('<b>text search here</b>');
} else {
dropdowns.append(_buildDropdown(self.el, template, field.id));
}
}
});

Expand Down
3 changes: 2 additions & 1 deletion ckan/templates/package/snippets/resource_view_filters.html
Expand Up @@ -2,6 +2,7 @@
class="resource-view-filters"
data-module="resource-view-filters"
data-module-resource-id="{{ resource['id'] }}"
data-module-fields="{{ h.dump_json(h.resource_view_get_fields(resource)) }}"
data-module-field-filters="{{
h.dump_json(h.resource_view_get_field_filters(resource)) }}"
>
</div>

0 comments on commit 380b4cb

Please sign in to comment.