{## # Selected IDs will be always present, initially it will be whatever is stored in the field # It may be a comma separated string, so we need to split that into an array #} {% if selectedIds is not defined %} {% set selectedIds = [] %} {% endif %} {% if not sprig.isRequest %} {% set selectedIds = selectedIds|merge({ (_fieldHandle): _originalIds }) %} {% endif %} {% if selectedIds[_fieldHandle] is not iterable %} {% if selectedIds[_fieldHandle] is not empty %} {% set selectedIds = selectedIds|merge({ (_fieldHandle): selectedIds[_fieldHandle]|split(',') }) %} {% else %} {% set selectedIds = selectedIds|merge({ (_fieldHandle): [] }) %} {% endif %} {% endif %} {# If the field values are submitted, then we need to use them to sort the selectedIds by #} {% if fields is defined and fields[_fieldHandle] is defined %} {% set sortedIds = [] %} {% for id in fields[_fieldHandle] %} {% if id in selectedIds[_fieldHandle] %} {% set sortedIds = sortedIds|push(id) %} {% endif %} {% endfor %} {% set selectedIds = selectedIds|merge({ (_fieldHandle): sortedIds|merge(selectedIds[_fieldHandle])|filter|unique }) %} {% endif %} {# Process the removed ID if there is one #} {% if removedId is defined %} {% set selectedIds = selectedIds|merge({ (_fieldHandle): selectedIds[_fieldHandle]|filter((v, k) => v != removedId) }) %} {% endif %} {# Now we can fetch the assets #} {% set assets = [] %} {% if selectedIds[_fieldHandle] %} {% set assets = craft.assets.id(selectedIds[_fieldHandle]).fixedOrder().all() %} {% endif %} {## # At this point we need to store them in a field as a string so we can update # this from the asset index child component and trigger a refresh #} {{ hiddenInput('selectedIds['~_fieldHandle~']', selectedIds[_fieldHandle]|join(','), { id: 'field-'~_fieldId~'-selectedIds' }) }}
{## # Output the selected assets # Sortable is wired up here, we have swap the DOM so we submit the new order #} {# Asset browser #}
{# Button and spinner#}
{# Button to trigger it if applicable #} {% if _fieldLimit > assets|length %} {% endif %}
{# The actual asset browser / index #}
{# Overlay #} {# Panel #}
{# Panel header #}

Add a file

Choose a file from your library or upload a new one.

{# Middle and footer #} {{ sprig('_market/_components/assets/field-index', { _fieldId: _fieldId, _fieldLimit: _fieldLimit, _fieldHandle: _fieldHandle, _originalIds: selectedIds[_fieldHandle]|join(','), _folderId: _folderId, selectedIds: selectedIds[_fieldHandle]|join(',') }, { 's-trigger': 'load, refresh, uploadfinished', 'id' : 'field-'~_fieldId~'-assets-index', 'class' : 'flex flex-col h-full field-assets-index', 'x-on:htmx:after-swap' : 'applyScroll', }) }}