Cookbook Landing Page Front End (#53073)

This commit is contained in:
Ashley 2024-11-12 13:36:27 -05:00 коммит произвёл GitHub
Родитель b32235aae6
Коммит d23fcafc94
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 161 добавлений и 22 удалений

Просмотреть файл

@ -1,16 +1,20 @@
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import cx from 'classnames' import cx from 'classnames'
import { CookBookArticleCard } from './CookBookArticleCard'
import { CookBookFilter } from './CookBookFilter'
import { useCategoryLandingContext } from 'src/frame/components/context/CategoryLandingContext' //import { useTranslation } from 'src/languages/components/useTranslation'
import { DefaultLayout } from 'src/frame/components/DefaultLayout' import { DefaultLayout } from 'src/frame/components/DefaultLayout'
import { ArticleTitle } from 'src/frame/components/article/ArticleTitle' import { ArticleTitle } from 'src/frame/components/article/ArticleTitle'
import { Lead } from 'src/frame/components/ui/Lead' import { Lead } from 'src/frame/components/ui/Lead'
import { useCategoryLandingContext } from 'src/frame/components/context/CategoryLandingContext'
import { ClientSideRedirects } from 'src/rest/components/ClientSideRedirects' import { ClientSideRedirects } from 'src/rest/components/ClientSideRedirects'
import { RestRedirect } from 'src/rest/components/RestRedirect' import { RestRedirect } from 'src/rest/components/RestRedirect'
import { Breadcrumbs } from 'src/frame/components/page-header/Breadcrumbs' import { Breadcrumbs } from 'src/frame/components/page-header/Breadcrumbs'
export const CategoryLanding = () => { export const CategoryLanding = () => {
const router = useRouter() const router = useRouter()
//const { t } = useTranslation('toc')
const { title, intro, tocItems } = useCategoryLandingContext() const { title, intro, tocItems } = useCategoryLandingContext()
// tocItems contains directories and its children, we only want the child articles // tocItems contains directories and its children, we only want the child articles
@ -28,38 +32,31 @@ export const CategoryLanding = () => {
<Breadcrumbs /> <Breadcrumbs />
</div> </div>
<ArticleTitle>{title}</ArticleTitle> <ArticleTitle>{title}</ArticleTitle>
{intro && <Lead data-search="lead">{intro}</Lead>} {intro && <Lead data-search="lead">{intro}</Lead>}
<h2 className="py-5">Spotlight</h2> <h2 className="py-5">Spotlight</h2>
<div className="container-lg clearfix"> <div className="d-md-flex d-sm-block">
<div className="col-4 float-left border p-4">Spotlight 1</div> <CookBookArticleCard image="DeleteMe" spotlight={true} />
<div className="col-4 float-left border p-4">Spotlight 2</div> <CookBookArticleCard image="DeleteMe" spotlight={true} />
<div className="col-4 float-left border p-4">Spotlight 3</div> <CookBookArticleCard image="DeleteMe" spotlight={true} />
</div> </div>
<div className="pt-8"> <div className="pt-8">
<div className="py-5 clearfix border-bottom"> <div className="py-5 border-bottom">
<div className="col-5 float-left p-3"> <div className="col-lg-4 col-sm-12 float-md-left pb-3 mr-5 ml-1">
<h2>Explore {onlyFlatItems.length} prompt articles</h2> <h2>Explore {onlyFlatItems.length} prompt articles</h2>
</div> </div>
<div className="col-3 float-left p-4">Searchbar</div> <div>
<div className="col-1 float-left p-4">Category</div> <CookBookFilter />
<div className="col-1 float-left p-4">Complexity</div> </div>
<div className="col-1 float-left p-4">Industry</div>
<div className="col-1 float-left p-4">Reset</div>
</div> </div>
<div className="clearfix gutter-md-spacious"> <ul className="clearfix gutter-md-spacious">
{/* TODO: replace with card components */}
{onlyFlatItems.map((item, index) => ( {onlyFlatItems.map((item, index) => (
<div key={index} className="col-4 float-left p-4"> <li key={index} className="col-md-4 col-sm-12 list-style-none float-left p-4">
<div className="px-3 pb-3 border-bottom"> <CookBookArticleCard title={item.title} description={item.intro} />
<div>{item.title}</div> </li>
<div>{item.intro}</div>
</div>
</div>
))} ))}
</div> </ul>
</div> </div>
</div> </div>
</DefaultLayout> </DefaultLayout>

Просмотреть файл

@ -0,0 +1,82 @@
import { Label, LabelGroup } from '@primer/react'
import { BugIcon } from '@primer/octicons-react'
type Props = {
title?: string
icon?: string
url?: string
description?: string
tags?: string[]
spotlight?: boolean
image?: string
complexity?: string
}
const defaultProps = {
title: 'Article Name',
description:
'Man bun letterpress put a bird on it la croix offal, meh grailed hot chicken kombucha gochujang messenger bag fit before they sold out lyft.',
tags: ['Tag Example', 'Tag Example'],
icon: 'bugicon',
}
function setIcon(icon: string) {
switch (icon) {
case 'bugicon':
return <BugIcon size={48} className="mr-4 bgColor-accent-muted p-3 circle fgColor-accent" />
case 'none':
return null
default:
return null
}
}
function setImage(image: string) {
return (
// <div className="d-flex flex-column flex-align-center">
image ? (
<div
style={{
width: 'max-width',
height: 200,
backgroundColor: 'gray',
marginBottom: 20,
borderRadius: 5,
}}
></div>
) : null
// </div>
)
}
const spotlightClasses = 'd-flex flex-column align-items-center'
export const CookBookArticleCard = ({
title = defaultProps.title,
icon = defaultProps.icon,
tags = defaultProps.tags,
description = defaultProps.description,
image = '',
spotlight = false,
}: Props) => {
return (
<div className="m-2">
<div
style={{ minHeight: 200 }}
className={spotlight ? spotlightClasses : 'd-flex pb-3 border-bottom'}
>
{spotlight ? setImage(image) : null}
{spotlight ? setIcon('none') : setIcon(icon)}
<div>
<h3 className="h4">{title}</h3>
<div className="fgColor-muted mb-3 mt-2">{description}</div>
<LabelGroup>
{tags.map((tag, index) => (
<Label key={index} variant="accent" sx={{ mr: 1 }} size="small">
{tag}
</Label> //fix this to have unique keys
))}
</LabelGroup>
</div>
</div>
</div>
)
}

Просмотреть файл

@ -0,0 +1,60 @@
import { TextInput, ActionMenu, ActionList, Button } from '@primer/react'
import { SearchIcon } from '@primer/octicons-react'
export const CookBookFilter = () => {
return (
<>
<div>
<TextInput
leadingVisual={SearchIcon}
className="float-lg-left m-1"
sx={{ minWidth: ['stretch', 'stretch', 'stretch', 250] }}
placeholder="Search articles"
/>
</div>
<div className="d-flex">
<ActionMenu>
<ActionMenu.Button className="col-md-1 col-sm-2 float-md-left m-1">
Category
</ActionMenu.Button>
<ActionMenu.Overlay width="small">
<ActionList>
<ActionList.Item>Item 1</ActionList.Item>
<ActionList.Item>Item 2</ActionList.Item>
<ActionList.Item>Item 3</ActionList.Item>
</ActionList>
</ActionMenu.Overlay>
</ActionMenu>
<ActionMenu>
<ActionMenu.Button className="col-md-1 col-sm-2 float-left m-1">
Complexity
</ActionMenu.Button>
<ActionMenu.Overlay width="small">
<ActionList>
<ActionList.Item>Item 1</ActionList.Item>
<ActionList.Item>Item 2</ActionList.Item>
<ActionList.Item>Item 3</ActionList.Item>
</ActionList>
</ActionMenu.Overlay>
</ActionMenu>
<ActionMenu>
<ActionMenu.Button className="col-md-1 col-sm-2 float-left m-1">
Industry
</ActionMenu.Button>
<ActionMenu.Overlay width="small">
<ActionList>
<ActionList.Item>Item 1</ActionList.Item>
<ActionList.Item>Item 2</ActionList.Item>
<ActionList.Item>Item 3</ActionList.Item>
</ActionList>
</ActionMenu.Overlay>
</ActionMenu>
<Button variant="invisible" className="col-md-1 col-sm-2 float-left mt-1">
Reset filters
</Button>
</div>
</>
)
}