UNPKG

3.11 kBJavaScriptView Raw
1/*
2 * Copyright 2021 Palantir Technologies, Inc. All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16import { __assign, __rest, __spreadArray } from "tslib";
17import * as React from "react";
18import { Button } from "@blueprintjs/core";
19import { MenuItem2 } from "@blueprintjs/popover2";
20import { Select2 } from "../components/select/select2";
21import { areFilmsEqual, createFilm, filterFilm, getFilmItemProps, maybeAddCreatedFilmToArrays, maybeDeleteCreatedFilmFromArrays, renderCreateFilmMenuItem, TOP_100_FILMS, } from "./films";
22export 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 // Delete the old film from the list if it was newly created.
29 var step1Result = maybeDeleteCreatedFilmFromArrays(items, createdItems, selectedFilm);
30 // Add the new film to the list if it is newly created.
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//# sourceMappingURL=filmSelect.js.map
\No newline at end of file