Skip to content

Commit fc51b6f

Browse files
committed
feat(composer): implement basic drag'n'drop in canvas component
Co-Authored-By: RyuuGan <stdammit@gmail.com> re orchestratora/rfcs#2
1 parent 17e2bb3 commit fc51b6f

17 files changed

Lines changed: 169 additions & 30 deletions

libs/composer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"author": "Orchestrator <orchestratora@gmail.com>",
1919
"license": "MIT",
2020
"peerDependencies": {
21+
"@angular/cdk": "^7.0.0",
2122
"@angular/common": "^7.0.0",
2223
"@angular/core": "^7.0.0",
2324
"@orchestrator/core": "^0.0.0",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<p>composer-canvas works!</p>
1+
<orc-orchestrator [config]="initialConfig"></orc-orchestrator>
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
1+
import { ChangeDetectionStrategy, Component } from '@angular/core';
2+
import { OrchestratorConfigItem } from '@orchestrator/core';
3+
4+
import { ComposerDroppableComponent } from '../composer-droppable';
25

36
@Component({
47
selector: 'orc-composer-canvas',
58
templateUrl: './composer-canvas.component.html',
69
styleUrls: ['./composer-canvas.component.css'],
710
changeDetection: ChangeDetectionStrategy.OnPush,
811
})
9-
export class ComposerCanvasComponent implements OnInit {
10-
constructor() {}
11-
12-
ngOnInit() {}
12+
export class ComposerCanvasComponent {
13+
initialConfig: OrchestratorConfigItem = ComposerDroppableComponent.getWrapperConfig();
1314
}

libs/composer/src/lib/composer-canvas/composer-canvas.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { CommonModule } from '@angular/common';
22
import { NgModule } from '@angular/core';
3+
import { OrchestratorCoreModule } from '@orchestrator/core';
34

5+
import { ComposerDroppableModule } from '../composer-droppable';
46
import { ComposerCanvasComponent } from './composer-canvas.component';
57

68
@NgModule({
7-
imports: [CommonModule],
9+
imports: [CommonModule, OrchestratorCoreModule, ComposerDroppableModule],
810
exports: [ComposerCanvasComponent],
911
declarations: [ComposerCanvasComponent],
1012
})
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
nz-list-item {
2+
background: white;
3+
}
4+
15
nz-list-item-meta::ng-deep .ant-list-item-meta-title {
26
word-break: break-all;
37
}

libs/composer/src/lib/composer-components/composer-components.component.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
<h3>Component List</h3>
2-
<nz-list nzBordered [nzDataSource]="componentsInfo" [nzRenderItem]="item">
2+
<nz-list
3+
nzBordered
4+
[nzDataSource]="componentsInfo"
5+
[nzRenderItem]="item"
6+
cdkDropList
7+
>
38
<ng-template #item let-item>
4-
<nz-list-item>
9+
<nz-list-item cdkDrag [cdkDragData]="item.componentType">
510
<nz-list-item-meta
611
[nzTitle]="item.componentType.name"
712
nzDescription="<{{ item.selector }}>"

libs/composer/src/lib/composer-components/composer-components.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export class ComposerComponentsComponent implements OnInit {
2727
ngOnInit() {
2828
this.componentsInfo = this.componentLocator
2929
.getComponents()
30-
.map(comp => this.cfr.resolveComponentFactory(comp));
30+
.map(comp => this.cfr.resolveComponentFactory(comp))
31+
.filter(({ selector }) => !selector.startsWith('orc-composer'));
3132
}
3233
}

libs/composer/src/lib/composer-components/composer-components.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import { DragDropModule } from '@angular/cdk/drag-drop';
12
import { CommonModule } from '@angular/common';
23
import { NgModule } from '@angular/core';
34
import { NzListModule } from 'ng-zorro-antd/list';
45

56
import { ComposerComponentsComponent } from './composer-components.component';
67

78
@NgModule({
8-
imports: [CommonModule, NzListModule],
9+
imports: [CommonModule, DragDropModule, NzListModule],
910
exports: [ComposerComponentsComponent],
1011
declarations: [ComposerComponentsComponent],
1112
})
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Injectable } from '@angular/core';
2+
import {
3+
Option,
4+
OptionRequired,
5+
OrchestratorConfigItem,
6+
OrchestratorDynamicComponentType,
7+
} from '@orchestrator/core';
8+
9+
@Injectable({ providedIn: 'root' })
10+
export class ComposerDroppableConfig<C = any>
11+
implements OrchestratorConfigItem<C> {
12+
@OptionRequired()
13+
component: string | OrchestratorDynamicComponentType<C>;
14+
15+
@Option()
16+
config?: C;
17+
18+
@Option()
19+
id?: string;
20+
21+
@Option()
22+
classes?: string | string[] | { [name: string]: boolean };
23+
24+
@Option()
25+
attributes?: { [attr: string]: string };
26+
27+
@Option()
28+
handlers?: { [event: string]: string | Function };
29+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.drop-list {
2+
padding: 10px;
3+
background: lightcyan;
4+
border: 1px dashed lightblue;
5+
text-align: center;
6+
}
7+
8+
.drop-list.cdk-drop-list-dragging .drop-list-hint {
9+
display: none;
10+
}

0 commit comments

Comments
 (0)