Skip to main content

Provide a generic and ergonomic relation widget

Project description

Summary

This cube provides a generic but ergonomic widget to link an edited entity to several others for a given relation. It provides:

  • a list of checkbox-(de-)selectable related entities

  • a mecanism to trigger the display of a pop-up window for each possible target entity type of the relation

  • in the pop-up window, the end-user can:

    • search (using facets) entities to be linked to the edited entity,

    • display (in a paginated table) and select them (using a checkbox on each table line)

    • create a new entity to be linked (can be desactivated)

Usage

Select the relation widget for your relation

You can use the two following mecanisms to configure the user interface:

  • either cubicweb.web.uihelper.FormConfig:

    from cubicweb.web import uihelper
    from cubes.relationwidget.views import RelationFacetWidget
    
    class MyEntityConfig(uihelper.FormConfig):
          etype = 'MyEntity'
          # Move `my_relation` into the attribute section:
          rels_as_attrs = ('my_relation', )
          # Edit `my_relation` using RelationFacetWidget:
          widgets = dict(
              my_relation=RelationFacetWidget,
          )
  • or directly via uicfg.autoform_field_kwarg:

    from cubicweb.web.views import uicfg
    from cubes.relationwidget.views import RelationFacetWidget
    
    # edit the relation as attribute.
    uicfg.autoform_section.tag_subject_of(
        ('MyEntity', 'my_relation', '*'),
        formtype=('main', 'muledit'), section='attributes')
    
    # add the RelationFacetWidget for `my_relation`
    uicfg.autoform_field_kwargs.tag_subject_of(
        ('MyEntity', 'my_relation', '*'), {'widget': RelationFacetWidget})

Configure it (optional)

If you want to desactivate the ability to create a new entity to be linked to the edited one, you can do it:

  • for a single relation using uicfg again:

    uicfg.autoform_field_kwargs.tag_subject_of(
    ('MyEntity', 'my_relation', '*'),
    {'widget': RelationFacetWidget(no_creation_form=True)})
  • application-wide by overriding SearchForRelatedEntitiesView.has_creation_form to always return False:

    from cubes.relationwidget.view import SearchForRelatedEntitiesView
    
    class MySearchForRelatedEntitiesView(SearchForRelatedEntitiesView):
    
        @property
        def has_creation_from(self):
            return False
    
    def registration_callback(vreg):
        vreg.register_and_register(MySearchForRelatedEntitiesView,
                                   SearchForRelatedEntitiesView)

There is also a dialog_options dictionary that can be used to configure the bootstrap modal window (see http://getbootstrap.com/javascript/#modals-options):

uicfg.autoform_field_kwargs.tag_subject_of(
('MyEntity', 'my_relation', '*'),
{'widget': RelationFacetWidget(dialog_options={'keyboard': False})})

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page