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 %}