Added search to languages and timezone.

This commit is contained in:
Mike Cao 2024-01-03 10:17:27 -08:00
parent c24fe079f1
commit 1e0c177fe6
7 changed files with 36 additions and 10 deletions

View file

@ -0,0 +1,4 @@
div.menu {
max-height: 300px;
width: 300px;
}

View file

@ -1,17 +1,27 @@
import { useState } from 'react';
import { Button, Dropdown, Item, Flexbox } from 'react-basics'; import { Button, Dropdown, Item, Flexbox } from 'react-basics';
import useLocale from 'components/hooks/useLocale'; import useLocale from 'components/hooks/useLocale';
import { DEFAULT_LOCALE } from 'lib/constants'; import { DEFAULT_LOCALE } from 'lib/constants';
import { languages } from 'lib/lang'; import { languages } from 'lib/lang';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import styles from './LanguageSetting.module.css';
export function LanguageSetting() { export function LanguageSetting() {
const [search, setSearch] = useState('');
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const { locale, saveLocale } = useLocale(); const { locale, saveLocale } = useLocale();
const options = Object.keys(languages); const options = search
? Object.keys(languages).filter(n => {
return (
n.toLowerCase().includes(search.toLowerCase()) ||
languages[n].label.toLowerCase().includes(search.toLowerCase())
);
})
: Object.keys(languages);
const handleReset = () => saveLocale(DEFAULT_LOCALE); const handleReset = () => saveLocale(DEFAULT_LOCALE);
const renderValue = value => languages[value].label; const renderValue = (value: string | number) => languages[value].label;
return ( return (
<Flexbox gap={10}> <Flexbox gap={10}>
@ -20,7 +30,9 @@ export function LanguageSetting() {
value={locale} value={locale}
renderValue={renderValue} renderValue={renderValue}
onSelect={saveLocale} onSelect={saveLocale}
menuProps={{ style: { height: 300, width: 300 } }} allowSearch={true}
onSearch={setSearch}
menuProps={{ className: styles.menu }}
> >
{item => <Item key={item}>{languages[item].label}</Item>} {item => <Item key={item}>{languages[item].label}</Item>}
</Dropdown> </Dropdown>

View file

@ -0,0 +1,4 @@
div.menu {
max-height: 300px;
width: 300px;
}

View file

@ -1,13 +1,18 @@
import { useState } from 'react';
import { Dropdown, Item, Button, Flexbox } from 'react-basics'; import { Dropdown, Item, Button, Flexbox } from 'react-basics';
import { listTimeZones } from 'timezone-support'; import { listTimeZones } from 'timezone-support';
import useTimezone from 'components/hooks/useTimezone'; import useTimezone from 'components/hooks/useTimezone';
import useMessages from 'components/hooks/useMessages'; import useMessages from 'components/hooks/useMessages';
import { getTimezone } from 'lib/date'; import { getTimezone } from 'lib/date';
import styles from './TimezoneSetting.module.css';
export function TimezoneSetting() { export function TimezoneSetting() {
const [search, setSearch] = useState('');
const { formatMessage, labels } = useMessages(); const { formatMessage, labels } = useMessages();
const [timezone, saveTimezone] = useTimezone(); const [timezone, saveTimezone] = useTimezone();
const options = listTimeZones(); const options = search
? listTimeZones().filter(n => n.toLowerCase().includes(search.toLowerCase()))
: listTimeZones();
const handleReset = () => saveTimezone(getTimezone()); const handleReset = () => saveTimezone(getTimezone());
@ -17,8 +22,9 @@ export function TimezoneSetting() {
items={options} items={options}
value={timezone} value={timezone}
onSelect={saveTimezone} onSelect={saveTimezone}
style={{ flex: 1 }} menuProps={{ className: styles.menu }}
menuProps={{ style: { height: 300 } }} allowSearch={true}
onSearch={setSearch}
> >
{item => <Item key={item}>{item}</Item>} {item => <Item key={item}>{item}</Item>}
</Dropdown> </Dropdown>

View file

@ -110,7 +110,7 @@ async function parseFilters(websiteId: string, filters: QueryFilters = {}, optio
params: { params: {
...normalizeFilters(filters), ...normalizeFilters(filters),
websiteId, websiteId,
startDate: maxDate(filters.startDate, new Date(website.resetAt)), startDate: maxDate(filters.startDate, new Date(website?.resetAt)),
websiteDomain: website.domain, websiteDomain: website.domain,
}, },
}; };

View file

@ -151,7 +151,7 @@ async function parseFilters(
params: { params: {
...normalizeFilters(filters), ...normalizeFilters(filters),
websiteId, websiteId,
startDate: maxDate(filters.startDate, website.resetAt), startDate: maxDate(filters.startDate, website?.resetAt),
websiteDomain: website.domain, websiteDomain: website.domain,
}, },
}; };

View file

@ -252,7 +252,7 @@ export async function createWebsite(
} }
export async function updateWebsite( export async function updateWebsite(
websiteId, websiteId: string,
data: Prisma.WebsiteUpdateInput | Prisma.WebsiteUncheckedUpdateInput, data: Prisma.WebsiteUpdateInput | Prisma.WebsiteUncheckedUpdateInput,
): Promise<Website> { ): Promise<Website> {
return prisma.client.website.update({ return prisma.client.website.update({
@ -264,7 +264,7 @@ export async function updateWebsite(
} }
export async function resetWebsite( export async function resetWebsite(
websiteId, websiteId: string,
): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> { ): Promise<[Prisma.BatchPayload, Prisma.BatchPayload, Website]> {
const { client, transaction } = prisma; const { client, transaction } = prisma;