parent
08507d5ef8
commit
6fc312022a
@ -0,0 +1,57 @@
|
|||||||
|
import type { ComponentProps } from 'react';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import type { TypeaheadOption } from '@tih/ui';
|
||||||
|
import { Typeahead } from '@tih/ui';
|
||||||
|
|
||||||
|
import { trpc } from '~/utils/trpc';
|
||||||
|
|
||||||
|
type BaseProps = Pick<
|
||||||
|
ComponentProps<typeof Typeahead>,
|
||||||
|
| 'disabled'
|
||||||
|
| 'errorMessage'
|
||||||
|
| 'isLabelHidden'
|
||||||
|
| 'placeholder'
|
||||||
|
| 'required'
|
||||||
|
| 'textSize'
|
||||||
|
>;
|
||||||
|
|
||||||
|
type Props = BaseProps &
|
||||||
|
Readonly<{
|
||||||
|
onSelect: (option: TypeaheadOption | null) => void;
|
||||||
|
value?: TypeaheadOption | null;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export default function ResumeLocationTypeahead({
|
||||||
|
onSelect,
|
||||||
|
value,
|
||||||
|
...props
|
||||||
|
}: Props) {
|
||||||
|
const [query, setQuery] = useState('');
|
||||||
|
const countries = trpc.useQuery([
|
||||||
|
'locations.countries.list',
|
||||||
|
{
|
||||||
|
name: query,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const { data } = countries;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Typeahead
|
||||||
|
label="Location"
|
||||||
|
noResultsMessage="No location found"
|
||||||
|
nullable={true}
|
||||||
|
options={
|
||||||
|
data?.map(({ id, name }) => ({
|
||||||
|
id,
|
||||||
|
label: name,
|
||||||
|
value: id,
|
||||||
|
})) ?? []
|
||||||
|
}
|
||||||
|
value={value}
|
||||||
|
onQueryChange={setQuery}
|
||||||
|
onSelect={onSelect}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
import type { ComponentProps } from 'react';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import type { TypeaheadOption } from '@tih/ui';
|
||||||
|
import { Typeahead } from '@tih/ui';
|
||||||
|
|
||||||
|
import { JobTitleLabels } from '../../shared/JobTitles';
|
||||||
|
|
||||||
|
type BaseProps = Pick<
|
||||||
|
ComponentProps<typeof Typeahead>,
|
||||||
|
| 'disabled'
|
||||||
|
| 'errorMessage'
|
||||||
|
| 'isLabelHidden'
|
||||||
|
| 'placeholder'
|
||||||
|
| 'required'
|
||||||
|
| 'textSize'
|
||||||
|
>;
|
||||||
|
|
||||||
|
type Props = BaseProps &
|
||||||
|
Readonly<{
|
||||||
|
onSelect: (option: TypeaheadOption | null) => void;
|
||||||
|
value?: TypeaheadOption | null;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export default function ResumeRoleTypeahead({
|
||||||
|
onSelect,
|
||||||
|
value,
|
||||||
|
...props
|
||||||
|
}: Props) {
|
||||||
|
const [query, setQuery] = useState('');
|
||||||
|
const options = Object.entries(JobTitleLabels)
|
||||||
|
.map(([slug, label]) => ({
|
||||||
|
id: slug,
|
||||||
|
label,
|
||||||
|
value: slug,
|
||||||
|
}))
|
||||||
|
.filter(
|
||||||
|
({ label }) =>
|
||||||
|
label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) > -1,
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Typeahead
|
||||||
|
label="Roles"
|
||||||
|
noResultsMessage="No available roles."
|
||||||
|
nullable={true}
|
||||||
|
options={options}
|
||||||
|
value={value}
|
||||||
|
onQueryChange={setQuery}
|
||||||
|
onSelect={onSelect}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in new issue