@blocklet/list 0.12.97 → 0.12.99

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/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@blocklet/list",
3
- "version": "0.12.97",
3
+ "version": "0.12.99",
4
4
  "description": "Common ux components of blocklet",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "author": "machao <machao@arcblock.io>",
8
+ "author": "blocklet <blocklet@arcblock.io>",
9
9
  "homepage": "https://github.com/blocklet/blocklet-store#readme",
10
10
  "license": "ISC",
11
11
  "main": "./lib/index.js",
@@ -29,12 +29,8 @@
29
29
  "scripts": {
30
30
  "lint": "eslint src stories --ext=js,jsx,ts,tsx,mjs",
31
31
  "lint:fix": "npm run lint -- --fix",
32
- "build:cjs": "babel src --out-dir lib --copy-files",
33
- "watch:cjs": "babel src --out-dir lib -w --copy-files",
34
- "build:esm": "vite build --emptyOutDir",
35
- "watch:esm": "vite build --watch",
36
- "build": "npm run build:esm && npm run build:cjs",
37
- "watch": "npm run watch:esm & npm run watch:cjs",
32
+ "build": "vite build --emptyOutDir",
33
+ "watch": "vite build --watch",
38
34
  "precommit": "CI=1 yarn test",
39
35
  "prepush": "CI=1 yarn test",
40
36
  "prepublish": "npm run build"
@@ -56,8 +52,8 @@
56
52
  "dependencies": {
57
53
  "@algolia/autocomplete-js": "^1.17.0",
58
54
  "@algolia/autocomplete-theme-classic": "^1.17.0",
59
- "@arcblock/ux": "^2.9.81",
60
- "@blocklet/util": "0.12.97",
55
+ "@arcblock/ux": "^2.9.85",
56
+ "@blocklet/util": "0.12.99",
61
57
  "@emotion/react": "^11.10.0",
62
58
  "@emotion/styled": "^11.10.0",
63
59
  "@mui/icons-material": "^5.15.12",
@@ -71,7 +67,7 @@
71
67
  "react-error-boundary": "^3.1.4",
72
68
  "react-hotkeys-hook": "^3.4.7",
73
69
  "react-infinite-scroll-hook": "^4.0.3",
74
- "url-join": "^4.0.1"
70
+ "ufo": "^1.5.3"
75
71
  },
76
72
  "devDependencies": {
77
73
  "@arcblock/eslint-config": "0.3.0",
@@ -88,5 +84,5 @@
88
84
  "prettier": "^2.7.1",
89
85
  "vite": "^5.2.6"
90
86
  },
91
- "gitHead": "4e1d85a409e1acc1d4e0f6cef5d6ba0d79983430"
87
+ "gitHead": "08bdcf8c6365fe816819794d6434abd4353e2b38"
92
88
  }
