Skip to content

Commit 8ba5a2f

Browse files
author
Yu
authored
feat: add custom getData for block resource (umijs#3263)
1 parent 786692a commit 8ba5a2f

7 files changed

Lines changed: 81 additions & 49 deletions

File tree

packages/umi-build-dev/src/plugins/commands/block/data.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export interface Block {
1010

1111
export interface BlockData {
1212
data: Block[];
13+
success: boolean;
14+
message?: string;
1315
}
1416

1517
export interface RequestParams {
@@ -23,7 +25,7 @@ export interface Resource {
2325
blockType: 'template' | 'block';
2426
resourceType: 'github' | 'custom';
2527
url?: string;
26-
getData?: (params: RequestParams) => BlockData;
28+
getData?: (params?: RequestParams) => Promise<BlockData>;
2729
}
2830

2931
export interface AddBlockParams {

packages/umi-build-dev/src/plugins/commands/block/ui/index.ts

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { IApi } from 'umi-types';
33
import { join } from 'path';
44
import { getBlockListFromGit } from '../util';
55
import { genRouterToTreeData, getFolderTreeData } from './util';
6-
import { Resource, Block, AddBlockParams } from '../data.d';
6+
import { Resource, BlockData, AddBlockParams } from '../data.d';
77
import clearGitCache from '../clearGitCache';
88
import addBlock from '../addBlock';
99
// import getRouteManager from '../../../getRouteManager';
@@ -25,9 +25,11 @@ export function routeExists(path, routes) {
2525
return false;
2626
}
2727

28-
const getBlocks = async (api: IApiBlock): Promise<Block[]> => {
28+
const getBlocks = async (api: IApiBlock): Promise<BlockData> => {
2929
const blocks = await getBlockListFromGit('https://github.com/ant-design/pro-blocks', api);
30-
return blocks;
30+
return {
31+
data: blocks,
32+
};
3133
};
3234

3335
export default (api: IApiBlock) => {
@@ -45,9 +47,9 @@ export default (api: IApiBlock) => {
4547
{
4648
id: 'ant-design-pro',
4749
name: 'Ant Design Pro',
48-
resourceType: 'github',
50+
resourceType: 'custom',
4951
blockType: 'template',
50-
url: 'https://github.com/ant-design/pro-blocks',
52+
getData: () => getBlocks(api),
5153
},
5254
{
5355
id: 'umijs-template',
@@ -59,9 +61,24 @@ export default (api: IApiBlock) => {
5961
{
6062
id: 'umijs-block',
6163
name: 'UmiJS Official',
62-
resourceType: 'github',
64+
resourceType: 'custom',
6365
blockType: 'block',
64-
url: 'https://github.com/umijs/umi-blocks',
66+
getData: () => {
67+
return Promise.resolve({
68+
success: true,
69+
data: [
70+
{
71+
name: 'Demo',
72+
url: 'https://github.com/umijs/umi-blocks/tree/master/demo',
73+
description: '示例区块',
74+
defaultPath: '/demo',
75+
tags: ['UmiJS Official'],
76+
img:
77+
'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjIwMHB4IiB2aWV3Qm94PSIwIDAgMjAwIDIwMCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNDcuMSAoNDU0MjIpIC0gaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoIC0tPgogICAgPHRpdGxlPkdyb3VwIDI4IENvcHkgNTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iNjIuMTAyMzI3MyUiIHkxPSIwJSIgeDI9IjEwOC4xOTcxOCUiIHkyPSIzNy44NjM1NzY0JSIgaWQ9ImxpbmVhckdyYWRpZW50LTEiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNDI4NUVCIiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyRUM3RkYiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI2OS42NDQxMTYlIiB5MT0iMCUiIHgyPSI1NC4wNDI4OTc1JSIgeTI9IjEwOC40NTY3MTQlIiBpZD0ibGluZWFyR3JhZGllbnQtMiI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyOUNERkYiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE0OEVGRiIgb2Zmc2V0PSIzNy44NjAwNjg3JSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjMEE2MEZGIiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iNjkuNjkwODE2NSUiIHkxPSItMTIuOTc0MzU4NyUiIHgyPSIxNi43MjI4OTgxJSIgeTI9IjExNy4zOTEyNDglIiBpZD0ibGluZWFyR3JhZGllbnQtMyI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNGQTgxNkUiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0Y3NEE1QyIgb2Zmc2V0PSI0MS40NzI2MDYlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNGNTFEMkMiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI2OC4xMjc5ODcyJSIgeTE9Ii0zNS42OTA1NzM3JSIgeDI9IjMwLjQ0MDA5MTQlIiB5Mj0iMTE0Ljk0MjY3OSUiIGlkPSJsaW5lYXJHcmFkaWVudC00Ij4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0ZBOEU3RCIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRjc0QTVDIiBvZmZzZXQ9IjUxLjI2MzUxOTElIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNGNTFEMkMiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0ibG9nbyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIwLjAwMDAwMCwgLTIwLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0iR3JvdXAtMjgtQ29weS01IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMC4wMDAwMDAsIDIwLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwLTI3LUNvcHktMyI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwLTI1IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTEuNTg4MDg2Myw0LjE3NjUyODIzIEw0LjE3OTk2NTQ0LDkxLjUxMjc3MjggQy0wLjUxOTI0MDYwNSw5Ni4yMDgxMTQ2IC0wLjUxOTI0MDYwNSwxMDMuNzkxODg1IDQuMTc5OTY1NDQsMTA4LjQ4NzIyNyBMOTEuNTg4MDg2MywxOTUuODIzNDcyIEM5Ni4yODcyOTIzLDIwMC41MTg4MTQgMTAzLjg3NzMwNCwyMDAuNTE4ODE0IDEwOC41NzY1MSwxOTUuODIzNDcyIEwxNDUuMjI1NDg3LDE1OS4yMDQ2MzIgQzE0OS40MzM5NjksMTU0Ljk5OTYxMSAxNDkuNDMzOTY5LDE0OC4xODE5MjQgMTQ1LjIyNTQ4NywxNDMuOTc2OTAzIEMxNDEuMDE3MDA1LDEzOS43NzE4ODEgMTM0LjE5MzcwNywxMzkuNzcxODgxIDEyOS45ODUyMjUsMTQzLjk3NjkwMyBMMTAyLjIwMTkzLDE3MS43MzczNTIgQzEwMS4wMzIzMDUsMTcyLjkwNjAxNSA5OS4yNTcxNjA5LDE3Mi45MDYwMTUgOTguMDg3NTM1OSwxNzEuNzM3MzUyIEwyOC4yODU5MDgsMTAxLjk5MzEyMiBDMjcuMTE2MjgzMSwxMDAuODI0NDU5IDI3LjExNjI4MzEsOTkuMDUwNzc1IDI4LjI4NTkwOCw5Ny44ODIxMTE4IEw5OC4wODc1MzU5LDI4LjEzNzg4MjMgQzk5LjI1NzE2MDksMjYuOTY5MjE5MSAxMDEuMDMyMzA1LDI2Ljk2OTIxOTEgMTAyLjIwMTkzLDI4LjEzNzg4MjMgTDEyOS45ODUyMjUsNTUuODk4MzMxNCBDMTM0LjE5MzcwNyw2MC4xMDMzNTI4IDE0MS4wMTcwMDUsNjAuMTAzMzUyOCAxNDUuMjI1NDg3LDU1Ljg5ODMzMTQgQzE0OS40MzM5NjksNTEuNjkzMzEgMTQ5LjQzMzk2OSw0NC44NzU2MjMyIDE0NS4yMjU0ODcsNDAuNjcwNjAxOCBMMTA4LjU4MDU1LDQuMDU1NzQ1OTIgQzEwMy44NjIwNDksLTAuNTM3OTg2ODQ2IDk2LjI2OTI2MTgsLTAuNTAwNzk3OTA2IDkxLjU4ODA4NjMsNC4xNzY1MjgyMyBaIiBpZD0iU2hhcGUiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQtMSkiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05MS41ODgwODYzLDQuMTc2NTI4MjMgTDQuMTc5OTY1NDQsOTEuNTEyNzcyOCBDLTAuNTE5MjQwNjA1LDk2LjIwODExNDYgLTAuNTE5MjQwNjA1LDEwMy43OTE4ODUgNC4xNzk5NjU0NCwxMDguNDg3MjI3IEw5MS41ODgwODYzLDE5NS44MjM0NzIgQzk2LjI4NzI5MjMsMjAwLjUxODgxNCAxMDMuODc3MzA0LDIwMC41MTg4MTQgMTA4LjU3NjUxLDE5NS44MjM0NzIgTDE0NS4yMjU0ODcsMTU5LjIwNDYzMiBDMTQ5LjQzMzk2OSwxNTQuOTk5NjExIDE0OS40MzM5NjksMTQ4LjE4MTkyNCAxNDUuMjI1NDg3LDE0My45NzY5MDMgQzE0MS4wMTcwMDUsMTM5Ljc3MTg4MSAxMzQuMTkzNzA3LDEzOS43NzE4ODEgMTI5Ljk4NTIyNSwxNDMuOTc2OTAzIEwxMDIuMjAxOTMsMTcxLjczNzM1MiBDMTAxLjAzMjMwNSwxNzIuOTA2MDE1IDk5LjI1NzE2MDksMTcyLjkwNjAxNSA5OC4wODc1MzU5LDE3MS43MzczNTIgTDI4LjI4NTkwOCwxMDEuOTkzMTIyIEMyNy4xMTYyODMxLDEwMC44MjQ0NTkgMjcuMTE2MjgzMSw5OS4wNTA3NzUgMjguMjg1OTA4LDk3Ljg4MjExMTggTDk4LjA4NzUzNTksMjguMTM3ODgyMyBDMTAwLjk5OTg2NCwyNS42MjcxODM2IDEwNS43NTE2NDIsMjAuNTQxODI0IDExMi43Mjk2NTIsMTkuMzUyNDQ4NyBDMTE3LjkxNTU4NSwxOC40Njg1MjYxIDEyMy41ODUyMTksMjAuNDE0MDIzOSAxMjkuNzM4NTU0LDI1LjE4ODk0MjQgQzEyNS42MjQ2NjMsMjEuMDc4NDI5MiAxMTguNTcxOTk1LDE0LjAzNDAzMDQgMTA4LjU4MDU1LDQuMDU1NzQ1OTIgQzEwMy44NjIwNDksLTAuNTM3OTg2ODQ2IDk2LjI2OTI2MTgsLTAuNTAwNzk3OTA2IDkxLjU4ODA4NjMsNC4xNzY1MjgyMyBaIiBpZD0iU2hhcGUiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQtMikiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUzLjY4NTYzMywxMzUuODU0NTc5IEMxNTcuODk0MTE1LDE0MC4wNTk2IDE2NC43MTc0MTIsMTQwLjA1OTYgMTY4LjkyNTg5NCwxMzUuODU0NTc5IEwxOTUuOTU5OTc3LDEwOC44NDI3MjYgQzIwMC42NTkxODMsMTA0LjE0NzM4NCAyMDAuNjU5MTgzLDk2LjU2MzYxMzMgMTk1Ljk2MDUyNyw5MS44Njg4MTk0IEwxNjguNjkwNzc3LDY0LjcxODExNTkgQzE2NC40NzIzMzIsNjAuNTE4MDg1OCAxNTcuNjQ2ODY4LDYwLjUyNDE0MjUgMTUzLjQzNTg5NSw2NC43MzE2NTI2IEMxNDkuMjI3NDEzLDY4LjkzNjY3NCAxNDkuMjI3NDEzLDc1Ljc1NDM2MDcgMTUzLjQzNTg5NSw3OS45NTkzODIxIEwxNzEuODU0MDM1LDk4LjM2MjM3NjUgQzE3My4wMjM2Niw5OS41MzEwMzk2IDE3My4wMjM2NiwxMDEuMzA0NzI0IDE3MS44NTQwMzUsMTAyLjQ3MzM4NyBMMTUzLjY4NTYzMywxMjAuNjI2ODQ5IEMxNDkuNDc3MTUsMTI0LjgzMTg3IDE0OS40NzcxNSwxMzEuNjQ5NTU3IDE1My42ODU2MzMsMTM1Ljg1NDU3OSBaIiBpZD0iU2hhcGUiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQtMykiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50LTQpIiBjeD0iMTAwLjUxOTMzOSIgY3k9IjEwMC40MzY2ODEiIHJ4PSIyMy42MDAxOTI2IiByeT0iMjMuNTgwNzg2Ij48L2VsbGlwc2U+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==',
78+
},
79+
],
80+
});
81+
},
6582
},
6683
];
6784

@@ -125,12 +142,25 @@ export default (api: IApiBlock) => {
125142

126143
// 获取区块列表
127144
case 'org.umi.block.list':
128-
getBlocks(api).then(blocks =>
129-
success({
130-
data: blocks,
131-
success: true,
132-
}),
133-
);
145+
const { reource: reourceId } = payload as any;
146+
const reource = reources.find(item => item.id === reourceId);
147+
if (reource) {
148+
if (reource.resourceType === 'custom') {
149+
reource.getData().then(res => {
150+
success(res);
151+
});
152+
} else {
153+
success({
154+
// TODO support other resourceType
155+
data: [],
156+
success: true,
157+
});
158+
}
159+
} else {
160+
failure({
161+
message: `not find reource ${reourceId}`,
162+
});
163+
}
134164
break;
135165

136166
// 区块添加

packages/umi-build-dev/src/plugins/commands/block/ui/locales/en-US.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export default {
22
'org.umi.ui.blocks.panel': 'Blocks',
3-
'org.umi.ui.blocks.content.title': 'Assets Market',
3+
'org.umi.ui.blocks.content.title': 'Assets',
44
'org.umi.ui.blocks.content.search_block': 'Please search your block name',
55
'org.umi.ui.blocks.notify.title': 'Notify Title',
66
'org.umi.ui.blocks.notify.message': 'Notify Message',

packages/umi-build-dev/src/plugins/commands/block/ui/locales/zh-CN.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export default {
22
'org.umi.ui.blocks.panel': '区块',
3-
'org.umi.ui.blocks.content.title': '资产市场',
3+
'org.umi.ui.blocks.content.title': '资产',
44
'org.umi.ui.blocks.content.search_block': '输入要搜索的区块名',
55
'org.umi.ui.blocks.notify.title': '通知栏标题',
66
'org.umi.ui.blocks.notify.message': '通知栏描述',

packages/umi-build-dev/src/plugins/commands/block/ui/ui.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default (api: IUiApi) => {
2727
api.addPanel({
2828
title: 'org.umi.ui.blocks.content.title',
2929
path: '/blocks',
30-
icon: 'environment',
30+
icon: 'block',
3131
actions: [
3232
{
3333
title: '清除缓存',

packages/umi-build-dev/src/plugins/commands/block/ui/ui/Adder/index.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,34 @@ const Adder: React.FC<Props> = props => {
2626
const [transformJS, setTransformJS] = useState<boolean>(false);
2727
const [removeLocale, setRemoveLocale] = useState<boolean>(false);
2828

29+
// TODO check exists
30+
// let path = defaultPath;
31+
// const { exists } = await callRemote({
32+
// type: 'org.umi.block.checkexist',
33+
// payload: {
34+
// path,
35+
// },
36+
// });
37+
38+
// block 存在时加数字后缀找一个不存在的
39+
// if (exists) {
40+
// let count = 2;
41+
// while (true) {
42+
// const { exists } = await callRemote({
43+
// type: 'org.umi.block.checkexist',
44+
// payload: {
45+
// path: `${path}-${count}`,
46+
// },
47+
// });
48+
// if (exists) {
49+
// count += 1;
50+
// } else {
51+
// path = `${path}-${count}`;
52+
// break;
53+
// }
54+
// }
55+
// }
56+
2957
const { data: routePathTreeData } = useCallData(
3058
() => {
3159
return callRemote({

packages/umi-build-dev/src/plugins/commands/block/ui/ui/index.tsx

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ const BlocksViewer: React.FC<Props> = props => {
3333
},
3434
);
3535

36-
const current: Resource | undefined = activeResource || resources[0];
36+
const current: Resource | undefined =
37+
activeResource || resources.filter(item => item.blockType === type)[0];
3738

3839
const { data: blocks, loading } = useCallData<Block[]>(
3940
() => {
@@ -43,7 +44,7 @@ const BlocksViewer: React.FC<Props> = props => {
4344
return callRemote({
4445
type: 'org.umi.block.list',
4546
payload: {
46-
reources: current.id,
47+
reource: current.id,
4748
},
4849
}) as any;
4950
},
@@ -56,40 +57,11 @@ const BlocksViewer: React.FC<Props> = props => {
5657
function addHandler(params) {
5758
(async () => {
5859
const { url } = params;
59-
// TODO check exists
60-
// let path = defaultPath;
61-
// const { exists } = await callRemote({
62-
// type: 'org.umi.block.checkexist',
63-
// payload: {
64-
// path,
65-
// },
66-
// });
67-
68-
// block 存在时加数字后缀找一个不存在的
69-
// if (exists) {
70-
// let count = 2;
71-
// while (true) {
72-
// const { exists } = await callRemote({
73-
// type: 'org.umi.block.checkexist',
74-
// payload: {
75-
// path: `${path}-${count}`,
76-
// },
77-
// });
78-
// if (exists) {
79-
// count += 1;
80-
// } else {
81-
// path = `${path}-${count}`;
82-
// break;
83-
// }
84-
// }
85-
// }
86-
8760
setBlockAdding(url);
88-
const msg = await callRemote({
61+
await callRemote({
8962
type: 'org.umi.block.add',
9063
payload: params,
9164
});
92-
console.log(msg);
9365
setBlockAdding(null);
9466
})();
9567
}

0 commit comments

Comments
 (0)