Update speaker tickets

This commit is contained in:
tree 2022-04-30 02:55:27 +02:00
rodič 4b31ad239e
revize 024791d4cf
3 změnil soubory, kde provedl 81 přidání a 9 odebrání

Zobrazit soubor

@ -67,7 +67,11 @@
{#each speakersMap(e.speakers) as s} {#each speakersMap(e.speakers) as s}
<div class="flex gap-1.5"> <div class="flex gap-1.5">
<Avatar speaker={s} size="extra-small" /> <Avatar speaker={s} size="extra-small" />
<div class="m-auto"><a href="/lide?id={s.id}">{s.name}{#if s.nickname}&nbsp;({s.nickname}){/if}</a></div> <div class="m-auto">
<a href="/lide?id={s.id}"
>{s.name}{#if s.nickname}&nbsp;({s.nickname}){/if}</a
>
</div>
</div> </div>
{/each} {/each}
</div> </div>
@ -129,7 +133,11 @@
{#each speakersMap(pe.speakers) as s} {#each speakersMap(pe.speakers) as s}
<div class="flex gap-1"> <div class="flex gap-1">
<Avatar speaker={s} size="micro" /> <Avatar speaker={s} size="micro" />
<div><a href="/lide?id={s.id}">{s.name}{#if s.nickname}&nbsp;({s.nickname}){/if}</a></div> <div>
<a href="/lide?id={s.id}"
>{s.name}{#if s.nickname}&nbsp;({s.nickname}){/if}</a
>
</div>
</div> </div>
{/each} {/each}
{/if} {/if}

Zobrazit soubor

@ -109,7 +109,9 @@
<tbody> <tbody>
{#each tickets as ticket} {#each tickets as ticket}
<tr <tr
class={ticket.id class={["speaker", "host", "partner"].includes(ticket.type)
? "bg-green-400/20 hover:bg-green-600/20"
: ticket.id
? "hover:bg-blue-500/10" ? "hover:bg-blue-500/10"
: "bg-yellow-400/20 hover:bg-yellow-600/20"} : "bg-yellow-400/20 hover:bg-yellow-600/20"}
> >

Zobrazit soubor

@ -6,6 +6,7 @@
import { bundle } from "$lib/stores.js"; import { bundle } from "$lib/stores.js";
import { onMount, onDestroy } from "svelte"; import { onMount, onDestroy } from "svelte";
import { format, formatDistanceToNow } from "date-fns"; import { format, formatDistanceToNow } from "date-fns";
import Avatar from "$lib/Avatar.svelte";
import api from "$lib/api.js"; import api from "$lib/api.js";
let lastUpdate = null; let lastUpdate = null;
@ -20,6 +21,34 @@
return format(new Date(d), "d.M HH:mm"); return format(new Date(d), "d.M HH:mm");
} }
function linkInfo(link) {
const map = {
speaker: { col: "speakers", url: "/lide?id=" },
partner: { col: "partners", suffix: "partner" },
};
const ltype = map[link.type];
if (!ltype) {
return null;
}
const item = $bundle.spec[ltype.col].find((i) => i.id === link.id);
if (!item) {
return "not exists!";
}
return {
title: item.name,
url: ltype.url ? ltype.url + link.id : null,
col: ltype.col,
suffix: ltype.suffix,
};
}
function claimsMap(arr) {
for (const i of arr) {
i.linkInfo = linkInfo(i.link);
}
return arr;
}
onMount(() => { onMount(() => {
loadData(); loadData();
}); });
@ -42,23 +71,56 @@
<tr class="text-xs uppercase text-blue-web/80"> <tr class="text-xs uppercase text-blue-web/80">
<th align="left">Typ</th> <th align="left">Typ</th>
<th align="left">Odkaz</th> <th align="left">Odkaz</th>
<th align="left">Vytvořeno</th>
<th align="left">Vyzvednuto</th> <th align="left">Vyzvednuto</th>
<th align="left">Jmenovka</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{#each data as claim} {#each claimsMap(data) as claim}
<tr <tr
class={claim.claimed class={claim.claimed
? "hover:bg-blue-500/10" ? "hover:bg-blue-500/10"
: "bg-yellow-400/20 hover:bg-yello-600/20"} : "bg-yellow-400/20 hover:bg-yello-600/20"}
> >
<td class="border-b font-bold">{claim.type}</td> <td class="border-b font-bold">{claim.type}</td>
<td class="border-b">{claim.link.type}:{claim.link.id}</td>
<td class="border-b">{fdate(claim.created)}</td>
<td class="border-b"> <td class="border-b">
{#if claim.claimed}{fdate(claim.claimedOn)} | <a href={claim.linkInfo.url}>
<code>{claim.ticketId}</code>{:else}-{/if} <div class="inline-block align-middle">
<Avatar
speaker={$bundle.spec[claim.linkInfo.col].find(
(i) => i.id === claim.link.id
)}
col={claim.linkInfo.col}
size="extra-small"
/>
</div>
{claim.linkInfo.title}
{#if claim.linkInfo.suffix}&nbsp;({claim.linkInfo
.suffix}){/if}
</a>
</td>
<td class="border-b">
{#if claim.claimed}
<code>{claim.ticketId}</code> ({fdate(
claim.claimedOn
)}){:else}-{/if}
</td>
<td class="border-b">
{#if claim.claimed && claim.ticketData}
{#if claim.ticketData.name}
{claim.ticketData.name}
{:else}
<span class="italic">Anonym</span>
{/if}
{#if claim.ticketData.org}
&nbsp;({claim.ticketData.org})
{/if}
{#if claim.ticketData.twitter}
&nbsp;<a href="https://twitter/{claim.ticketData.twitter}"
><i class="fa-brands fa-twitter" /></a
>
{/if}
{/if}
</td> </td>
</tr> </tr>
{/each} {/each}