@@ -1,92 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _flat = _interopRequireDefault(require("flat"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
- const en = {
10
- common: {
11
- searchStore: 'Search the store',
12
- showResources: 'Show resources',
13
- price: 'Price',
14
- category: 'Category',
15
- resourceType: 'Resource Type',
16
- clear: 'Clear',
17
- cancel: 'Cancel',
18
- search: 'Search'
19
- },
20
- sort: {
21
- sort: 'Sort',
22
- nameDescend: 'Name Descending',
23
- nameAscend: 'Name Ascending',
24
- popularity: 'Most Popular',
25
- lastPublished: 'Latest Published'
26
- },
27
- category: {
28
- all: 'All',
29
- placeholder: 'Category name',
30
- helperText: 'Please select a category'
31
- },
32
- blocklet: {
33
- noResults: 'No Blocklets',
34
- payment: 'Paid Blocklets',
35
- free: 'Free Blocklets',
36
- emptyTip: 'Tips:',
37
- filterTip: 'Appropriately reduce the filter conditions',
38
- keywordTip: 'Try other keywords',
39
- owner: 'Blocklets from {name}',
40
- noBlockletPart1: 'No Blocklets associated with"',
41
- noBlockletPart2: '"were found',
42
- noCategoryResults1: 'No "',
43
- noCategoryResults2: '" Blocklets'
44
- },
45
- autocomplete: {
46
- expandResult: 'Show {number} search results for "{name}" '
47
- }
48
- };
49
- const zh = {
50
- common: {
51
- searchStore: '搜索商店内应用',
52
- showResources: '显示资源型应用',
53
- price: '价格',
54
- category: '类别',
55
- resourceType: '资源类型',
56
- clear: '清除',
57
- cancel: '取消',
58
- search: '搜索'
59
- },
60
- sort: {
61
- sort: '排序',
62
- nameDescend: '名称降序',
63
- nameAscend: '名称升序',
64
- popularity: '最热门',
65
- lastPublished: '最新发布'
66
- },
67
- category: {
68
- all: '全部',
69
- placeholder: '分类名称',
70
- helperText: '请选择分类'
71
- },
72
- blocklet: {
73
- noResults: '暂无应用',
74
- free: '免费应用',
75
- payment: '付费应用',
76
- emptyTip: '建议:',
77
- filterTip: '适当减少筛选条件',
78
- keywordTip: '尝试其他关键字',
79
- owner: '来自 {name} 的 Blocklets',
80
- noBlockletPart1: '没有找到与"',
81
- noBlockletPart2: '"相关的 Blocklets',
82
- noCategoryResults1: '无 "',
83
- noCategoryResults2: '" 类别的 Blocklets'
84
- },
85
- autocomplete: {
86
- expandResult: '显示 {number} 条 “{name}” 的搜索结果 '
87
- }
88
- };
89
- var _default = exports.default = {
90
- en: (0, _flat.default)(en),
91
- zh: (0, _flat.default)(zh)
92
- };
package/lib/base.js DELETED
@@ -1,159 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _Theme = require("@arcblock/ux/lib/Theme");
8
- var _Sort = _interopRequireDefault(require("@mui/icons-material/Sort"));
9
- var _material = require("@mui/material");
10
- var _Face = _interopRequireDefault(require("@mui/icons-material/Face"));
11
- var _reactErrorBoundary = require("react-error-boundary");
12
- var _ErrorBoundary = require("@arcblock/ux/lib/ErrorBoundary");
13
- var _react = require("react");
14
- var _filter = require("./contexts/filter");
15
- var _customSelect = _interopRequireDefault(require("./components/custom-select"));
16
- var _filter2 = require("./components/filter");
17
- var _utils = require("./libs/utils");
18
- var _list = _interopRequireDefault(require("./components/list"));
19
- var _aside = _interopRequireDefault(require("./components/aside"));
20
- var _baseSearch = _interopRequireDefault(require("./components/base-search"));
21
- var _autocomplete = _interopRequireDefault(require("./components/autocomplete"));
22
- var _showResourcesSwitch = _interopRequireDefault(require("./components/show-resources-switch"));
23
- var _jsxRuntime = require("react/jsx-runtime");
24
- var _templateObject, _templateObject2;
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
27
- function ListBase() {
28
- var _sortOptions$find, _priceOptions$find, _filters$keyword;
29
- const {
30
- handleDeveloper,
31
- blockletList,
32
- filters,
33
- developerName,
34
- handleSort,
35
- handleCategory,
36
- handlePrice,
37
- handleSearchSelect,
38
- t,
39
- getCategoryLocale,
40
- priceOptions,
41
- wrapChildren,
42
- showResourcesSwitch,
43
- baseSearch
44
- } = (0, _filter.useFilterContext)();
45
- const sortOptions = (0, _utils.getSortOptions)(t);
46
- const sortLocale = ((_sortOptions$find = sortOptions.find(f => f.value === filters.sortBy)) === null || _sortOptions$find === void 0 ? void 0 : _sortOptions$find.name) || t('sort.sort');
47
- const categoryLocale = getCategoryLocale(filters.category);
48
- const {
49
- resourceType
50
- } = filters || {};
51
- const priceLocale = (_priceOptions$find = priceOptions.find(price => price.value === filters.price)) === null || _priceOptions$find === void 0 ? void 0 : _priceOptions$find.name;
52
- const [searchFocused, setSearchFocused] = (0, _react.useState)(false);
53
- const isMobile = (0, _material.useMediaQuery)(theme => theme.breakpoints.down('md'));
54
- const showFullSearch = !baseSearch || searchFocused || isMobile || (filters === null || filters === void 0 || (_filters$keyword = filters.keyword) === null || _filters$keyword === void 0 ? void 0 : _filters$keyword.length);
55
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
56
- display: "flex",
57
- alignItems: "flex-start",
58
- height: "100%",
59
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Hidden, {
60
- mdDown: true,
61
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_aside.default, {})
62
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(StyledMin, {
63
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(FilterContainer, {
64
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
65
- className: "filter-bar",
66
- display: "flex",
67
- alignItems: "center",
68
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("form", {
69
- className: "search-form",
70
- style: showFullSearch ? {
71
- flex: 1,
72
- width: '100%'
73
- } : {},
74
- onSubmit: e => {
75
- e.preventDefault();
76
- e.stopPropagation();
77
- },
78
- onFocus: () => {
79
- setSearchFocused(true);
80
- },
81
- onBlur: () => {
82
- setSearchFocused(false);
83
- },
84
- children: baseSearch ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_baseSearch.default, {
85
- className: "bl-search-container",
86
- placeholder: t('common.searchStore')
87
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_autocomplete.default, {
88
- onSelect: handleSearchSelect,
89
- wrapChildren: wrapChildren
90
- })
91
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
92
- mt: 0,
93
- ml: "16px",
94
- className: "filter-container",
95
- display: "flex",
96
- alignItems: "center",
97
- children: [!isMobile && showResourcesSwitch && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
98
- ml: 1,
99
- mr: 1,
100
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_showResourcesSwitch.default, {
101
- t: t
102
- })
103
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Hidden, {
104
- mdUp: true,
105
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.FilterIcon, {})
106
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_customSelect.default, {
107
- value: filters.sortBy,
108
- options: sortOptions,
109
- title: sortLocale,
110
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Sort.default, {}),
111
- onChange: v => {
112
- handleSort(v);
113
- }
114
- })]
115
- })]
116
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
117
- display: "flex",
118
- flexWrap: "wrap",
119
- alignItems: "center",
120
- mb: "16px",
121
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.CustomChip, {
122
- label: developerName,
123
- icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Face.default, {}),
124
- onDelete: () => {
125
- handleDeveloper(null);
126
- }
127
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.CustomChip, {
128
- label: categoryLocale,
129
- onDelete: () => {
130
- handleCategory(null);
131
- }
132
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.CustomChip, {
133
- label: priceLocale,
134
- onDelete: () => {
135
- handlePrice(null);
136
- }
137
- }), resourceType && /*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.CustomChip, {
138
- label: "".concat(t('common.resourceType'), ": ").concat(resourceType)
139
- })]
140
- })]
141
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactErrorBoundary.ErrorBoundary, {
142
- FallbackComponent: _ErrorBoundary.ErrorFallback,
143
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
144
- style: {
145
- position: 'relative',
146
- flex: 1,
147
- overflow: 'auto'
148
- },
149
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_list.default, {
150
- blocklets: blockletList
151
- })
152
- })
153
- })]
154
- })]
155
- });
156
- }
157
- const StyledMin = (0, _Theme.styled)('main')(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n flex: 1;\n width: 100%;\n height: 100%;\n .filter-bar {\n justify-content: space-between;\n margin-bottom: ", ";\n }\n .sort-button {\n white-space: nowrap;\n }\n .bl-search-container {\n margin-left: 0px;\n }\n .filter-container {\n display: flex;\n justify-content: flex-end;\n }\n @media (max-width: ", "px) {\n .search-form {\n flex: 1;\n }\n .bl-search-container {\n width: 100%;\n margin-bottom: ", ";\n }\n .filter-container {\n margin-left: 0;\n display: flex;\n justify-content: flex-start;\n }\n .filter-bar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n }\n @media (max-width: ", "px) {\n .sort-button {\n font-size: 12px;\n }\n }\n"])), props => props.theme.spacing(2), props => props.theme.breakpoints.values.md, props => props.theme.spacing(2), props => props.theme.breakpoints.values.md);
158
- const FilterContainer = (0, _Theme.styled)('div')(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: sticky;\n top: 0;\n z-index: 9;\n background-color: white;\n"])));
159
- var _default = exports.default = ListBase;
@@ -1,47 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _Theme = require("@arcblock/ux/lib/Theme");
8
- var _filter = require("../contexts/filter");
9
- var _filter2 = require("./filter");
10
- var _jsxRuntime = require("react/jsx-runtime");
11
- var _templateObject; // import styled from '@emotion/styled';
12
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
13
- function Aside() {
14
- const {
15
- selectedCategory,
16
- handleCategory,
17
- t,
18
- handlePrice,
19
- filters,
20
- categoryOptions,
21
- priceOptions
22
- } = (0, _filter.useFilterContext)();
23
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(StyledAside, {
24
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
25
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.FilterGroup, {
26
- title: t('common.price'),
27
- options: priceOptions,
28
- value: filters.price,
29
- onChange: handlePrice
30
- })
31
- }), categoryOptions.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
32
- style: {
33
- marginTop: '16px'
34
- },
35
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_filter2.FilterGroup, {
36
- title: t('common.category'),
37
- options: categoryOptions,
38
- value: selectedCategory,
39
- onChange: handleCategory
40
- })
41
- })]
42
- });
43
- }
44
- const StyledAside = (0, _Theme.styled)('aside')(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 220px;\n margin-right: ", ";\n height: 100%;\n position: sticky;\n top: 0;\n overflow-y: auto;\n z-index: auto;\n"])), props => props.theme.spacing(2));
45
- Aside.propTypes = {};
46
- Aside.defaultProps = {};
47
- var _default = exports.default = Aside;
@@ -1,245 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = Autocomplete;
7
- var _react = require("react");
8
- var _propTypes = _interopRequireDefault(require("prop-types"));
9
- var _client = require("react-dom/client");
10
- var _autocompleteJs = require("@algolia/autocomplete-js");
11
- var _reactHotkeysHook = require("react-hotkeys-hook");
12
- var _react2 = require("@emotion/react");
13
- var _urlJoin = _interopRequireDefault(require("url-join"));
14
- var _constant = _interopRequireDefault(require("../../libs/constant"));
15
- var _utils = require("../../libs/utils");
16
- var _filter = require("../../contexts/filter");
17
- var _jsxRuntime = require("react/jsx-runtime");
18
- var _templateObject;
19
- const _excluded = ["query", "state"];
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
22
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
25
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
26
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
27
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
28
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } } return target; }
29
- function Autocomplete(_ref) {
30
- let {
31
- onSelect,
32
- wrapChildren
33
- } = _ref;
34
- const containerRef = (0, _react.useRef)(null);
35
- const panelRootRef = (0, _react.useRef)(null);
36
- const rootRef = (0, _react.useRef)(null);
37
- const {
38
- storeApi,
39
- blockletRender,
40
- filters,
41
- endpoint,
42
- handleKeyword,
43
- t
44
- } = (0, _filter.useFilterContext)();
45
- const getBlocklets = async params => {
46
- const {
47
- data
48
- } = await storeApi.get(_constant.default.blockletsPath, {
49
- params
50
- });
51
- const blocklets = data.dataList || [];
52
- // 头部插入的一条 item 用于展示 `点击展开 xx条 结果`,如果没有blocklet 返回,不展示
53
- if (blocklets.length > 0) {
54
- blocklets.unshift({
55
- type: 'more-result',
56
- total: data.total || 0
57
- });
58
- }
59
- return blocklets;
60
- };
61
- const onSubmit = autocompleteState => {
62
- handleKeyword(autocompleteState.state.query);
63
- autocompleteState.setIsOpen(false);
64
- };
65
- const setFocus = () => {
66
- if (containerRef.current) {
67
- // see: https://discourse.algolia.com/t/autocomplete-focus-input-field/4019/5
68
- setTimeout(() => {
69
- const input = containerRef.current.querySelector('input.bl-autocomplete-input');
70
- if (input) {
71
- input.focus();
72
- }
73
- });
74
- }
75
- };
76
- const onReset = autocompleteState => {
77
- autocompleteState.setIsOpen(false);
78
- setFocus();
79
- };
80
- const onStateChange = _ref2 => {
81
- let {
82
- prevState,
83
- state
84
- } = _ref2;
85
- // 当搜索框中的值清空时, 更新页面中的搜索结果
86
- if (prevState.query !== state.query) {
87
- if (!state.query) {
88
- handleKeyword();
89
- }
90
- }
91
- };
92
- (0, _reactHotkeysHook.useHotkeys)('ctrl + k, command + k', e => {
93
- e.stopPropagation();
94
- e.preventDefault();
95
- setFocus();
96
- return false;
97
- }, {
98
- enableOnTags: ['INPUT']
99
- });
100
- (0, _react.useEffect)(() => {
101
- setFocus();
102
- }, [endpoint]);
103
- (0, _react.useEffect)(() => {
104
- if (!containerRef.current) {
105
- return undefined;
106
- }
107
- const search = (0, _autocompleteJs.autocomplete)({
108
- container: containerRef.current,
109
- renderer: {
110
- createElement: _react.createElement,
111
- Fragment: _react.Fragment,
112
- render: () => {}
113
- },
114
- render(_ref3, root) {
115
- let {
116
- children
117
- } = _ref3;
118
- if (!panelRootRef.current || rootRef.current !== root) {
119
- var _panelRootRef$current;
120
- rootRef.current = root;
121
- (_panelRootRef$current = panelRootRef.current) === null || _panelRootRef$current === void 0 || _panelRootRef$current.unmount();
122
- panelRootRef.current = (0, _client.createRoot)(root);
123
- }
124
- panelRootRef.current.render(wrapChildren(children));
125
- },
126
- autoFocus: true,
127
- openOnFocus: false,
128
- classNames: {
129
- panel: 'bl-autocomplete-panel',
130
- label: 'bl-autocomplete-label',
131
- form: 'bl-autocomplete-form',
132
- input: 'bl-autocomplete-input',
133
- clearButton: 'bl-autocomplete-clear',
134
- detachedCancelButton: 'bl-autocomplete-detached-cancel',
135
- detachedContainer: 'bl-autocomplete-detached-container'
136
- },
137
- translations: {
138
- clearButtonTitle: t('common.clear'),
139
- detachedCancelButtonText: t('common.cancel'),
140
- submitButtonTitle: t('common.search'),
141
- detachedSearchButtonTitle: t('common.search')
142
- },
143
- placeholder: t('common.searchStore'),
144
- initialState: {
145
- query: filters.keyword
146
- },
147
- onStateChange(autocompleteState) {
148
- onStateChange(autocompleteState);
149
- },
150
- onSubmit,
151
- onReset(autocompleteState) {
152
- onReset(autocompleteState);
153
- },
154
- getSources(_ref4) {
155
- let {
156
- query,
157
- state
158
- } = _ref4,
159
- setters = _objectWithoutProperties(_ref4, _excluded);
160
- const params = _objectSpread(_objectSpread({}, filters), {}, {
161
- sortBy: _constant.default[filters.sortBy],
162
- page: 1,
163
- pageSize: 10,
164
- keyword: query
165
- });
166
- return (0, _utils.debounced)([{
167
- sourceId: 'blocklets',
168
- getItems() {
169
- return getBlocklets(params);
170
- },
171
- // 选中后填充 搜索框中值
172
- getItemInputValue(_ref5) {
173
- let {
174
- item
175
- } = _ref5;
176
- if (item.type === 'more-result') {
177
- return query;
178
- }
179
- return item.title;
180
- },
181
- // 选中或者点击自动完成列表中的 item 时触发
182
- onSelect(_ref6) {
183
- let {
184
- event,
185
- item
186
- } = _ref6;
187
- if (item.type === 'more-result') {
188
- setters.setIsOpen(false);
189
- return handleKeyword(query);
190
- }
191
- if (event.type === 'keydown') {
192
- return handleKeyword(item.title);
193
- }
194
- return onSelect({
195
- blocklet: item,
196
- detailUrl: (0, _urlJoin.default)(endpoint, "/blocklets/".concat(item.did)),
197
- storeUrl: endpoint
198
- });
199
- },
200
- templates: {
201
- item(_ref7) {
202
- let {
203
- item
204
- } = _ref7;
205
- if (item.type === 'more-result') {
206
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
207
- children: t('autocomplete.expandResult', {
208
- name: query,
209
- number: item.total.toLocaleString()
210
- })
211
- });
212
- }
213
- return blockletRender({
214
- blocklet: item,
215
- autocompleteSetters: setters
216
- });
217
- },
218
- noResults() {
219
- return t('blocklet.noResults');
220
- }
221
- }
222
- }]);
223
- }
224
- });
225
- return () => {
226
- search.destroy();
227
- };
228
- // eslint-disable-next-line react-hooks/exhaustive-deps
229
- }, [filters, blockletRender]);
230
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
231
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.Global, {
232
- styles: (0, _react2.css)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .bl-autocomplete-detached-container {\n .bl-autocomplete-detached-cancel {\n white-space: nowrap;\n }\n }\n "])))
233
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
234
- className: "bl-search-container",
235
- ref: containerRef
236
- })]
237
- });
238
- }
239
- Autocomplete.propTypes = {
240
- onSelect: _propTypes.default.func.isRequired,
241
- wrapChildren: _propTypes.default.func
242
- };
243
- Autocomplete.defaultProps = {
244
- wrapChildren: children => children
245
- };