@blocklet/list 0.8.6
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/README.md +0 -0
- package/lib/assets/locale.js +78 -0
- package/lib/base.js +131 -0
- package/lib/components/aside.js +65 -0
- package/lib/components/button.js +64 -0
- package/lib/components/categories.js +145 -0
- package/lib/components/custom-select.js +188 -0
- package/lib/components/empty.js +88 -0
- package/lib/components/filter-author.js +64 -0
- package/lib/components/list.js +132 -0
- package/lib/components/search.js +99 -0
- package/lib/contexts/store.js +333 -0
- package/lib/hooks/page-state.js +69 -0
- package/lib/index.js +33 -0
- package/lib/tools/utils.js +125 -0
- package/package.json +66 -0
- package/src/assets/locale.js +72 -0
- package/src/base.js +148 -0
- package/src/components/aside.js +91 -0
- package/src/components/button.js +35 -0
- package/src/components/categories.js +111 -0
- package/src/components/custom-select.js +207 -0
- package/src/components/empty.js +57 -0
- package/src/components/filter-author.js +39 -0
- package/src/components/list.js +117 -0
- package/src/components/search.js +93 -0
- package/src/contexts/store.js +250 -0
- package/src/hooks/page-state.js +53 -0
- package/src/index.js +27 -0
- package/src/tools/utils.js +97 -0
package/README.md
ADDED
|
File without changes
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
const flat = require('flat');
|
|
9
|
+
|
|
10
|
+
const en = {
|
|
11
|
+
common: {
|
|
12
|
+
searchStore: 'Search the store',
|
|
13
|
+
price: 'Price',
|
|
14
|
+
category: 'Category'
|
|
15
|
+
},
|
|
16
|
+
sort: {
|
|
17
|
+
sort: 'Sort',
|
|
18
|
+
nameDescend: 'Name Descending',
|
|
19
|
+
nameAscend: 'Name Ascending',
|
|
20
|
+
popularity: 'Most Popular',
|
|
21
|
+
lastPublished: 'Latest Published'
|
|
22
|
+
},
|
|
23
|
+
category: {
|
|
24
|
+
all: 'All',
|
|
25
|
+
placeholder: 'Category name',
|
|
26
|
+
helperText: 'Please select a category'
|
|
27
|
+
},
|
|
28
|
+
blocklet: {
|
|
29
|
+
noResults: 'No Blocklets',
|
|
30
|
+
payment: 'Paid Blocklets',
|
|
31
|
+
free: 'Fee Blocklets',
|
|
32
|
+
emptyTip: 'Tips:',
|
|
33
|
+
filterTip: 'Appropriately reduce the filter conditions',
|
|
34
|
+
keywordTip: 'Try other keywords',
|
|
35
|
+
owner: 'Blocklets from {name}',
|
|
36
|
+
noBlockletPart1: 'No Blocklets associated with"',
|
|
37
|
+
noBlockletPart2: '"were found',
|
|
38
|
+
noCategoryResults1: 'No "',
|
|
39
|
+
noCategoryResults2: '" Blocklets'
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const zh = {
|
|
43
|
+
common: {
|
|
44
|
+
searchStore: '搜索商店内应用',
|
|
45
|
+
price: '价格',
|
|
46
|
+
category: '类别'
|
|
47
|
+
},
|
|
48
|
+
sort: {
|
|
49
|
+
sort: '排序',
|
|
50
|
+
nameDescend: '名称降序',
|
|
51
|
+
nameAscend: '名称升序',
|
|
52
|
+
popularity: '最热门',
|
|
53
|
+
lastPublished: '最新发布'
|
|
54
|
+
},
|
|
55
|
+
category: {
|
|
56
|
+
all: '全部',
|
|
57
|
+
placeholder: '分类名称',
|
|
58
|
+
helperText: '请选择分类'
|
|
59
|
+
},
|
|
60
|
+
blocklet: {
|
|
61
|
+
noResults: '暂无应用',
|
|
62
|
+
free: '免费应用',
|
|
63
|
+
payment: '付费应用',
|
|
64
|
+
emptyTip: '建议:',
|
|
65
|
+
filterTip: '适当减少筛选条件',
|
|
66
|
+
keywordTip: '尝试其他关键字',
|
|
67
|
+
owner: '来自 {name} 的 Blocklets',
|
|
68
|
+
noBlockletPart1: '没有找到与"',
|
|
69
|
+
noBlockletPart2: '"相关的 Blocklets',
|
|
70
|
+
noCategoryResults1: '无 "',
|
|
71
|
+
noCategoryResults2: '" 类别的 Blocklets'
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
var _default = {
|
|
75
|
+
en: flat(en),
|
|
76
|
+
zh: flat(zh)
|
|
77
|
+
};
|
|
78
|
+
exports.default = _default;
|
package/lib/base.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _Sort = _interopRequireDefault(require("mdi-material-ui/Sort"));
|
|
13
|
+
|
|
14
|
+
var _FilterList = _interopRequireDefault(require("@mui/icons-material/FilterList"));
|
|
15
|
+
|
|
16
|
+
var _material = require("@mui/material");
|
|
17
|
+
|
|
18
|
+
var _store = require("./contexts/store");
|
|
19
|
+
|
|
20
|
+
var _customSelect = _interopRequireDefault(require("./components/custom-select"));
|
|
21
|
+
|
|
22
|
+
var _filterAuthor = _interopRequireDefault(require("./components/filter-author"));
|
|
23
|
+
|
|
24
|
+
var _utils = require("./tools/utils");
|
|
25
|
+
|
|
26
|
+
var _list = _interopRequireDefault(require("./components/list"));
|
|
27
|
+
|
|
28
|
+
var _aside = _interopRequireDefault(require("./components/aside"));
|
|
29
|
+
|
|
30
|
+
var _search = _interopRequireDefault(require("./components/search"));
|
|
31
|
+
|
|
32
|
+
var _categories = require("./components/categories");
|
|
33
|
+
|
|
34
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
35
|
+
|
|
36
|
+
const ListBase = () => {
|
|
37
|
+
var _getSortOptions$find, _getPrices$find;
|
|
38
|
+
|
|
39
|
+
const searchStore = (0, _store.useSearchContext)();
|
|
40
|
+
const {
|
|
41
|
+
sortParams,
|
|
42
|
+
history,
|
|
43
|
+
blockletList,
|
|
44
|
+
queryParams,
|
|
45
|
+
developerName,
|
|
46
|
+
handleSort,
|
|
47
|
+
t
|
|
48
|
+
} = searchStore;
|
|
49
|
+
return /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
50
|
+
display: "flex",
|
|
51
|
+
alignItems: "flex-start",
|
|
52
|
+
height: "100%"
|
|
53
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Hidden, {
|
|
54
|
+
mdDown: true
|
|
55
|
+
}, /*#__PURE__*/_react.default.createElement(_aside.default, null)), /*#__PURE__*/_react.default.createElement(StyledMin, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
56
|
+
className: "marketplace-header",
|
|
57
|
+
display: "flex",
|
|
58
|
+
alignItems: "center"
|
|
59
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Hidden, {
|
|
60
|
+
mdDown: true
|
|
61
|
+
}, !!queryParams.developer && /*#__PURE__*/_react.default.createElement(_filterAuthor.default, {
|
|
62
|
+
user: developerName,
|
|
63
|
+
deleteUserTag: () => {
|
|
64
|
+
history.push('/');
|
|
65
|
+
}
|
|
66
|
+
})), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
67
|
+
mt: 0,
|
|
68
|
+
className: "searchContainer"
|
|
69
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Hidden, {
|
|
70
|
+
mdUp: true
|
|
71
|
+
}, /*#__PURE__*/_react.default.createElement(StyledSearch, {
|
|
72
|
+
className: "search",
|
|
73
|
+
placeholder: t('common.searchStore')
|
|
74
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
75
|
+
mt: 0,
|
|
76
|
+
ml: "10px",
|
|
77
|
+
className: "filterContainer"
|
|
78
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Hidden, {
|
|
79
|
+
mdUp: true
|
|
80
|
+
}, /*#__PURE__*/_react.default.createElement(_categories.CategorySelect, null)), /*#__PURE__*/_react.default.createElement(_customSelect.default, {
|
|
81
|
+
value: sortParams.sort,
|
|
82
|
+
options: (0, _utils.getSortOptions)(t),
|
|
83
|
+
title: ((_getSortOptions$find = (0, _utils.getSortOptions)(t).find(f => f.value === sortParams.sort)) === null || _getSortOptions$find === void 0 ? void 0 : _getSortOptions$find.name) || t('sort.sort'),
|
|
84
|
+
icon: /*#__PURE__*/_react.default.createElement(_material.SvgIcon, {
|
|
85
|
+
component: _Sort.default
|
|
86
|
+
}),
|
|
87
|
+
onChange: v => {
|
|
88
|
+
handleSort(v);
|
|
89
|
+
}
|
|
90
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.Hidden, {
|
|
91
|
+
mdUp: true
|
|
92
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
93
|
+
display: "flex",
|
|
94
|
+
flexWrap: "wrap",
|
|
95
|
+
alignItems: "center",
|
|
96
|
+
justifyContent: queryParams.developer ? 'space-between' : 'flex-end'
|
|
97
|
+
}, !!queryParams.developer && /*#__PURE__*/_react.default.createElement(_filterAuthor.default, {
|
|
98
|
+
user: developerName,
|
|
99
|
+
deleteUserTag: () => {
|
|
100
|
+
history.push('/');
|
|
101
|
+
},
|
|
102
|
+
style: {
|
|
103
|
+
marginBottom: '16px'
|
|
104
|
+
}
|
|
105
|
+
}), /*#__PURE__*/_react.default.createElement(_customSelect.default, {
|
|
106
|
+
value: queryParams.price,
|
|
107
|
+
icon: /*#__PURE__*/_react.default.createElement(_FilterList.default, null),
|
|
108
|
+
options: (0, _utils.getPrices)(t),
|
|
109
|
+
title: ((_getPrices$find = (0, _utils.getPrices)(t).find(f => f.value === queryParams.price)) === null || _getPrices$find === void 0 ? void 0 : _getPrices$find.name) || t('common.price'),
|
|
110
|
+
onChange: v => {
|
|
111
|
+
searchStore.handlePriceFilter(v);
|
|
112
|
+
},
|
|
113
|
+
style: {
|
|
114
|
+
marginBottom: '16px'
|
|
115
|
+
}
|
|
116
|
+
}))), /*#__PURE__*/_react.default.createElement(_list.default, {
|
|
117
|
+
blocklets: blockletList
|
|
118
|
+
})));
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const StyledMin = _styledComponents.default.main.withConfig({
|
|
122
|
+
displayName: "base__StyledMin",
|
|
123
|
+
componentId: "sc-wumzlv-0"
|
|
124
|
+
})(["flex:1;width:100%;min-width:0;.marketplace-header{justify-content:space-between;margin-bottom:20px;}.sort-button{white-space:nowrap;}.search{margin-left:0px;}@media (max-width:", "px){.searchContainer{flex:1;}.search{width:100%;}.filterContainer{flex:1;display:flex;justify-content:flex-end;}}@media (max-width:750px){.searchContainer{width:100%;}.filterContainer{width:100%;margin-left:0;display:flex;justify-content:space-between;}.search{margin-bottom:20px;width:100%;}.marketplace-header{display:flex;flex-direction:column;align-items:flex-start;}}@media (max-width:", "px){.sort-button{font-size:12px;}}"], props => props.theme.breakpoints.values.md, props => props.theme.breakpoints.values.md);
|
|
125
|
+
|
|
126
|
+
const StyledSearch = (0, _styledComponents.default)(_search.default).withConfig({
|
|
127
|
+
displayName: "base__StyledSearch",
|
|
128
|
+
componentId: "sc-wumzlv-1"
|
|
129
|
+
})(["background-color:", ";"], props => props.theme.palette.grey[50]);
|
|
130
|
+
var _default = ListBase;
|
|
131
|
+
exports.default = _default;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _material = require("@mui/material");
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _store = require("../contexts/store");
|
|
15
|
+
|
|
16
|
+
var _utils = require("../tools/utils");
|
|
17
|
+
|
|
18
|
+
var _search = _interopRequireDefault(require("./search"));
|
|
19
|
+
|
|
20
|
+
var _categories = require("./categories");
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
const Aside = () => {
|
|
25
|
+
const searchStore = (0, _store.useSearchContext)();
|
|
26
|
+
const {
|
|
27
|
+
queryParams,
|
|
28
|
+
handlePriceFilter,
|
|
29
|
+
t
|
|
30
|
+
} = searchStore;
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(StyledAside, null, /*#__PURE__*/_react.default.createElement(_search.default, {
|
|
32
|
+
placeholder: t('common.searchStore')
|
|
33
|
+
}), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
34
|
+
marginTop: "24px"
|
|
35
|
+
}, (0, _utils.getPrices)(t).map(item => /*#__PURE__*/_react.default.createElement(_material.FormControlLabel, {
|
|
36
|
+
className: "payments",
|
|
37
|
+
key: item.value,
|
|
38
|
+
control: /*#__PURE__*/_react.default.createElement(_material.Checkbox, {
|
|
39
|
+
onClick: () => {
|
|
40
|
+
handlePriceFilter(item.value);
|
|
41
|
+
},
|
|
42
|
+
size: "small",
|
|
43
|
+
checked: item.value === queryParams.price
|
|
44
|
+
}),
|
|
45
|
+
label: item.name
|
|
46
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.List, {
|
|
47
|
+
component: "nav",
|
|
48
|
+
color: "primary"
|
|
49
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
50
|
+
style: {
|
|
51
|
+
border: '1px solid #dadce0',
|
|
52
|
+
margin: '16px 16px'
|
|
53
|
+
}
|
|
54
|
+
}), /*#__PURE__*/_react.default.createElement(_categories.CategoryLinkList, null)));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const StyledAside = _styledComponents.default.aside.withConfig({
|
|
58
|
+
displayName: "aside__StyledAside",
|
|
59
|
+
componentId: "sc-1wkvsv6-0"
|
|
60
|
+
})(["width:220px;margin-right:20px;background-color:", ";height:100%;padding:15px 0px;border-radius:8px;.MuiListItemText-root{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.payments{display:flex;padding:0 16px;.MuiFormControlLabel-label{color:#5f6368;font-size:1rem;}}.MuiListItem-root{text-transform:capitalize;.category > span{font-weight:", ";}>:not(.category){.MuiListItemText-primary{color:#5f6368;}}&.Mui-selected{background-color:", "!important;border-radius:4px;.MuiListItemText-primary{color:#fff !important;}}}@media (max-width:", "px){.MuiListItemText-primary{font-size:16px;}}"], props => props.theme.palette.grey[50], props => props.theme.typography.fontWeightBold, props => props.theme.palette.primary.main, props => props.theme.breakpoints.values.md);
|
|
61
|
+
|
|
62
|
+
Aside.propTypes = {};
|
|
63
|
+
Aside.defaultProps = {};
|
|
64
|
+
var _default = Aside;
|
|
65
|
+
exports.default = _default;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _material = require("@mui/material");
|
|
13
|
+
|
|
14
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
+
|
|
16
|
+
const _excluded = ["children", "rounded", "loading", "disabled"];
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
|
+
|
|
22
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
27
|
+
|
|
28
|
+
const StyledButton = (0, _styledComponents.default)(_material.Button).withConfig({
|
|
29
|
+
displayName: "button__StyledButton",
|
|
30
|
+
componentId: "sc-ia5dpm-0"
|
|
31
|
+
})(["border-radius:4px;"]);
|
|
32
|
+
const Button = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
33
|
+
let {
|
|
34
|
+
children,
|
|
35
|
+
rounded,
|
|
36
|
+
loading,
|
|
37
|
+
disabled
|
|
38
|
+
} = _ref,
|
|
39
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
40
|
+
|
|
41
|
+
return /*#__PURE__*/_react.default.createElement(StyledButton, Object.assign({
|
|
42
|
+
ref: ref,
|
|
43
|
+
disableElevation: true,
|
|
44
|
+
disabled: disabled || loading
|
|
45
|
+
}, rest, {
|
|
46
|
+
startIcon: loading && /*#__PURE__*/_react.default.createElement(_material.CircularProgress, {
|
|
47
|
+
size: "1em"
|
|
48
|
+
})
|
|
49
|
+
}), children);
|
|
50
|
+
});
|
|
51
|
+
Button.propTypes = {
|
|
52
|
+
children: _propTypes.default.any,
|
|
53
|
+
rounded: _propTypes.default.bool,
|
|
54
|
+
loading: _propTypes.default.bool,
|
|
55
|
+
disabled: _propTypes.default.bool
|
|
56
|
+
};
|
|
57
|
+
Button.defaultProps = {
|
|
58
|
+
children: null,
|
|
59
|
+
rounded: false,
|
|
60
|
+
loading: false,
|
|
61
|
+
disabled: false
|
|
62
|
+
};
|
|
63
|
+
var _default = Button;
|
|
64
|
+
exports.default = _default;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CategorySelect = exports.CategoryLinkList = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactRouterDom = require("react-router-dom");
|
|
11
|
+
|
|
12
|
+
var _material = require("@mui/material");
|
|
13
|
+
|
|
14
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
15
|
+
|
|
16
|
+
var _qs = _interopRequireDefault(require("qs"));
|
|
17
|
+
|
|
18
|
+
var _store = require("../contexts/store");
|
|
19
|
+
|
|
20
|
+
var _customSelect = _interopRequireDefault(require("./custom-select"));
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 小屏幕下的分类选择器
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
const CategorySelect = () => {
|
|
35
|
+
var _categoryList$find;
|
|
36
|
+
|
|
37
|
+
const searchStore = (0, _store.useSearchContext)();
|
|
38
|
+
const {
|
|
39
|
+
categoryList,
|
|
40
|
+
selectedCategory,
|
|
41
|
+
handleCategorySelect,
|
|
42
|
+
t,
|
|
43
|
+
locale
|
|
44
|
+
} = searchStore;
|
|
45
|
+
|
|
46
|
+
const itemRender = item => {
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
48
|
+
className: ['my-select__option', selectedCategory !== null && selectedCategory !== void 0 && selectedCategory.includes(item.name) ? 'my-select__option--active' : ''].join(' '),
|
|
49
|
+
key: item._id,
|
|
50
|
+
value: item.name,
|
|
51
|
+
onClick: () => handleCategorySelect(item.name)
|
|
52
|
+
}, item.locales[locale]);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
return /*#__PURE__*/_react.default.createElement(_customSelect.default, {
|
|
56
|
+
value: selectedCategory || 'all',
|
|
57
|
+
options: categoryList,
|
|
58
|
+
title: ((_categoryList$find = categoryList.find(i => i.name === selectedCategory)) === null || _categoryList$find === void 0 ? void 0 : _categoryList$find.locales[locale]) || t('category.all'),
|
|
59
|
+
itemRender: itemRender,
|
|
60
|
+
prepend: /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
61
|
+
value: "all",
|
|
62
|
+
onClick: () => handleCategorySelect('all')
|
|
63
|
+
}, t('category.all'))
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* 宽屏幕下的分类列表
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
exports.CategorySelect = CategorySelect;
|
|
73
|
+
|
|
74
|
+
const CategoryLinkList = () => {
|
|
75
|
+
const {
|
|
76
|
+
t,
|
|
77
|
+
locale
|
|
78
|
+
} = (0, _context.useLocaleContext)();
|
|
79
|
+
const searchStore = (0, _store.useSearchContext)();
|
|
80
|
+
const {
|
|
81
|
+
queryParams,
|
|
82
|
+
categoryList,
|
|
83
|
+
isSearchPage,
|
|
84
|
+
selectedCategory,
|
|
85
|
+
isPageMode,
|
|
86
|
+
handleCategorySelect,
|
|
87
|
+
baseUrl
|
|
88
|
+
} = searchStore;
|
|
89
|
+
let content = null;
|
|
90
|
+
|
|
91
|
+
if (isPageMode) {
|
|
92
|
+
content = /*#__PURE__*/_react.default.createElement("div", {
|
|
93
|
+
style: {
|
|
94
|
+
marginRight: '16px'
|
|
95
|
+
}
|
|
96
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
97
|
+
selected: !selectedCategory,
|
|
98
|
+
button: true,
|
|
99
|
+
component: _reactRouterDom.Link,
|
|
100
|
+
to: !isSearchPage ? baseUrl : "".concat(baseUrl, "search?").concat(_qs.default.stringify(_objectSpread(_objectSpread({}, queryParams), {}, {
|
|
101
|
+
category: undefined
|
|
102
|
+
})))
|
|
103
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
104
|
+
primary: t('category.all')
|
|
105
|
+
})), categoryList.map(item => /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
106
|
+
key: item._id,
|
|
107
|
+
title: item.locales[locale],
|
|
108
|
+
button: true,
|
|
109
|
+
selected: item.name === selectedCategory,
|
|
110
|
+
component: _reactRouterDom.Link,
|
|
111
|
+
to: !isSearchPage ? "".concat(baseUrl, "category/").concat(item.name) : "".concat(baseUrl, "search?").concat(_qs.default.stringify(_objectSpread(_objectSpread({}, queryParams), {}, {
|
|
112
|
+
category: item.name
|
|
113
|
+
})))
|
|
114
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
115
|
+
primary: item.locales[locale]
|
|
116
|
+
}))));
|
|
117
|
+
} else {
|
|
118
|
+
content = /*#__PURE__*/_react.default.createElement("div", {
|
|
119
|
+
style: {
|
|
120
|
+
marginRight: '16px'
|
|
121
|
+
}
|
|
122
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
123
|
+
selected: !selectedCategory,
|
|
124
|
+
button: true,
|
|
125
|
+
onClick: () => handleCategorySelect('all')
|
|
126
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
127
|
+
primary: t('category.all')
|
|
128
|
+
})), categoryList.map(item => /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
129
|
+
key: item._id,
|
|
130
|
+
title: item.locales[locale],
|
|
131
|
+
onClick: () => handleCategorySelect(item.name),
|
|
132
|
+
button: true,
|
|
133
|
+
selected: item.name === selectedCategory
|
|
134
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
135
|
+
primary: item.locales[locale]
|
|
136
|
+
}))));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.ListItem, null, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
140
|
+
className: "category",
|
|
141
|
+
primary: t('common.category')
|
|
142
|
+
})), content);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
exports.CategoryLinkList = CategoryLinkList;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _useTheme = _interopRequireDefault(require("@mui/styles/useTheme"));
|
|
11
|
+
|
|
12
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
|
+
|
|
14
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
|
+
|
|
16
|
+
var _material = require("@mui/material");
|
|
17
|
+
|
|
18
|
+
var _mdiMaterialUi = require("mdi-material-ui");
|
|
19
|
+
|
|
20
|
+
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
21
|
+
|
|
22
|
+
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
23
|
+
|
|
24
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
25
|
+
|
|
26
|
+
var _button = _interopRequireDefault(require("./button"));
|
|
27
|
+
|
|
28
|
+
const _excluded = ["title", "value", "icon", "prepend", "options", "multiple", "onClose", "onShow", "onChange", "onInput", "itemRender"];
|
|
29
|
+
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
|
|
34
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
|
+
|
|
36
|
+
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; }
|
|
37
|
+
|
|
38
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
39
|
+
|
|
40
|
+
const CustomSelect = _ref => {
|
|
41
|
+
let {
|
|
42
|
+
title,
|
|
43
|
+
value,
|
|
44
|
+
icon,
|
|
45
|
+
prepend,
|
|
46
|
+
options,
|
|
47
|
+
multiple,
|
|
48
|
+
onClose,
|
|
49
|
+
onShow,
|
|
50
|
+
onChange,
|
|
51
|
+
onInput,
|
|
52
|
+
itemRender
|
|
53
|
+
} = _ref,
|
|
54
|
+
buttonProps = _objectWithoutProperties(_ref, _excluded);
|
|
55
|
+
|
|
56
|
+
const anchorRef = (0, _react.useRef)(null);
|
|
57
|
+
const theme = (0, _useTheme.default)();
|
|
58
|
+
const [open, setOpen] = (0, _react.useState)(false);
|
|
59
|
+
const [currentValue, setCurrentValue] = value !== null ? (0, _react.useState)(value) : (0, _react.useState)(multiple ? [] : '');
|
|
60
|
+
const isSm = (0, _material.useMediaQuery)(theme.breakpoints.down('sm'));
|
|
61
|
+
(0, _react.useEffect)(() => {
|
|
62
|
+
// eslint-disable-next-line no-nested-ternary
|
|
63
|
+
setCurrentValue(value !== null ? value : multiple ? [] : '');
|
|
64
|
+
}, [value]);
|
|
65
|
+
|
|
66
|
+
function closeMenu() {
|
|
67
|
+
(0, _isEqual.default)(value, currentValue) || onInput(currentValue);
|
|
68
|
+
onClose();
|
|
69
|
+
setOpen(false);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function openMenu() {
|
|
73
|
+
setOpen(true);
|
|
74
|
+
onShow();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function toggle(option) {
|
|
78
|
+
if (multiple) {
|
|
79
|
+
const copyValue = (0, _cloneDeep.default)(currentValue);
|
|
80
|
+
const index = copyValue.indexOf(option.value);
|
|
81
|
+
|
|
82
|
+
if (index >= 0) {
|
|
83
|
+
copyValue.splice(index, 1);
|
|
84
|
+
} else {
|
|
85
|
+
copyValue.push(option.value);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
setCurrentValue(copyValue);
|
|
89
|
+
onChange(copyValue);
|
|
90
|
+
} else {
|
|
91
|
+
setCurrentValue(option.value);
|
|
92
|
+
onChange(option.value);
|
|
93
|
+
|
|
94
|
+
if (isSm) {
|
|
95
|
+
closeMenu();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function containsValue(optionValue) {
|
|
101
|
+
return multiple ? currentValue.includes(optionValue) : optionValue === currentValue;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(StyledButton, Object.assign({
|
|
105
|
+
ref: anchorRef,
|
|
106
|
+
onClick: openMenu,
|
|
107
|
+
variant: "outlined",
|
|
108
|
+
size: "small",
|
|
109
|
+
className: ['my-select__selector', (0, _isEmpty.default)(currentValue) ? '' : 'my-select__selector--active'].join(' ')
|
|
110
|
+
}, buttonProps), /*#__PURE__*/_react.default.createElement("div", {
|
|
111
|
+
className: "my-select__icon"
|
|
112
|
+
}, icon), title, multiple && currentValue.length > 1 && " (".concat(currentValue.length, ")"), /*#__PURE__*/_react.default.createElement(_material.SvgIcon, {
|
|
113
|
+
className: "my-select__arrowdown",
|
|
114
|
+
component: _mdiMaterialUi.ChevronDown,
|
|
115
|
+
fontSize: "small"
|
|
116
|
+
})), /*#__PURE__*/_react.default.createElement(_material.Popper, {
|
|
117
|
+
open: open,
|
|
118
|
+
anchorEl: anchorRef.current,
|
|
119
|
+
transition: true,
|
|
120
|
+
style: {
|
|
121
|
+
zIndex: '1'
|
|
122
|
+
}
|
|
123
|
+
}, _ref2 => {
|
|
124
|
+
let {
|
|
125
|
+
TransitionProps,
|
|
126
|
+
placement
|
|
127
|
+
} = _ref2;
|
|
128
|
+
return /*#__PURE__*/_react.default.createElement(_material.Grow, Object.assign({}, TransitionProps, {
|
|
129
|
+
style: {
|
|
130
|
+
transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom'
|
|
131
|
+
}
|
|
132
|
+
}), /*#__PURE__*/_react.default.createElement(_material.Paper, null, /*#__PURE__*/_react.default.createElement(_material.ClickAwayListener, {
|
|
133
|
+
onClickAway: closeMenu
|
|
134
|
+
}, /*#__PURE__*/_react.default.createElement(StyledMenuList, {
|
|
135
|
+
autoFocusItem: open,
|
|
136
|
+
onMouseEnter: openMenu,
|
|
137
|
+
onMouseLeave: closeMenu
|
|
138
|
+
}, prepend, options.map(option => {
|
|
139
|
+
if (itemRender) {
|
|
140
|
+
return itemRender(option);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
144
|
+
key: option.value,
|
|
145
|
+
onClick: () => toggle(option),
|
|
146
|
+
className: ['my-select__option', containsValue(option.value) ? 'my-select__option--active' : ''].join(' ')
|
|
147
|
+
}, multiple && /*#__PURE__*/_react.default.createElement(_material.SvgIcon, {
|
|
148
|
+
component: _mdiMaterialUi.Check,
|
|
149
|
+
className: ['my-select__option__icon', containsValue(option.value) ? 'my-select__option__icon--active' : ''].join(' ')
|
|
150
|
+
}), option.name);
|
|
151
|
+
})))));
|
|
152
|
+
}));
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
CustomSelect.propTypes = {
|
|
156
|
+
options: _propTypes.default.array.isRequired,
|
|
157
|
+
multiple: _propTypes.default.bool,
|
|
158
|
+
value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.array]),
|
|
159
|
+
onShow: _propTypes.default.func,
|
|
160
|
+
onClose: _propTypes.default.func,
|
|
161
|
+
onInput: _propTypes.default.func,
|
|
162
|
+
onChange: _propTypes.default.func,
|
|
163
|
+
itemRender: _propTypes.default.func,
|
|
164
|
+
title: _propTypes.default.string.isRequired,
|
|
165
|
+
icon: _propTypes.default.any,
|
|
166
|
+
prepend: _propTypes.default.any
|
|
167
|
+
};
|
|
168
|
+
CustomSelect.defaultProps = {
|
|
169
|
+
multiple: false,
|
|
170
|
+
value: null,
|
|
171
|
+
icon: null,
|
|
172
|
+
prepend: null,
|
|
173
|
+
itemRender: null,
|
|
174
|
+
onShow: () => {},
|
|
175
|
+
onClose: () => {},
|
|
176
|
+
onInput: () => {},
|
|
177
|
+
onChange: () => {}
|
|
178
|
+
};
|
|
179
|
+
const StyledButton = (0, _styledComponents.default)(_button.default).withConfig({
|
|
180
|
+
displayName: "custom-select__StyledButton",
|
|
181
|
+
componentId: "sc-v6xs6u-0"
|
|
182
|
+
})(["border:1px solid #f0f0f0;padding:6px 8px 6px 12px;font-weight:", ";font-size:16px;color:#666;line-height:1;text-transform:none;min-width:100px;& + &{margin-left:10px;}&.my-select__selector--active{&,.my-select__arrowdown,.my-select__icon svg{color:", ";}}.my-select__arrowdown{color:#999;font-size:16px;margin-left:6px;}.my-select__icon{font-size:0;svg{color:#999;font-size:18px;margin-right:3px;}}"], props => props.theme.typography.fontWeightBold, props => props.theme.palette.primary.main);
|
|
183
|
+
const StyledMenuList = (0, _styledComponents.default)(_material.MenuList).withConfig({
|
|
184
|
+
displayName: "custom-select__StyledMenuList",
|
|
185
|
+
componentId: "sc-v6xs6u-1"
|
|
186
|
+
})([".my-select__option__icon{color:transparent;font-size:16px;margin:0 3px 0 -5px;}.my-select__option{font-size:16px;color:#999;}.my-select__option--active{&,.my-select__option__icon{color:", ";}}"], props => props.theme.palette.primary.main);
|
|
187
|
+
var _default = CustomSelect;
|
|
188
|
+
exports.default = _default;
|