Skip to content

Commit

Permalink
mobile categories + routes
Browse files Browse the repository at this point in the history
  • Loading branch information
buddy-web3 committed Feb 28, 2024
1 parent 6dd6d7c commit 88a3e8e
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 24 deletions.
3 changes: 3 additions & 0 deletions app/components/Article/article.css
Original file line number Diff line number Diff line change
Expand Up @@ -140,4 +140,7 @@ h1.teal {
article .footer-comtainer > div:nth-child(-n + 2) {
flex: 1 1;
}
article {
margin: 0;
}
}
8 changes: 3 additions & 5 deletions app/components/CategoriesNav/Menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {Link} from '@remix-run/react'
import {SearchInput} from '../SearchInput/Input'
import {Tag as TagType} from '~/server-utils/stampy'
import {tagUrl} from '~/routesMapper'
import styles from './menu.module.css'
import './menu.css'

interface CategoriesNavProps {
/**
Expand All @@ -19,7 +19,7 @@ interface CategoriesNavProps {
export const CategoriesNav = ({categories, activeCategoryId}: CategoriesNavProps) => {
const [search, onSearch] = useState('')
return (
<div className={styles.categoriesGroup + ' bordered col-4-5'}>
<div className={'categoriesGroup bordered col-4-5'}>
<h4>Categories</h4>
<div>
<SearchInput onChange={onSearch} placeholderText="Filter by keyword" />
Expand All @@ -30,9 +30,7 @@ export const CategoriesNav = ({categories, activeCategoryId}: CategoriesNavProps
<Link
key={tagId}
to={tagUrl({tagId, name})}
className={[styles.categoryTitle, activeCategoryId == tagId ? 'selected' : ''].join(
' '
)}
className={['categoryTitle', activeCategoryId == tagId ? 'selected' : ''].join(' ')}
>
{name} ({questions.length})
</Link>
Expand Down
25 changes: 25 additions & 0 deletions app/components/CategoriesNav/menu.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
.categoriesGroup {
padding: var(--spacing-12);
}
.categoriesGroup > * {
padding: var(--spacing-16);
}
.categoryTitle {
padding: var(--spacing-24);
cursor: pointer;
display: inline-block;
width: 100%;
}
@media (max-width: 640px) {
.categoriesGroup {
width: 100%;
height: 100%;
}
.categoriesGroup.bordered {
border: 0;
box-shadow: none;
}
.categoryTitle.selected {
background: inherit;
}
}
12 changes: 0 additions & 12 deletions app/components/CategoriesNav/menu.module.css

This file was deleted.

25 changes: 25 additions & 0 deletions app/hooks/isMobile.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import {useState, useEffect} from 'react'

export default function isMobile() {
const mobileWidth = 640
const [windowWidth, setWindowWidth] = useState<number>(0)

const isWindow = typeof window !== 'undefined'

const getWidth = () => (isWindow ? window.innerWidth : windowWidth)

const resize = () => setWindowWidth(getWidth())

useEffect(() => {
if (isWindow) {
setWindowWidth(getWidth())

window.addEventListener('resize', resize)

return () => window.removeEventListener('resize', resize)
}
//eslint-disable-next-line
}, [isWindow])

return windowWidth <= mobileWidth
}
17 changes: 10 additions & 7 deletions app/routes/tags.$.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import ListTable from '~/components/Table'
import {loader} from '~/routes/tags.all'
import {CategoriesNav} from '~/components/CategoriesNav/Menu'
import type {Tag as TagType} from '~/server-utils/stampy'

import isMobile from '~/hooks/isMobile'
export {loader}

export const sortFuncs = {
Expand All @@ -15,6 +15,7 @@ export const sortFuncs = {
}

export default function Tags() {
const mobile = isMobile()
const {data} = useLoaderData<ReturnType<typeof loader>>()
const {currentTag, tags} = data
const [selectedTag, setSelectedTag] = useState<TagType | null>(null)
Expand All @@ -29,16 +30,18 @@ export default function Tags() {
if (selectedTag === null) {
return null
}
const isTagsPage = window.location.pathname.split('/').slice(-2)[0] === 'tags'
return (
<Page>
<main>
<div className="article-container">
<CategoriesNav
categories={tags.filter((tag) => tag.questions.length > 0).sort(sortFuncs[sortBy])}
activeCategoryId={selectedTag.tagId}
/>

{selectedTag === null ? null : (
{mobile && !isTagsPage ? null : (
<CategoriesNav
categories={tags.filter((tag) => tag.questions.length > 0).sort(sortFuncs[sortBy])}
activeCategoryId={selectedTag.tagId}
/>
)}
{(mobile && isTagsPage) || selectedTag === null ? null : (
<article>
<h1 className="padding-bottom-40">{selectedTag.name}</h1>
<div className="padding-bottom-24">
Expand Down

0 comments on commit 88a3e8e

Please sign in to comment.