mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-13 16:40:01 +00:00
09953a3f78
* chore: bump version to v2.3.0-preview * Customize start page (#803) * Update ConfigService to support complex Objects Implemented tests for ConfigService * Added DB migration for config table * Fixed version in banner.txt not being displayed * Implement Library ordering Implement "Show recently added games on homepage" * Fix build.gradle.kts * FIx bug when creating libraries * Fix TypeScript errors Fix library sorting * Bump actions/checkout from 5 to 6 (#811) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Added automatic scanning using file system watchers (#813) * Implement collections (#814) * Backend implementation for collections * Fix database schema and migration script * Refactor some config values Fix ArrayInput not being deactivatable * Remove "AutoRegisterNewUsers" config option * Fix bug when removing ignored paths * Add UI for collections (WIP) * Fix table actions not synced with state Fix tests * Finish implementation of collection feature * Fix tests * Bump actions/checkout from 5 to 6 (#815) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix "allow guests to create game requests" not being enabled when guest access is activated * Fix: Disable loading of EditGameMetadataModal and MatchGameModal in GameView when user is not admin * Bump actions/checkout from 5 to 6 (#819) Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Overhaul startpage (#823) * WIP: Update start page layout * Performance improvements (lazy loading and virtualized grids/lists) Fix various smaller issues * Implement use of blurhash for all images in backend and covers in frontend * Fix bugs and test * Fix code analysis issues * Remove "UI settings" since they have been made obsolete * Remove length limit from "image.originalUrl" (#824) * Remove alpine based image (#825) * Fix bug when games from library are still in a collection, thus prevention deletion of said library * Delete image files in background * Fix layout --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
80 lines
3.9 KiB
TypeScript
80 lines
3.9 KiB
TypeScript
import {FieldArray, useField} from "formik";
|
|
import {Button, Chip, Input, Popover, PopoverContent, PopoverTrigger} from "@heroui/react";
|
|
import {KeyboardEvent, useState} from "react";
|
|
import {PlusIcon} from "@phosphor-icons/react";
|
|
|
|
// @ts-ignore
|
|
const ArrayInput = ({label, ...props}) => {
|
|
// @ts-ignore
|
|
const [field, meta] = useField(props);
|
|
const [newElementValue, setNewElementValue] = useState<string>("");
|
|
|
|
return (
|
|
<FieldArray name={field.name}
|
|
render={arrayHelpers => {
|
|
function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {
|
|
if (event.key === "Enter" || event.key == "Tab" || event.key === ",") {
|
|
event.preventDefault();
|
|
|
|
newElementValue
|
|
.split(",")
|
|
.map((value) => value.trim())
|
|
.filter((value) => value !== "")
|
|
.forEach((value) => arrayHelpers.push(value));
|
|
|
|
setNewElementValue("");
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div className="flex flex-col flex-1 gap-2">
|
|
<div className="flex flex-row justify-between">
|
|
<p>{label}</p>
|
|
<small>{field.value.length} {field.value.length == 1 ? "element" : "elements"}</small>
|
|
</div>
|
|
|
|
<div className="flex flex-row flex-wrap gap-2 items-center">
|
|
{field.value.map((element: any, index: number) => (
|
|
<Chip key={index}
|
|
onClose={() => arrayHelpers.remove(index)}
|
|
isDisabled={props.isDisabled}
|
|
>
|
|
{element}
|
|
</Chip>
|
|
))}
|
|
<Popover placement="bottom" showArrow={true}>
|
|
<PopoverTrigger>
|
|
<Button isIconOnly
|
|
size="sm"
|
|
variant="light"
|
|
radius="full"
|
|
isDisabled={props.isDisabled}
|
|
>
|
|
<PlusIcon/>
|
|
</Button>
|
|
</PopoverTrigger>
|
|
<PopoverContent>
|
|
<Input
|
|
value={newElementValue}
|
|
onChange={(e) => setNewElementValue(e.target.value)}
|
|
onKeyDown={handleKeyDown}
|
|
placeholder="New element..."
|
|
variant="bordered"
|
|
/>
|
|
</PopoverContent>
|
|
</Popover>
|
|
</div>
|
|
|
|
<div className="min-h-6 text-danger">
|
|
{meta.touched && meta.error && meta.error.trim().length > 0 && (
|
|
meta.error
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export default ArrayInput; |