Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 63 additions & 11 deletions apps/cyberstorm-remix/app/c/Community.css
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
align-items: center;
align-self: stretch;
justify-content: center;
height: 12.5rem;
max-height: 12.5rem;
border-radius: 0.5rem;
overflow-y: hidden;
transition: height 2s;
Expand All @@ -36,6 +36,10 @@
background: var(--color-ui-surface-1);
opacity: 0.8;
}

.skeleton {
height: 12.5rem;
}
}

.community__background--packagePage {
Expand All @@ -47,12 +51,14 @@
}
}

.community__content-header {
.community__content-header-wrapper {
z-index: 1;
display: flex;
flex-wrap: wrap;
gap: 1.5rem;
align-items: flex-end;
place-items: flex-end stretch;
align-self: stretch;
justify-content: space-between;
height: max-content;
margin-top: -1rem;
padding-left: 1rem;
Expand All @@ -62,6 +68,16 @@
visibility 1s 0s;
}

.community__content-header {
display: flex;
flex-grow: 1;
gap: 1.5rem;
align-items: flex-end;
align-self: stretch;
min-width: 75%;
height: max-content;
}

.community__content-header--hide {
height: 0;
visibility: collapse;
Expand Down Expand Up @@ -101,11 +117,10 @@
.community__content-header-content {
display: flex;
flex-direction: column;
flex-grow: 1;
gap: 0.75rem;
align-items: flex-start;
justify-content: center;
width: 100%;
height: 5rem;
}

.community__header-info {
Expand All @@ -115,16 +130,26 @@
gap: 0.25rem;
align-items: flex-start;
align-self: stretch;
width: 40%;
min-width: 60%;
max-width: 100%;

> h1 {
line-height: 80%;
overflow-wrap: anywhere;
}
}

.community__header-meta {
display: flex;
flex: 0 1 0;
flex: 0 1 60%;
gap: 1.5rem;
align-items: center;
width: 60%;
min-height: 16px;
min-width: 60%;
height: 16px;

> .skeleton {
height: 1rem;
}
}

.community__small-image {
Expand All @@ -151,7 +176,7 @@
.community__meta {
display: flex;
flex-wrap: wrap;
gap: var(--gap-xxxl);
gap: var(--gap-3xl);
align-items: center;
}

Expand All @@ -169,9 +194,36 @@
}
}

@media (width >= 41rem) {
.community__background {
height: 12.5rem;
}
}

@media (width < 41rem) {
.community__background {
.skeleton {
height: 8rem;
}
}

.community__header {
gap: 1rem;
}

.community__content-header-wrapper {
margin-top: 0;
padding-left: 0;
}

.community__game-icon {
display: none;
}
}

@media (width <= 48rem) {
.community__meta {
gap: var(--gap-xxs);
gap: var(--gap-2xs);
}

.community__item {
Expand Down
167 changes: 87 additions & 80 deletions apps/cyberstorm-remix/app/c/community.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ export async function loader({ params }: LoaderFunctionArgs) {
sessionId: undefined,
};
});
const community = dapper.getCommunity(params.communityId);

const community = await dapper.getCommunity(params.communityId);
return {
community: community,
};
Expand Down Expand Up @@ -152,91 +151,99 @@ export default function Community() {

<div
className={classnames(
"community__content-header",
"community__content-header-wrapper",
isSubPath ? "community__content-header--hide" : null
)}
>
<div className="community__game-icon">
<div className="community__game-icon-tinified">
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) =>
resolvedValue.community_icon_url ? (
<img
src={resolvedValue.community_icon_url}
alt={resolvedValue.name}
/>
) : null
}
</Await>
</Suspense>
<div className="community__content-header">
<div className="community__game-icon">
<div className="community__game-icon-tinified">
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) =>
resolvedValue.community_icon_url ? (
<img
src={resolvedValue.community_icon_url}
alt={resolvedValue.name}
/>
) : null
}
</Await>
</Suspense>
</div>
</div>
</div>
<div className="community__content-header-content">
<div className="community__header-info">
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) => (
<Heading
csLevel={"1"}
csSize={"3"}
csVariant="primary"
mode="display"
>
{resolvedValue.name}
</Heading>
)}
</Await>
</Suspense>
</div>
<div className="community__header-meta">
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) =>
resolvedValue.wiki_url ? (
<NewLink
primitiveType="link"
href={resolvedValue.wiki_url}
csVariant="cyber"
rootClasses="community__item"
>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faBook} />
</NewIcon>
<span>Modding Wiki</span>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faArrowUpRight} />
</NewIcon>
</NewLink>
) : null
}
</Await>
</Suspense>
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) =>
resolvedValue.discord_url ? (
<NewLink
primitiveType="link"
href={resolvedValue.discord_url}
csVariant="cyber"
rootClasses="community__item"
<div className="community__content-header-content">
<div className="community__header-info">
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) => (
<Heading
csLevel={"1"}
csSize={"3"}
csVariant="primary"
mode="display"
>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faDiscord} />
</NewIcon>
<span>Modding Discord</span>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faArrowUpRight} />
</NewIcon>
</NewLink>
) : null
}
</Await>
</Suspense>
{resolvedValue.name}
</Heading>
)}
</Await>
</Suspense>
</div>
<div className="community__header-meta">
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) =>
resolvedValue.wiki_url ? (
<NewLink
primitiveType="link"
href={resolvedValue.wiki_url}
csVariant="cyber"
rootClasses="community__item"
>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faBook} />
</NewIcon>
<span>Modding Wiki</span>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faArrowUpRight} />
</NewIcon>
</NewLink>
) : null
}
</Await>
</Suspense>
<Suspense fallback={<SkeletonBox />}>
<Await resolve={community}>
{(resolvedValue) =>
resolvedValue.discord_url ? (
<NewLink
primitiveType="link"
href={resolvedValue.discord_url}
csVariant="cyber"
rootClasses="community__item"
>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faDiscord} />
</NewIcon>
<span>Modding Discord</span>
<NewIcon csMode="inline" noWrapper>
<FontAwesomeIcon icon={faArrowUpRight} />
</NewIcon>
</NewLink>
) : null
}
</Await>
</Suspense>
</div>
</div>
</div>
<NewButton csSize="big" csVariant="accent">
<NewButton
csSize="big"
csVariant="accent"
primitiveType="cyberstormLink"
linkId="PackageUpload"
rootClasses="community__upload-button"
>
<NewIcon noWrapper csMode="inline">
<FontAwesomeIcon icon={faDownload} />
</NewIcon>
Expand Down
13 changes: 8 additions & 5 deletions apps/cyberstorm-remix/app/c/tabs/PackageSearch/PackageSearch.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import type { LoaderFunctionArgs } from "react-router";
import { useLoaderData, useOutletContext } from "react-router";
import { PackageSearch } from "~/commonComponents/PackageSearch/PackageSearch";
import { PackageOrderOptions } from "~/commonComponents/PackageSearch/components/PackageOrder";
Expand All @@ -8,8 +7,9 @@ import {
getSessionTools,
} from "cyberstorm/security/publicEnvVariables";
import { OutletContextShape } from "~/root";
import { Route } from "./+types/PackageSearch";

export async function loader({ request, params }: LoaderFunctionArgs) {
export async function loader({ params, request }: Route.LoaderArgs) {
if (params.communityId) {
const publicEnvVariables = getPublicEnvVariables(["VITE_API_URL"]);
const dapper = new DapperTs(() => {
Expand All @@ -28,11 +28,11 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
const section = searchParams.get("section");
const nsfw = searchParams.get("nsfw");
const deprecated = searchParams.get("deprecated");
const filters = dapper.getCommunityFilters(params.communityId);
const filters = await dapper.getCommunityFilters(params.communityId);

return {
filters: filters,
listings: dapper.getPackageListings(
listings: await dapper.getPackageListings(
{
kind: "community",
communityId: params.communityId,
Expand All @@ -51,7 +51,10 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
throw new Response("Community not found", { status: 404 });
}

export async function clientLoader({ request, params }: LoaderFunctionArgs) {
export async function clientLoader({
request,
params,
}: Route.ClientLoaderArgs) {
if (params.communityId) {
const tools = getSessionTools();
const dapper = new DapperTs(() => {
Expand Down
Loading
Loading