{## # 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' }) }}
Choose a file from your library or upload a new one.