Lava Shortcode - Campus Picker

Description

Display a dropdown list of campuses for quick selection.

Documentation

This control allows you to select a campus.

Example Usage
{[ campuspicker label:'Primary Campus' value:'1,2' allowmultiple:'true' campustypes:'768' campusstatuses:'765' selectablecampuses:'1,2,5' ]}
Parameters

Below are the parameters for the campus picker shortcode.

  • label - The label to display above the control.
  • showlabel (true) - Whether to display label.
  • name (campus) - The name for the campus picker control.
  • value - The ID or Guid of the currently selected campus(es).
  • valuefield (id) - Specifies whether the picker's value should correspond to the campus' id or guid.
  • includeinactive (false) - Determines if inactive campuses should be displayed.
  • campustypes - Filters the campus list by type (comma separated list of defined value ids).
  • campusstatuses - Filters the campus list by status (comma separated list of defined value ids).
  • selectablecampuses - List of specific campuses to display (comma separated list of campus ids).
  • longlistenabled (false) - Enhances the functionality to include a search feature, facilitating swift and efficient selection of the preferred item from the list.
  • allowmultiple (false) - Determines if the selection of multiple values is allowed.
  • isrequired (false) - Establishes whether making a selection is necessary.
  • validationmessage (Please provide a campus.) - Message to display when the value is not valid.
  • additionalattributes - Additional attributes to include on the input control.

The above settings enable a wide range of filtering options for the list. Regardless of the filter configurations, the current value will consistently be shown.

Markup

//- Prep configuration settings
{% assign sc-statusList = campusstatuses | Split:',' %}
{% assign sc-typeList = campustypes | Split:',',true %}
{% assign sc-selectableList = selectablecampuses | Split:',' %}
{% assign sc-currentValues = value | Split:',' %} //- Note we're supporting the possibility that there could be multiple values.
{% assign includeinactive = includeinactive | AsBoolean %}
{% assign allowmultiple = allowmultiple | AsBoolean %}

//- Get source data
{% assign sc-campuses = 'All' | FromCache:'Campus'  %}

//- Filtering works by selecting all campuses that should not be shown
//- and then removing them from the list. This means that configuration
//- filters are AND not OR (which matches the C# logic).

//- Filter by type
{% if sc-typeList != empty %}

    {% for campus in sc-campuses reversed %}
        {% assign campusTypeId = campus.CampusTypeValueId | ToString %}
        {% assign isConfiguredType = sc-typeList | Contains:campusTypeId %}
        {% if isConfiguredType == false %}
            {% assign sc-campuses = sc-campuses | RemoveFromArray:campus %}
        {% endif %}
    {% endfor %}

{% endif %}

//- Filter by status
{% if sc-statusList != empty %}

    {% for campus in sc-campuses reversed %}
        {% assign campusStatusId = campus.CampusStatusValueId | ToString %}
        {% assign isConfiguredStatus = sc-statusList | Contains:campusStatusId %}
        {% if isConfiguredStatus == false %}
            {% assign sc-campuses = sc-campuses | RemoveFromArray:campus %}
        {% endif %}
    {% endfor %}

{% endif %}

//- Filter by selected
{% if sc-selectableList != empty %}

    {% for campus in sc-campuses reversed %}
        {% assign campusId = campus.Id | ToString %}
        {% assign isSelected = sc-selectableList | Contains:campusId %}
        {% if isSelected == false %}
            {% assign sc-campuses = sc-campuses | RemoveFromArray:campus %}
        {% endif %}
    {% endfor %}

{% endif %}

//- Remove inactive campuses
{% if includeinactive == false %}
    {% assign sc-campuses = sc-campuses | Where:'IsActive',true %}
{% endif %}

//- Ensure current values are still in the list, the value can be either a campus id or guid
{% assign allCampuses = 'All' | FromCache:'Campus'  %}
{% for currentValue in sc-currentValues %}
    {% for campus in allCampuses %}
        {% assign campusId = campus.Id | ToString %}
        {% assign campusGuid = campus.Guid | ToString %}
        {% if campusId == currentValue or campusGuid == currentValue %}
            //- Ensure the campus list has this campus, if not add it
            {% assign isInCampusList = sc-campuses | Contains:campus %}

            {% if isInCampusList == false %}
                {% assign sc-campuses = sc-campuses | AddToArray:campus %}
            {% endif %}
        {% endif %}
    {% endfor %}
{% endfor %}

//- Sort Campuses
{% assign sc-campuses = sc-campuses | OrderBy:'Order' %}

//- Control formatting
{% if allowmultiple %}
    {[ checkboxlist label:'{{ label }}' showlabel:'{{ showlabel }}' name:'{{ name }}' isrequired:'{{ isrequired }}' value:'{{ value }}' columns:'4' controltype:'campus-picker' id:'{{ id }}' validationmessage:'{{ validationmessage }}' additionalattributes:'{{ additionalattributes}}' ]}

        {% for campus in sc-campuses %}
            [[ item value:'{% if valuefield == 'id' %}{{ campus.Id }}{% else %}{{ campus.Guid }}{% endif %}' text:'{{ campus.Name }}' ]][[ enditem]]
        {% endfor %}

    {[ endcheckboxlist ]}
{% else %}
    {[ dropdown label:'{{ label }}' showlabel:'{{ showlabel }}' name:'{{ name }}' longlistenabled:'{{ longlistenabled }}' value:'{{ value }}' controltype:'campus-picker' isrequired:'{{ isrequired }}' id:'{{ id }}' validationmessage:'{{ validationmessage }}' additionalattributes:'{{ additionalattributes}}' ]}

        {% for campus in sc-campuses %}
            [[ item value:'{% if valuefield == 'id' %}{{ campus.Id }}{% else %}{{ campus.Guid }}{% endif %}' text:'{{ campus.Name }}' ]][[ enditem]]
        {% endfor %}

    {[ enddropdown ]}
{% endif %}