import React from "preact/compat"; import { useEffect, useState } from "preact/hooks"; import { UserRootState } from "../../store/type"; import { logout } from '../../actions'; import AsyncSelect from 'react-select/async'; import './style.css'; import { logoutService } from "../../services"; import { getSearchLocationService } from "../../services/locations"; import { Link, useNavigate } from "react-router-dom"; import { ReactSelectData } from "src/types/common"; import { useDispatch, useSelector } from "react-redux"; function Header() { const [searchVal, setSearchVal] = useState(''); const [dropdown, setDropdown] = useState(false); const [pageState, setPageState] = useState({ profileMenu: false }) const [searchResult, setSearchResult] = useState([]) const dispatch = useDispatch(); const navigate = useNavigate(); const user = useSelector((state: UserRootState) => state.auth) const onInput = async (val: any) => { setSearchVal(val.toLowerCase()) } useEffect(() => { try { setTimeout(async () => { const results = await getSearchLocationService({ name: searchVal, page: 1, page_size: 7 }) const resultData = results.data.map((x: any) => { return { value: x.id, label: x.name } }) setSearchResult(resultData) }, 900) } catch (err) { alert(err) } }, [searchVal]) const handleLogout = async (): Promise => { try { await logoutService() dispatch(logout()) location.reload() } catch (error) { alert(error) } } const onSearchSubmit = (e: React.TargetedEvent): void => { e.preventDefault(); } const onSelectedSearchOption = (v: ReactSelectData | unknown) => { const val = v as ReactSelectData navigate(`/location/${val.value}`) } const onLoadSelectOptions = async (inputValue: string) => { try { const results = await getSearchLocationService({ name: inputValue, page: 1, page_size: 7 }) const resultData = results.data.map((x: any) => { return { value: x.id, label: x.name } }) const firstObj = { value: 0, label: `search: ${inputValue}` } const result = [firstObj, ...resultData] setSearchResult(resultData) return result } catch (err) { alert(err) } } const onDropdown = (): void => { document.body.style.overflow = "hidden" if (dropdown) { document.body.style.overflowX = "hidden"; document.body.style.overflowY = "scroll"; } setDropdown(!dropdown) } return (

Hilingin

user.username ? setPageState({ ...pageState, profileMenu: !pageState.profileMenu }) : ''}> {user.username &&
Profile
Feed
Add location
Settings
Logout
{/* */} {/* */}
}
1} placeholder={"Candi Borobudur, Tunjungan Plaza, ...."} components={{ DropdownIndicator: () => null, NoOptionsMessage: () => null, IndicatorSeparator: () => null }} loadOptions={onLoadSelectOptions} cacheOptions classNames={{ control: () => "bg-secondary text-input-search", menuList: () => "bg-secondary text-sm text-left", }} styles={{ singleValue: (base, _props) => ({ color: '#797979', textTransform: 'capitalize', ...base, }), input: (base, _props) => ({ ...base, width: 325, color: 'white', padding: 0, }), control: (base, _props) => ({ ...base, backgroundColor: '#red', color: 'white', border: 0, padding: 0, boxShadow: 'none', textAlign: 'left', minHeight: 45 }), option: (base, { isFocused }) => ({ ...base, backgroundColor: isFocused ? '#202225' : 'none', }), }} onChange={(v: ReactSelectData | unknown, _) => onSelectedSearchOption(v)} />
{dropdown && Home } Top Places Discover Stories News / Events Forum
user.username ? setPageState({ ...pageState, profileMenu: !pageState.profileMenu }) : ''} className={`navLink ${!dropdown ? "navLink-disabled" : ""}`}>{user.username ? user.username : 'Sign in'} {user && screen.width > 600 &&
setPageState({ ...pageState, profileMenu: !pageState.profileMenu })}>
Add location
Profile
Feed
Settings
{user.is_admin &&
Submissions
}
Logout
{/* */} {/* */}
}
) } export default Header;