fix: 处理 schema id 重复的问题

This commit is contained in:
力皓 2020-09-14 11:24:52 +08:00
parent 6e1eac0fc5
commit d2316bec65
6 changed files with 13 additions and 11 deletions

View File

@ -1,6 +1,6 @@
{ {
"lerna": "2.11.0", "lerna": "2.11.0",
"version": "independent", "version": "1.0.9",
"npmClient": "tyarn", "npmClient": "tyarn",
"registry": "http://registry.npm.alibaba-inc.com", "registry": "http://registry.npm.alibaba-inc.com",
"useWorkspaces": true, "useWorkspaces": true,

View File

@ -15,6 +15,7 @@
"lint": "eslint --ext .ts,.tsx,.js,.jsx ./ --quiet", "lint": "eslint --ext .ts,.tsx,.js,.jsx ./ --quiet",
"lint:fix": "eslint --ext .ts,.tsx,.js,.jsx ./ --quiet --fix", "lint:fix": "eslint --ext .ts,.tsx,.js,.jsx ./ --quiet --fix",
"pub": "lerna publish --force-publish --cd-version prepatch", "pub": "lerna publish --force-publish --cd-version prepatch",
"pubbeta": "lerna publish --force-publish --cd-version prerelease --npm-tag beta",
"setup": "./scripts/setup.sh", "setup": "./scripts/setup.sh",
"start": "./scripts/start.sh", "start": "./scripts/start.sh",
"start:server": "./scripts/start-server.sh", "start:server": "./scripts/start-server.sh",

View File

@ -38,6 +38,8 @@ export default class DragResizeEngine {
private dragResizing = false; private dragResizing = false;
private designer: Designer;
constructor(designer: Designer) { constructor(designer: Designer) {
this.designer = designer; this.designer = designer;
this.emitter = new EventEmitter(); this.emitter = new EventEmitter();

View File

@ -160,11 +160,11 @@ export class DocumentModel {
/** /**
* id * id
*/ */
nextId() { nextId(possibleId: string | undefined) {
let id; let id = possibleId;
do { while (!id || this.nodesMap.get(id)) {
id = `node_${ (this.id.slice(-10) + (++this.seqId).toString(36)).toLocaleLowerCase()}`; id = `node_${(this.id.slice(-10) + (++this.seqId).toString(36)).toLocaleLowerCase()}`;
} while (this.nodesMap.get(id)); }
return id; return id;
} }

View File

@ -156,7 +156,7 @@ export class Node<Schema extends NodeSchema = NodeSchema> {
constructor(readonly document: DocumentModel, nodeSchema: Schema) { constructor(readonly document: DocumentModel, nodeSchema: Schema) {
const { componentName, id, children, props, ...extras } = nodeSchema; const { componentName, id, children, props, ...extras } = nodeSchema;
this.id = id || document.nextId(); this.id = document.nextId(id);
this.componentName = componentName; this.componentName = componentName;
if (this.componentName === 'Leaf') { if (this.componentName === 'Leaf') {
this.props = new Props(this, { this.props = new Props(this, {

View File

@ -123,7 +123,7 @@ class Layout extends Component<{ rendererContainer: SimulatorRendererContainer }
} }
@observer @observer
class Renderer extends Component<{ class Renderer extends Component<{
rendererContainer: SimulatorRendererContainer; rendererContainer: SimulatorRendererContainer;
documentInstance: DocumentInstance } documentInstance: DocumentInstance }
> { > {
@ -132,10 +132,9 @@ class Renderer extends Component<{
} }
render() { render() {
const { documentInstance } = this.props; const { documentInstance, rendererContainer: renderer } = this.props;
const { container } = documentInstance; const { container } = documentInstance;
const { designMode, device } = container; const { designMode, device } = container;
const { rendererContainer: renderer } = this.props;
return ( return (
<LowCodeRenderer <LowCodeRenderer
schema={documentInstance.schema} schema={documentInstance.schema}
@ -190,7 +189,7 @@ class Renderer extends Component<{
return createElement( return createElement(
getDeviceView(Component, device, designMode), getDeviceView(Component, device, designMode),
viewProps, viewProps,
children, leaf?.isContainer() ? (children == null ? [] : Array.isArray(children) ? children : [children]) : null,
); );
}} }}
onCompGetRef={(schema: any, ref: ReactInstance | null) => { onCompGetRef={(schema: any, ref: ReactInstance | null) => {