Description for categories / users you are following with edit button.

This commit is contained in:
James Grugett 2022-06-06 12:51:44 -05:00
parent 6aa639591b
commit 587357c13f
2 changed files with 71 additions and 21 deletions

View File

@ -24,6 +24,8 @@ import { useUser } from 'web/hooks/use-user'
import { useFollows } from 'web/hooks/use-follows'
import { ChoicesToggleGroup } from './choices-toggle-group'
import { EditCategoriesButton } from './feed/category-selector'
import { Col } from './layout/col'
import { CATEGORIES } from 'common/categories'
const searchClient = algoliasearch(
'GJQPAYENIF',
@ -115,11 +117,6 @@ export function ContractSearch(props: {
follows?.join(','),
])
const categoriesLabel = `Categories ${
followedCategories?.length ? followedCategories.length : '(All)'
}`
const followingLabel = `Following ${follows?.length ?? 0}`
const indexName = `${indexPrefix}contracts-${sort}`
return (
@ -160,20 +157,12 @@ export function ContractSearch(props: {
<Spacer h={3} />
{showCategorySelector && (
<Row className="items-center gap-2">
<ChoicesToggleGroup
currentChoice={mode}
choicesMap={{
[categoriesLabel]: 'categories',
[followingLabel]: 'following',
}}
setChoice={(c) => setMode(c as 'categories' | 'following')}
/>
{mode === 'categories' && user && (
<EditCategoriesButton user={user} />
)}
</Row>
<CategoryFollowSelector
mode={mode}
setMode={setMode}
followedCategories={followedCategories ?? []}
follows={follows ?? []}
/>
)}
<Spacer h={4} />
@ -250,3 +239,60 @@ export function ContractSearchInner(props: {
/>
)
}
function CategoryFollowSelector(props: {
mode: 'categories' | 'following'
setMode: (mode: 'categories' | 'following') => void
followedCategories: string[]
follows: string[]
}) {
const { mode, setMode, followedCategories, follows } = props
const user = useUser()
const categoriesLabel = `Categories ${
followedCategories.length ? followedCategories.length : '(All)'
}`
let categoriesDescription = `Showing all categories`
if (followedCategories.length) {
const categoriesLabel = followedCategories
.slice(0, 3)
.map((cat) => CATEGORIES[cat])
.join(', ')
const andMoreLabel =
followedCategories.length > 3
? `, and ${followedCategories.length - 3} more`
: ''
categoriesDescription = `Showing ${categoriesLabel}${andMoreLabel}`
}
const followingLabel = `Following ${follows.length}`
return (
<Col className="gap-2">
<ChoicesToggleGroup
currentChoice={mode}
choicesMap={{
[categoriesLabel]: 'categories',
[followingLabel]: 'following',
}}
setChoice={(c) => setMode(c as 'categories' | 'following')}
/>
{mode === 'categories' && user && (
<Row className="items-center gap-2 text-gray-500">
<div>{categoriesDescription}</div>
<EditCategoriesButton className="self-start" user={user} />
</Row>
)}
{mode === 'following' && user && (
<Row className="items-center gap-2 text-gray-500 h-8">
<div>Showing markets created by users you are following.</div>
</Row>
)}
</Col>
)
}

View File

@ -80,13 +80,17 @@ function CategoryButton(props: {
)
}
export function EditCategoriesButton(props: { user: User }) {
const { user } = props
export function EditCategoriesButton(props: {
user: User
className?: string
}) {
const { user, className } = props
const [isOpen, setIsOpen] = useState(false)
return (
<div
className={clsx(
className,
'btn btn-sm btn-ghost cursor-pointer gap-2 whitespace-nowrap text-sm text-gray-700'
)}
onClick={() => setIsOpen(true)}