@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.
@@ -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;
@@ -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;
@@ -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;
@@ -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);