Skip to content

Commit

Permalink
feat(CatNav menu): fix clicking from left nave
Browse files Browse the repository at this point in the history
  • Loading branch information
jrhender committed Feb 9, 2024
1 parent 4fb56a4 commit 453f5c5
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 24 deletions.
14 changes: 5 additions & 9 deletions app/components/CategoriesNav/Menu.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import {useState} from 'react'
import {SearchInput} from '../SearchInput/Input'
import {Tag as TagType} from '~/server-utils/stampy'
import './menu.css'
Expand All @@ -11,7 +10,7 @@ interface CategoriesNavProps {
/**
* Selected article
*/
active: number
active: TagType
/**
* Callback function to handle click on article
*/
Expand All @@ -23,12 +22,9 @@ interface CategoriesNavProps {
}

export const CategoriesNav = ({categories, active, onChange, onClick}: CategoriesNavProps) => {
const [selected, setSelected] = useState(active || 0)

const handleClick = (index: number) => {
setSelected(index)
const handleClick = (newTag: TagType) => {
if (onClick) {
onClick(index)
onClick(newTag)
}
}

Expand All @@ -44,9 +40,9 @@ export const CategoriesNav = ({categories, active, onChange, onClick}: Categorie
key={`category-${category.tagId}`}
className={[
'category-autoLayoutHorizontal',
selected == category.tagId ? ['active'].join(' ') : '',
active.tagId == category.tagId ? ['active'].join(' ') : '',
].join(' ')}
onClick={() => handleClick(category.tagId)}
onClick={() => handleClick(category)}
>
<div className={'category-title'}>
{category.name} ({category.questions.length})
Expand Down
28 changes: 14 additions & 14 deletions app/routes/tags.$tag.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,21 @@ type Props = {
}

export const loader = async ({request, params}: Parameters<LoaderFunction>[0]) => {
const {tag} = params
if (!tag) {
const {tag: tagFromUrl} = params
if (!tagFromUrl) {
throw Error('missing tag name')
}

try {
const tags = await loadTags(request)
return {tag, ...tags}
return {...tags, tagFromUrl}
} catch (error: unknown) {
console.error(`error fetching tag "${tag}":`, error)
console.error(`error fetching tag "${tagFromUrl}":`, error)
return {
error: error?.toString(),
timestamp: new Date().toISOString(),
data: new Array<TagType>(),
tag,
tagFromUrl,
}
}
}
Expand Down Expand Up @@ -144,19 +144,19 @@ export function Tags({tags}: Props) {
}

export default function App() {
const {tag, data} = useLoaderData<ReturnType<typeof loader>>()
const {tagFromUrl, data} = useLoaderData<ReturnType<typeof loader>>()
const [selectedTag, setSelectedTag] = useState<TagType | null>(null)
const [tagsFilter, setTagsFilter] = useState<string>('')
const {toc} = useToC()

const [sortBy] = useState<keyof typeof sortFuncs>('alphabetically')

const currentTagData = data.filter((tagData) => tagData.name === tag)[0]
useEffect(() => {
if (selectedTag === null) {
setSelectedTag(data.filter((tag) => tag.questions.length > 0)[0])
const dataForUrlTag = data.filter((tagData) => tagData.name === tagFromUrl)[0]
setSelectedTag(dataForUrlTag)
}
}, [data, selectedTag])
}, [selectedTag, data, tagFromUrl])
if (selectedTag === null) {
return null
}
Expand All @@ -175,22 +175,22 @@ export default function App() {

// {title: "AI Safety", id: 1},
}
active={Number(selectedTag)}
active={selectedTag}
onClick={setSelectedTag}
onChange={setTagsFilter}
/>

{selectedTag === null ? null : (
<div>
<h1 style={{marginTop: '0px'}}>{currentTagData.name}</h1>
{currentTagData.questions.length === 0 ? (
<h1 style={{marginTop: '0px'}}>{selectedTag.name}</h1>
{selectedTag.questions.length === 0 ? (
<div className={'no-questions'}>No questions found</div>
) : (
<p>
{currentTagData.questions.length} pages tagged {`"${currentTagData.name}"`}
{selectedTag.questions.length} pages tagged {`"${selectedTag.name}"`}
</p>
)}
{selectedTag && <ListTable elements={currentTagData.questions} />}
{selectedTag && <ListTable elements={selectedTag.questions} />}
</div>
)}
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/routes/tags._index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ export const loader = async ({request}: Parameters<LoaderFunction>[0]) => {
const tags = await loadTags(request)
const {data = []} = tags ?? {}
const defaultTag = data[0]
throw redirect(`${defaultTag.name}`)
throw redirect(`${encodeURIComponent(defaultTag.name)}`)
}

0 comments on commit 453f5c5

Please sign in to comment.