@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.
- package/es/blocklet/publish/create-project.js +188 -0
- package/es/blocklet/publish/create-release.js +643 -0
- package/es/blocklet/publish/index.js +37 -0
- package/es/blocklet/publish/project-list.js +190 -0
- package/es/blocklet/publish/release-list.js +274 -0
- package/es/blocklet/publish/resource.js +72 -0
- package/es/empty-spinner.js +24 -0
- package/es/locales/en.js +35 -0
- package/es/locales/zh.js +35 -0
- package/lib/blocklet/publish/create-project.js +197 -0
- package/lib/blocklet/publish/create-release.js +582 -0
- package/lib/blocklet/publish/index.js +44 -0
- package/lib/blocklet/publish/project-list.js +196 -0
- package/lib/blocklet/publish/release-list.js +270 -0
- package/lib/blocklet/publish/resource.js +78 -0
- package/lib/empty-spinner.js +40 -0
- package/lib/locales/en.js +35 -0
- package/lib/locales/zh.js +35 -0
- package/package.json +24 -18
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ProjectList;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactRouterDom = require("react-router-dom");
|
|
9
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
11
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
12
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
13
|
+
var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
|
|
14
|
+
var _Datatable = _interopRequireDefault(require("@arcblock/ux/lib/Datatable"));
|
|
15
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
16
|
+
var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
|
|
17
|
+
var _blocklet = require("../../contexts/blocklet");
|
|
18
|
+
var _node = require("../../contexts/node");
|
|
19
|
+
var _emptySpinner = _interopRequireDefault(require("../../empty-spinner"));
|
|
20
|
+
var _didAddress = _interopRequireDefault(require("../../did-address"));
|
|
21
|
+
var _confirm = _interopRequireDefault(require("../../confirm"));
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
var _templateObject;
|
|
24
|
+
/* eslint-disable react/no-unstable-nested-components */
|
|
25
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
26
|
+
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); }
|
|
27
|
+
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; }
|
|
28
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
29
|
+
function ProjectList() {
|
|
30
|
+
const {
|
|
31
|
+
t,
|
|
32
|
+
locale
|
|
33
|
+
} = (0, _context.useLocaleContext)();
|
|
34
|
+
const {
|
|
35
|
+
api
|
|
36
|
+
} = (0, _node.useNodeContext)();
|
|
37
|
+
const [loading, setLoading] = (0, _react.useState)(true);
|
|
38
|
+
const {
|
|
39
|
+
blocklet
|
|
40
|
+
} = (0, _blocklet.useBlockletContext)();
|
|
41
|
+
const [deleteConfirm, setDeleteConfirm] = (0, _react.useState)(null);
|
|
42
|
+
const [projects, setProjects] = (0, _react.useState)(null);
|
|
43
|
+
const getProjects = () => {
|
|
44
|
+
api.getProjects({
|
|
45
|
+
input: {
|
|
46
|
+
did: blocklet.meta.did
|
|
47
|
+
}
|
|
48
|
+
}).then(res => {
|
|
49
|
+
const list = (res === null || res === void 0 ? void 0 : res.projects) || [];
|
|
50
|
+
setLoading(false);
|
|
51
|
+
setProjects(list);
|
|
52
|
+
}).catch(err => {
|
|
53
|
+
setLoading(false);
|
|
54
|
+
_Toast.default.error(err.message);
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
const onDeleteProject = project => {
|
|
58
|
+
setDeleteConfirm(project);
|
|
59
|
+
};
|
|
60
|
+
const deleteProject = () => {
|
|
61
|
+
setLoading(false);
|
|
62
|
+
const projectId = deleteConfirm.id;
|
|
63
|
+
api.deleteProject({
|
|
64
|
+
input: {
|
|
65
|
+
did: blocklet.meta.did,
|
|
66
|
+
projectId
|
|
67
|
+
}
|
|
68
|
+
}).then(() => {
|
|
69
|
+
setLoading(false);
|
|
70
|
+
getProjects();
|
|
71
|
+
_Toast.default.success(t('common.removeSuccess'));
|
|
72
|
+
}).catch(err => {
|
|
73
|
+
setLoading(false);
|
|
74
|
+
_Toast.default.error(err.message);
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
(0, _react.useEffect)(() => {
|
|
78
|
+
getProjects();
|
|
79
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
80
|
+
|
|
81
|
+
if (!projects && loading) {
|
|
82
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_emptySpinner.default, {});
|
|
83
|
+
}
|
|
84
|
+
if (!projects) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
if (!projects.length) {
|
|
88
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
89
|
+
display: "flex",
|
|
90
|
+
flexDirection: "column",
|
|
91
|
+
alignItems: "center",
|
|
92
|
+
pt: 10,
|
|
93
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
94
|
+
sx: {
|
|
95
|
+
fontSize: 20,
|
|
96
|
+
fontWeight: 'bold',
|
|
97
|
+
mb: 3
|
|
98
|
+
},
|
|
99
|
+
children: t('blocklet.publish.blockletEmptyTip')
|
|
100
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
101
|
+
sx: {
|
|
102
|
+
fontSize: 14,
|
|
103
|
+
color: 'text.secondary',
|
|
104
|
+
mb: 3
|
|
105
|
+
},
|
|
106
|
+
children: t('blocklet.publish.createBlockletTip')
|
|
107
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
108
|
+
to: "create",
|
|
109
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
110
|
+
variant: "contained",
|
|
111
|
+
children: t('blocklet.publish.createBlocklet')
|
|
112
|
+
})
|
|
113
|
+
})]
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const columns = [{
|
|
117
|
+
label: t('common.name'),
|
|
118
|
+
name: 'blockletTitle',
|
|
119
|
+
options: {
|
|
120
|
+
customBodyRenderLite: rawIndex => {
|
|
121
|
+
const project = projects[rawIndex];
|
|
122
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
123
|
+
to: "".concat(project.id),
|
|
124
|
+
children: project.blockletTitle || '/'
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}, {
|
|
129
|
+
label: t('common.address'),
|
|
130
|
+
name: 'blockletDid',
|
|
131
|
+
options: {
|
|
132
|
+
customBodyRender: e => {
|
|
133
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_didAddress.default, {
|
|
134
|
+
size: 14,
|
|
135
|
+
responsive: true,
|
|
136
|
+
did: e
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}, {
|
|
141
|
+
label: t('common.actions'),
|
|
142
|
+
name: 'actions',
|
|
143
|
+
options: {
|
|
144
|
+
customBodyRenderLite: rawIndex => {
|
|
145
|
+
const project = projects[rawIndex];
|
|
146
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
147
|
+
display: "flex",
|
|
148
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
149
|
+
color: "error",
|
|
150
|
+
"aria-label": "delete",
|
|
151
|
+
onClick: () => onDeleteProject(project),
|
|
152
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Delete.default, {
|
|
153
|
+
sx: {
|
|
154
|
+
fontSize: 18
|
|
155
|
+
}
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}];
|
|
162
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Main, {
|
|
163
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
164
|
+
sx: {
|
|
165
|
+
textAlign: 'right'
|
|
166
|
+
},
|
|
167
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
168
|
+
to: "create",
|
|
169
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
170
|
+
variant: "contained",
|
|
171
|
+
children: t('blocklet.publish.createBlocklet')
|
|
172
|
+
})
|
|
173
|
+
})
|
|
174
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Datatable.default, {
|
|
175
|
+
className: "main-table",
|
|
176
|
+
locale: locale,
|
|
177
|
+
data: projects,
|
|
178
|
+
columns: columns,
|
|
179
|
+
options: {
|
|
180
|
+
sort: false,
|
|
181
|
+
download: false,
|
|
182
|
+
filter: false,
|
|
183
|
+
print: false,
|
|
184
|
+
search: false
|
|
185
|
+
}
|
|
186
|
+
}), deleteConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
|
|
187
|
+
title: "".concat(t('common.delete'), " ").concat(deleteConfirm.blockletTitle),
|
|
188
|
+
description: t('blocklet.publish.deleteBlockletTip'),
|
|
189
|
+
confirm: t('common.confirm'),
|
|
190
|
+
onConfirm: deleteProject,
|
|
191
|
+
onCancel: () => setDeleteConfirm(null)
|
|
192
|
+
})]
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
ProjectList.propTypes = {};
|
|
196
|
+
const Main = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .main-table > div:first-child {\n display: none;\n }\n"])));
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ReleaseList;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactRouterDom = require("react-router-dom");
|
|
9
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
+
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
11
|
+
var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
|
|
12
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
13
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
14
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
15
|
+
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
16
|
+
var _Breadcrumbs = _interopRequireDefault(require("@mui/material/Breadcrumbs"));
|
|
17
|
+
var _Download = _interopRequireDefault(require("@mui/icons-material/Download"));
|
|
18
|
+
var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
|
|
19
|
+
var _Datatable = _interopRequireDefault(require("@arcblock/ux/lib/Datatable"));
|
|
20
|
+
var _constant = require("@abtnode/constant");
|
|
21
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
22
|
+
var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
|
|
23
|
+
var _Tag = _interopRequireDefault(require("@arcblock/ux/lib/Tag"));
|
|
24
|
+
var _blocklet = require("../../contexts/blocklet");
|
|
25
|
+
var _node = require("../../contexts/node");
|
|
26
|
+
var _emptySpinner = _interopRequireDefault(require("../../empty-spinner"));
|
|
27
|
+
var _confirm = _interopRequireDefault(require("../../confirm"));
|
|
28
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
29
|
+
var _templateObject;
|
|
30
|
+
/* eslint-disable react/no-unstable-nested-components */
|
|
31
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
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; }
|
|
34
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
35
|
+
function ReleaseList() {
|
|
36
|
+
const {
|
|
37
|
+
t,
|
|
38
|
+
locale
|
|
39
|
+
} = (0, _context.useLocaleContext)();
|
|
40
|
+
const {
|
|
41
|
+
projectId
|
|
42
|
+
} = (0, _reactRouterDom.useParams)();
|
|
43
|
+
const {
|
|
44
|
+
api
|
|
45
|
+
} = (0, _node.useNodeContext)();
|
|
46
|
+
const [loading, setLoading] = (0, _react.useState)(true);
|
|
47
|
+
const {
|
|
48
|
+
blocklet
|
|
49
|
+
} = (0, _blocklet.useBlockletContext)();
|
|
50
|
+
const [releases, setReleases] = (0, _react.useState)(null);
|
|
51
|
+
const [project, setProject] = (0, _react.useState)(null);
|
|
52
|
+
const [deleteConfirm, setDeleteConfirm] = (0, _react.useState)(null);
|
|
53
|
+
const getReleases = () => {
|
|
54
|
+
api.getReleases({
|
|
55
|
+
input: {
|
|
56
|
+
did: blocklet.meta.did,
|
|
57
|
+
projectId
|
|
58
|
+
}
|
|
59
|
+
}).then(res => {
|
|
60
|
+
const list = (res === null || res === void 0 ? void 0 : res.releases) || [];
|
|
61
|
+
setLoading(false);
|
|
62
|
+
setReleases(list);
|
|
63
|
+
}).catch(err => {
|
|
64
|
+
setLoading(false);
|
|
65
|
+
_Toast.default.error(err.message);
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
const getData = () => {
|
|
69
|
+
api.doBatchQuery({
|
|
70
|
+
getProject: {
|
|
71
|
+
input: {
|
|
72
|
+
did: blocklet.meta.did,
|
|
73
|
+
projectId
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
getReleases: {
|
|
77
|
+
input: {
|
|
78
|
+
did: blocklet.meta.did,
|
|
79
|
+
projectId
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}).then(res => {
|
|
83
|
+
setProject(res.getProject.project || {});
|
|
84
|
+
setReleases(res.getReleases.releases || []);
|
|
85
|
+
setLoading(false);
|
|
86
|
+
}).catch(err => {
|
|
87
|
+
setLoading(false);
|
|
88
|
+
_Toast.default.error(err.message);
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
(0, _react.useEffect)(() => {
|
|
92
|
+
getData();
|
|
93
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
94
|
+
|
|
95
|
+
const deleteRelease = () => {
|
|
96
|
+
setLoading(false);
|
|
97
|
+
const releaseId = deleteConfirm.id;
|
|
98
|
+
api.deleteRelease({
|
|
99
|
+
input: {
|
|
100
|
+
did: blocklet.meta.did,
|
|
101
|
+
projectId,
|
|
102
|
+
releaseId
|
|
103
|
+
}
|
|
104
|
+
}).then(() => {
|
|
105
|
+
setLoading(false);
|
|
106
|
+
getReleases();
|
|
107
|
+
_Toast.default.success(t('common.removeSuccess'));
|
|
108
|
+
}).catch(err => {
|
|
109
|
+
setLoading(false);
|
|
110
|
+
_Toast.default.error(err.message);
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
const onDeleteRelease = release => {
|
|
114
|
+
setDeleteConfirm(release);
|
|
115
|
+
};
|
|
116
|
+
if (!releases && loading) {
|
|
117
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_emptySpinner.default, {});
|
|
118
|
+
}
|
|
119
|
+
if (!releases) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const breadcrumbs = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Breadcrumbs.default, {
|
|
123
|
+
className: "breadcrumbs",
|
|
124
|
+
"aria-label": "breadcrumb",
|
|
125
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
126
|
+
to: "..",
|
|
127
|
+
children: t('common.publish')
|
|
128
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
129
|
+
color: "text.primary",
|
|
130
|
+
children: project.blockletTitle
|
|
131
|
+
})]
|
|
132
|
+
});
|
|
133
|
+
if (!releases.length) {
|
|
134
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
135
|
+
children: [breadcrumbs, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
136
|
+
display: "flex",
|
|
137
|
+
flexDirection: "column",
|
|
138
|
+
alignItems: "center",
|
|
139
|
+
pt: 10,
|
|
140
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
141
|
+
sx: {
|
|
142
|
+
fontSize: 20,
|
|
143
|
+
fontWeight: 'bold',
|
|
144
|
+
mb: 3
|
|
145
|
+
},
|
|
146
|
+
children: t('blocklet.publish.releaseEmptyTip')
|
|
147
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
148
|
+
sx: {
|
|
149
|
+
fontSize: 14,
|
|
150
|
+
color: 'text.secondary',
|
|
151
|
+
mb: 3
|
|
152
|
+
},
|
|
153
|
+
children: t('blocklet.publish.createReleaseTip')
|
|
154
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
155
|
+
to: "create",
|
|
156
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
157
|
+
variant: "contained",
|
|
158
|
+
children: t('blocklet.publish.createRelease')
|
|
159
|
+
})
|
|
160
|
+
})]
|
|
161
|
+
})]
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
const columns = [{
|
|
165
|
+
label: t('common.version'),
|
|
166
|
+
name: 'blockletVersion',
|
|
167
|
+
options: {
|
|
168
|
+
customBodyRenderLite: rawIndex => {
|
|
169
|
+
const release = releases[rawIndex];
|
|
170
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
171
|
+
to: "".concat(release.id),
|
|
172
|
+
children: release.blockletVersion || '/'
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}, {
|
|
177
|
+
label: t('blocklet.publish.releaseNote'),
|
|
178
|
+
name: 'note',
|
|
179
|
+
options: {
|
|
180
|
+
customBodyRenderLite: rawIndex => {
|
|
181
|
+
const release = releases[rawIndex];
|
|
182
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
183
|
+
className: "note",
|
|
184
|
+
children: release.note || ''
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}, {
|
|
189
|
+
label: t('common.status'),
|
|
190
|
+
name: 'status',
|
|
191
|
+
options: {
|
|
192
|
+
customBodyRender: value => {
|
|
193
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tag.default, {
|
|
194
|
+
type: value === 'published' ? 'success' : 'warning',
|
|
195
|
+
children: (0, _upperFirst.default)(value)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}, {
|
|
200
|
+
label: t('common.actions'),
|
|
201
|
+
name: 'actions',
|
|
202
|
+
options: {
|
|
203
|
+
customBodyRenderLite: rawIndex => {
|
|
204
|
+
const release = releases[rawIndex];
|
|
205
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
206
|
+
display: "flex",
|
|
207
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
208
|
+
color: "primary",
|
|
209
|
+
"aria-label": "download",
|
|
210
|
+
disabled: release.status !== 'published',
|
|
211
|
+
children: release.status === 'published' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
|
212
|
+
href: (0, _urlJoin.default)("".concat(_constant.WELLKNOWN_SERVICE_PATH_PREFIX, "/api/project/").concat(blocklet.meta.did, "/").concat(project.id, "/").concat(release.id, "/download/").concat((release.files || [])[0])),
|
|
213
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Download.default, {
|
|
214
|
+
sx: {
|
|
215
|
+
fontSize: 18
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Download.default, {
|
|
219
|
+
sx: {
|
|
220
|
+
fontSize: 18
|
|
221
|
+
}
|
|
222
|
+
})
|
|
223
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
224
|
+
color: "error",
|
|
225
|
+
"aria-label": "delete",
|
|
226
|
+
onClick: () => onDeleteRelease(release),
|
|
227
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Delete.default, {
|
|
228
|
+
sx: {
|
|
229
|
+
fontSize: 18
|
|
230
|
+
}
|
|
231
|
+
})
|
|
232
|
+
})]
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}];
|
|
237
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Main, {
|
|
238
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
239
|
+
className: "header",
|
|
240
|
+
children: [breadcrumbs, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
241
|
+
to: "create",
|
|
242
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
243
|
+
variant: "contained",
|
|
244
|
+
children: t('blocklet.publish.createRelease')
|
|
245
|
+
})
|
|
246
|
+
})]
|
|
247
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Datatable.default, {
|
|
248
|
+
className: "main-table",
|
|
249
|
+
verticalKeyWidth: 100,
|
|
250
|
+
locale: locale,
|
|
251
|
+
data: releases,
|
|
252
|
+
columns: columns,
|
|
253
|
+
options: {
|
|
254
|
+
sort: false,
|
|
255
|
+
download: false,
|
|
256
|
+
filter: false,
|
|
257
|
+
print: false,
|
|
258
|
+
search: false
|
|
259
|
+
}
|
|
260
|
+
}), deleteConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
|
|
261
|
+
title: t("".concat(t('common.delete'), " ").concat(deleteConfirm.blockletVersion)),
|
|
262
|
+
description: t('blocklet.publish.deleteReleaseTip'),
|
|
263
|
+
confirm: t('common.confirm'),
|
|
264
|
+
onConfirm: deleteRelease,
|
|
265
|
+
onCancel: () => setDeleteConfirm(null)
|
|
266
|
+
})]
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
ReleaseList.propTypes = {};
|
|
270
|
+
const Main = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .main-table > div:first-child {\n display: none;\n }\n .note {\n word-break: break-all;\n white-space: pre-line;\n }\n"])));
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = Resource;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
11
|
+
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
12
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
13
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
var _templateObject;
|
|
15
|
+
/* eslint-disable no-unused-vars */
|
|
16
|
+
/* eslint-disable react/no-unstable-nested-components */
|
|
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 Resource(_ref) {
|
|
20
|
+
let {
|
|
21
|
+
app,
|
|
22
|
+
component,
|
|
23
|
+
projectId,
|
|
24
|
+
release
|
|
25
|
+
} = _ref;
|
|
26
|
+
const {
|
|
27
|
+
t,
|
|
28
|
+
locale
|
|
29
|
+
} = (0, _context.useLocaleContext)();
|
|
30
|
+
const iframeRef = (0, _react.useRef)(null);
|
|
31
|
+
const releaseId = release.id;
|
|
32
|
+
const readonly = release.status === 'published';
|
|
33
|
+
const {
|
|
34
|
+
resourceExportPage = '/'
|
|
35
|
+
} = (component === null || component === void 0 ? void 0 : component.meta.capabilities) || {};
|
|
36
|
+
const url = new URL((0, _urlJoin.default)('http://127.0.0.1', component.mountPoint, resourceExportPage).replace(/\/+/g, '/'));
|
|
37
|
+
url.searchParams.set('projectId', projectId);
|
|
38
|
+
url.searchParams.set('releaseId', releaseId);
|
|
39
|
+
url.searchParams.set('local', locale);
|
|
40
|
+
if (readonly) {
|
|
41
|
+
url.searchParams.set('readonly', '1');
|
|
42
|
+
}
|
|
43
|
+
const src = "".concat(url.pathname).concat(url.search);
|
|
44
|
+
if (component.status !== 'running') {
|
|
45
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
|
|
46
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
47
|
+
pt: 6,
|
|
48
|
+
children: t('blocklet.publish.componentNotRunning', {
|
|
49
|
+
name: component.meta.title
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
|
|
55
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("iframe", {
|
|
56
|
+
ref: iframeRef,
|
|
57
|
+
title: component.meta.title,
|
|
58
|
+
src: src,
|
|
59
|
+
width: "100%",
|
|
60
|
+
height: "600px"
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
Resource.propTypes = {
|
|
65
|
+
component: _propTypes.default.object.isRequired,
|
|
66
|
+
app: _propTypes.default.object.isRequired,
|
|
67
|
+
projectId: _propTypes.default.string.isRequired,
|
|
68
|
+
release: _propTypes.default.shape({
|
|
69
|
+
id: _propTypes.default.string.isRequired,
|
|
70
|
+
status: _propTypes.default.string
|
|
71
|
+
})
|
|
72
|
+
};
|
|
73
|
+
Resource.defaultProps = {
|
|
74
|
+
release: {
|
|
75
|
+
id: ''
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const Container = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n iframe {\n border: none;\n }\n"])));
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = EmptySpinner;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
10
|
+
var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
const _excluded = ["size"];
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
18
|
+
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); }
|
|
19
|
+
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; }
|
|
20
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
21
|
+
function EmptySpinner(_ref) {
|
|
22
|
+
let {
|
|
23
|
+
size
|
|
24
|
+
} = _ref,
|
|
25
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
26
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, _objectSpread(_objectSpread({
|
|
27
|
+
display: "flex",
|
|
28
|
+
mt: 4
|
|
29
|
+
}, rest), {}, {
|
|
30
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
|
|
31
|
+
size: size
|
|
32
|
+
})
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
EmptySpinner.propTypes = {
|
|
36
|
+
size: _propTypes.default.number
|
|
37
|
+
};
|
|
38
|
+
EmptySpinner.defaultProps = {
|
|
39
|
+
size: 24
|
|
40
|
+
};
|
package/lib/locales/en.js
CHANGED
|
@@ -179,6 +179,7 @@ module.exports = {
|
|
|
179
179
|
installSuccess: 'Successfully installed',
|
|
180
180
|
installing: 'Installing',
|
|
181
181
|
internalIp: 'Internal IP',
|
|
182
|
+
introduction: 'Introduction',
|
|
182
183
|
invite: 'Invite',
|
|
183
184
|
inviting: 'Inviting',
|
|
184
185
|
ip: 'IP',
|
|
@@ -230,6 +231,7 @@ module.exports = {
|
|
|
230
231
|
preferences: 'Preferences',
|
|
231
232
|
protected: 'Protected',
|
|
232
233
|
protocol: 'Protocol',
|
|
234
|
+
publish: 'Publish',
|
|
233
235
|
published: 'published',
|
|
234
236
|
purchase: 'Purchase',
|
|
235
237
|
readMore: 'More',
|
|
@@ -239,11 +241,13 @@ module.exports = {
|
|
|
239
241
|
redirectTemporary: 'Temporary Redirect',
|
|
240
242
|
redirectUrl: 'Redirect URL',
|
|
241
243
|
rewrite: 'Rewrite',
|
|
244
|
+
release: 'Release',
|
|
242
245
|
rewriteUrl: 'Rewrite URL',
|
|
243
246
|
reject: 'Reject',
|
|
244
247
|
reload: 'Reload',
|
|
245
248
|
remark: 'Remark',
|
|
246
249
|
remove: 'Remove',
|
|
250
|
+
removeSuccess: 'Remove successfully',
|
|
247
251
|
renew: 'Renew',
|
|
248
252
|
reportIssue: 'Report an issue',
|
|
249
253
|
required: 'Required',
|
|
@@ -261,6 +265,7 @@ module.exports = {
|
|
|
261
265
|
saveSuccess: 'Saved successfully',
|
|
262
266
|
scheduleFailed: 'schedule failed',
|
|
263
267
|
scheduleSuccess: 'successfully scheduled',
|
|
268
|
+
screenshot: 'Screenshot',
|
|
264
269
|
search: 'Search',
|
|
265
270
|
security: 'Security',
|
|
266
271
|
serverDid: 'Server DID',
|
|
@@ -604,6 +609,36 @@ module.exports = {
|
|
|
604
609
|
error: {
|
|
605
610
|
isRunning: 'Blocklet is running, please stop it first',
|
|
606
611
|
isInProgress: 'Blocklet is in progress, please wait for it to finish'
|
|
612
|
+
},
|
|
613
|
+
publish: {
|
|
614
|
+
productTitle: 'Product',
|
|
615
|
+
versionTitle: 'Version',
|
|
616
|
+
imgTitle: 'Images',
|
|
617
|
+
resourceTitle: 'Resources',
|
|
618
|
+
blockletEmptyTip: 'There aren’t any blocklets here',
|
|
619
|
+
createBlockletTip: 'You can create new blocklet through existing resources, components, and configuration in this application',
|
|
620
|
+
createBlocklet: 'Create a new blocklet',
|
|
621
|
+
deleteBlockletTip: 'The blocklet cannot be recovered after deletion, please confirm',
|
|
622
|
+
componentNotRunning: 'Component {name} is not running, please start it first',
|
|
623
|
+
releaseEmptyTip: 'There aren’t any releases here',
|
|
624
|
+
createReleaseTip: 'You can create a release of the blocklet, along with release notes and resources, for other people to use',
|
|
625
|
+
createRelease: 'Create a new release',
|
|
626
|
+
deleteReleaseTip: 'The release cannot be recovered after deletion',
|
|
627
|
+
createBlockletDid: 'Create from DID Wallet',
|
|
628
|
+
connect: {
|
|
629
|
+
title: 'Create Blocklet DID',
|
|
630
|
+
scan: 'Scan the QR code below to generate Blocklet DID',
|
|
631
|
+
confirm: 'Confirm using DID Wallet',
|
|
632
|
+
success: 'Blocklet DID has been generated, please continue your operation'
|
|
633
|
+
},
|
|
634
|
+
saveDraft: 'Save Draft',
|
|
635
|
+
releaseNote: 'Release Note',
|
|
636
|
+
errorTip: {
|
|
637
|
+
noTitle: 'Blocklet Title is required',
|
|
638
|
+
noVersion: 'Blocklet Version is required',
|
|
639
|
+
noDescription: 'Blocklet Description is required',
|
|
640
|
+
noNote: 'Release Note is required'
|
|
641
|
+
}
|
|
607
642
|
}
|
|
608
643
|
},
|
|
609
644
|
dashboard: {
|