Files
lucent-laravel/front/js/svelte/content/Table.svelte
T

126 lines
4.5 KiB
Svelte
Raw Normal View History

2023-10-02 23:10:49 +03:00
<script>
import RecordRow from "./RecordRow.svelte";
import {previewTitle} from "../records/Preview";
import {usernameById} from "../account/users";
import {getContext} from "svelte";
import Avatar from "../account/Avatar.svelte";
2023-11-17 21:22:26 +02:00
import {selectRecord, toggleAll} from "./functions/recordSelect.js";
2023-10-02 23:10:49 +03:00
const channel = getContext("channel");
export let schema;
export let users;
export let records;
export let graph;
export let systemFields;
2023-10-23 19:43:59 +03:00
export let sortParam;
export let sortField;
2023-10-02 23:10:49 +03:00
export let inModal;
2023-10-17 22:57:25 +03:00
export let isWritable;
2023-10-02 23:10:49 +03:00
export let selected = [];
2023-11-17 21:22:26 +02:00
function eventToggleAll(e) {
selected = toggleAll(e,records,selected)
2023-10-02 23:10:49 +03:00
}
2023-11-17 21:22:26 +02:00
function select(record) {
selected = selectRecord(record, selected)
2023-10-02 23:10:49 +03:00
}
$: visibleColumns = schema.fields.filter(c => schema.visible.includes(c.name))
</script>
<div class="lx-table rounded">
<table class="">
<thead class="table-light">
<tr>
2023-10-17 22:57:25 +03:00
{#if isWritable}
<th>
<input
2023-11-17 21:22:26 +02:00
on:change|preventDefault={eventToggleAll}
2023-10-17 22:57:25 +03:00
indeterminate={selected.length > 0 &&
2023-10-02 23:10:49 +03:00
selected.length < records.length}
2023-10-17 22:57:25 +03:00
checked={selected.length == records.length}
class="form-check-input"
type="checkbox"
/>
</th>
{/if}
2023-10-02 23:10:49 +03:00
{#each visibleColumns as field}
<th
2023-11-17 21:22:26 +02:00
class="field-ui-{field.info.name ?? field.ui}"
2023-10-23 19:43:59 +03:00
class:is-sort={field.name === sortField.name}
2023-10-08 13:46:05 +03:00
scope="col"
title={field.help}
data-bs-toggle="tooltip"
data-bs-placement="top">{field.label}</th
2023-10-02 23:10:49 +03:00
>
{/each}
{#each systemFields.filter(c => schema.visible.includes(c.name)) as sysField}
<th>{sysField.label}</th>
{/each}
</tr>
</thead>
<tbody>
{#each records as record (record.id)}
<tr>
<td class="title-td">
<div
2023-10-08 13:46:05 +03:00
class="title-td-contents d-inline-flex justify-content-between w-100 align-items-center"
2023-10-02 23:10:49 +03:00
>
<div class="d-flex align-items-center ">
2023-10-17 22:57:25 +03:00
{#if isWritable}
<div class="form-check">
<input
2023-11-17 21:22:26 +02:00
on:change={() => select(record)}
2023-10-17 22:57:25 +03:00
class="form-check-input "
type="checkbox"
checked={selected.find(
2023-10-02 23:10:49 +03:00
(r) => r.id === record.id
)}
2023-10-17 22:57:25 +03:00
value={record}
/>
</div>
{/if}
2023-10-02 23:10:49 +03:00
<a
2023-10-08 13:46:05 +03:00
class="me-2 text-decoration-none text-dark fs-6"
href="{channel.lucentUrl}/records/{record.id}"
target={inModal ? "_blank" : "_self"}
title={previewTitle(channel.schemas, record, graph)}
data-bs-toggle="tooltip" data-bs-placement="left"
2023-10-02 23:10:49 +03:00
>
{previewTitle(channel.schemas, record, graph)}
</a>
</div>
<div>
<Avatar
2023-10-08 13:46:05 +03:00
name={usernameById(
2023-10-02 23:10:49 +03:00
users,
record._sys.updatedBy
)}
2023-10-08 13:46:05 +03:00
side={24}
2023-10-02 23:10:49 +03:00
/>
</div>
</div>
</td>
<RecordRow
2023-10-08 13:46:05 +03:00
{record}
{graph}
{schema}
{visibleColumns}
2023-10-23 19:43:59 +03:00
{sortParam}
{sortField}
2023-10-08 13:46:05 +03:00
{users}
2023-10-02 23:10:49 +03:00
/>
</tr>
{/each}
</tbody>
</table>
</div>