Add shortBio filter

This commit is contained in:
MartinBraquet
2025-10-10 19:03:57 +02:00
parent 015fe76c44
commit e2be3aafcd
7 changed files with 53 additions and 3 deletions

View File

@@ -19,6 +19,7 @@ export type profileQueryType = {
wants_kids_strength?: number | undefined,
has_kids?: number | undefined,
is_smoker?: boolean | undefined,
shortBio?: boolean | undefined,
geodbCityIds?: String[] | undefined,
compatibleWithUserId?: string | undefined,
skipId?: string | undefined,
@@ -42,6 +43,7 @@ export const loadProfiles = async (props: profileQueryType) => {
wants_kids_strength,
has_kids,
is_smoker,
shortBio,
geodbCityIds,
compatibleWithUserId,
orderBy: orderByParam = 'created_time',
@@ -154,7 +156,7 @@ export const loadProfiles = async (props: profileQueryType) => {
{after}
),
where(`bio_length >= ${MIN_BIO_LENGTH}`, {MIN_BIO_LENGTH}),
!shortBio && where(`bio_length >= ${MIN_BIO_LENGTH}`, {MIN_BIO_LENGTH}),
lastModificationWithin && where(`last_modification_time >= NOW() - INTERVAL $(lastModificationWithin)`, {lastModificationWithin}),

View File

@@ -53,7 +53,12 @@ export const sendSearchNotifications = async () => {
for (const row of searches) {
if (typeof row.search_filters !== 'object') continue;
const props = {...row.search_filters, skipId: row.creator_id, lastModificationWithin: '24 hours'}
const props = {
...row.search_filters,
skipId: row.creator_id,
lastModificationWithin: '24 hours',
shortBio: true,
}
const profiles = await loadProfiles(props as profileQueryType)
console.debug(profiles.map((item: any) => item.name))
if (!profiles.length) continue

View File

@@ -321,6 +321,7 @@ export const API = (_apiTypeCheck = {
wants_kids_strength: z.coerce.number().optional(),
has_kids: z.coerce.number().optional(),
is_smoker: z.coerce.boolean().optional(),
shortBio: z.coerce.boolean().optional(),
geodbCityIds: arraybeSchema.optional(),
compatibleWithUserId: z.string().optional(),
orderBy: z

View File

@@ -7,6 +7,7 @@ export type FilterFields = {
geodbCityIds: string[] | null
genders: string[]
name: string | undefined
shortBio: boolean | undefined
} & Pick<
ProfileRow,
| 'wants_kids_strength'
@@ -47,6 +48,7 @@ export const initialFilters: Partial<FilterFields> = {
is_smoker: undefined,
pref_relation_styles: undefined,
pref_gender: undefined,
shortBio: undefined,
orderBy: 'created_time',
}
export type OriginLocation = { id: string; name: string }

View File

@@ -53,7 +53,7 @@ export function formatFilters(filters: Partial<FilterFields>, location: location
const typedKey = key as keyof FilterFields
if (value === undefined || value === null) return
if (typedKey == 'pref_age_min' || typedKey == 'pref_age_max' || typedKey == 'geodbCityIds' || typedKey == 'orderBy') return
if (typedKey == 'pref_age_min' || typedKey == 'pref_age_max' || typedKey == 'geodbCityIds' || typedKey == 'orderBy' || typedKey == 'shortBio') return
if (Array.isArray(value) && value.length === 0) return
if (initialFilters[typedKey] === value) return

View File

@@ -13,6 +13,7 @@ import {RelationshipFilter, RelationshipFilterText,} from './relationship-filter
import {MyMatchesToggle} from './my-matches-toggle'
import {Profile} from 'common/love/profile'
import {FilterFields} from "common/filters";
import {ShortBioToggle} from "web/components/filters/short-bio-toggle";
export function DesktopFilters(props: {
filters: Partial<FilterFields>
@@ -133,6 +134,12 @@ export function DesktopFilters(props: {
}
popoverClassName="bg-canvas-50"
/>
{/* Short Bios */}
<ShortBioToggle
updateFilter={updateFilter}
filters={filters}
hidden={false}
/>
{/* PREFERRED GENDER */}
{/*<CustomizeableDropdown*/}
{/* buttonContent={(open: boolean) => (*/}

View File

@@ -0,0 +1,33 @@
import {Row} from 'web/components/layout/row'
import clsx from 'clsx'
import {FilterFields} from "common/filters";
export function ShortBioToggle(props: {
filters: Partial<FilterFields>
updateFilter: (newState: Partial<FilterFields>) => void
hidden: boolean
}) {
const {filters, updateFilter, hidden} = props
if (hidden) {
return <></>
}
const label = 'Include Short Bios'
const on = filters.shortBio || false
return (
<Row className={clsx('mr-2 items-center', on && 'font-semibold')}>
<input
id={label}
type="checkbox"
className="border-ink-300 bg-canvas-0 dark:border-ink-500 text-primary-600 focus:ring-primary-500 h-4 w-4 rounded"
checked={on}
onChange={(e) => updateFilter({shortBio: e.target.checked ? true : undefined})}
/>
<label htmlFor={label} className={clsx('text-ink-600 ml-2')}>
{label}
</label>
</Row>
)
}