@abtnode/ux 1.16.16 → 1.16.17-beta-7ec31a60

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.
@@ -0,0 +1,582 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = CreateRelease;
7
+ var _react = require("react");
8
+ var _reactRouterDom = require("react-router-dom");
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _useSetState = _interopRequireDefault(require("react-use/lib/useSetState"));
11
+ var _pick = _interopRequireDefault(require("lodash/pick"));
12
+ var _urlJoin = _interopRequireDefault(require("url-join"));
13
+ var _semver = _interopRequireDefault(require("semver"));
14
+ var _Avatar = _interopRequireDefault(require("@mui/material/Avatar"));
15
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
16
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
17
+ var _Breadcrumbs = _interopRequireDefault(require("@mui/material/Breadcrumbs"));
18
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
19
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
20
+ var _DeleteOutline = _interopRequireDefault(require("@mui/icons-material/DeleteOutline"));
21
+ var _context = require("@arcblock/ux/lib/Locale/context");
22
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
23
+ var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
24
+ var _Tabs = _interopRequireDefault(require("@arcblock/ux/lib/Tabs"));
25
+ var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
26
+ var _constant = require("@blocklet/constant");
27
+ var _constant2 = require("@abtnode/constant");
28
+ var _bundleAvatar = _interopRequireDefault(require("../bundle-avatar"));
29
+ var _node = require("../../contexts/node");
30
+ var _blocklet = require("../../contexts/blocklet");
31
+ var _emptySpinner = _interopRequireDefault(require("../../empty-spinner"));
32
+ var _resource = _interopRequireDefault(require("./resource"));
33
+ var _jsxRuntime = require("react/jsx-runtime");
34
+ var _templateObject;
35
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
37
+ 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; }
38
+ 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; }
39
+ 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; }
40
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
41
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
42
+ function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure " + obj); }
43
+ 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); }
44
+ 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; } // eslint-disable-next-line import/no-unresolved
45
+ const UploaderComponent = /*#__PURE__*/(0, _react.lazy)(() => Promise.resolve().then(() => _interopRequireWildcard(require('@blocklet/uploader/react'))).then(res => ({
46
+ default: res.Uploader
47
+ })));
48
+ const addComponentTabs = _ref => {
49
+ let {
50
+ tabs,
51
+ blocklet,
52
+ ancestors = []
53
+ } = _ref;
54
+ const key = blocklet.meta.did;
55
+ tabs.push({
56
+ label: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
57
+ ml: -4,
58
+ display: "flex",
59
+ alignItems: "center",
60
+ justifyContent: "flex-start",
61
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_bundleAvatar.default, {
62
+ size: 24,
63
+ blocklet: blocklet,
64
+ ancestors: ancestors
65
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
66
+ ml: "16px",
67
+ className: "text",
68
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
69
+ children: blocklet.meta.title
70
+ })
71
+ })]
72
+ }, key),
73
+ value: key
74
+ });
75
+ };
76
+ const pickParams = release => (0, _pick.default)(release, ['blockletVersion', 'blockletTitle', 'blockletDescription', 'blockletLogo', 'blockletIntroduction', 'blockletScreenshots', 'note']);
77
+ function CreateRelease(_ref2) {
78
+ var _tabs$;
79
+ let rest = Object.assign({}, (_objectDestructuringEmpty(_ref2), _ref2));
80
+ const navigate = (0, _reactRouterDom.useNavigate)();
81
+ const {
82
+ projectId,
83
+ releaseId: inputReleaseId
84
+ } = (0, _reactRouterDom.useParams)();
85
+ const {
86
+ t
87
+ } = (0, _context.useLocaleContext)();
88
+ const {
89
+ blocklet
90
+ } = (0, _blocklet.useBlockletContext)();
91
+ const [params, setParams] = (0, _useSetState.default)(null);
92
+ const [loading, setLoading] = (0, _react.useState)(false);
93
+ const [release, setRelease] = (0, _react.useState)(null);
94
+ const {
95
+ api
96
+ } = (0, _node.useNodeContext)();
97
+ const uploaderLogoRef = (0, _react.useRef)(null);
98
+ const uploaderScreenshotRef = (0, _react.useRef)(null);
99
+ const releaseId = inputReleaseId === 'create' ? '' : inputReleaseId;
100
+ const mode = inputReleaseId === 'create' ? 'create' : 'edit';
101
+ const tabs = [];
102
+ const resourceComponents = ((blocklet === null || blocklet === void 0 ? void 0 : blocklet.children) || []).filter(x => x.meta.capabilities.resourceExportPage);
103
+ resourceComponents.forEach(item => {
104
+ addComponentTabs({
105
+ tabs,
106
+ blocklet: item,
107
+ t,
108
+ ancestors: [blocklet]
109
+ });
110
+ });
111
+ const [tab, setTab] = (0, _react.useState)((_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.value);
112
+ const isPublished = (release === null || release === void 0 ? void 0 : release.status) === 'published';
113
+ const readOnly = isPublished;
114
+ const getProject = () => {
115
+ api.getProject({
116
+ input: {
117
+ did: blocklet.meta.did,
118
+ projectId
119
+ }
120
+ }).then(res => {
121
+ setLoading(false);
122
+ const data = res.project || {};
123
+ if (!data.blockletVersion) {
124
+ data.blockletVersion = '1.0.0';
125
+ } else if (_semver.default.valid(data.blockletVersion)) {
126
+ data.blockletVersion = _semver.default.inc(data.blockletVersion, 'patch');
127
+ }
128
+ setParams(pickParams(data));
129
+ }).catch(err => {
130
+ setLoading(false);
131
+ _Toast.default.error(err.message);
132
+ });
133
+ };
134
+ const getRelease = () => {
135
+ api.getRelease({
136
+ input: {
137
+ did: blocklet.meta.did,
138
+ projectId,
139
+ releaseId
140
+ }
141
+ }).then(res => {
142
+ setLoading(false);
143
+ setParams(pickParams(res === null || res === void 0 ? void 0 : res.release));
144
+ setRelease(res === null || res === void 0 ? void 0 : res.release);
145
+ }).catch(err => {
146
+ setLoading(false);
147
+ _Toast.default.error(err.message);
148
+ });
149
+ };
150
+ const getData = () => {
151
+ if (mode === 'edit') {
152
+ if (!releaseId) {
153
+ _Toast.default.error('Empty release id');
154
+ return;
155
+ }
156
+ getRelease();
157
+ }
158
+ if (mode === 'create') {
159
+ getProject();
160
+ }
161
+ };
162
+ (0, _react.useEffect)(() => {
163
+ getData();
164
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
165
+
166
+ const onRelease = status => {
167
+ if (!params.blockletTitle) {
168
+ _Toast.default.error(t('blocklet.publish.errorTip.noTitle'));
169
+ return;
170
+ }
171
+ if (!params.blockletVersion) {
172
+ _Toast.default.error(t('blocklet.publish.errorTip.noVersion'));
173
+ return;
174
+ }
175
+ if (status === _constant.PROJECT.RELEASE_STATUS.published) {
176
+ if (!params.blockletDescription) {
177
+ _Toast.default.error(t('blocklet.publish.errorTip.noDescription'));
178
+ return;
179
+ }
180
+ if (!params.note) {
181
+ _Toast.default.error(t('blocklet.publish.errorTip.noNote'));
182
+ return;
183
+ }
184
+ }
185
+ const _params = _objectSpread({}, params);
186
+ _params.blockletVersion = _semver.default.valid(_params.blockletVersion);
187
+ if (!_params.blockletVersion) {
188
+ _Toast.default.error('Invalid Blocklet Version');
189
+ return;
190
+ }
191
+ _params.blockletTitle = (_params.blockletTitle || '').trim();
192
+ _params.blockletDescription = (_params.blockletDescription || '').trim();
193
+ _params.blockletIntroduction = (_params.blockletIntroduction || '').trim();
194
+ _params.note = (_params.note || '').trim();
195
+ api.createRelease({
196
+ input: _objectSpread(_objectSpread({}, _params), {}, {
197
+ did: blocklet.meta.did,
198
+ projectId,
199
+ releaseId,
200
+ status
201
+ })
202
+ }).then(() => {
203
+ if (status === 'draft') {
204
+ _Toast.default.success('Save draft success');
205
+ if (mode === 'create') {
206
+ navigate("../".concat(projectId), {
207
+ replace: true
208
+ });
209
+ }
210
+ } else {
211
+ _Toast.default.success('Create Release success');
212
+ navigate("../".concat(projectId), {
213
+ replace: true
214
+ });
215
+ }
216
+ }).catch(err => {
217
+ _Toast.default.error(err.message);
218
+ });
219
+ };
220
+ if (!params && loading) {
221
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_emptySpinner.default, {});
222
+ }
223
+ if (!params) {
224
+ return null;
225
+ }
226
+ const uploadLogoPrefix = "".concat(_constant2.WELLKNOWN_SERVICE_PATH_PREFIX, "/api/project/").concat(blocklet.meta.did, "/").concat(projectId, "/logo/upload");
227
+ const uploadScreenshotPrefix = "".concat(_constant2.WELLKNOWN_SERVICE_PATH_PREFIX, "/api/project/").concat(blocklet.meta.did, "/").concat(projectId, "/screenshot/upload");
228
+ const logoUrl = params !== null && params !== void 0 && params.blockletLogo ? "".concat(uploadLogoPrefix, "/").concat(params.blockletLogo) : "".concat(_constant2.WELLKNOWN_SERVICE_PATH_PREFIX, "/static/images/logo.png");
229
+ const screenshotUrls = ((params === null || params === void 0 ? void 0 : params.blockletScreenshots) || []).filter(Boolean).map(x => "".concat(uploadScreenshotPrefix, "/").concat(x));
230
+ const item = resourceComponents.find(x => x.meta.did === tab);
231
+ const resourceContent = item ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
232
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_resource.default, {
233
+ app: blocklet,
234
+ component: item,
235
+ projectId: projectId,
236
+ release: _objectSpread(_objectSpread({}, release), {}, {
237
+ id: releaseId
238
+ })
239
+ })
240
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
241
+ display: "flex",
242
+ mt: -3,
243
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
244
+ children: t('common.empty')
245
+ })
246
+ });
247
+ const onTabChange = x => {
248
+ setTab(x);
249
+ };
250
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Main, _objectSpread(_objectSpread({}, rest), {}, {
251
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
252
+ className: "sticky-header",
253
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Breadcrumbs.default, {
254
+ className: "breadcrumbs",
255
+ "aria-label": "breadcrumb",
256
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
257
+ to: "../",
258
+ children: t('common.publish')
259
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
260
+ to: "../".concat(projectId),
261
+ children: (params === null || params === void 0 ? void 0 : params.blockletTitle) || 'Blocklet'
262
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
263
+ color: "text.primary",
264
+ children: mode === 'create' ? t('common.create') : (params === null || params === void 0 ? void 0 : params.blockletVersion) || t('common.edit')
265
+ })]
266
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
267
+ display: "flex",
268
+ children: [!isPublished && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
269
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
270
+ variant: "outlined",
271
+ disabled: loading,
272
+ onClick: () => onRelease(_constant.PROJECT.RELEASE_STATUS.draft),
273
+ style: {
274
+ marginRight: 12
275
+ },
276
+ children: t('blocklet.publish.saveDraft')
277
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
278
+ variant: "contained",
279
+ disabled: loading,
280
+ onClick: () => onRelease(_constant.PROJECT.RELEASE_STATUS.published),
281
+ children: t('common.release')
282
+ })]
283
+ }), isPublished && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
284
+ variant: "contained",
285
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
286
+ href: (0, _urlJoin.default)("".concat(_constant2.WELLKNOWN_SERVICE_PATH_PREFIX, "/api/project/").concat(blocklet.meta.did, "/").concat(projectId, "/").concat(releaseId, "/download/").concat((release.files || [])[0])),
287
+ children: t('common.download')
288
+ })
289
+ })]
290
+ })]
291
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
292
+ pt: 3,
293
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
294
+ display: "flex",
295
+ className: "section",
296
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
297
+ variant: "h3",
298
+ className: "left",
299
+ children: t('blocklet.publish.productTitle')
300
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
301
+ sx: {
302
+ flex: 1
303
+ },
304
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
305
+ label: "Blocklet ".concat(t('common.title')),
306
+ placeholder: "Blocklet ".concat(t('common.title')),
307
+ inputProps: {
308
+ 'data-cy': 'blocklet-title',
309
+ readOnly
310
+ },
311
+ autoComplete: "off",
312
+ variant: "outlined",
313
+ fullWidth: true,
314
+ value: params.blockletTitle || '',
315
+ onChange: e => {
316
+ setParams({
317
+ blockletTitle: e.target.value
318
+ });
319
+ }
320
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
321
+ label: "Blocklet ".concat(t('common.description')),
322
+ placeholder: "Blocklet ".concat(t('common.description')),
323
+ inputProps: {
324
+ 'data-cy': 'blocklet-description',
325
+ readOnly
326
+ },
327
+ autoComplete: "off",
328
+ variant: "outlined",
329
+ fullWidth: true,
330
+ value: params.blockletDescription || '',
331
+ onChange: e => {
332
+ setParams({
333
+ blockletDescription: e.target.value
334
+ });
335
+ },
336
+ sx: {
337
+ mt: 3
338
+ }
339
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
340
+ label: "Blocklet ".concat(t('common.introduction')),
341
+ placeholder: "Blocklet ".concat(t('common.introduction')),
342
+ inputProps: {
343
+ 'data-cy': 'export-blocklet-introduction',
344
+ readOnly
345
+ },
346
+ autoComplete: "off",
347
+ variant: "outlined",
348
+ fullWidth: true,
349
+ multiline: true,
350
+ rows: 4,
351
+ value: params.blockletIntroduction || '',
352
+ onChange: e => {
353
+ setParams({
354
+ blockletIntroduction: e.target.value
355
+ });
356
+ },
357
+ sx: {
358
+ mt: 3
359
+ }
360
+ })]
361
+ })]
362
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
363
+ display: "flex",
364
+ mt: 3,
365
+ className: "section",
366
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
367
+ variant: "h3",
368
+ className: "left",
369
+ children: t('blocklet.publish.versionTitle')
370
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
371
+ sx: {
372
+ flex: 1
373
+ },
374
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
375
+ label: "Blocklet ".concat(t('common.version')),
376
+ placeholder: "Blocklet ".concat(t('common.version')),
377
+ inputProps: {
378
+ 'data-cy': 'blocklet-version',
379
+ readOnly
380
+ },
381
+ autoComplete: "off",
382
+ variant: "outlined",
383
+ fullWidth: true,
384
+ value: params.blockletVersion,
385
+ onChange: e => {
386
+ setParams({
387
+ blockletVersion: e.target.value
388
+ });
389
+ }
390
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
391
+ label: t('blocklet.publish.releaseNote'),
392
+ autoComplete: "off",
393
+ variant: "outlined",
394
+ inputProps: {
395
+ 'data-cy': 'release-note',
396
+ readOnly
397
+ },
398
+ fullWidth: true,
399
+ multiline: true,
400
+ rows: 4,
401
+ value: params.note,
402
+ onChange: e => {
403
+ setParams({
404
+ note: e.target.value
405
+ });
406
+ },
407
+ sx: {
408
+ mt: 3
409
+ }
410
+ })]
411
+ })]
412
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
413
+ display: "flex",
414
+ mt: 3,
415
+ className: "section full-width",
416
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
417
+ variant: "h3",
418
+ className: "left",
419
+ children: t('blocklet.publish.imgTitle')
420
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
421
+ sx: {
422
+ flex: 1
423
+ },
424
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
425
+ display: "flex",
426
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
427
+ variant: "subtitle1",
428
+ sx: {
429
+ mr: 2
430
+ },
431
+ children: t('common.logo')
432
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
433
+ sx: {
434
+ flex: 1,
435
+ cursor: readOnly ? 'default' : 'pointer'
436
+ },
437
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
438
+ variant: "square",
439
+ sx: {
440
+ width: 80,
441
+ height: 80
442
+ },
443
+ alt: "Blocklet Logo",
444
+ src: logoUrl,
445
+ onClick: () => !readOnly && uploaderLogoRef.current.open()
446
+ })
447
+ })]
448
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
449
+ display: "flex",
450
+ mt: 3,
451
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
452
+ variant: "subtitle1",
453
+ sx: {
454
+ mr: 2
455
+ },
456
+ children: t('common.screenshot')
457
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
458
+ display: "flex",
459
+ alignItems: "center",
460
+ sx: {
461
+ flex: 1,
462
+ flexWrap: 'wrap'
463
+ },
464
+ children: [screenshotUrls.map((x, index) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
465
+ className: "screenshot",
466
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
467
+ alt: "screenshot",
468
+ src: x
469
+ }), !readOnly && /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
470
+ className: "action",
471
+ onClick: () => {
472
+ const arr = [...params.blockletScreenshots];
473
+ arr.splice(index, 1);
474
+ setParams({
475
+ blockletScreenshots: arr
476
+ });
477
+ },
478
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteOutline.default, {})
479
+ })]
480
+ })), screenshotUrls.length < 5 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
481
+ sx: {
482
+ width: 200,
483
+ height: 140,
484
+ background: '#eee',
485
+ cursor: readOnly ? 'default' : 'pointer',
486
+ color: '#999',
487
+ mb: 2
488
+ },
489
+ display: "flex",
490
+ justifyContent: "center",
491
+ alignItems: "center",
492
+ fontSize: 40,
493
+ onClick: () => !readOnly && uploaderScreenshotRef.current.open(),
494
+ children: "+"
495
+ })]
496
+ })]
497
+ })]
498
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(UploaderComponent, {
499
+ id: "\u200Buploader-logo",
500
+ ref: uploaderLogoRef,
501
+ popup: true,
502
+ onUploadFinish: result => {
503
+ setParams({
504
+ blockletLogo: result.data.filename
505
+ });
506
+ },
507
+ plugins: ['ImageEditor', 'Url', 'Webcam'],
508
+ apiPathProps: {
509
+ uploader: uploadLogoPrefix,
510
+ disableMediaKitPrefix: true
511
+ }
512
+ }, "uploader-screenshot"), /*#__PURE__*/(0, _jsxRuntime.jsx)(UploaderComponent, {
513
+ id: "\u200Buploader-screenshot",
514
+ ref: uploaderScreenshotRef,
515
+ popup: true,
516
+ onUploadFinish: result => {
517
+ var _result$data;
518
+ const blockletScreenshots = params.blockletScreenshots || [];
519
+ blockletScreenshots.push((_result$data = result.data) === null || _result$data === void 0 ? void 0 : _result$data.filename);
520
+ setParams({
521
+ blockletScreenshots
522
+ });
523
+ },
524
+ plugins: ['ImageEditor', 'Url', 'Webcam'],
525
+ apiPathProps: {
526
+ uploader: uploadScreenshotPrefix,
527
+ disableMediaKitPrefix: true
528
+ }
529
+ }, "uploader-screenshot")]
530
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
531
+ display: "flex",
532
+ mt: 3,
533
+ className: "section full-width",
534
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
535
+ className: "left",
536
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
537
+ variant: "h3",
538
+ children: t('blocklet.publish.resourceTitle')
539
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tabs.default, {
540
+ tabs: tabs,
541
+ current: tab,
542
+ orientation: "vertical",
543
+ onChange: onTabChange,
544
+ sx: {
545
+ width: '100%'
546
+ }
547
+ })]
548
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
549
+ sx: {
550
+ flex: 1
551
+ },
552
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
553
+ children: resourceContent
554
+ })
555
+ })]
556
+ })]
557
+ })]
558
+ }));
559
+ }
560
+ CreateRelease.propTypes = {};
561
+ CreateRelease.defaultProps = {};
562
+ const Main = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .sticky-header {\n margin-top: -12px;\n padding: 12px 0;\n position: sticky;\n top: 0;\n z-index: 99;\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: #fff;\n padding-bottom: 12px;\n border-bottom: ", ";\n }\n .screenshot {\n margin-bottom: 16px;\n max-width: 200px;\n max-height: 140px;\n width: 200px;\n height: 140px;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: #eee;\n margin-right: 16px;\n position: relative;\n .action {\n visibility: hidden;\n position: absolute;\n top: 0px;\n right: 0px;\n background-color: rgba(0, 0, 0, 0.2);\n color: rgba(255, 255, 255, 0.8);\n }\n &:hover .action {\n visibility: visible;\n }\n }\n .screenshot img {\n width: 100%; /* \u56FE\u50CF\u5BBD\u5EA6\u586B\u5145\u5BB9\u5668 */\n height: auto; /* \u56FE\u50CF\u9AD8\u5EA6\u81EA\u9002\u5E94 */\n }\n .section {\n max-width: 800px;\n &.full-width {\n max-width: 100%;\n }\n .MuiTypography-h3 {\n font-size: 1.1rem;\n font-weight: 700;\n }\n .left {\n flex-shrink: 0;\n width: 140px;\n }\n .MuiTabs-root {\n margin-top: 8px;\n transform: translateX(-16px);\n .MuiButtonBase-root .text {\n color: ", ";\n }\n .MuiButtonBase-root.Mui-selected .text {\n color: ", ";\n }\n }\n .MuiTabs-indicator {\n display: none;\n }\n .MuiTypography-subtitle1 {\n width: 120px;\n font-weight: 700;\n font-size: 1rem;\n ", " {\n width: 80px;\n }\n }\n }\n .MuiButtonBase-root {\n a {\n color: inherit;\n }\n }\n"])), _ref3 => {
563
+ let {
564
+ theme
565
+ } = _ref3;
566
+ return "1px solid ".concat(theme.palette.divider);
567
+ }, _ref4 => {
568
+ let {
569
+ theme
570
+ } = _ref4;
571
+ return theme.palette.text.primary;
572
+ }, _ref5 => {
573
+ let {
574
+ theme
575
+ } = _ref5;
576
+ return theme.palette.primary.main;
577
+ }, _ref6 => {
578
+ let {
579
+ theme
580
+ } = _ref6;
581
+ return theme.breakpoints.down('sm');
582
+ });
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = BlockletPublish;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactRouterDom = require("react-router-dom");
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
11
+ var _projectList = _interopRequireDefault(require("./project-list"));
12
+ var _createProject = _interopRequireDefault(require("./create-project"));
13
+ var _releaseList = _interopRequireDefault(require("./release-list"));
14
+ var _createRelease = _interopRequireDefault(require("./create-release"));
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ var _templateObject;
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
19
+ function BlockletPublish() {
20
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Main, {
21
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactRouterDom.Routes, {
22
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
23
+ path: "/",
24
+ element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_projectList.default, {})
25
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
26
+ path: "/create",
27
+ element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_createProject.default, {})
28
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
29
+ path: "/:projectId",
30
+ element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_releaseList.default, {})
31
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
32
+ path: "/:projectId/:releaseId",
33
+ element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_createRelease.default, {})
34
+ })]
35
+ })
36
+ });
37
+ }
38
+ BlockletPublish.propTypes = {};
39
+ const Main = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n a {\n color: ", ";\n }\n"])), _ref => {
40
+ let {
41
+ theme
42
+ } = _ref;
43
+ return theme.palette.primary.main;
44
+ });