ckanext-scheming icon indicating copy to clipboard operation
ckanext-scheming copied to clipboard

Feature Request: select/multiple_select autocomplete

Open jqnatividad opened this issue 5 years ago • 1 comments

Currently, autocomplete is supported with the tag_string_autocomplete and resource_format_autocomplete presets.

It'd be awesome if scheming can also implement autocomplete for select and multiple_select presets.

jqnatividad avatar Nov 23 '20 16:11 jqnatividad

Here is a possible solution I tried (even if it would be nice to have something like this included in ckanext-scheming)

views.py:

from flask import Blueprint, jsonify
import ckan.plugins.toolkit as toolkit

scheming = Blueprint("scheming", __name__)

@scheming.route('/scheming/api/util/<field>/autocomplete')
def autocomplete(field):
    results = []
    value = toolkit.request.params.get('incomplete')
    if field == "myfield":
        for item in "my custom tags".split():
            if value in item:
                results.append({'Name': item})
    # ...
    return jsonify({"ResultSet": {"Result": results}})

plugin.py:

import ckan.plugins as plugins
from ckanext.myplugin.views import scheming
# ...

class MyPlugin(plugins.SingletonPlugin):
    plugins.implements(plugins.IBlueprint)
    # ...

    # IBlueprint
    def get_blueprint(self):
        return [scheming]

customschema.json:

...
    {
      "field_name": "myfield",
      "label": "My field",
      "preset": "tag_string_autocomplete",
      "form_attrs": {
        "data-module": "autocomplete",
        "data-module-tags": "",
        "data-module-source": "/scheming/api/util/myfield/autocomplete?incomplete=?",
        "class": ""
      }
    },
...

You can also use "data-module-createtags": "false" to prevent custom input.

frafra avatar Apr 14 '22 16:04 frafra