@linzjs/lui 17.4.0 → 17.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [17.5.2](https://github.com/linz/lui/compare/v17.5.1...v17.5.2) (2022-06-02)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * clear search input after search type changed. ([#692](https://github.com/linz/lui/issues/692)) ([9c4138c](https://github.com/linz/lui/commit/9c4138c335b92788cb8e3420fdcc45a6d3f80658))
7
+
8
+ ## [17.5.1](https://github.com/linz/lui/compare/v17.5.0...v17.5.1) (2022-06-01)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * Release for LuiSearchBox change. ([#691](https://github.com/linz/lui/issues/691)) ([b449ab8](https://github.com/linz/lui/commit/b449ab8488bc232570ae496405d464207adebfdf))
14
+
15
+ # [17.5.0](https://github.com/linz/lui/compare/v17.4.0...v17.5.0) (2022-06-01)
16
+
17
+
18
+ ### Features
19
+
20
+ * **LuiSearchInput:** Add no result message to LuiSearchInput component. ([#689](https://github.com/linz/lui/issues/689)) ([f7d23c3](https://github.com/linz/lui/commit/f7d23c3107c8a87db179fb869c43537b7d634c05))
21
+
1
22
  # [17.4.0](https://github.com/linz/lui/compare/v17.3.3...v17.4.0) (2022-06-01)
2
23
 
3
24
 
package/README.md CHANGED
@@ -50,4 +50,3 @@ There is lots to do in this project, often things will be left until there is de
50
50
  Storybook is the main source of documentation.
51
51
 
52
52
  - [Lui Storybook](https://linz.github.io/Lui/)
53
-
@@ -2,6 +2,7 @@ import React, { ReactElement } from 'react';
2
2
  import { LuiButtonProps } from '../LuiButton/LuiButton';
3
3
  import { ISearchResult, ISearchGroupedResult } from '../LuiSearchInput/LuiSearchInput';
4
4
  export interface ISearchMenuOption {
5
+ name?: string;
5
6
  groupTitle?: string;
6
7
  groupDivider?: boolean;
7
8
  value: string;
@@ -19,6 +19,7 @@ export interface ISearchInputProps {
19
19
  disclaimer?: string;
20
20
  initialValue?: string;
21
21
  inputTransformer?: (input: string) => string;
22
+ name?: string;
22
23
  }
23
24
  export declare function isGroupedResult(result: ISearchResult[] | ISearchGroupedResult[]): result is ISearchGroupedResult[];
24
25
  export declare const LuiSearchInput: React.FC<ISearchInputProps>;
package/dist/index.js CHANGED
@@ -55910,6 +55910,10 @@ var LuiSearchInput = function (props) {
55910
55910
  var _e = React.useState(false), isLoading = _e[0], setIsLoading = _e[1];
55911
55911
  var inputRef = React.useRef(null);
55912
55912
  var selectedRef = React.useRef(null);
55913
+ //clear result after search types changed
55914
+ React.useEffect(function () {
55915
+ setResults([]);
55916
+ }, [props.getOptions]);
55913
55917
  function setInputValue(value) {
55914
55918
  setTypedValue(props.inputTransformer ? props.inputTransformer(value) : value);
55915
55919
  }
@@ -56014,6 +56018,25 @@ var LuiSearchInput = function (props) {
56014
56018
  },
56015
56019
  } })) : null;
56016
56020
  var searchIcon = (React__default["default"].createElement(LuiIcon, { className: 'LuiSearchInput-startIconPosition', name: "ic_search", size: "md", alt: "search", spanProps: { onClick: function () { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus(); } } }));
56021
+ var typeMore = 'You need to type a few more characters';
56022
+ function enoughChars(input) {
56023
+ if (typeof props.minCharactersForSearch === 'number')
56024
+ return input.length >= props.minCharactersForSearch;
56025
+ else
56026
+ return false;
56027
+ }
56028
+ function noOptionsMessage(inputValue) {
56029
+ if (inputValue === '') {
56030
+ return null;
56031
+ }
56032
+ if (!enoughChars(inputValue)) {
56033
+ return typeMore;
56034
+ }
56035
+ if (props.name)
56036
+ return "The " + props.name + " could not be displayed or does not exist.";
56037
+ else
56038
+ return null;
56039
+ }
56017
56040
  return (React__default["default"].createElement("div", { className: "LuiSearchInput" },
56018
56041
  React__default["default"].createElement("span", { className: "LuiSearchInput-inputWrapper" },
56019
56042
  searchIcon,
@@ -56022,10 +56045,17 @@ var LuiSearchInput = function (props) {
56022
56045
  setHaveFocus(true);
56023
56046
  },
56024
56047
  // This timeout could be a little brittle but allows the menu to stay open long enough to click it
56025
- onBlur: function () { return setTimeout(function () { return setHaveFocus(false); }, 100); } }),
56048
+ onBlur: function () { return setTimeout(function () { return setHaveFocus(false); }, 200); } }),
56026
56049
  cancelIcon),
