UNPKG

3.24 kBJavaScriptView Raw
1"use strict";
2/*
3 * Copyright 2021 Palantir Technologies, Inc. All rights reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17Object.defineProperty(exports, "__esModule", { value: true });
18exports.FilmSelect = void 0;
19var tslib_1 = require("tslib");
20var React = tslib_1.__importStar(require("react"));
21var core_1 = require("@blueprintjs/core");
22var popover2_1 = require("@blueprintjs/popover2");
23var select2_1 = require("../components/select/select2");
24var films_1 = require("./films");
25function 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 // Delete the old film from the list if it was newly created.
32 var step1Result = (0, films_1.maybeDeleteCreatedFilmFromArrays)(items, createdItems, selectedFilm);
33 // Add the new film to the list if it is newly created.
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}
48exports.FilmSelect = FilmSelect;
49//# sourceMappingURL=filmSelect.js.map
\No newline at end of file