Karolis' playground schedule / master src / lib / DayContainer.svelte
master

Tree @master (Download .tar.gz)

DayContainer.svelte @masterraw · history · blame

<script lang="ts">
    import { Link } from "svelte-navigator";
    import BaseTimeGrid from "./baseTimeGrid.svelte";
    import type { Day } from "./models/models";
    import Timeperiod from "./timeperiod.svelte";
    export let linkTemplate: (name: string) => string = null;
    export let dayData: Day;
    const options: Intl.DateTimeFormatOptions = {
        weekday: "short",
        year: "numeric",
        month: "numeric",
        day: "numeric",
    };
</script>

<div class="DayContainer">
    <div
        class="DayLabelContainer"
        style={`--opCount: ${dayData.operators.size + 1}`}
    >
        <div class="DayLabel">
            {#if dayData.date}
                {dayData.date.toLocaleDateString(undefined,options)}
            {:else}
                {dayData.Name}
            {/if}
        </div>
    </div>
    {#each [...dayData.operators.entries()] as [name, periods]}
        <div class="operatorLabel">
            {#if linkTemplate != null}
                <Link to={linkTemplate(name)}>{name}</Link>
            {:else}
                {name}
            {/if}
        </div>
        <div class="operatorData">
            <BaseTimeGrid />
            {#each periods as period}
                <Timeperiod {period} />
            {/each}
        </div>
    {/each}
</div>

<style lang="sass">
    .DayContainer
        display: grid
        grid-template-columns: minmax(5rem,1.5fr) minmax(5rem,1fr) 24fr
        border: 1px solid #999999
        font-size: .1vv
        .DayLabelContainer
            display: inline-grid
            .DayLabel
                align-self: center
            grid-row: 1 / var(--opCount)
            border: 1px solid #999999
        .operatorLabel
            border: 1px solid #999999
            grid-column: 2
        .operatorData
            border: 1px solid #999999
            grid-column: 3
            display: inline-grid
            position: relative
</style>