56027
56050
  (isLoading || results.length > 0) && haveFocus && (React__default["default"].createElement("div", null,
56028
56051
  React__default["default"].createElement(ResultsDisplay, { results: results, selectedId: selectedId, setSelectedId: setSelectedId, selectedRef: selectedRef, onClick: selectItem, isLoading: isLoading, renderItem: props.renderItem }))),
56052
+ props.name &&
56053
+ haveFocus &&
56054
+ results.length === 0 &&
56055
+ !isLoading &&
56056
+ noOptionsMessage(typedValue) && (React__default["default"].createElement(React__default["default"].Fragment, null,
56057
+ React__default["default"].createElement("hr", { className: "LuiSearchInput-resultSeparator" }),
56058
+ React__default["default"].createElement("div", { "data-testid": "no-result-msg", className: "LuiSearchInput-disclaimer" }, noOptionsMessage(typedValue)))),
56029
56059
  props.disclaimer && haveFocus && (React__default["default"].createElement(React__default["default"].Fragment, null,
56030
56060
  React__default["default"].createElement("hr", { className: "LuiSearchInput-resultSeparator" }),
56031
56061
  React__default["default"].createElement("div", { "data-testid": "disclaimer", className: "LuiSearchInput-disclaimer" }, props.disclaimer)))));
@@ -56059,7 +56089,7 @@ var LuiSearchBox = function (_a) {
56059
56089
  return (React__default["default"].createElement("div", { className: "LuiSearchBox" },
56060
56090
  React__default["default"].createElement(LuiSelectMenu, { menuButton: React__default["default"].createElement(LuiSearchBoxButton, null, selectedMenuOption.title) }, renderSelectMenu(searchBoxOptions, handleMenuSelected)),
56061
56091
  React__default["default"].createElement("div", { className: "LuiSearchBox-right" },
56062
- React__default["default"].createElement(LuiSearchInput, { minCharactersForSearch: 2, placeholderText: selectedMenuOption.placeholderText, getOptions: selectedMenuOption.getOption, onSelectOption: selectedMenuOption.onSelectOption, renderItem: selectedMenuOption.renderItem
56092
+ React__default["default"].createElement(LuiSearchInput, { name: selectedMenuOption.name ? selectedMenuOption.name : undefined, minCharactersForSearch: 2, placeholderText: selectedMenuOption.placeholderText, getOptions: selectedMenuOption.getOption, onSelectOption: selectedMenuOption.onSelectOption, renderItem: selectedMenuOption.renderItem
56063
56093
  ? selectedMenuOption.renderItem
56064
56094
  : function (item) {
56065
56095
  return React__default["default"].createElement("span", { style: resultStyle$1 }, item.description);
@@ -56112,6 +56142,7 @@ var searchBoxOptions = [
56112
56142
  groupTitle: 'Title',
56113
56143
  value: 'address',
56114
56144
  title: 'Address',
56145
+ name: 'address',
56115
56146
  placeholderText: 'Enter a place, street or address. e.g. Newlands',
56116
56147
  disclaimer: 'This is a default disclaimer, add your own search options',
56117
56148
  getOption: getDefaultOptions,