Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,236 Bytes
e71d24a c479a59 e71d24a dd7ec11 e71d24a c479a59 97ec6f2 e71d24a c479a59 e71d24a c479a59 e71d24a c479a59 a084673 c479a59 e71d24a c479a59 a084673 e71d24a a084673 e71d24a 97ec6f2 dd7ec11 a084673 97ec6f2 e71d24a c479a59 a084673 c479a59 e71d24a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
<script lang="ts">
import { browser } from "$app/environment";
import InfiniteScroll from "svelte-infinite-scroll";
import Button from "$lib/components/Button.svelte";
import Card from "$lib/components/community/Card.svelte";
import Input from "$lib/components/fields/Input.svelte";
import Radio from "$lib/components/fields/Radio.svelte";
import { COMMUNITY_FILTER_OPTIONS } from "$lib/utils/index.js";
import GoTop from "$lib/components/GoTop.svelte";
export let data;
let form = {
filter: "likes",
page: "0",
}
$: elementScroll = browser ? document?.getElementById('app') : undefined;
const fetchMore = async () => {
form = {...form, page: (Number(form.page) + 1).toString()};
const request = await fetch(`/api/community?${new URLSearchParams(form)}`);
const response = await request.json();
data = {...data, cards: [...data.cards, ...response.cards ]};
}
</script>
<svelte:head>
<title>Community Gallery</title>
<meta name="description" content="Svelte demo app" />
</svelte:head>
<h1 class="text-white font-semibold text-2xl">
Community Gallery
</h1>
<div class="flex items-center justify-between mt-5">
<Radio options={COMMUNITY_FILTER_OPTIONS} value="{form.filter}" onChange={(filter) => form = {...form, filter }} />
<div class="items-center justify-end gap-5 hidden lg:flex">
<Button icon="ic:round-plus" theme="dark" size="lg">Upload own Image</Button>
<Button icon="fluent:glance-horizontal-sparkles-16-filled" href="/generate" theme="pink" size="lg">Generate</Button>
</div>
<div class="items-center justify-end gap-3 flex lg:hidden">
<Button icon="ic:round-plus" theme="dark" size="md">Upload own Image</Button>
<Button icon="fluent:glance-horizontal-sparkles-16-filled" href="/generate" theme="pink" size="md">Generate</Button>
</div>
</div>
<div class="mt-5 max-w-sm">
<Input placeholder="Filter by prompt, model..." />
</div>
<div class="mx-auto grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 2xl:grid-cols-5 gap-5 mt-8 lg:mt-10">
{#each data.cards as card}
<Card card={card} />
{/each}
<InfiniteScroll
elementScroll="{elementScroll ?? undefined}"
threshold={100}
hasMore={data.total_items > data.cards.length}
on:loadMore={fetchMore}
/>
<GoTop />
</div> |