pleroma-fe/src/components/list/list.vue

90 lines
2 KiB
Vue
Raw Normal View History

<template>
<div
2026-06-08 04:13:17 +03:00
class="List"
2026-06-10 19:30:08 +03:00
role="list"
2026-06-08 04:13:17 +03:00
:class="{ '-scrollable': scrollable }"
>
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="selectedItems"
2026-06-08 04:13:17 +03:00
/>
</div>
</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
v-for="item in finalItems"
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
v-if="finalItems.length === 0 && !!$slots.empty"
class="list-item list-empty-content faint"
2026-06-08 04:13:17 +03:00
>
<slot name="empty" />
</div>
<div class="footer">
<button
v-if="error"
class="button-unstyled -link -fullwidth alert error"
@click="fetchEntries"
>
{{ $t('general.generic_error') }}
</button>
<FAIcon
v-else-if="loading"
spin
icon="circle-notch"
/>
<a
v-else-if="!bottomedOut"
role="button"
tabindex="0"
2026-06-10 19:32:41 +03:00
@click="fetchEntries"
2026-06-08 04:13:17 +03:00
>
{{ $t('general.more') }}
</a>
<span v-else-if="finalItems.length !== 0">
2026-06-08 04:13:17 +03:00
{{ $t('general.no_more') }}
</span>
</div>
</div>
</div>
</template>
2026-06-08 04:13:17 +03:00
<script src="./list.js"></script>
<style src="./list.css"></style>