1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | import { __assign, __rest, __spreadArray } from "tslib";
|
17 | import * as React from "react";
|
18 | import { Button } from "@blueprintjs/core";
|
19 | import { MenuItem2 } from "@blueprintjs/popover2";
|
20 | import { Select2 } from "../components/select/select2";
|
21 | import { areFilmsEqual, createFilm, filterFilm, getFilmItemProps, maybeAddCreatedFilmToArrays, maybeDeleteCreatedFilmFromArrays, renderCreateFilmMenuItem, TOP_100_FILMS, } from "./films";
|
22 | export function FilmSelect(_a) {
|
23 | var _b = _a.allowCreate, allowCreate = _b === void 0 ? false : _b, fill = _a.fill, restProps = __rest(_a, ["allowCreate", "fill"]);
|
24 | var _c = React.useState(__spreadArray([], TOP_100_FILMS, true)), items = _c[0], setItems = _c[1];
|
25 | var _d = React.useState([]), createdItems = _d[0], setCreatedItems = _d[1];
|
26 | var _e = React.useState(TOP_100_FILMS[0]), selectedFilm = _e[0], setSelectedFilm = _e[1];
|
27 | var handleItemSelect = React.useCallback(function (newFilm) {
|
28 |
|
29 | var step1Result = maybeDeleteCreatedFilmFromArrays(items, createdItems, selectedFilm);
|
30 |
|
31 | var step2Result = maybeAddCreatedFilmToArrays(step1Result.items, step1Result.createdItems, newFilm);
|
32 | setCreatedItems(step2Result.createdItems);
|
33 | setSelectedFilm(newFilm);
|
34 | setItems(step2Result.items);
|
35 | }, []);
|
36 | var itemRenderer = React.useCallback(function (film, props) {
|
37 | if (!props.modifiers.matchesPredicate) {
|
38 | return null;
|
39 | }
|
40 | return React.createElement(MenuItem2, __assign({}, getFilmItemProps(film, props), { selected: film === selectedFilm }));
|
41 | }, [selectedFilm]);
|
42 | return (React.createElement(Select2, __assign({ createNewItemFromQuery: allowCreate ? createFilm : undefined, createNewItemRenderer: allowCreate ? renderCreateFilmMenuItem : undefined, fill: fill, itemPredicate: filterFilm, itemRenderer: itemRenderer, items: items, itemsEqual: areFilmsEqual, menuProps: { "aria-label": "films" }, noResults: React.createElement(MenuItem2, { disabled: true, text: "No results.", roleStructure: "listoption" }), onItemSelect: handleItemSelect }, restProps),
|
43 | React.createElement(Button, { disabled: restProps.disabled, fill: fill, icon: "film", rightIcon: "caret-down", text: selectedFilm ? "".concat(selectedFilm.title, " (").concat(selectedFilm.year, ")") : "(No selection)" })));
|
44 | }
|
45 |
|
\ | No newline at end of file |