Skip to content

Commit 1c77e6d

Browse files
committed
Hide profiles if not logged in and put nice home page
1 parent d581ce0 commit 1c77e6d

File tree

1 file changed

+117
-57
lines changed

1 file changed

+117
-57
lines changed

web/pages/index.tsx

Lines changed: 117 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,28 @@
1-
import { Lover } from 'common/love/lover'
2-
import { removeNullOrUndefinedProps } from 'common/util/object'
3-
import { Search } from 'web/components/filters/search'
4-
import { LovePage } from 'web/components/love-page'
5-
import { SignUpAsMatchmaker } from 'web/components/nav/love-sidebar'
6-
import { useLover } from 'web/hooks/use-lover'
7-
import { useCompatibleLovers } from 'web/hooks/use-lovers'
8-
import { getStars } from 'web/lib/supabase/stars'
9-
import { signupThenMaybeRedirectToSignup } from 'web/lib/util/signup'
1+
import {Lover} from 'common/love/lover'
2+
import {removeNullOrUndefinedProps} from 'common/util/object'
3+
import {Search} from 'web/components/filters/search'
4+
import {LovePage} from 'web/components/love-page'
5+
import {SignUpAsMatchmaker} from 'web/components/nav/love-sidebar'
6+
import {useLover} from 'web/hooks/use-lover'
7+
import {useCompatibleLovers} from 'web/hooks/use-lovers'
8+
import {getStars} from 'web/lib/supabase/stars'
9+
import {signupThenMaybeRedirectToSignup} from 'web/lib/util/signup'
1010
import Router from 'next/router'
11-
import { useCallback, useEffect, useRef, useState } from 'react'
12-
import { Button } from 'web/components/buttons/button'
13-
import { orderLovers, useFilters } from 'web/components/filters/use-filters'
14-
import { Col } from 'web/components/layout/col'
15-
import { ProfileGrid } from 'web/components/profile-grid'
16-
import { LoadingIndicator } from 'web/components/widgets/loading-indicator'
17-
import { Title } from 'web/components/widgets/title'
18-
import { useGetter } from 'web/hooks/use-getter'
19-
import { usePersistentInMemoryState } from 'web/hooks/use-persistent-in-memory-state'
20-
import { useSaveReferral } from 'web/hooks/use-save-referral'
21-
import { useTracking } from 'web/hooks/use-tracking'
22-
import { useUser } from 'web/hooks/use-user'
23-
import { api } from 'web/lib/api'
24-
import { debounce, omit } from 'lodash'
25-
import {
26-
PREF_AGE_MAX,
27-
PREF_AGE_MIN,
28-
} from 'web/components/filters/location-filter'
11+
import {useCallback, useEffect, useRef, useState} from 'react'
12+
import {Button} from 'web/components/buttons/button'
13+
import {orderLovers, useFilters} from 'web/components/filters/use-filters'
14+
import {Col} from 'web/components/layout/col'
15+
import {ProfileGrid} from 'web/components/profile-grid'
16+
import {LoadingIndicator} from 'web/components/widgets/loading-indicator'
17+
import {Title} from 'web/components/widgets/title'
18+
import {useGetter} from 'web/hooks/use-getter'
19+
import {usePersistentInMemoryState} from 'web/hooks/use-persistent-in-memory-state'
20+
import {useSaveReferral} from 'web/hooks/use-save-referral'
21+
import {useTracking} from 'web/hooks/use-tracking'
22+
import {useUser} from 'web/hooks/use-user'
23+
import {api} from 'web/lib/api'
24+
import {debounce, omit} from 'lodash'
25+
import {PREF_AGE_MAX, PREF_AGE_MIN,} from 'web/components/filters/location-filter'
2926

