Update
This commit is contained in:
rodič
ca115f880e
revize
a94df9de57
|
@ -12,10 +12,31 @@
|
|||
let lastUpdate = null;
|
||||
let data = null;
|
||||
let speakersWithoutTicket = null;
|
||||
let selectedType = "all";
|
||||
|
||||
$: ticketTypes = {
|
||||
all: { title: "Vše" },
|
||||
organizator: { title: "Organizátor" },
|
||||
speaker: { title: "Přednášející" },
|
||||
partner: { title: "Partner" },
|
||||
staff: { title: "Obsluha" },
|
||||
host: { title: "Host" },
|
||||
};
|
||||
|
||||
function countType(type = "all") {
|
||||
if (!data) {
|
||||
return null;
|
||||
}
|
||||
if (type === "all") {
|
||||
return data.length;
|
||||
}
|
||||
const res = data.filter((i) => i.type === type);
|
||||
return res ? res.length : null;
|
||||
}
|
||||
|
||||
async function loadData() {
|
||||
data = await api.apiCall("claims");
|
||||
speakersWithoutTicket = speakersWithoutTicketGen()
|
||||
speakersWithoutTicket = speakersWithoutTicketGen();
|
||||
|
||||
lastUpdate = new Date();
|
||||
}
|
||||
|
@ -52,17 +73,17 @@
|
|||
return arr;
|
||||
}
|
||||
|
||||
function speakersWithoutTicketGen () {
|
||||
function speakersWithoutTicketGen() {
|
||||
if (!data) {
|
||||
return null
|
||||
return null;
|
||||
}
|
||||
const wt = []
|
||||
$bundle.spec.speakers.forEach(sp => {
|
||||
if (!data.find(i => i.link.type === 'speaker' && i.link.id === sp.id)) {
|
||||
wt.push(sp)
|
||||
const wt = [];
|
||||
$bundle.spec.speakers.forEach((sp) => {
|
||||
if (!data.find((i) => i.link.type === "speaker" && i.link.id === sp.id)) {
|
||||
wt.push(sp);
|
||||
}
|
||||
})
|
||||
return wt
|
||||
});
|
||||
return wt;
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
|
@ -83,16 +104,42 @@
|
|||
</div>
|
||||
{#if speakersWithoutTicket}
|
||||
<div class="mt-10">
|
||||
<h2 class="text-lg font-semibold uppercase">Přednášející bez kódu ({speakersWithoutTicket.length})</h2>
|
||||
<h2 class="text-lg font-semibold uppercase">
|
||||
Přednášející bez kódu ({speakersWithoutTicket.length})
|
||||
</h2>
|
||||
<div class="flex gap-4 flex-wrap mt-4">
|
||||
{#each speakersWithoutTicket as sp}
|
||||
<div><a href="/lide?id={sp.id}"><div class="inline-block align-middle"><Avatar speaker={sp} size="extra-small" /></div> {sp.name}</a></div>
|
||||
{/each}
|
||||
{#each speakersWithoutTicket as sp}
|
||||
<div>
|
||||
<a href="/lide?id={sp.id}"
|
||||
><div class="inline-block align-middle">
|
||||
<Avatar speaker={sp} size="extra-small" />
|
||||
</div>
|
||||
{sp.name}</a
|
||||
>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="mt-10">
|
||||
<h2 class="text-lg font-semibold uppercase">Seznam všech speciálních vstupenek ({data.length})</h2>
|
||||
<h2 class="text-lg font-semibold uppercase">
|
||||
Seznam všech speciálních vstupenek ({data.length})
|
||||
</h2>
|
||||
<div class="mt-4 flex gap-4">
|
||||
{#each Object.keys(ticketTypes) as tid}
|
||||
<div>
|
||||
<label class="cursor-pointer"
|
||||
><input
|
||||
type="radio"
|
||||
bind:group={selectedType}
|
||||
name="type"
|
||||
value={tid}
|
||||
/>
|
||||
{ticketTypes[tid].title} ({countType(tid)})</label
|
||||
>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
<table class="table-auto mt-6 w-full" cellpadding="6">
|
||||
<thead>
|
||||
<tr class="text-xs uppercase text-blue-web/80">
|
||||
|
@ -104,52 +151,54 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
{#each claimsMap(data) as claim}
|
||||
<tr
|
||||
class={claim.claimed
|
||||
? "hover:bg-blue-500/10"
|
||||
: "bg-yellow-400/20 hover:bg-yello-600/20"}
|
||||
>
|
||||
<td class="border-b font-bold">{claim.type}</td>
|
||||
<td class="border-b">
|
||||
<a href={claim.linkInfo.url}>
|
||||
<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 !selectedType || selectedType === "all" || (selectedType && selectedType === claim.type)}
|
||||
<tr
|
||||
class={claim.claimed
|
||||
? "hover:bg-blue-500/10"
|
||||
: "bg-yellow-400/20 hover:bg-yello-600/20"}
|
||||
>
|
||||
<td class="border-b font-bold">{claim.type}</td>
|
||||
<td class="border-b">
|
||||
<a href={claim.linkInfo.url}>
|
||||
<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}
|
||||
{#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>
|
||||
</tr>
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -158,4 +207,4 @@
|
|||
<div>Načítám ..</div>
|
||||
{/if}
|
||||
</section>
|
||||
<section class="h-20"></section>
|
||||
<section class="h-20" />
|
||||
|
|
|
@ -37,7 +37,9 @@
|
|||
public: "Běžná vstupenka",
|
||||
speaker: "Přednášející",
|
||||
organizator: "Organizátor",
|
||||
host: "Doprovod",
|
||||
staff: "Obsluha",
|
||||
partner: "Partner",
|
||||
host: "Host",
|
||||
};
|
||||
|
||||
let forceShow = false;
|
||||
|
@ -414,7 +416,7 @@
|
|||
</div>
|
||||
{/if}
|
||||
<div class="flex gap-3 text-sm">
|
||||
{#if ticket.type === "speaker" && ticket.link && ticket.link.id}
|
||||
{#if (ticket.type === "speaker" || ticket.type === "organizator") && ticket.link && ticket.link.id}
|
||||
<a href="/lide?id={ticket.link.id}"
|
||||
><Avatar
|
||||
speaker={$bundle.spec.speakers.find(
|
||||
|
|
Načítá se…
Odkázat v novém úkolu