@abtnode/ux 1.16.17-beta-d282d63e → 1.16.17-beta-1cab4b42
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 +33 -21
- package/es/blocklet/publish/create-release.js +150 -67
- package/es/blocklet/publish/project-list.js +26 -2
- package/es/blocklet/publish/release-list.js +21 -0
- package/es/blocklet/publish/resource.js +129 -22
- package/es/blocklet/publish/tree.js +235 -0
- package/es/blocklet/router/util.js +2 -1
- package/es/locales/en.js +3 -1
- package/es/locales/zh.js +3 -1
- package/es/team/members/toggle-user-approval.js +4 -1
- package/lib/blocklet/publish/create-project.js +33 -21
- package/lib/blocklet/publish/create-release.js +145 -64
- package/lib/blocklet/publish/project-list.js +26 -2
- package/lib/blocklet/publish/release-list.js +21 -0
- package/lib/blocklet/publish/resource.js +115 -20
- package/lib/blocklet/publish/tree.js +199 -0
- package/lib/blocklet/router/util.js +2 -1
- package/lib/locales/en.js +3 -1
- package/lib/locales/zh.js +3 -1
- package/lib/team/members/toggle-user-approval.js +4 -1
- package/package.json +18 -18
|
@@ -7,15 +7,37 @@ exports.default = Resource;
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
-
var
|
|
10
|
+
var _difference = _interopRequireDefault(require("lodash/difference"));
|
|
11
11
|
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
12
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
12
13
|
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
14
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
15
|
+
var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
|
|
16
|
+
var _tree = _interopRequireDefault(require("./tree"));
|
|
17
|
+
var _node = require("../../contexts/node");
|
|
18
|
+
var _api = require("../../util/api");
|
|
13
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
20
|
var _templateObject;
|
|
15
|
-
/* eslint-disable no-unused-vars */
|
|
16
|
-
/* eslint-disable react/no-unstable-nested-components */
|
|
17
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
22
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
23
|
+
const fillParent = (nodes, parentId) => {
|
|
24
|
+
nodes.forEach(node => {
|
|
25
|
+
if (parentId) {
|
|
26
|
+
node.parent = parentId;
|
|
27
|
+
}
|
|
28
|
+
(node.children || []).forEach(child => {
|
|
29
|
+
child.parent = node.id;
|
|
30
|
+
fillParent(child.children || [], child.id);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
return nodes;
|
|
34
|
+
};
|
|
35
|
+
const checkDiff = (a, b) => {
|
|
36
|
+
if (a.length !== b.length) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return !!(0, _difference.default)(a, b || []).length;
|
|
40
|
+
};
|
|
19
41
|
function Resource(_ref) {
|
|
20
42
|
let {
|
|
21
43
|
app,
|
|
@@ -27,20 +49,82 @@ function Resource(_ref) {
|
|
|
27
49
|
t,
|
|
28
50
|
locale
|
|
29
51
|
} = (0, _context.useLocaleContext)();
|
|
30
|
-
const
|
|
52
|
+
const {
|
|
53
|
+
api
|
|
54
|
+
} = (0, _node.useNodeContext)();
|
|
55
|
+
const [resources, setResources] = (0, _react.useState)([]);
|
|
56
|
+
const [selectedResourceIds, setSelectedResourceIds] = (0, _react.useState)([]);
|
|
57
|
+
const [savedResourceIds, setSavedResourceIds] = (0, _react.useState)([]);
|
|
58
|
+
const [loading, setLoading] = (0, _react.useState)(false);
|
|
31
59
|
const releaseId = release.id;
|
|
32
60
|
const readonly = release.status === 'published';
|
|
33
61
|
const {
|
|
34
|
-
|
|
62
|
+
resourceExportApi = '/'
|
|
35
63
|
} = (component === null || component === void 0 ? void 0 : component.meta.capabilities) || {};
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
const hasDiff = (0, _react.useMemo)(() => checkDiff(savedResourceIds, selectedResourceIds), [savedResourceIds, selectedResourceIds]);
|
|
65
|
+
const urlObj = new URL((0, _urlJoin.default)('http://127.0.0.1', component.mountPoint, resourceExportApi || '/').replace(/\/+/g, '/'));
|
|
66
|
+
urlObj.searchParams.set('projectId', projectId);
|
|
67
|
+
urlObj.searchParams.set('releaseId', releaseId);
|
|
68
|
+
urlObj.searchParams.set('local', locale);
|
|
69
|
+
const url = "".concat(urlObj.pathname).concat(urlObj.search);
|
|
70
|
+
const saveSelected = async data => {
|
|
71
|
+
try {
|
|
72
|
+
await api.updateSelectedResources({
|
|
73
|
+
input: {
|
|
74
|
+
did: app.meta.did,
|
|
75
|
+
projectId,
|
|
76
|
+
releaseId,
|
|
77
|
+
componentDid: component.meta.did,
|
|
78
|
+
resources: data
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
setSavedResourceIds(data);
|
|
82
|
+
} catch (err) {
|
|
83
|
+
_Toast.default.error(err.message);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const onSave = async () => {
|
|
87
|
+
const params = selectedResourceIds;
|
|
88
|
+
try {
|
|
89
|
+
setLoading(true);
|
|
90
|
+
await _api.axios.post(url, {
|
|
91
|
+
resources: params,
|
|
92
|
+
projectId,
|
|
93
|
+
releaseId,
|
|
94
|
+
locale
|
|
95
|
+
});
|
|
96
|
+
_Toast.default.success(t('common.saveSuccess'));
|
|
97
|
+
setLoading(false);
|
|
98
|
+
saveSelected(selectedResourceIds);
|
|
99
|
+
} catch (err) {
|
|
100
|
+
setLoading(false);
|
|
101
|
+
_Toast.default.error(err.message);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
(0, _react.useEffect)(() => {
|
|
105
|
+
_api.axios.get(url).then(res => {
|
|
106
|
+
var _res$data;
|
|
107
|
+
const tree = fillParent(((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.resources) || []);
|
|
108
|
+
setResources(tree);
|
|
109
|
+
}).catch(err => {
|
|
110
|
+
_Toast.default.error(err.message);
|
|
111
|
+
});
|
|
112
|
+
api.getSelectedResources({
|
|
113
|
+
input: {
|
|
114
|
+
did: app.meta.did,
|
|
115
|
+
projectId,
|
|
116
|
+
releaseId,
|
|
117
|
+
componentDid: component.meta.did
|
|
118
|
+
}
|
|
119
|
+
}).then(res => {
|
|
120
|
+
const list = (res === null || res === void 0 ? void 0 : res.resources) || [];
|
|
121
|
+
setSelectedResourceIds(list);
|
|
122
|
+
setSavedResourceIds(list);
|
|
123
|
+
}).catch(err => {
|
|
124
|
+
_Toast.default.error(err.message);
|
|
125
|
+
});
|
|
126
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
127
|
+
}, [url]);
|
|
44
128
|
if (component.status !== 'running') {
|
|
45
129
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
|
|
46
130
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
@@ -52,12 +136,23 @@ function Resource(_ref) {
|
|
|
52
136
|
});
|
|
53
137
|
}
|
|
54
138
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, {
|
|
55
|
-
children: /*#__PURE__*/(0, _jsxRuntime.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
139
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
140
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_tree.default, {
|
|
141
|
+
data: resources,
|
|
142
|
+
value: selectedResourceIds,
|
|
143
|
+
onChange: data => {
|
|
144
|
+
setSelectedResourceIds(data);
|
|
145
|
+
},
|
|
146
|
+
disabled: loading || readonly
|
|
147
|
+
}), !readonly && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
148
|
+
className: "footer",
|
|
149
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
150
|
+
variant: "contained",
|
|
151
|
+
disabled: loading || !hasDiff,
|
|
152
|
+
onClick: () => onSave(),
|
|
153
|
+
children: t('common.save')
|
|
154
|
+
})
|
|
155
|
+
})]
|
|
61
156
|
})
|
|
62
157
|
});
|
|
63
158
|
}
|
|
@@ -75,4 +170,4 @@ Resource.defaultProps = {
|
|
|
75
170
|
id: ''
|
|
76
171
|
}
|
|
77
172
|
};
|
|
78
|
-
const Container = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n
|
|
173
|
+
const Container = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 16px;\n padding-bottom: 0px;\n max-height: 600px;\n overflow-y: auto;\n .footer {\n border-top: 1px solid #ddd;\n display: flex;\n padding: 12px 0;\n margin-top: 12px;\n position: sticky;\n bottom: 0;\n background: #fff;\n }\n"])));
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = Tree;
|
|
7
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
8
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
+
var _isUrl = _interopRequireDefault(require("is-url"));
|
|
11
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
12
|
+
var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
|
|
13
|
+
var _TreeView = _interopRequireDefault(require("@mui/lab/TreeView"));
|
|
14
|
+
var _TreeItem = _interopRequireDefault(require("@mui/lab/TreeItem"));
|
|
15
|
+
var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
|
|
16
|
+
var _ExpandMore = _interopRequireDefault(require("@mui/icons-material/ExpandMore"));
|
|
17
|
+
var _ChevronRight = _interopRequireDefault(require("@mui/icons-material/ChevronRight"));
|
|
18
|
+
var _OpenInNew = _interopRequireDefault(require("@mui/icons-material/OpenInNew"));
|
|
19
|
+
var _react = require("@iconify/react");
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
+
var _templateObject; // BFS algorithm to find node by his ID
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
24
|
+
const bfsSearch = (graph, targetId) => {
|
|
25
|
+
const queue = [...graph];
|
|
26
|
+
while (queue.length > 0) {
|
|
27
|
+
const currNode = queue.shift();
|
|
28
|
+
if (currNode.id === targetId) {
|
|
29
|
+
return currNode;
|
|
30
|
+
}
|
|
31
|
+
if (currNode.children) {
|
|
32
|
+
queue.push(...currNode.children);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return []; // Target node not found
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
function ResourceIcon(_ref) {
|
|
39
|
+
let {
|
|
40
|
+
icon
|
|
41
|
+
} = _ref;
|
|
42
|
+
if (!icon) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
if ((0, _isUrl.default)(icon)) {
|
|
46
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
47
|
+
className: "resource-icon",
|
|
48
|
+
src: icon,
|
|
49
|
+
alt: "icon"
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Icon, {
|
|
53
|
+
className: "resource-icon",
|
|
54
|
+
icon: icon
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
ResourceIcon.propTypes = {
|
|
58
|
+
icon: _propTypes.default.string
|
|
59
|
+
};
|
|
60
|
+
ResourceIcon.defaultProps = {
|
|
61
|
+
icon: ''
|
|
62
|
+
};
|
|
63
|
+
function Tree(_ref2) {
|
|
64
|
+
let {
|
|
65
|
+
disabled,
|
|
66
|
+
data,
|
|
67
|
+
onChange,
|
|
68
|
+
value
|
|
69
|
+
} = _ref2;
|
|
70
|
+
const selectedNodes = value;
|
|
71
|
+
|
|
72
|
+
// Retrieve all ids from node to his children's
|
|
73
|
+
function getAllIds(node) {
|
|
74
|
+
let idList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
75
|
+
idList.push(node.id);
|
|
76
|
+
if (node.children) {
|
|
77
|
+
node.children.forEach(child => getAllIds(child, idList));
|
|
78
|
+
}
|
|
79
|
+
return idList;
|
|
80
|
+
}
|
|
81
|
+
// Get IDs of all children from specific node
|
|
82
|
+
const getAllChild = id => {
|
|
83
|
+
return getAllIds(bfsSearch(data, id));
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// Get all father IDs from specific node
|
|
87
|
+
const getAllFathers = function getAllFathers(id) {
|
|
88
|
+
let list = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
89
|
+
const node = bfsSearch(data, id);
|
|
90
|
+
if (node.parent) {
|
|
91
|
+
list.push(node.parent);
|
|
92
|
+
return getAllFathers(node.parent, list);
|
|
93
|
+
}
|
|
94
|
+
return list;
|
|
95
|
+
};
|
|
96
|
+
function isAllChildrenChecked(node, list) {
|
|
97
|
+
const allChild = getAllChild(node.id);
|
|
98
|
+
const nodeIdIndex = allChild.indexOf(node.id);
|
|
99
|
+
allChild.splice(nodeIdIndex, 1);
|
|
100
|
+
return allChild.every(nodeId => selectedNodes.concat(list).includes(nodeId));
|
|
101
|
+
}
|
|
102
|
+
const handleNodeSelect = (event, nodeId) => {
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
const allChild = getAllChild(nodeId);
|
|
105
|
+
const fathers = getAllFathers(nodeId);
|
|
106
|
+
if (selectedNodes.includes(nodeId)) {
|
|
107
|
+
// Need to de-check
|
|
108
|
+
const newValue = selectedNodes.filter(id => !allChild.concat(fathers).includes(id));
|
|
109
|
+
onChange(newValue);
|
|
110
|
+
} else {
|
|
111
|
+
// Need to check
|
|
112
|
+
const ToBeChecked = allChild;
|
|
113
|
+
for (let i = 0; i < fathers.length; ++i) {
|
|
114
|
+
if (isAllChildrenChecked(bfsSearch(data, fathers[i]), ToBeChecked)) {
|
|
115
|
+
ToBeChecked.push(fathers[i]);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
onChange([...selectedNodes].concat(ToBeChecked));
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const stopExpand = event => {
|
|
122
|
+
// prevent the click event from propagating to the checkbox
|
|
123
|
+
event.stopPropagation();
|
|
124
|
+
};
|
|
125
|
+
const hadChildren = data.some(node => {
|
|
126
|
+
var _node$children;
|
|
127
|
+
return ((_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.length) > 0;
|
|
128
|
+
});
|
|
129
|
+
const renderTree = node => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeItem.default, {
|
|
130
|
+
nodeId: node.id,
|
|
131
|
+
label: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
|
|
132
|
+
onClick: stopExpand,
|
|
133
|
+
control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
|
|
134
|
+
size: "small",
|
|
135
|
+
checked: selectedNodes.indexOf(node.id) !== -1,
|
|
136
|
+
tabIndex: -1,
|
|
137
|
+
disableRipple: true,
|
|
138
|
+
onClick: event => handleNodeSelect(event, node.id),
|
|
139
|
+
disabled: disabled
|
|
140
|
+
}),
|
|
141
|
+
label: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
142
|
+
className: "content",
|
|
143
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
144
|
+
display: "flex",
|
|
145
|
+
alignItems: "center",
|
|
146
|
+
children: [node.icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(ResourceIcon, {
|
|
147
|
+
icon: node.icon
|
|
148
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
149
|
+
className: "name",
|
|
150
|
+
children: node.name
|
|
151
|
+
}), node.url && /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
|
152
|
+
href: node.url,
|
|
153
|
+
target: "_blank",
|
|
154
|
+
rel: "noreferrer",
|
|
155
|
+
className: "link",
|
|
156
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OpenInNew.default, {
|
|
157
|
+
className: "link-icon"
|
|
158
|
+
})
|
|
159
|
+
})]
|
|
160
|
+
}), !!node.description && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
161
|
+
className: "description",
|
|
162
|
+
children: node.description
|
|
163
|
+
})]
|
|
164
|
+
})
|
|
165
|
+
}),
|
|
166
|
+
children: Array.isArray(node.children) ? node.children.map(renderTree) : null
|
|
167
|
+
}, node.id);
|
|
168
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledTreeView, {
|
|
169
|
+
className: (0, _classnames.default)(!hadChildren && 'no-children'),
|
|
170
|
+
multiSelect: true,
|
|
171
|
+
defaultCollapseIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandMore.default, {}),
|
|
172
|
+
defaultExpandIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChevronRight.default, {}),
|
|
173
|
+
selected: selectedNodes,
|
|
174
|
+
children: data.map(node => renderTree(node))
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
Tree.propTypes = {
|
|
178
|
+
data: _propTypes.default.array,
|
|
179
|
+
value: _propTypes.default.array,
|
|
180
|
+
onChange: _propTypes.default.func,
|
|
181
|
+
disabled: _propTypes.default.bool
|
|
182
|
+
};
|
|
183
|
+
Tree.defaultProps = {
|
|
184
|
+
data: [],
|
|
185
|
+
value: [],
|
|
186
|
+
onChange: () => {},
|
|
187
|
+
disabled: false
|
|
188
|
+
};
|
|
189
|
+
const StyledTreeView = (0, _styled.default)(_TreeView.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n &.no-children {\n .MuiTreeItem-content {\n padding: 0;\n .MuiTreeItem-iconContainer {\n display: none;\n }\n .MuiTreeItem-label {\n padding-left: 0;\n }\n }\n }\n .MuiTreeItem-content {\n align-items: flex-start;\n .MuiTreeItem-iconContainer {\n transform: translateY(10px);\n }\n &.Mui-selected {\n background-color: transparent;\n }\n }\n .MuiTreeItem-label {\n cursor: default;\n }\n .MuiFormControlLabel-root {\n align-items: flex-start;\n }\n .content {\n padding-top: 6px;\n }\n .name {\n font-size: 16px;\n font-weight: 700;\n }\n .resource-icon {\n margin-right: 2px;\n font-size: 16px;\n }\n img.resource-icon {\n width: 1rem;\n height: 1rem;\n }\n .link {\n margin-left: 8px;\n font-size: 16px;\n color: ", ";\n display: flex;\n }\n .link-icon {\n font-size: inherit;\n }\n .description {\n font-size: 14px;\n color: ", ";\n }\n"])), _ref3 => {
|
|
190
|
+
let {
|
|
191
|
+
theme
|
|
192
|
+
} = _ref3;
|
|
193
|
+
return theme.palette.primary.main;
|
|
194
|
+
}, _ref4 => {
|
|
195
|
+
let {
|
|
196
|
+
theme
|
|
197
|
+
} = _ref4;
|
|
198
|
+
return theme.palette.text.secondary;
|
|
199
|
+
});
|
|
@@ -7,6 +7,7 @@ exports.validateSite = exports.validateRule = exports.validatePathPrefix = expor
|
|
|
7
7
|
var _constant = require("@abtnode/constant");
|
|
8
8
|
var _isPathPrefixEqual = _interopRequireDefault(require("@abtnode/util/lib/is-path-prefix-equal"));
|
|
9
9
|
var _constant2 = require("@blocklet/constant");
|
|
10
|
+
var _hasStartEngine = _interopRequireDefault(require("@blocklet/meta/lib/has-start-engine"));
|
|
10
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
12
|
/* eslint-disable import/prefer-default-export */
|
|
12
13
|
|
|
@@ -86,7 +87,7 @@ const validatePathPrefix = _ref => {
|
|
|
86
87
|
} = _ref;
|
|
87
88
|
// validate children
|
|
88
89
|
if (curBlocklet) {
|
|
89
|
-
let exist = (curBlocklet.children || []).find(x => (0, _isPathPrefixEqual.default)(x.mountPoint, params.pathPrefix));
|
|
90
|
+
let exist = (curBlocklet.children || []).find(x => (0, _hasStartEngine.default)(x.meta) && (0, _isPathPrefixEqual.default)(x.mountPoint, params.pathPrefix));
|
|
90
91
|
if (curBlocklet.meta.group !== 'gateway' && params.pathPrefix === '/') {
|
|
91
92
|
exist = '/';
|
|
92
93
|
}
|
package/lib/locales/en.js
CHANGED
|
@@ -634,6 +634,7 @@ module.exports = {
|
|
|
634
634
|
saveDraft: 'Save Draft',
|
|
635
635
|
releaseNote: 'Release Note',
|
|
636
636
|
errorTip: {
|
|
637
|
+
noDid: 'Blocklet DID is required',
|
|
637
638
|
noTitle: 'Blocklet Title is required',
|
|
638
639
|
noVersion: 'Blocklet Version is required',
|
|
639
640
|
noDescription: 'Blocklet Description is required',
|
|
@@ -1315,7 +1316,8 @@ module.exports = {
|
|
|
1315
1316
|
launchFailed: 'Failed to launch the app, please try again',
|
|
1316
1317
|
installedButStopped: 'The app is installed successfully, but cannot be started. You can start it manually after resolving blocking issues',
|
|
1317
1318
|
installedButError: 'The app is successfully installed, but failed to start',
|
|
1318
|
-
restoreFailed: 'Failed to restore app, please try again'
|
|
1319
|
+
restoreFailed: 'Failed to restore app, please try again',
|
|
1320
|
+
resourceBlocklet: 'Resource Blocklet cannot be installed as an application, you can mount this blocklet into existing applications.'
|
|
1319
1321
|
},
|
|
1320
1322
|
steps: {
|
|
1321
1323
|
introduction: 'Introduction',
|
package/lib/locales/zh.js
CHANGED
|
@@ -641,6 +641,7 @@ module.exports = {
|
|
|
641
641
|
saveDraft: '保存草稿',
|
|
642
642
|
releaseNote: '发布说明',
|
|
643
643
|
errorTip: {
|
|
644
|
+
noDid: '请填写 Blocklet DID',
|
|
644
645
|
noTitle: '请填写 Blocklet 名称',
|
|
645
646
|
noVersion: '请填写 Blocklet 版本号',
|
|
646
647
|
noDescription: '请填写 Blocklet 描述',
|
|
@@ -1320,7 +1321,8 @@ module.exports = {
|
|
|
1320
1321
|
launchFailed: '启动应用失败,请重试',
|
|
1321
1322
|
installedButStopped: '应用安装成功,但是无法启动,解决启动问题之后后可手动启动',
|
|
1322
1323
|
installedButError: '应用已经安装,但是运行出错了',
|
|
1323
|
-
restoreFailed: '还原应用失败,请重试'
|
|
1324
|
+
restoreFailed: '还原应用失败,请重试',
|
|
1325
|
+
resourceBlocklet: '资源 Blocklet 无法作为应用被安装,你可以将该 Blocklet 挂载到现有的应用中。'
|
|
1324
1326
|
},
|
|
1325
1327
|
steps: {
|
|
1326
1328
|
introduction: '简介',
|
|
@@ -8,6 +8,7 @@ var _react = require("react");
|
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
10
10
|
var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
|
|
11
|
+
var _passport = require("@abtnode/util/lib/passport");
|
|
11
12
|
var _confirm = _interopRequireDefault(require("../../confirm"));
|
|
12
13
|
var _node = require("../../contexts/node");
|
|
13
14
|
var _team = require("../../contexts/team");
|
|
@@ -88,7 +89,9 @@ function ToggleUserApproval(_ref) {
|
|
|
88
89
|
color: user.approved ? 'error' : 'primary'
|
|
89
90
|
};
|
|
90
91
|
let can;
|
|
91
|
-
if (
|
|
92
|
+
if ((0, _passport.hasActiveOwnerPassport)(user)) {
|
|
93
|
+
can = false;
|
|
94
|
+
} else if (!inService) {
|
|
92
95
|
can = nodeInfo.nodeOwner && !isNodeOwner(nodeInfo, user.did) && !isSelf(session.user, user.did);
|
|
93
96
|
} else {
|
|
94
97
|
can = !isSelf(session.user, user.did);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abtnode/ux",
|
|
3
|
-
"version": "1.16.17-beta-
|
|
3
|
+
"version": "1.16.17-beta-1cab4b42",
|
|
4
4
|
"description": "UX components shared across abtnode packages",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -27,24 +27,24 @@
|
|
|
27
27
|
"author": "linchen <linchen1987@foxmail.com> (http://github.com/linchen1987)",
|
|
28
28
|
"license": "Apache-2.0",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@abtnode/auth": "1.16.17-beta-
|
|
31
|
-
"@abtnode/constant": "1.16.17-beta-
|
|
32
|
-
"@abtnode/util": "1.16.17-beta-
|
|
30
|
+
"@abtnode/auth": "1.16.17-beta-1cab4b42",
|
|
31
|
+
"@abtnode/constant": "1.16.17-beta-1cab4b42",
|
|
32
|
+
"@abtnode/util": "1.16.17-beta-1cab4b42",
|
|
33
33
|
"@ahooksjs/use-url-state": "^3.5.1",
|
|
34
|
-
"@arcblock/did": "^1.18.
|
|
35
|
-
"@arcblock/did-connect": "^2.7.
|
|
34
|
+
"@arcblock/did": "^1.18.92",
|
|
35
|
+
"@arcblock/did-connect": "^2.7.27",
|
|
36
36
|
"@arcblock/did-motif": "^1.1.13",
|
|
37
|
-
"@arcblock/icons": "^2.7.
|
|
38
|
-
"@arcblock/nft-display": "2.7.
|
|
39
|
-
"@arcblock/react-hooks": "^2.7.
|
|
40
|
-
"@arcblock/terminal": "^2.7.
|
|
41
|
-
"@arcblock/ux": "^2.7.
|
|
42
|
-
"@blocklet/constant": "1.16.17-beta-
|
|
43
|
-
"@blocklet/launcher-layout": "2.2.
|
|
37
|
+
"@arcblock/icons": "^2.7.27",
|
|
38
|
+
"@arcblock/nft-display": "2.7.27",
|
|
39
|
+
"@arcblock/react-hooks": "^2.7.27",
|
|
40
|
+
"@arcblock/terminal": "^2.7.27",
|
|
41
|
+
"@arcblock/ux": "^2.7.27",
|
|
42
|
+
"@blocklet/constant": "1.16.17-beta-1cab4b42",
|
|
43
|
+
"@blocklet/launcher-layout": "2.2.21",
|
|
44
44
|
"@blocklet/list": "^0.12.45",
|
|
45
|
-
"@blocklet/meta": "1.16.17-beta-
|
|
46
|
-
"@blocklet/ui-react": "^2.7.
|
|
47
|
-
"@blocklet/uploader": "^0.0.
|
|
45
|
+
"@blocklet/meta": "1.16.17-beta-1cab4b42",
|
|
46
|
+
"@blocklet/ui-react": "^2.7.27",
|
|
47
|
+
"@blocklet/uploader": "^0.0.26",
|
|
48
48
|
"@emotion/react": "^11.10.4",
|
|
49
49
|
"@emotion/styled": "^11.10.4",
|
|
50
50
|
"@iconify/react": "^4.0.0",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@mui/material": "^5.14.10",
|
|
55
55
|
"@mui/styles": "^5.14.10",
|
|
56
56
|
"@mui/x-date-pickers": "^6.14.0",
|
|
57
|
-
"@ocap/client": "1.18.
|
|
57
|
+
"@ocap/client": "1.18.92",
|
|
58
58
|
"@uiw/react-markdown-preview": "4.0.6",
|
|
59
59
|
"ahooks": "^3.7.1",
|
|
60
60
|
"axios": "^0.27.2",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"babel-plugin-inline-react-svg": "^1.1.2",
|
|
101
101
|
"glob": "^10.3.3"
|
|
102
102
|
},
|
|
103
|
-
"gitHead": "
|
|
103
|
+
"gitHead": "114d4fedc6b4a8034a3d2ea9e166544fb6c2588e",
|
|
104
104
|
"exports": {
|
|
105
105
|
".": {
|
|
106
106
|
"import": "./es/index.js",
|