fomantic-ui-react
Version:
Fomantic-UI React -- A React Component Library.
224 lines (191 loc) • 8.08 kB
JavaScript
/**
* fomantic-ui-react v0.0.1-alpha.10
* (c) 2022 FireLoong <fireloong@foxmail.com>
* @license MIT
*/
import { _ as _defineProperty, a as _objectWithoutProperties } from '../_chunks/dep-9f1126c1.js';
import { _ as _slicedToArray } from '../_chunks/dep-dc9b74a1.js';
import React, { useState, createElement } from 'react';
import classNames from 'classnames';
import _ from 'lodash';
import SearchResults from './SearchResults.js';
import SearchResult from './SearchResult.js';
import SearchCategory from './SearchCategory.js';
import { Transition } from '../transition/index.js';
import '../_util/reactNode.js';
import '../transition/Transition.js';
import './style/css.js';
import '../transition/type.js';
var _excluded = ["as", "className", "loading", "icon", "placeholder", "value", "selectFirstResult", "results", "noResultsMessage", "noResultsDescription", "showNoResults", "minCharacters", "onSearchChange", "onResultSelect"],
_excluded2 = ["childkey"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var Search = function Search(_ref) {
var _ref$as = _ref.as,
as = _ref$as === void 0 ? "div" : _ref$as,
className = _ref.className,
loading = _ref.loading,
icon = _ref.icon,
placeholder = _ref.placeholder,
value = _ref.value,
selectFirstResult = _ref.selectFirstResult,
results = _ref.results,
_ref$noResultsMessage = _ref.noResultsMessage,
noResultsMessage = _ref$noResultsMessage === void 0 ? "No results" : _ref$noResultsMessage,
noResultsDescription = _ref.noResultsDescription,
_ref$showNoResults = _ref.showNoResults,
showNoResults = _ref$showNoResults === void 0 ? true : _ref$showNoResults,
_ref$minCharacters = _ref.minCharacters,
minCharacters = _ref$minCharacters === void 0 ? 1 : _ref$minCharacters,
onSearchChange = _ref.onSearchChange,
onResultSelect = _ref.onResultSelect,
props = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
focus = _useState2[0],
setFocus = _useState2[1];
var _useState3 = useState(value !== null && value !== void 0 ? value : ""),
_useState4 = _slicedToArray(_useState3, 2),
currentValue = _useState4[0],
setCurrentValue = _useState4[1];
var _useState5 = useState(false),
_useState6 = _slicedToArray(_useState5, 2),
open = _useState6[0],
setOpen = _useState6[1];
var _useState7 = useState(false),
_useState8 = _slicedToArray(_useState7, 2),
transition = _useState8[0],
setTransition = _useState8[1];
var _useState9 = useState(selectFirstResult ? 0 : -1),
_useState10 = _slicedToArray(_useState9, 2),
selectedIndex = _useState10[0],
setSelectedIndex = _useState10[1];
if (!as) {
as = "div";
}
var classNamesVar = {};
if (loading) {
if (typeof loading === "boolean") {
classNamesVar = {
focus: focus,
loading: loading
};
} else if (loading.color) {
var _classNamesVar;
classNamesVar = (_classNamesVar = {
focus: focus,
"double": loading["double"],
slow: loading.slow,
elastic: loading.elastic
}, _defineProperty(_classNamesVar, loading.color, loading.color), _defineProperty(_classNamesVar, "loading", true), _classNamesVar);
} else {
classNamesVar = {
focus: focus,
"double": loading["double"],
slow: loading.slow,
elastic: loading.elastic,
loading: true
};
}
} else {
classNamesVar = {
focus: focus
};
}
var handleInputFocus = function handleInputFocus() {
setFocus(true);
};
var handleInputBlur = function handleInputBlur() {
setFocus(false);
};
var handleSearchChange = function handleSearchChange(e) {
e.stopPropagation();
if (e.target.value.length >= minCharacters) {
setTransition(true);
onSearchChange === null || onSearchChange === void 0 ? void 0 : onSearchChange(e);
setCurrentValue(e.target.value);
setTimeout(function () {
setOpen(e.target.value ? true : false);
});
} else {
setCurrentValue(e.target.value);
setOpen(false);
}
};
var getSelectedResult = function getSelectedResult() {
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : selectedIndex;
return _.get(results, index);
};
var handleItemClick = function handleItemClick(e, _ref2) {
var id = _ref2.id;
console.log(id);
var result = getSelectedResult(id);
e.nativeEvent.stopImmediatePropagation();
setCurrentValue(result.title);
onResultSelect === null || onResultSelect === void 0 ? void 0 : onResultSelect(e, result);
setOpen(false);
};
var inputElement = /*#__PURE__*/createElement("input", {
className: "prompt",
type: "text",
placeholder: placeholder,
autoComplete: "off",
value: currentValue,
onFocus: handleInputFocus,
onBlur: handleInputBlur,
onChange: handleSearchChange
});
var renderNoResults = /* @__PURE__ */React.createElement("div", {
className: "message empty"
}, /* @__PURE__ */React.createElement("div", {
className: "header"
}, noResultsMessage), noResultsDescription && /* @__PURE__ */React.createElement("div", {
className: "description"
}, noResultsDescription));
var renderResult = function renderResult(_ref3, index, _array) {
var childkey = _ref3.childkey,
result = _objectWithoutProperties(_ref3, _excluded2);
var offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
var offsetIndex = index + offset;
return /* @__PURE__ */React.createElement(SearchResult, _objectSpread(_objectSpread({
key: childkey !== null && childkey !== void 0 ? childkey : result.id || result.title
}, result), {}, {
id: offsetIndex,
onClick: handleItemClick
}));
};
var renderResults = _.map(results, renderResult);
var renderMenuContent = function renderMenuContent() {
if (_.isEmpty(results)) {
return showNoResults ? renderNoResults : null;
}
return renderResults;
};
var renderResultsMenu = function renderResultsMenu() {
var menuContent = renderMenuContent();
if (!menuContent) {
return null;
}
return transition ? /* @__PURE__ */React.createElement(Transition, {
as: SearchResults,
visible: open,
animation: "scale",
duration: 300
}, menuContent) : /* @__PURE__ */React.createElement(SearchResults, null, menuContent);
};
return /*#__PURE__*/createElement(as, _objectSpread({
className: classNames("ui", "search", classNamesVar, className)
}, props), /* @__PURE__ */React.createElement(React.Fragment, null, icon ? /* @__PURE__ */React.createElement("div", {
className: classNames("ui", {
left: icon === "left"
}, "icon", "input")
}, inputElement, /* @__PURE__ */React.createElement("i", {
className: "search icon"
})) : inputElement, renderResultsMenu()));
};
Search.displayName = "Search";
Search.Result = SearchResult;
Search.Results = SearchResults;
Search.Category = SearchCategory;
export { Search as default };
//# sourceMappingURL=Search.js.map