Merge pull request #107 from teaxyz/finalize-reviews

#53 finalize reviews layout
This commit is contained in:
Neil 2022-12-23 12:02:25 +08:00 committed by GitHub
commit 4717c17f56
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 19 deletions

View file

@ -6,8 +6,12 @@
import type { Review } from '@tea/ui/types'; import type { Review } from '@tea/ui/types';
export let reviews: Review[]; export let reviews: Review[];
export let showLimit = 9;
let showMore = false;
const getColReviews = (n: number) => { const getColReviews = (n: number) => {
return reviews.filter((_item, i) => (i - n) % 3 === 0); const showReviews = reviews.filter((_item, i) => (i - n) % 3 === 0);
return showMore ? showReviews : showReviews.slice(0, showLimit / 3);
}; };
let col1: Review[] = []; let col1: Review[] = [];
@ -26,22 +30,27 @@
<header class="border border-gray bg-black p-4 text-primary">REVIEWS ({reviews.length})</header> <header class="border border-gray bg-black p-4 text-primary">REVIEWS ({reviews.length})</header>
<section class="flex flex-row flex-wrap bg-black font-machina"> <section class="flex flex-row flex-wrap bg-black font-machina">
<div class="w-1/3 border-0 border-l-2 border-gray p-4"> <div class="w-1/3 border-0 border-l-2 border-b-2 border-gray p-4">
{#each col1 as review} {#each col1 as review}
<ReviewCard {review} /> <ReviewCard {review} />
<div class="mt-4" /> <div class="mt-4" />
{/each} {/each}
</div> </div>
<div class="w-1/3 border-0 border-l-2 border-gray p-4"> <div class="w-1/3 border-0 border-l-2 border-b-2 border-gray p-4">
{#each col2 as review} {#each col2 as review}
<ReviewCard {review} /> <ReviewCard {review} />
<div class="mt-4" /> <div class="mt-4" />
{/each} {/each}
</div> </div>
<div class="w-1/3 border-0 border-x-2 border-gray p-4"> <div class="w-1/3 border-0 border-x-2 border-b-2 border-gray p-4">
{#each col3 as review} {#each col3 as review}
<ReviewCard {review} /> <ReviewCard {review} />
<div class="mt-4" /> <div class="mt-4" />
{/each} {/each}
</div> </div>
</section> </section>
{#if showLimit <= reviews.length && showMore === false}
<footer class="border border-gray bg-black p-4">
<button on:click={() => (showMore = true)}>SHOW MORE</button>
</footer>
{/if}

View file

@ -172,7 +172,7 @@ export async function getFeaturedPackages(): Promise<Package[]> {
export async function getPackageReviews(full_name: string): Promise<Review[]> { export async function getPackageReviews(full_name: string): Promise<Review[]> {
console.log(`generating reviews for ${full_name}`); console.log(`generating reviews for ${full_name}`);
const reviewCount = _.random(7, 21); const reviewCount = _.random(9, 21);
const reviews: Review[] = []; const reviews: Review[] = [];
for (let i = 0; i < reviewCount; i++) { for (let i = 0; i < reviewCount; i++) {

View file

@ -71,8 +71,9 @@ export async function getFeaturedPackages(): Promise<Package[]> {
export async function getPackageReviews(full_name: string): Promise<Review[]> { export async function getPackageReviews(full_name: string): Promise<Review[]> {
console.log(`getting reviews for ${full_name}`); console.log(`getting reviews for ${full_name}`);
const reviews: Review[] = await mock.getPackageReviews(full_name); const reviews: Review[] = await get<Review[]>(
`packages/${full_name.replaceAll('/', ':')}/reviews`
);
return reviews; return reviews;
} }

View file

@ -1,9 +1,10 @@
<script lang="ts"> <script lang="ts">
import '$appcss'; import '$appcss';
import PageHeader from '$components/PageHeader/PageHeader.svelte'; import PageHeader from '$components/PageHeader/PageHeader.svelte';
import { backLink } from '$libs/stores'; import { backLink, packagesReviewStore } from '$libs/stores';
import PackageBanner from '$components/PackageBanner/PackageBanner.svelte'; import PackageBanner from '$components/PackageBanner/PackageBanner.svelte';
// import PackageReviews from '$components/PackageReviews/PackageReviews.svelte'; import PackageReviews from '$components/PackageReviews/PackageReviews.svelte';
import type { Review } from '@tea/ui/types';
backLink.set('/packages'); backLink.set('/packages');
/** @type {import('./$types').PageData} */ /** @type {import('./$types').PageData} */
@ -15,19 +16,19 @@
let pkg: Package; let pkg: Package;
// let reviews: Review[]; let reviews: Review[];
const setPkg = (pkgs: Package[]) => { const setPkg = (pkgs: Package[]) => {
const foundPackage = pkgs.find(({ slug }) => slug === data?.slug) as Package; const foundPackage = pkgs.find(({ slug }) => slug === data?.slug) as Package;
if (!pkg && foundPackage) { if (!pkg && foundPackage) {
pkg = foundPackage; pkg = foundPackage;
} }
// TODO: uncomment when api is ready
// if (!reviews && pkg) { if (!reviews && pkg) {
// packagesReviewStore.subscribe(pkg.full_name, (updatedReviews) => { packagesReviewStore.subscribe(pkg.full_name, (updatedReviews) => {
// reviews = updatedReviews; reviews = updatedReviews;
// }); });
// } }
}; };
packagesStore.subscribe(setPkg); packagesStore.subscribe(setPkg);
@ -39,10 +40,7 @@
<section> <section>
<PackageBanner {pkg} /> <PackageBanner {pkg} />
</section> </section>
<!--
TODO: uncomment when api is ready
<section class="mt-8"> <section class="mt-8">
<PackageReviews reviews={reviews || []} /> <PackageReviews reviews={reviews || []} />
</section> </section>
-->
</div> </div>