1
0
Fork 0
mirror of synced 2024-06-01 10:09:48 +12:00
budibase/packages/frontend-core/src/components/grid/layout/GridRow.svelte
2023-04-20 08:17:07 +01:00

58 lines
1.3 KiB
Svelte

<script>
import { getContext } from "svelte"
import DataCell from "../cells/DataCell.svelte"
export let row
export let idx
export let invertY = false
const {
focusedCellId,
reorder,
selectedRows,
renderedColumns,
hoveredRowId,
selectedCellMap,
focusedRow,
columnHorizontalInversionIndex,
} = getContext("grid")
$: rowSelected = !!$selectedRows[row._id]
$: rowHovered = $hoveredRowId === row._id
$: rowFocused = $focusedRow?._id === row._id
$: reorderSource = $reorder.sourceColumn
</script>
<div
class="row"
on:focus
on:mouseenter={() => ($hoveredRowId = row._id)}
on:mouseleave={() => ($hoveredRowId = null)}
>
{#each $renderedColumns as column, columnIdx (column.name)}
{@const cellId = `${row._id}-${column.name}`}
<DataCell
{cellId}
{column}
{row}
{invertY}
{rowFocused}
invertX={columnIdx >= $columnHorizontalInversionIndex}
highlighted={rowHovered || rowFocused || reorderSource === column.name}
selected={rowSelected}
rowIdx={idx}
focused={$focusedCellId === cellId}
selectedUser={$selectedCellMap[cellId]}
width={column.width}
/>
{/each}
</div>
<style>
.row {
width: 0;
display: flex;
height: var(--row-height);
}
</style>