3027
export default function ProfilesPage() {
3128
const you = useLover()
@@ -64,7 +61,10 @@ export default function ProfilesPage() {
6461
[]
6562
)
6663

64+
const user = useUser()
65+
6766
useEffect(() => {
67+
if (!user) return
6868
debouncedSetAge({
6969
min: filters.pref_age_min ?? PREF_AGE_MIN,
7070
max: filters.pref_age_max ?? PREF_AGE_MAX,
@@ -73,6 +73,7 @@ export default function ProfilesPage() {
7373

7474
const id = useRef(0)
7575
useEffect(() => {
76+
if (!user) return
7677
setIsReloading(true)
7778
const current = ++id.current
7879
api(
@@ -83,7 +84,7 @@ export default function ProfilesPage() {
8384
...filters,
8485
}) as any
8586
)
86-
.then(({ lovers }) => {
87+
.then(({lovers}) => {
8788
if (current === id.current) {
8889
setLovers(lovers)
8990
}
@@ -99,11 +100,10 @@ export default function ProfilesPage() {
99100
debouncedAgeRange.max,
100101
])
101102

102-
const user = useUser()
103103
useTracking('view love profiles')
104104
useSaveReferral(user)
105105
const lover = useLover()
106-
const { data: starredUserIds, refresh: refreshStars } = useGetter(
106+
const {data: starredUserIds, refresh: refreshStars} = useGetter(
107107
'star',
108108
user?.id,
109109
getStars
@@ -154,7 +154,31 @@ export default function ProfilesPage() {
154154

155155
const displayLovers = lovers && orderLovers(lovers, starredUserIds)
156156

157-
if (user === undefined) return <div />
157+
useEffect(() => {
158+
const text = "Search.";
159+
const typewriter = document.getElementById("typewriter");
160+
let i = 0;
161+
let timeoutId: any;
162+
let intervalId;
163+
if (typewriter) typewriter.textContent = ""
164+
165+
function typeWriter() {
166+
if (i < text.length && typewriter) {
167+
typewriter.textContent = text.substring(0, i + 1);
168+
i++;
169+
timeoutId = setTimeout(typeWriter, 150);
170+
}
171+
}
172+
173+
intervalId = setTimeout(() => typeWriter(), 500);
174+
return () => {
175+
clearTimeout(timeoutId);
176+
clearTimeout(intervalId);
177+
if (typewriter) typewriter.textContent = "Search."
178+
};
179+
}, []);
180+
181+
if (user === undefined) return <div/>
158182

159183
return (
160184
<LovePage trackPageView={'user profiles'}>
@@ -178,34 +202,70 @@ export default function ProfilesPage() {
178202
>
179203
Sign up
180204
</Button>
181-
<SignUpAsMatchmaker className="flex-1" />
205+
<SignUpAsMatchmaker className="flex-1"/>
182206
</Col>
183207
)}
184-
<Title className="!mb-2 text-3xl">Profiles</Title>
185-
<Search
186-
youLover={you}
187-
starredUserIds={starredUserIds ?? []}
188-
filters={filters}
189-
updateFilter={updateFilter}
190-
clearFilters={clearFilters}
191-
setYourFilters={setYourFilters}
192-
isYourFilters={isYourFilters}
193-
locationFilterProps={locationFilterProps}
194-
/>
195-
196-
{displayLovers === undefined || compatibleLovers === undefined ? (
197-
<LoadingIndicator />
198-
) : (
199-
<ProfileGrid
200-
lovers={displayLovers}
201-
loadMore={loadMore}
202-
isLoadingMore={isLoadingMore}
203-
isReloading={isReloading}
204-
compatibilityScores={compatibleLovers?.loverCompatibilityScores}
205-
starredUserIds={starredUserIds}
206-
refreshStars={refreshStars}
207-
/>
208-
)}
208+
{!user && <>
209+
<h1
210+
className="pt-12 pb-2 text-7xl md:text-8xl xs:text-6xl font-extrabold max-w-4xl leading-tight xl:whitespace-nowrap md:whitespace-nowrap ">
211+
Don't Swipe.<br/><span id="typewriter"></span><span id="cursor" className="animate-pulse">|</span>
212+
</h1>
213+
<div className="w-full bg-gray-50 dark:bg-gray-900 py-8 mt-20">
214+
<div className="max-w-6xl mx-auto px-4">
215+
<div className="grid md:grid-cols-3 gap-8 text-center">
216+
<div className="space-y-2">
217+
<h3 className="text-lg font-bold">Radically Transparent</h3>
218+
<p className="text-gray-600 dark:text-gray-400">
219+
No algorithms. Every profile searchable.
220+
</p>
221+
</div>
222+
223+
<div className="space-y-2">
224+
<h3 className="text-lg font-bold">Built for Depth</h3>
225+
<p className="text-gray-600 dark:text-gray-400">
226+
Filter by any keyword and what matters most.
227+
</p>
228+
</div>
229+
230+
<div className="space-y-2">
231+
<h3 className="text-lg font-bold">Community Owned</h3>
232+
<p className="text-gray-600 dark:text-gray-400">
233+
Free forever. Built by users, for users.
234+
</p>
235+
</div>
236+
</div>
237+
</div>
238+
</div>
239+
</>}
240+
{user &&
241+
<>
242+
<Title className="!mb-2 text-3xl">Profiles</Title>
243+
<Search
244+
youLover={you}
245+
starredUserIds={starredUserIds ?? []}
246+
filters={filters}
247+
updateFilter={updateFilter}
248+
clearFilters={clearFilters}
249+
setYourFilters={setYourFilters}
250+
isYourFilters={isYourFilters}
251+
locationFilterProps={locationFilterProps}
252+
/>
253+
254+
{displayLovers === undefined || compatibleLovers === undefined ? (
255+
<LoadingIndicator/>
256+
) : (
257+
<ProfileGrid
258+
lovers={displayLovers}
259+
loadMore={loadMore}
260+
isLoadingMore={isLoadingMore}
261+
isReloading={isReloading}
262+
compatibilityScores={compatibleLovers?.loverCompatibilityScores}
263+
starredUserIds={starredUserIds}
264+
refreshStars={refreshStars}
265+
/>)
266+
}
267+
</>
268+
}
209269
</Col>
210270
</Col>
211271
</LovePage>

0 commit comments

Comments
 (0)