Update speaker tickets
This commit is contained in:
rodič
4b31ad239e
revize
024791d4cf
|
@ -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} ({s.nickname}){/if}</a></div>
|
<div class="m-auto">
|
||||||
|
<a href="/lide?id={s.id}"
|
||||||
|
>{s.name}{#if s.nickname} ({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} ({s.nickname}){/if}</a></div>
|
<div>
|
||||||
|
<a href="/lide?id={s.id}"
|
||||||
|
>{s.name}{#if s.nickname} ({s.nickname}){/if}</a
|
||||||
|
>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -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"}
|
||||||
>
|
>
|
||||||
|
|
|
@ -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} ({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}
|
||||||
|
({claim.ticketData.org})
|
||||||
|
{/if}
|
||||||
|
{#if claim.ticketData.twitter}
|
||||||
|
<a href="https://twitter/{claim.ticketData.twitter}"
|
||||||
|
><i class="fa-brands fa-twitter" /></a
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
|
{/if}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/each}
|
{/each}
|
||||||
|
|
Načítá se…
Odkázat v novém úkolu