2019-04-03 22:17:42 -04:00
|
|
|
<template>
|
2023-02-21 00:39:16 -05:00
|
|
|
<div
|
2026-06-08 04:13:17 +03:00
|
|
|
class="List"
|
|
|
|
|
:class="{ '-scrollable': scrollable }"
|
2023-02-21 00:39:16 -05:00
|
|
|
>
|
2019-07-05 10:17:44 +03:00
|
|
|
<div
|
2026-06-08 04:13:17 +03:00
|
|
|
v-if="selectable"
|
|
|
|
|
class="header"
|
2019-07-05 10:17:44 +03:00
|
|
|
>
|
2026-06-08 04:13:17 +03:00
|
|
|
<div class="checkbox-wrapper">
|
|
|
|
|
<Checkbox
|
|
|
|
|
:model-value="allSelected"
|
|
|
|
|
:indeterminate="someSelected"
|
|
|
|
|
@update:model-value="toggleAll"
|
|
|
|
|
>
|
|
|
|
|
{{ $t('selectable_list.select_all') }}
|
|
|
|
|
</Checkbox>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="actions">
|
|
|
|
|
<slot
|
|
|
|
|
name="header"
|
|
|
|
|
:selected="filteredSelected"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
2019-04-03 23:45:45 -04:00
|
|
|
</div>
|
2019-07-05 10:17:44 +03:00
|
|
|
<div
|
2026-06-08 04:13:17 +03:00
|
|
|
class="list"
|
|
|
|
|
role="list"
|
2019-07-05 10:17:44 +03:00
|
|
|
>
|
2026-06-08 04:13:17 +03:00
|
|
|
<div
|
2026-06-08 05:27:47 +03:00
|
|
|
v-for="item in items"
|
2026-06-08 04:13:17 +03:00
|
|
|
:key="getKey(item)"
|
|
|
|
|
class="list-item"
|
|
|
|
|
:class="[getClass(item), nonInteractive ? '-non-interactive' : '']"
|
|
|
|
|
role="listitem"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
v-if="selectable"
|
|
|
|
|
class="checkbox-wrapper"
|
|
|
|
|
>
|
|
|
|
|
<Checkbox
|
|
|
|
|
:model-value="isSelected(item)"
|
|
|
|
|
@update:model-value="checked => toggle(checked, item)"
|
|
|
|
|
@click.stop
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<slot
|
|
|
|
|
name="item"
|
|
|
|
|
:item="item"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
2026-06-08 05:27:47 +03:00
|
|
|
v-if="items.length === 0 && !!$slots.empty"
|
2026-06-08 04:13:17 +03:00
|
|
|
class="list-empty-content faint"
|
|
|
|
|
>
|
|
|
|
|
<slot name="empty" />
|
|
|
|
|
<slot name="load" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="footer">
|
|
|
|
|
<button
|
|
|
|
|
v-if="error"
|
|
|
|
|
class="button-unstyled -link -fullwidth alert error"
|
|
|
|
|
@click="fetchEntries"
|
|
|
|
|
>
|
|
|
|
|
{{ $t('general.generic_error') }}
|
|
|
|
|
{{ error }}
|
|
|
|
|
</button>
|
|
|
|
|
<FAIcon
|
|
|
|
|
v-else-if="loading"
|
|
|
|
|
spin
|
|
|
|
|
icon="circle-notch"
|
|
|
|
|
/>
|
|
|
|
|
<a
|
|
|
|
|
v-else-if="!bottomedOut"
|
|
|
|
|
@click="fetchEntries"
|
|
|
|
|
role="button"
|
|
|
|
|
tabindex="0"
|
|
|
|
|
>
|
|
|
|
|
{{ $t('general.more') }}
|
|
|
|
|
</a>
|
|
|
|
|
<span v-else>
|
|
|
|
|
{{ $t('general.no_more') }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
2019-04-03 22:17:42 -04:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
2026-06-08 04:13:17 +03:00
|
|
|
<script src="./list.js"></script>
|
|
|
|
|
|
|
|
|
|
<style src="./list.css"></style>
|