@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/lib/index.es.js +460 -418
- package/package.json +8 -12
- package/lib/assets/locale.js +0 -92
- package/lib/base.js +0 -159
- package/lib/components/aside.js +0 -47
- package/lib/components/autocomplete/index.js +0 -245
- package/lib/components/base-search.js +0 -85
- package/lib/components/custom-select/button.js +0 -55
- package/lib/components/custom-select/custom-select.js +0 -139
- package/lib/components/custom-select/index.js +0 -9
- package/lib/components/filter/custom-chip.js +0 -51
- package/lib/components/filter/group.js +0 -48
- package/lib/components/filter/icon.js +0 -78
- package/lib/components/filter/index.js +0 -27
- package/lib/components/list/column-sizer.js +0 -40
- package/lib/components/list/empty.js +0 -84
- package/lib/components/list/index.js +0 -139
- package/lib/components/show-resources-switch.js +0 -43
- package/lib/contexts/filter.js +0 -253
- package/lib/index.js +0 -36
- package/lib/libs/constant.js +0 -19
- package/lib/libs/prop-types.js +0 -44
- package/lib/libs/utils.js +0 -127
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = BlockletList;
|
|
7
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
8
|
-
var _Theme = require("@arcblock/ux/lib/Theme");
|
|
9
|
-
var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
|
|
10
|
-
var _material = require("@mui/material");
|
|
11
|
-
var _reactInfiniteScrollHook = _interopRequireDefault(require("react-infinite-scroll-hook"));
|
|
12
|
-
var _ErrorBoundary = require("@arcblock/ux/lib/ErrorBoundary");
|
|
13
|
-
var _empty = require("./empty");
|
|
14
|
-
var _filter = require("../../contexts/filter");
|
|
15
|
-
var _columnSizer = _interopRequireDefault(require("./column-sizer"));
|
|
16
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
-
var _templateObject, _templateObject2, _templateObject3;
|
|
18
|
-
const _excluded = ["blocklets"];
|
|
19
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
21
|
-
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; }
|
|
22
|
-
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; }
|
|
23
|
-
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; }
|
|
24
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
25
|
-
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); }
|
|
26
|
-
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; }
|
|
27
|
-
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; }
|
|
28
|
-
function BlockletList(_ref) {
|
|
29
|
-
let {
|
|
30
|
-
blocklets
|
|
31
|
-
} = _ref,
|
|
32
|
-
rest = _objectWithoutProperties(_ref, _excluded);
|
|
33
|
-
const {
|
|
34
|
-
blockletRender,
|
|
35
|
-
errors,
|
|
36
|
-
loadings,
|
|
37
|
-
selectedCategory,
|
|
38
|
-
getCategoryLocale,
|
|
39
|
-
filters,
|
|
40
|
-
t,
|
|
41
|
-
hasNextPage,
|
|
42
|
-
loadMore,
|
|
43
|
-
endpoint
|
|
44
|
-
} = (0, _filter.useFilterContext)();
|
|
45
|
-
const showFilterTip = !!selectedCategory || !!filters.price;
|
|
46
|
-
const [sentryRef] = (0, _reactInfiniteScrollHook.default)({
|
|
47
|
-
loading: loadings.fetchBlockletsLoading || loadings.loadingMore,
|
|
48
|
-
hasNextPage,
|
|
49
|
-
onLoadMore: loadMore
|
|
50
|
-
});
|
|
51
|
-
if (errors.fetchBlockletsError) {
|
|
52
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ErrorBoundary.ErrorFallback, {
|
|
53
|
-
error: new Error("Failed to fetch blocklets from ".concat(endpoint, ": ").concat(errors.fetchBlockletsError.message))
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
if (loadings.fetchBlockletsLoading) {
|
|
57
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
|
|
58
|
-
height: 60,
|
|
59
|
-
display: "flex",
|
|
60
|
-
alignItems: "center",
|
|
61
|
-
justifyContent: "center",
|
|
62
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.CircularProgress, {})
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
if (filters.keyword && showFilterTip && blocklets.length === 0) {
|
|
66
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(CustomEmpty, {
|
|
67
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.EmptyTitle, {
|
|
68
|
-
primaryStart: t('blocklet.noBlockletPart1'),
|
|
69
|
-
primaryEnd: t('blocklet.noBlockletPart2'),
|
|
70
|
-
filter: filters.keyword
|
|
71
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.NoResultsTips, {
|
|
72
|
-
keywordTip: true,
|
|
73
|
-
filterTip: true
|
|
74
|
-
})]
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
if (filters.keyword && blocklets.length === 0) {
|
|
78
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(CustomEmpty, {
|
|
79
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.EmptyTitle, {
|
|
80
|
-
primaryStart: t('blocklet.noBlockletPart1'),
|
|
81
|
-
primaryEnd: t('blocklet.noBlockletPart2'),
|
|
82
|
-
filter: filters.keyword
|
|
83
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.NoResultsTips, {
|
|
84
|
-
keywordTip: true
|
|
85
|
-
})]
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
if (showFilterTip && blocklets.length === 0) {
|
|
89
|
-
const categoryLocale = getCategoryLocale(selectedCategory);
|
|
90
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(CustomEmpty, {
|
|
91
|
-
children: [categoryLocale ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.EmptyTitle, {
|
|
92
|
-
primaryStart: t('blocklet.noCategoryResults1'),
|
|
93
|
-
primaryEnd: t('blocklet.noCategoryResults2'),
|
|
94
|
-
filter: categoryLocale
|
|
95
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.NoResults, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.NoResultsTips, {
|
|
96
|
-
filterTip: true
|
|
97
|
-
})]
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
if (blocklets.length === 0) {
|
|
101
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(CustomEmpty, {
|
|
102
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_empty.NoResults, {})
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_columnSizer.default, {
|
|
106
|
-
children: (refContainer, columns) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(StyledGrid, _objectSpread(_objectSpread({
|
|
107
|
-
container: true
|
|
108
|
-
}, rest), {}, {
|
|
109
|
-
columns: columns,
|
|
110
|
-
ref: refContainer,
|
|
111
|
-
children: [blocklets.map(blocklet => /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledGridItem, {
|
|
112
|
-
item: true,
|
|
113
|
-
xs: 4,
|
|
114
|
-
"data-blocklet-did": blocklet.did,
|
|
115
|
-
children: blockletRender({
|
|
116
|
-
blocklet,
|
|
117
|
-
blocklets
|
|
118
|
-
})
|
|
119
|
-
}, blocklet.did)), hasNextPage && /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledGridItem, {
|
|
120
|
-
item: true,
|
|
121
|
-
xs: 12,
|
|
122
|
-
ref: sentryRef,
|
|
123
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
|
|
124
|
-
height: 60,
|
|
125
|
-
display: "flex",
|
|
126
|
-
justifyContent: "center",
|
|
127
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.CircularProgress, {})
|
|
128
|
-
})
|
|
129
|
-
})]
|
|
130
|
-
}))
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
BlockletList.propTypes = {
|
|
134
|
-
blocklets: _propTypes.default.array.isRequired
|
|
135
|
-
};
|
|
136
|
-
BlockletList.defaultProps = {};
|
|
137
|
-
const StyledGrid = (0, _Theme.styled)(_material.Grid)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n opacity: ", ";\n &.MuiGrid-root {\n width: 100%;\n margin: 0 -16px;\n }\n"])), props => props.columns > 0 ? 1 : 0);
|
|
138
|
-
const StyledGridItem = (0, _Theme.styled)(_material.Grid)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n @media (max-width: ", "px) {\n &.MuiGrid-item {\n padding-bottom: 0px;\n }\n }\n @media (min-width: ", "px) {\n &.MuiGrid-item {\n margin-bottom: ", ";\n }\n }\n"])), props => props.theme.breakpoints.values.sm, props => props.theme.breakpoints.values.sm, props => props.theme.spacing(2));
|
|
139
|
-
const CustomEmpty = (0, _Theme.styled)(_Empty.default)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n text-align: center;\n .primary {\n color: ", ";\n }\n .tips {\n margin-top: ", ";\n }\n"])), props => props.theme.palette.primary.main, props => props.theme.spacing(1));
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _Switch = _interopRequireDefault(require("@arcblock/ux/lib/Switch"));
|
|
8
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
-
var _material = require("@mui/material");
|
|
10
|
-
var _filter = require("../contexts/filter");
|
|
11
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
function ShowResourcesSwitch(_ref) {
|
|
14
|
-
let {
|
|
15
|
-
t
|
|
16
|
-
} = _ref;
|
|
17
|
-
const {
|
|
18
|
-
filters,
|
|
19
|
-
handleSwitchShowResources
|
|
20
|
-
} = (0, _filter.useFilterContext)();
|
|
21
|
-
const handleChange = () => {
|
|
22
|
-
filters.showResources = !filters.showResources;
|
|
23
|
-
handleSwitchShowResources();
|
|
24
|
-
};
|
|
25
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Switch.default, {
|
|
26
|
-
checked: filters.showResources,
|
|
27
|
-
onChange: handleChange,
|
|
28
|
-
labelProps: {
|
|
29
|
-
label: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
|
|
30
|
-
marginLeft: "8px",
|
|
31
|
-
fontSize: "small",
|
|
32
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
33
|
-
children: t('common.showResources')
|
|
34
|
-
})
|
|
35
|
-
})
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
ShowResourcesSwitch.propTypes = {
|
|
40
|
-
t: _propTypes.default.func.isRequired
|
|
41
|
-
};
|
|
42
|
-
ShowResourcesSwitch.defaultProps = {};
|
|
43
|
-
var _default = exports.default = ShowResourcesSwitch;
|
package/lib/contexts/filter.js
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.FilterConsumer = void 0;
|
|
7
|
-
exports.FilterProvider = FilterProvider;
|
|
8
|
-
exports.useFilterContext = useFilterContext;
|
|
9
|
-
var _react = require("react");
|
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
-
var _ahooks = require("ahooks");
|
|
12
|
-
var _orderBy = _interopRequireDefault(require("lodash/orderBy"));
|
|
13
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
14
|
-
var _jsonStableStringify = _interopRequireDefault(require("json-stable-stringify"));
|
|
15
|
-
var _utils = require("../libs/utils");
|
|
16
|
-
var _locale = _interopRequireDefault(require("../assets/locale"));
|
|
17
|
-
var _propTypes2 = require("../libs/prop-types");
|
|
18
|
-
var _constant = _interopRequireDefault(require("../libs/constant"));
|
|
19
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
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; }
|
|
22
|
-
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; }
|
|
23
|
-
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; }
|
|
24
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
25
|
-
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); }
|
|
26
|
-
const Filter = /*#__PURE__*/(0, _react.createContext)({});
|
|
27
|
-
const {
|
|
28
|
-
Provider,
|
|
29
|
-
Consumer
|
|
30
|
-
} = Filter;
|
|
31
|
-
exports.FilterConsumer = Consumer;
|
|
32
|
-
function FilterProvider(_ref) {
|
|
33
|
-
let {
|
|
34
|
-
filters,
|
|
35
|
-
children,
|
|
36
|
-
endpoint,
|
|
37
|
-
locale,
|
|
38
|
-
blockletRender,
|
|
39
|
-
onFilterChange,
|
|
40
|
-
onSearchSelect,
|
|
41
|
-
extraFilter,
|
|
42
|
-
wrapChildren,
|
|
43
|
-
baseSearch,
|
|
44
|
-
serverVersion,
|
|
45
|
-
storeVersion,
|
|
46
|
-
fetchCategoryDelay,
|
|
47
|
-
showResourcesSwitch
|
|
48
|
-
} = _ref;
|
|
49
|
-
const requestHeaders = {};
|
|
50
|
-
if (serverVersion) {
|
|
51
|
-
requestHeaders['x-blocklet-server-version'] = serverVersion;
|
|
52
|
-
}
|
|
53
|
-
if (storeVersion) {
|
|
54
|
-
requestHeaders['x-blocklet-store-version'] = storeVersion;
|
|
55
|
-
}
|
|
56
|
-
const storeApi = (0, _react.useMemo)(() => {
|
|
57
|
-
return _axios.default.create({
|
|
58
|
-
baseURL: endpoint,
|
|
59
|
-
headers: requestHeaders
|
|
60
|
-
});
|
|
61
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
-
}, [endpoint]);
|
|
63
|
-
const finalFilters = (0, _react.useMemo)(() => {
|
|
64
|
-
return _objectSpread({
|
|
65
|
-
sortBy: 'popularity',
|
|
66
|
-
sortDirection: 'desc'
|
|
67
|
-
}, filters);
|
|
68
|
-
}, [filters]);
|
|
69
|
-
const selectedCategory = finalFilters.category;
|
|
70
|
-
const paginateState = (0, _ahooks.useReactive)({
|
|
71
|
-
currentPage: _constant.default.currentPage,
|
|
72
|
-
pageSize: (0, _utils.isMobileScreen)() ? _constant.default.mobilePageSize : _constant.default.pageSize,
|
|
73
|
-
defaultCurrentPage: _constant.default.defaultCurrentPage
|
|
74
|
-
});
|
|
75
|
-
const [fetchBlockletsError, setFetchBlockletsError] = (0, _react.useState)(null);
|
|
76
|
-
const {
|
|
77
|
-
data: blockletsState = {
|
|
78
|
-
list: [],
|
|
79
|
-
total: 0
|
|
80
|
-
},
|
|
81
|
-
loading: fetchBlockletsLoading,
|
|
82
|
-
loadMore: _loadMore,
|
|
83
|
-
loadingMore
|
|
84
|
-
} = (0, _ahooks.useInfiniteScroll)(async d => {
|
|
85
|
-
var _d$list;
|
|
86
|
-
const params = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
87
|
-
sortBy: _constant.default[finalFilters.sortBy],
|
|
88
|
-
page: (0, _utils.getCurrentPage)((d === null || d === void 0 || (_d$list = d.list) === null || _d$list === void 0 ? void 0 : _d$list.length) || 0, paginateState.pageSize),
|
|
89
|
-
pageSize: paginateState.pageSize
|
|
90
|
-
});
|
|
91
|
-
setFetchBlockletsError(null);
|
|
92
|
-
const {
|
|
93
|
-
data = {}
|
|
94
|
-
} = await storeApi.get(_constant.default.blockletsPath, {
|
|
95
|
-
params
|
|
96
|
-
});
|
|
97
|
-
return {
|
|
98
|
-
list: (data === null || data === void 0 ? void 0 : data.dataList) || [],
|
|
99
|
-
total: (data === null || data === void 0 ? void 0 : data.total) || 0
|
|
100
|
-
};
|
|
101
|
-
}, {
|
|
102
|
-
isNoMore: d => d ? d.list.length >= d.total : false,
|
|
103
|
-
reloadDeps: [endpoint, (0, _jsonStableStringify.default)(filters)],
|
|
104
|
-
onError: e => {
|
|
105
|
-
setFetchBlockletsError(e);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
const {
|
|
109
|
-
data: allCategories = [],
|
|
110
|
-
error: fetchCategoriesError,
|
|
111
|
-
loading: fetchCategoriesLoading,
|
|
112
|
-
run: fetchCategories
|
|
113
|
-
} = (0, _ahooks.useRequest)(async () => {
|
|
114
|
-
const {
|
|
115
|
-
data
|
|
116
|
-
} = await storeApi.get(_constant.default.categoriesPath);
|
|
117
|
-
return Array.isArray(data) ? data : [];
|
|
118
|
-
}, {
|
|
119
|
-
manual: true
|
|
120
|
-
});
|
|
121
|
-
const categoryList = (0, _react.useMemo)(() => {
|
|
122
|
-
const list = allCategories || [];
|
|
123
|
-
// 分类按照名称排序
|
|
124
|
-
return (0, _orderBy.default)(list, [i => i.name], ['asc']);
|
|
125
|
-
}, [allCategories]);
|
|
126
|
-
const translate = (0, _react.useCallback)((key, data) => {
|
|
127
|
-
// 找不到对应的翻译时,fallback 到英文翻译
|
|
128
|
-
const fallback = _locale.default[locale] ? _locale.default[locale][key] : _locale.default.en[key];
|
|
129
|
-
return (0, _utils.replaceTranslate)(fallback, data);
|
|
130
|
-
}, [locale]);
|
|
131
|
-
const blockletList = (0, _react.useMemo)(() => {
|
|
132
|
-
let blocklets = blockletsState.list || [];
|
|
133
|
-
// 用户传入的过滤函数
|
|
134
|
-
blocklets = extraFilter(blocklets);
|
|
135
|
-
return blocklets;
|
|
136
|
-
}, [blockletsState, extraFilter]);
|
|
137
|
-
const categoryOptions = (0, _react.useMemo)(() => (0, _utils.getCategoryOptions)(categoryList, locale), [categoryList, locale]);
|
|
138
|
-
const priceOptions = (0, _utils.getPrices)(translate);
|
|
139
|
-
const filterStore = {
|
|
140
|
-
errors: {
|
|
141
|
-
fetchBlockletsError,
|
|
142
|
-
fetchCategoriesError
|
|
143
|
-
},
|
|
144
|
-
loadings: {
|
|
145
|
-
fetchBlockletsLoading,
|
|
146
|
-
fetchCategoriesLoading,
|
|
147
|
-
loadingMore
|
|
148
|
-
},
|
|
149
|
-
endpoint,
|
|
150
|
-
blockletList,
|
|
151
|
-
wrapChildren,
|
|
152
|
-
t: translate,
|
|
153
|
-
filters: finalFilters,
|
|
154
|
-
selectedCategory,
|
|
155
|
-
categoryList,
|
|
156
|
-
blockletRender,
|
|
157
|
-
locale,
|
|
158
|
-
categoryOptions,
|
|
159
|
-
priceOptions,
|
|
160
|
-
storeApi,
|
|
161
|
-
baseSearch,
|
|
162
|
-
showResourcesSwitch,
|
|
163
|
-
hasNextPage: blockletsState.list.length < blockletsState.total,
|
|
164
|
-
handleSort: sort => {
|
|
165
|
-
const changeData = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
166
|
-
sortBy: sort,
|
|
167
|
-
sortDirection: sort === 'nameAsc' ? 'asc' : 'desc'
|
|
168
|
-
});
|
|
169
|
-
onFilterChange(changeData);
|
|
170
|
-
},
|
|
171
|
-
handleKeyword: keyWord => {
|
|
172
|
-
const changeData = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
173
|
-
keyword: keyWord || undefined
|
|
174
|
-
});
|
|
175
|
-
onFilterChange(changeData);
|
|
176
|
-
},
|
|
177
|
-
handlePrice: price => {
|
|
178
|
-
const changeData = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
179
|
-
price: price === finalFilters.price ? undefined : price
|
|
180
|
-
});
|
|
181
|
-
onFilterChange(changeData);
|
|
182
|
-
},
|
|
183
|
-
handleCategory: category => {
|
|
184
|
-
let finalCategory = category;
|
|
185
|
-
if (category === 'all' || category === finalFilters.category) {
|
|
186
|
-
finalCategory = undefined;
|
|
187
|
-
}
|
|
188
|
-
const changeData = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
189
|
-
category: finalCategory
|
|
190
|
-
});
|
|
191
|
-
onFilterChange(changeData);
|
|
192
|
-
},
|
|
193
|
-
handleDeveloper: owner => {
|
|
194
|
-
const changeData = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
195
|
-
owner: owner || undefined
|
|
196
|
-
});
|
|
197
|
-
onFilterChange(changeData);
|
|
198
|
-
},
|
|
199
|
-
handlePage: page => {
|
|
200
|
-
const changeData = _objectSpread(_objectSpread({}, finalFilters), {}, {
|
|
201
|
-
currentPage: page
|
|
202
|
-
});
|
|
203
|
-
onFilterChange(changeData);
|
|
204
|
-
},
|
|
205
|
-
handleSwitchShowResources: () => {
|
|
206
|
-
const changeData = _objectSpread({}, finalFilters);
|
|
207
|
-
onFilterChange(changeData);
|
|
208
|
-
},
|
|
209
|
-
loadMore: () => {
|
|
210
|
-
_loadMore();
|
|
211
|
-
},
|
|
212
|
-
getCategoryLocale: category => {
|
|
213
|
-
if (!category) return null;
|
|
214
|
-
let result = null;
|
|
215
|
-
const find = allCategories.find(item => item._id === category);
|
|
216
|
-
if (find) {
|
|
217
|
-
result = find.locales[locale];
|
|
218
|
-
}
|
|
219
|
-
return result;
|
|
220
|
-
},
|
|
221
|
-
get developerName() {
|
|
222
|
-
var _blocklets$find;
|
|
223
|
-
const blocklets = blockletList;
|
|
224
|
-
return ((_blocklets$find = blocklets.find(blocklet => {
|
|
225
|
-
var _blocklet$owner;
|
|
226
|
-
return (blocklet === null || blocklet === void 0 || (_blocklet$owner = blocklet.owner) === null || _blocklet$owner === void 0 ? void 0 : _blocklet$owner.did) === finalFilters.owner;
|
|
227
|
-
})) === null || _blocklets$find === void 0 || (_blocklets$find = _blocklets$find.owner) === null || _blocklets$find === void 0 ? void 0 : _blocklets$find.name) || '';
|
|
228
|
-
},
|
|
229
|
-
handleSearchSelect: onSearchSelect
|
|
230
|
-
};
|
|
231
|
-
(0, _react.useEffect)(() => {
|
|
232
|
-
// sometimes blocklet list can be rendered only before the category is fetched
|
|
233
|
-
setTimeout(() => {
|
|
234
|
-
fetchCategories();
|
|
235
|
-
}, fetchCategoryDelay || 0);
|
|
236
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
237
|
-
}, [endpoint]);
|
|
238
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Provider, {
|
|
239
|
-
value: filterStore,
|
|
240
|
-
children: children
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
FilterProvider.propTypes = _objectSpread(_objectSpread({}, _propTypes2.propTypes), {}, {
|
|
244
|
-
children: _propTypes.default.any.isRequired
|
|
245
|
-
});
|
|
246
|
-
FilterProvider.defaultProps = _propTypes2.defaultProps;
|
|
247
|
-
function useFilterContext() {
|
|
248
|
-
const filterStore = (0, _react.useContext)(Filter);
|
|
249
|
-
if (!filterStore) {
|
|
250
|
-
return {};
|
|
251
|
-
}
|
|
252
|
-
return filterStore;
|
|
253
|
-
}
|
package/lib/index.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = BlockletList;
|
|
7
|
-
var _styles = require("@mui/material/styles");
|
|
8
|
-
var _react = require("@emotion/react");
|
|
9
|
-
var _base = _interopRequireDefault(require("./base"));
|
|
10
|
-
var _filter = require("./contexts/filter");
|
|
11
|
-
var _propTypes = require("./libs/prop-types");
|
|
12
|
-
var _utils = require("./libs/utils");
|
|
13
|
-
require("@algolia/autocomplete-theme-classic/dist/theme.css");
|
|
14
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
-
var _templateObject; // 不知道为什么引入 theme.min.css 话,blocklet-store 打包就会报错
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
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; }
|
|
18
|
-
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; }
|
|
19
|
-
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; }
|
|
20
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
21
|
-
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); }
|
|
22
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
23
|
-
function BlockletList(props) {
|
|
24
|
-
const theme = (0, _styles.useTheme)();
|
|
25
|
-
const primaryColor = (0, _utils.toColorRgb)(theme.palette.primary.main);
|
|
26
|
-
const globalStyles = {
|
|
27
|
-
autocomplete: (0, _react.css)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n :root {\n --aa-detached-media-query: (max-width: ", "px) !important;\n --aa-detached-modal-media-query: (min-width: ", "px) !important;\n --aa-detached-modal-max-width: ", "px !important;\n --aa-selected-color-rgb: ", ", ", ", ", " !important;\n --aa-primary-color-rgb: ", ", ", ", ", " !important;\n --aa-input-background-color-rgb: 250, 250, 250 !important;\n }\n .bl-autocomplete-panel {\n z-index: ", ";\n }\n .bl-autocomplete-label {\n .aa-SubmitIcon {\n color: ", " !important;\n }\n }\n .bl-autocomplete-form {\n border: 1px solid #fff !important;\n &:focus-within {\n box-shadow: none !important;\n border: 1px solid rgba(0, 0, 0, 0.12) !important;\n }\n }\n .aa-DetachedSearchButton {\n border: none !important;\n &:focus-within {\n box-shadow: none !important;\n }\n .aa-SubmitIcon {\n color: ", " !important;\n }\n }\n .aa-Panel .arcblock-blocklet button {\n border: 1px solid rgba(", ", ", ", ", ", 0.5);\n }\n "])), theme.breakpoints.values.md, theme.breakpoints.values.md, theme.breakpoints.values.md, primaryColor.r, primaryColor.g, primaryColor.b, primaryColor.r, primaryColor.g, primaryColor.b, theme.zIndex.modal, theme.palette.grey[500], theme.palette.grey[500], primaryColor.r, primaryColor.g, primaryColor.b)
|
|
28
|
-
};
|
|
29
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_filter.FilterProvider, _objectSpread(_objectSpread({}, props), {}, {
|
|
30
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Global, {
|
|
31
|
-
styles: globalStyles.autocomplete
|
|
32
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_base.default, {})]
|
|
33
|
-
}));
|
|
34
|
-
}
|
|
35
|
-
BlockletList.propTypes = _propTypes.propTypes;
|
|
36
|
-
BlockletList.defaultProps = _propTypes.defaultProps;
|
package/lib/libs/constant.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
const constant = {
|
|
8
|
-
nameAsc: 'title',
|
|
9
|
-
nameDesc: 'title',
|
|
10
|
-
popularity: 'stats.downloads',
|
|
11
|
-
publishAt: 'lastPublishedAt',
|
|
12
|
-
mobilePageSize: 10,
|
|
13
|
-
pageSize: 18,
|
|
14
|
-
defaultCurrentPage: 1,
|
|
15
|
-
blockletsPath: '/api/v2/blocklets.json',
|
|
16
|
-
categoriesPath: '/api/blocklets/categories',
|
|
17
|
-
cacheSize: 100
|
|
18
|
-
};
|
|
19
|
-
var _default = exports.default = constant;
|
package/lib/libs/prop-types.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.propTypes = exports.defaultProps = void 0;
|
|
7
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
8
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
-
const propTypes = exports.propTypes = {
|
|
10
|
-
filters: _propTypes.default.shape({
|
|
11
|
-
keyword: _propTypes.default.string,
|
|
12
|
-
sortBy: _propTypes.default.string,
|
|
13
|
-
sortDirection: _propTypes.default.string,
|
|
14
|
-
price: _propTypes.default.string,
|
|
15
|
-
category: _propTypes.default.string,
|
|
16
|
-
developer: _propTypes.default.string,
|
|
17
|
-
resourceType: _propTypes.default.string
|
|
18
|
-
}),
|
|
19
|
-
wrapChildren: _propTypes.default.func,
|
|
20
|
-
extraFilter: _propTypes.default.func,
|
|
21
|
-
endpoint: _propTypes.default.string.isRequired,
|
|
22
|
-
blockletRender: _propTypes.default.func.isRequired,
|
|
23
|
-
onFilterChange: _propTypes.default.func,
|
|
24
|
-
onSearchSelect: _propTypes.default.func,
|
|
25
|
-
locale: _propTypes.default.oneOf(['zh', 'en']),
|
|
26
|
-
baseSearch: _propTypes.default.bool,
|
|
27
|
-
// sometimes blocklet list can be rendered only before the category is fetched
|
|
28
|
-
fetchCategoryDelay: _propTypes.default.number
|
|
29
|
-
};
|
|
30
|
-
const defaultProps = exports.defaultProps = {
|
|
31
|
-
locale: 'zh',
|
|
32
|
-
filters: {},
|
|
33
|
-
onFilterChange: () => {},
|
|
34
|
-
onSearchSelect: _ref => {
|
|
35
|
-
let {
|
|
36
|
-
detailUrl
|
|
37
|
-
} = _ref;
|
|
38
|
-
window.location.href = detailUrl;
|
|
39
|
-
},
|
|
40
|
-
wrapChildren: children => children,
|
|
41
|
-
extraFilter: list => list,
|
|
42
|
-
baseSearch: false,
|
|
43
|
-
fetchCategoryDelay: 0
|
|
44
|
-
};
|
package/lib/libs/utils.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.urlStringify = exports.toColorRgb = exports.replaceTranslate = exports.removeUndefined = exports.isMobileScreen = exports.getSortOptions = exports.getPrices = exports.getCurrentPage = exports.getCategoryOptions = exports.formatError = exports.filterBlockletByPrice = exports.debounced = void 0;
|
|
7
|
-
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
8
|
-
var _color = _interopRequireDefault(require("color"));
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
const isFreeBlocklet = blocklet => {
|
|
11
|
-
if (!blocklet.payment) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
const priceList = (blocklet.payment.price || []).map(x => x.value || 0);
|
|
15
|
-
return priceList.every(x => x === 0);
|
|
16
|
-
};
|
|
17
|
-
const getSortOptions = t => {
|
|
18
|
-
return [{
|
|
19
|
-
name: t('sort.popularity'),
|
|
20
|
-
value: 'popularity'
|
|
21
|
-
}, {
|
|
22
|
-
name: t('sort.lastPublished'),
|
|
23
|
-
value: 'publishAt'
|
|
24
|
-
}, {
|
|
25
|
-
name: t('sort.nameAscend'),
|
|
26
|
-
value: 'nameAsc'
|
|
27
|
-
}, {
|
|
28
|
-
name: t('sort.nameDescend'),
|
|
29
|
-
value: 'nameDesc'
|
|
30
|
-
}];
|
|
31
|
-
};
|
|
32
|
-
exports.getSortOptions = getSortOptions;
|
|
33
|
-
const getPrices = t => {
|
|
34
|
-
return [{
|
|
35
|
-
name: t('blocklet.free'),
|
|
36
|
-
value: 'free'
|
|
37
|
-
}, {
|
|
38
|
-
name: t('blocklet.payment'),
|
|
39
|
-
value: 'payment'
|
|
40
|
-
}];
|
|
41
|
-
};
|
|
42
|
-
exports.getPrices = getPrices;
|
|
43
|
-
const getCategoryOptions = exports.getCategoryOptions = function getCategoryOptions() {
|
|
44
|
-
let list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
45
|
-
let locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
|
|
46
|
-
return list.map(item => ({
|
|
47
|
-
name: item.locales[locale] || "Category.".concat(locale),
|
|
48
|
-
value: item._id
|
|
49
|
-
}));
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* 根据 是否付费 过滤 blocklet list
|
|
54
|
-
* @param {*} list
|
|
55
|
-
* @param {*} price
|
|
56
|
-
* @returns
|
|
57
|
-
*/
|
|
58
|
-
const filterBlockletByPrice = exports.filterBlockletByPrice = function filterBlockletByPrice() {
|
|
59
|
-
let list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
60
|
-
let price = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
61
|
-
let result = list;
|
|
62
|
-
if (!price) return result;
|
|
63
|
-
if (price === 'free') {
|
|
64
|
-
result = list.filter(blocklet => isFreeBlocklet(blocklet));
|
|
65
|
-
} else {
|
|
66
|
-
result = list.filter(blocklet => !isFreeBlocklet(blocklet));
|
|
67
|
-
}
|
|
68
|
-
return result;
|
|
69
|
-
};
|
|
70
|
-
const formatError = error => {
|
|
71
|
-
if (Array.isArray(error.errors)) {
|
|
72
|
-
return error.errors.map(x => x.message).join('\n');
|
|
73
|
-
}
|
|
74
|
-
return error.message;
|
|
75
|
-
};
|
|
76
|
-
exports.formatError = formatError;
|
|
77
|
-
const replaceTranslate = (template, data) =>
|
|
78
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
79
|
-
template.replace(/{(\w*)}/g, (m, key) => data.hasOwnProperty(key) ? data[key] : '');
|
|
80
|
-
exports.replaceTranslate = replaceTranslate;
|
|
81
|
-
const removeUndefined = obj => {
|
|
82
|
-
const clone = (0, _cloneDeep.default)(obj);
|
|
83
|
-
Object.keys(clone).forEach(key => {
|
|
84
|
-
if (clone[key] === undefined) {
|
|
85
|
-
delete clone[key];
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
return clone;
|
|
89
|
-
};
|
|
90
|
-
exports.removeUndefined = removeUndefined;
|
|
91
|
-
const urlStringify = obj => {
|
|
92
|
-
if (!obj) {
|
|
93
|
-
throw new Error('obj is required in urlStringify ');
|
|
94
|
-
}
|
|
95
|
-
return new URLSearchParams(removeUndefined(obj)).toString();
|
|
96
|
-
};
|
|
97
|
-
exports.urlStringify = urlStringify;
|
|
98
|
-
const isMobileScreen = () => {
|
|
99
|
-
return window.innerWidth <= 600;
|
|
100
|
-
};
|
|
101
|
-
exports.isMobileScreen = isMobileScreen;
|
|
102
|
-
const getCurrentPage = (length, pageSize) => {
|
|
103
|
-
const page = (length + pageSize) / pageSize;
|
|
104
|
-
if (page > 1) return page.toFixed();
|
|
105
|
-
return 1;
|
|
106
|
-
};
|
|
107
|
-
exports.getCurrentPage = getCurrentPage;
|
|
108
|
-
const toColorRgb = colorStr => {
|
|
109
|
-
const color = (0, _color.default)(colorStr);
|
|
110
|
-
return color.rgb().object();
|
|
111
|
-
};
|
|
112
|
-
exports.toColorRgb = toColorRgb;
|
|
113
|
-
function debouncePromise(fn, time) {
|
|
114
|
-
let timerId;
|
|
115
|
-
return function debounced() {
|
|
116
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
117
|
-
args[_key] = arguments[_key];
|
|
118
|
-
}
|
|
119
|
-
if (timerId) {
|
|
120
|
-
clearTimeout(timerId);
|
|
121
|
-
}
|
|
122
|
-
return new Promise(resolve => {
|
|
123
|
-
timerId = setTimeout(() => resolve(fn(...args)), time);
|
|
124
|
-
});
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
const debounced = exports.debounced = debouncePromise(items => Promise.resolve(items), 300);
|