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