mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
* docs: optimize route higtlight (#4520) * docs: optimize home display (#4519) * docs: optimize home display and route highlight * docs: optimize home display * fix(alert): propagate className (#4535) * fix(alert): propagate className * chore(alert): remove className from alert theme * fix(avatar): title type in Avatar (#4529) * fix(avatar): title type in Avatar * fix(alert): apply isEmpty check on title * fix(alert): alert interface props type * refactor: remove unnecessary props types (#4530) * refactor(docs): remove string type as it is included in ReactNode * refactor: remove unnecessary types * feat(changeset): add changeset * chore: remove changeset * refactor: remove null since ReactNode unions it already * fix(input): use onPress for wrapper click focus (#4483) * fix(input): use onPress for wrapper click focus * test(input): wrapper click focus test * chore(changeset): input onPress for wrapper click focus * chore(changeset): minor wording * Refactor/rebrand (#4532) * chore: rebrand in progress * chore: update docs to use heroui * chore: components renbranded * chore: figma moved to the docs files * fix: posthog config * fix(docs): extra classname in form example (#4465) * chore: clean git * chore: make heroui private * chore: new logo * chore: node env var renamed * chore: public robots txt deleted * chore: wrangler installed * chore: wrangler renamed * chore: cloudlfare workers removed * chore: force vercel deploy * refactor: first migration and provider * refactor: rename nextui plugin * refactor: rename github site * refactor: rename CONTRIBUTING * refactor: rename package name * refactor: nextjs image hostname * refactor: mdx repo nextui-org rename frontio-ai * refactor: nextui.org rename heroui.com * refactor: add heroui to missing places * fix: heroui plugin name * fix: update docs * docs: nextui to heroui add npmrc pnpm migratation * chore: rename all packages with new org name * chore: replace frontio-ai by frontioai * chore: revert previous changes * chore: small adjustment * chore: doc updated * feat: blog * chore: avatar updated * fix: url * chore: add new ogimage * fix: ogimage command * fix: heroui name and storybook welcome page * fix: og image url * feat: favicon and icon changed --------- Co-authored-by: աӄա <wingkwong.code@gmail.com> Co-authored-by: winches <329487092@qq.com> * fix: postbuild script * chore: core package updates * ci(changesets): version packages (#4569) Co-authored-by: Junior Garcia <jrgarciadev@gmail.com> * feat: contributors added to the blog --------- Co-authored-by: winches <329487092@qq.com> Co-authored-by: աӄա <wingkwong.code@gmail.com> Co-authored-by: Peterl561 <76144929+Peterl561@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
97 lines
3.3 KiB
JavaScript
97 lines
3.3 KiB
JavaScript
import {Autocomplete, AutocompleteItem} from "@heroui/react";
|
|
import {useFilter} from "@react-aria/i18n";
|
|
|
|
export const animals = [
|
|
{label: "Cat", key: "cat", description: "The second most popular pet in the world"},
|
|
{label: "Dog", key: "dog", description: "The most popular pet in the world"},
|
|
{label: "Elephant", key: "elephant", description: "The largest land animal"},
|
|
{label: "Lion", key: "lion", description: "The king of the jungle"},
|
|
{label: "Tiger", key: "tiger", description: "The largest cat species"},
|
|
{label: "Giraffe", key: "giraffe", description: "The tallest land animal"},
|
|
{
|
|
label: "Dolphin",
|
|
key: "dolphin",
|
|
description: "A widely distributed and diverse group of aquatic mammals",
|
|
},
|
|
{label: "Penguin", key: "penguin", description: "A group of aquatic flightless birds"},
|
|
{label: "Zebra", key: "zebra", description: "A several species of African equids"},
|
|
{
|
|
label: "Shark",
|
|
key: "shark",
|
|
description: "A group of elasmobranch fish characterized by a cartilaginous skeleton",
|
|
},
|
|
{
|
|
label: "Whale",
|
|
key: "whale",
|
|
description: "Diverse group of fully aquatic placental marine mammals",
|
|
},
|
|
{label: "Otter", key: "otter", description: "A carnivorous mammal in the subfamily Lutrinae"},
|
|
{label: "Crocodile", key: "crocodile", description: "A large semiaquatic reptile"},
|
|
];
|
|
|
|
export default function App() {
|
|
// Store Autocomplete input value, selected option, open state, and items
|
|
// in a state tracker
|
|
const [fieldState, setFieldState] = React.useState({
|
|
selectedKey: "",
|
|
inputValue: "",
|
|
items: animals,
|
|
});
|
|
|
|
// Implement custom filtering logic and control what items are
|
|
// available to the Autocomplete.
|
|
const {startsWith} = useFilter({sensitivity: "base"});
|
|
|
|
// Specify how each of the Autocomplete values should change when an
|
|
// option is selected from the list box
|
|
const onSelectionChange = (key) => {
|
|
setFieldState((prevState) => {
|
|
let selectedItem = prevState.items.find((option) => option.value === key);
|
|
|
|
return {
|
|
inputValue: selectedItem?.label || "",
|
|
selectedKey: key,
|
|
items: animals.filter((item) => startsWith(item.label, selectedItem?.label || "")),
|
|
};
|
|
});
|
|
};
|
|
|
|
// Specify how each of the Autocomplete values should change when the input
|
|
// field is altered by the user
|
|
const onInputChange = (value) => {
|
|
setFieldState((prevState) => ({
|
|
inputValue: value,
|
|
selectedKey: value === "" ? null : prevState.selectedKey,
|
|
items: animals.filter((item) => startsWith(item.label, value)),
|
|
}));
|
|
};
|
|
|
|
// Show entire list if user opens the menu manually
|
|
const onOpenChange = (isOpen, menuTrigger) => {
|
|
if (menuTrigger === "manual" && isOpen) {
|
|
setFieldState((prevState) => ({
|
|
inputValue: prevState.inputValue,
|
|
selectedKey: prevState.selectedKey,
|
|
items: animals,
|
|
}));
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Autocomplete
|
|
className="max-w-xs"
|
|
inputValue={fieldState.inputValue}
|
|
items={fieldState.items}
|
|
label="Favorite Animal"
|
|
placeholder="Search an animal"
|
|
selectedKey={fieldState.selectedKey}
|
|
variant="bordered"
|
|
onInputChange={onInputChange}
|
|
onOpenChange={onOpenChange}
|
|
onSelectionChange={onSelectionChange}
|
|
>
|
|
{(item) => <AutocompleteItem key={item.key}>{item.label}</AutocompleteItem>}
|
|
</Autocomplete>
|
|
);
|
|
}
|