diff --git a/common/categories.ts b/common/categories.ts index 232aa526..672f3200 100644 --- a/common/categories.ts +++ b/common/categories.ts @@ -1,6 +1,7 @@ import { difference } from 'lodash' export const CATEGORIES_GROUP_SLUG_POSTFIX = '-default' + export const CATEGORIES = { politics: 'Politics', technology: 'Technology', @@ -37,3 +38,8 @@ export const EXCLUDED_CATEGORIES: category[] = [ ] export const DEFAULT_CATEGORIES = difference(CATEGORY_LIST, EXCLUDED_CATEGORIES) + +export const DEFAULT_CATEGORY_GROUPS = DEFAULT_CATEGORIES.map((c) => ({ + slug: c.toLowerCase() + CATEGORIES_GROUP_SLUG_POSTFIX, + name: CATEGORIES[c as category], +})) diff --git a/web/components/contract-search.tsx b/web/components/contract-search.tsx index 95075986..65c09608 100644 --- a/web/components/contract-search.tsx +++ b/web/components/contract-search.tsx @@ -25,9 +25,10 @@ import { useFollows } from 'web/hooks/use-follows' import { trackCallback } from 'web/lib/service/analytics' import ContractSearchFirestore from 'web/pages/contract-search-firestore' import { useMemberGroups } from 'web/hooks/use-group' -import { NEW_USER_GROUP_SLUGS } from 'common/group' +import { Group, NEW_USER_GROUP_SLUGS } from 'common/group' import { PillButton } from './buttons/pill-button' import { sortBy } from 'lodash' +import { DEFAULT_CATEGORY_GROUPS } from 'common/categories' const searchClient = algoliasearch( 'GJQPAYENIF', @@ -82,11 +83,21 @@ export function ContractSearch(props: { const memberGroups = (useMemberGroups(user?.id) ?? []).filter( (group) => !NEW_USER_GROUP_SLUGS.includes(group.slug) ) - const memberGroupSlugs = memberGroups.map((g) => g.slug) - const pillGroups = sortBy( + const memberGroupSlugs = + memberGroups.length > 0 + ? memberGroups.map((g) => g.slug) + : DEFAULT_CATEGORY_GROUPS.map((g) => g.slug) + + const memberPillGroups = sortBy( memberGroups.filter((group) => group.contractIds.length > 0), (group) => group.contractIds.length ).reverse() + + const defaultPillGroups = DEFAULT_CATEGORY_GROUPS as Group[] + + const pillGroups = + memberPillGroups.length > 0 ? memberPillGroups : defaultPillGroups + const follows = useFollows(user?.id) const { initialSort } = useInitialQueryAndSort(querySortOptions) @@ -113,9 +124,7 @@ export function ContractSearch(props: { additionalFilter?.groupSlug ? `groupSlugs:${additionalFilter.groupSlug}` : '', - pillFilter && pillFilter !== 'personal' - ? `groupSlugs:${pillFilter}` - : '', + pillFilter && pillFilter !== 'personal' ? `groupSlugs:${pillFilter}` : '', pillFilter === 'personal' ? // Show contracts in groups that the user is a member of memberGroupSlugs @@ -217,6 +226,7 @@ export function ContractSearch(props: { > For you + {pillGroups.map(({ name, slug }) => { return (