Compare commits

...

3 Commits

Author SHA1 Message Date
wwsun
f2919c1aa0 chore(release): publish
- @music163/tango-designer@1.0.0-alpha.2
 - tango-spec@1.0.2
2023-12-13 15:59:20 +08:00
wwsun
5dd5ab62a8 chore: up 2023-12-13 15:57:54 +08:00
Wells
5e7e285452 fix: update variable tree with help messages and styling & add tangoConfig schema
* fix: update variable tree with help messages and styling

* chore: add spec package

* fix: update schema

* chore: disabled umi https2

---------

Co-authored-by: wwsun <ww.sww@outlook.com>
2023-12-13 14:03:07 +08:00
13 changed files with 865 additions and 139 deletions

View File

@@ -11,6 +11,7 @@ export default defineConfig({
],
npmClient: 'yarn',
mfsu: false,
codeSplitting: false,
alias: {
'@music163/tango-helpers': resolvePackageIndex('helpers/src/index.ts'),
'@music163/tango-core': resolvePackageIndex('core/src/index.ts'),
@@ -40,6 +41,7 @@ export default defineConfig({
https: {
key: path.resolve(__dirname, 'local.netease.com-key.pem'),
cert: path.resolve(__dirname, 'local.netease.com.pem'),
http2: false,
},
chainWebpack: (config: any) => {
// @see https://github.com/graphql/graphql-js/issues/1272#issuecomment-393903706

View File

@@ -4,7 +4,7 @@
"private": true,
"author": "Wells <ww.sun@outlook.com>",
"scripts": {
"dev": "HOST=local.netease.com umi dev",
"dev": "HOST=local.netease.com PORT=8001 umi dev",
"build": "umi build",
"postinstall": "umi setup",
"setup": "umi setup",
@@ -12,9 +12,6 @@
},
"dependencies": {
"@ant-design/icons": "^4.8.0",
"@music163/tango-core": "*",
"@music163/tango-designer": "*",
"@music163/tango-helpers": "*",
"antd": "^4.24.2",
"coral-system": "^1.0.5",
"umi": "^4.0.89"

View File

@@ -14,23 +14,22 @@ export const bootHelperVariables = [
title: '工具函数',
children: [
{
title: 'setStoreValue',
title: '设置变量值',
key: '() => tango.setStoreValue("variableName", "variableValue")',
type: 'function',
help: '设置状态值tango.setStoreValue("variableName", "variableValue")',
},
{
title: 'getStoreValue',
title: '获取变量值',
key: '() => tango.getStoreValue("variableName")',
type: 'function',
help: '获取状态值',
},
{ title: 'openModal', key: '() => tango.openModal("")', type: 'function' },
{ title: 'closeModal', key: '() => tango.closeModal("")', type: 'function' },
{ title: 'navigateTo', key: '() => tango.navigateTo("/")', type: 'function' },
{ title: 'showToast', key: '() => tango.showToast("hello")', type: 'function' },
{ title: 'formatDate', key: '() => tango.formatDate("2022-12-12")', type: 'function' },
{ title: 'formatNumber', key: '() => tango.formatDate(9999)', type: 'function' },
{ title: '打开弹窗', key: '() => tango.openModal("")', type: 'function' },
{ title: '关闭弹窗', key: '() => tango.closeModal("")', type: 'function' },
{ title: '切换路由', key: '() => tango.navigateTo("/")', type: 'function' },
{
title: 'copyToClipboard',
title: '拷贝到剪贴板',
key: '() => tango.copyToClipboard("hello")',
type: 'function',
},

View File

@@ -26,9 +26,9 @@
"prepare": "husky install"
},
"devDependencies": {
"@babel/preset-env": "^7.23.2",
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.2",
"@babel/preset-env": "^7.23.6",
"@babel/preset-react": "^7.23.3",
"@babel/preset-typescript": "^7.23.3",
"@commitlint/cli": "^18.4.3",
"@commitlint/config-conventional": "^18.4.3",
"@types/jest": "^29.5.7",

View File

@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# [1.0.0-alpha.2](https://github.com/netease/tango/compare/@music163/tango-designer@1.0.0-alpha.1...@music163/tango-designer@1.0.0-alpha.2) (2023-12-13)
### Bug Fixes
- update variable tree with help messages and styling & add tangoConfig schema ([5e7e285](https://github.com/netease/tango/commit/5e7e285452b46888b447991b0e8548b6392acb3a))
# [1.0.0-alpha.1](https://github.com/netease/tango/compare/@music163/tango-designer@0.5.14...@music163/tango-designer@1.0.0-alpha.1) (2023-12-12)
### Bug Fixes

View File

@@ -1,6 +1,6 @@
{
"name": "@music163/tango-designer",
"version": "1.0.0-alpha.1",
"version": "1.0.0-alpha.2",
"description": "lowcode designer",
"keywords": [
"react"

View File

@@ -11,6 +11,7 @@ import {
Empty,
Popconfirm,
Tooltip,
Alert,
} from 'antd';
import { Box, Text, css } from 'coral-system';
import {
@@ -166,7 +167,7 @@ export function EditableVariableTree({
height={height}
position="relative"
>
<Box p="l" width="40%" borderRight="solid" borderColor="line.normal">
<Box p="l" width="40%">
<Box mb="m" position="sticky" top="0" bg="white" zIndex={2}>
<Input.Group compact>
<Search
@@ -201,68 +202,75 @@ export function EditableVariableTree({
/>
</Box>
{node ? (
<Panel
title={
{
preview: '变量值预览',
add: '添加变量',
define: '变量定义',
}[mode]
}
extra={
hasPanelSwitch && mode !== 'add' ? (
<Radio.Group
optionType="button"
buttonStyle="solid"
size="small"
value={mode}
onChange={(e) => setMode(e.target.value)}
options={previewOptions}
<Box width="60%" position="sticky" top="0">
{node.help && (
<Alert
type="info"
message={`使用说明:${node.help}`}
closable
style={{ marginBottom: 12 }}
/>
)}
<Panel
shape="solid"
title={
{
preview: '变量值预览',
add: '添加变量',
define: '变量定义',
}[mode]
}
extra={
hasPanelSwitch && mode !== 'add' ? (
<Radio.Group
optionType="button"
buttonStyle="solid"
size="small"
value={mode}
onChange={(e) => setMode(e.target.value)}
options={previewOptions}
/>
) : null
}
bodyProps={{ px: 'm' }}
>
{mode === 'preview' && (
<ValuePreview
value={getPreviewValue(node)}
onSelect={(valuePath) => {
return ['tango', node.key.replaceAll('.', '?.'), valuePath].join('.');
}}
/>
) : null
}
width="60%"
borderRadius="m"
position="sticky"
top="0"
bodyProps={{ px: 'm' }}
>
{mode === 'preview' && (
<ValuePreview
value={getPreviewValue(node)}
onSelect={(valuePath) => {
return ['tango', node.key.replaceAll('.', '?.'), valuePath].join('.');
}}
/>
)}
{mode === 'define' && (
<NodeDefineForm
node={node}
onSave={onSave}
onDelete={(item) => {
const [type, storeName, stateName] = item.key.split('.');
onDeleteVariable(storeName, stateName);
setNode(null);
}}
/>
)}
{mode === 'add' && (
<AddNodeForm
parentNode={node}
onCancel={() => {
setMode(defaultMode);
setNode(null);
}}
onSubmit={(storeName, data) => {
onAddVariable(storeName, data);
setMode(defaultMode);
setNode(null);
}}
/>
)}
</Panel>
)}
{mode === 'define' && (
<NodeDefineForm
node={node}
onSave={onSave}
onDelete={(item) => {
const [type, storeName, stateName] = item.key.split('.');
onDeleteVariable(storeName, stateName);
setNode(null);
}}
/>
)}
{mode === 'add' && (
<AddNodeForm
parentNode={node}
onCancel={() => {
setMode(defaultMode);
setNode(null);
}}
onSubmit={(storeName, data) => {
onAddVariable(storeName, data);
setMode(defaultMode);
setNode(null);
}}
/>
)}
</Panel>
</Box>
) : (
<Panel title="提示" flex="1" position="sticky" top="0">
<Panel shape="solid" title="提示" flex="1" position="sticky" top="0">
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description="请从左侧列表中选择一个变量" />
</Panel>
)}
@@ -469,11 +477,11 @@ interface NodePreviewProps {
export function ValuePreview({ value, onSelect }: NodePreviewProps) {
if (isNil(value)) {
return <span></span>;
return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description="暂时没有可预览的数据" />;
}
if (isFunction(value)) {
return <span></span>;
return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description="暂不支持预览函数" />;
}
if (typeof value === 'object') {
@@ -503,7 +511,7 @@ function NodeDefineForm({ node, onSave = noop, onDelete = noop }: NodeDefineProp
const [error, setError] = useState('');
const [editable, { on, off }] = useBoolean();
if (isNil(node.raw)) {
return <Empty description="缺失定义数据" />;
return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description="缺失定义数据" />;
}
return (
<Box>

View File

@@ -1,9 +1,9 @@
import React from 'react';
import { Group } from 'coral-system';
import { Modal } from 'antd';
import { ToggleButton } from '@music163/tango-ui';
import { ToggleButton, CodeOutlined } from '@music163/tango-ui';
import { observer, useDesigner, useWorkspace } from '@music163/tango-context';
import { BorderOutlined, CodeOutlined } from '@ant-design/icons';
import { BorderOutlined } from '@ant-design/icons';
export const ModeSwitchTool = observer(() => {
const workspace = useWorkspace();

View File

@@ -0,0 +1,10 @@
# Change Log
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## 1.0.2 (2023-12-13)
### Bug Fixes
- update variable tree with help messages and styling & add tangoConfig schema ([5e7e285](https://github.com/NetEase/tango/commit/5e7e285452b46888b447991b0e8548b6392acb3a))

3
packages/spec/README.md Normal file
View File

@@ -0,0 +1,3 @@
# Tango Config Spec
This is the specification for the Tango Config format.

View File

@@ -0,0 +1,27 @@
{
"name": "tango-spec",
"version": "1.0.2",
"description": "tango config spec",
"keywords": [
"json",
"schema"
],
"author": "wwsun <ww.sww@outlook.com>",
"homepage": "https://github.com/NetEase/tango#readme",
"license": "MIT",
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://github.com/NetEase/tango.git"
},
"scripts": {
"test": "node ./__tests__/spec.test.js"
},
"bugs": {
"url": "https://github.com/NetEase/tango/issues"
},
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
}
}

View File

@@ -0,0 +1,118 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://unpkg.com/tango-spec/tango-config.json",
"title": "JSON Schema of tango.config.json",
"description": "tango.config.json is a configuration file for NetEase Tango apps",
"type": "object",
"properties": {
"packages": {
"type": "object",
"patternProperties": {
"^(?:@[a-z0-9-~][a-z0-9-._~]*/)?[a-z0-9-~][a-z0-9-._~]*$": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "package description"
},
"version": {
"type": "string",
"description": "package version"
},
"library": {
"type": "string",
"description": "package library"
},
"type": {
"type": "string",
"description": "package type",
"enum": ["dependency", "bizDependency", "baseDependency"]
},
"resources": {
"type": "array",
"items": {
"type": "string"
},
"description": "package resources"
},
"designerResources": {
"type": "array",
"items": {
"type": "string"
},
"description": "package designer resources"
}
},
"additionalProperties": false,
"required": ["version", "library"]
}
},
"additionalProperties": false
},
"dataSource": {
"type": "object",
"properties": {
"ox": {
"type": "object",
"description": "music ox data provider",
"properties": {
"key": {
"type": "string",
"description": "dataSource provider name"
},
"value": {
"type": "array",
"items": {
"type": "object",
"properties": {
"app": {
"type": "string",
"description": "app name"
},
"branch": {
"type": "string",
"description": "branch name"
}
},
"additionalProperties": false,
"required": ["app", "branch"]
}
}
}
}
}
},
"proxy": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "the path of proxy rule"
},
"value": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "the target of proxy rule"
},
"changeOrigin": {
"type": "boolean",
"description": "whether change origin of proxy rule"
}
},
"additionalProperties": false,
"required": ["target"]
}
}
},
"externalResources": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": true,
"required": ["packages"]
}

668
yarn.lock

File diff suppressed because it is too large Load Diff