Skip to content

Commit df5a149

Browse files
committed
Merge branch 'wysiwyg' of https://github.com/codelab-fun/codelab into feature/side-panel-selection
2 parents 2f5e969 + 47910f4 commit df5a149

27 files changed

+452
-136
lines changed
Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
<!--<div *ngFor="let slide of slides; let i = index">-->
22
<!-- <slides-full-slide [slide]="slide"></slides-full-slide>-->
33
<!--</div>-->
4-
<div>
5-
<button mat-icon-button routerLink="/admin/content">
6-
<mat-icon>home</mat-icon>
7-
</button>
8-
</div>
9-
<div class="wrapper" *ngIf="presentation$ | async as presentation">
10-
<slides-side-panel
11-
[presentationId]="presentation.id"
12-
[currentSlideIndex]="currentSlideIndex$ | async"
13-
[slides]="presentation.slides"
14-
></slides-side-panel>
15-
<div class="editor" *ngIf="currentSlide$ | async as slide; else noSlide">
16-
<slides-slide-editor
4+
<ng-container *ngIf="presentation$ | async as presentation">
5+
<div>
6+
<button mat-icon-button routerLink="/admin/content">
7+
<mat-icon>home</mat-icon>
8+
</button>
9+
<input
10+
[value]="presentation.name"
11+
(keyup)="
12+
updatePresentationMeta(presentation.id, 'name', $event.target.value)
13+
"
14+
/>
15+
</div>
16+
<div class="wrapper">
17+
<slides-side-panel
1718
[presentationId]="presentation.id"
18-
[slide]="slide"
19-
></slides-slide-editor>
19+
[currentSlideIndex]="currentSlideIndex$ | async"
20+
[slides]="presentation.slides"
21+
></slides-side-panel>
22+
<div class="editor" *ngIf="currentSlide$ | async as slide; else noSlide">
23+
<slides-slide-editor
24+
[presentationId]="presentation.id"
25+
[slide]="slide"
26+
></slides-slide-editor>
27+
</div>
28+
<ng-template #noSlide>
29+
<button mat-button (click)="addSlide(presentation.id)">
30+
Create new slide
31+
</button>
32+
</ng-template>
2033
</div>
21-
<ng-template #noSlide>
22-
<button mat-button (click)="addSlide(presentation.id)">
23-
Create new slide
24-
</button>
25-
</ng-template>
26-
</div>
34+
</ng-container>

apps/codelab/src/app/admin/content/presentation-editor/content.component.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,8 @@ export class ContentComponent {
4545
addSlide(presentationId: string) {
4646
this.contentService.addSlide(presentationId);
4747
}
48+
49+
updatePresentationMeta(presentationId: string, name: string, value: string) {
50+
this.contentService.updatePresentationMeta(presentationId, name, value);
51+
}
4852
}

apps/codelab/src/app/admin/content/presentation-editor/preview/slide-preview/dynamic-renderer/dynamic-renderer.component.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
import { ContentSlide, CustomBlock, SlideViewType } from '../../../types';
99
import { CodelabTitleSlideEditorComponent } from '../../../wrappers/custom-component-editors/codelab-title-slide-editor/codelab-title-slide-editor.component';
1010
import { CodelabCodeDemoFilePathEditorComponent } from '../../../wrappers/custom-component-editors/codelab-code-demo-file-path-editor/codelab-code-demo-file-path-editor.component';
11-
import { CodelabCodeDemoConsoleComponent } from '../../../wrappers/custom-component-editors/codelab-code-demo-console/codelab-code-demo-console.component';
11+
import { CodelabCodeDemoConsoleEditorComponent } from '../../../wrappers/custom-component-editors/codelab-code-demo-console-editor/codelab-code-demo-console-editor.component';
1212
import { CodeDemoEditorEditorComponent } from '../../../wrappers/custom-component-editors/codelab-code-demo-editor-editor/code-demo-editor.component';
1313
import { CodelabImageEditorComponent } from '../../../wrappers/custom-component-editors/codelab-image-editor/codelab-image-editor.component';
1414
import { BlankComponent } from '../blank/blank.component';
@@ -24,7 +24,7 @@ export class PreviewDynamicComponentResolver extends NgxdResolver<string, any> {
2424
super([
2525
{ type: 'codelab-title-slide', component: TitleSlideComponent },
2626
{
27-
type: 'codelab-code-demo-console',
27+
type: 'codelab-code-demo-console-editor',
2828
component: CodelabCodeDemoPreviewComponent
2929
},
3030
{
@@ -65,8 +65,8 @@ export class EditDynamicComponentResolver extends NgxdResolver<string, any> {
6565
component: CodelabTitleSlideEditorComponent
6666
},
6767
{
68-
type: 'codelab-code-demo-console',
69-
component: CodelabCodeDemoConsoleComponent
68+
type: 'codelab-code-demo-console-editor',
69+
component: CodelabCodeDemoConsoleEditorComponent
7070
},
7171
{
7272
type: 'codelab-exercise-preview',
@@ -132,7 +132,7 @@ export class DynamicRendererComponent implements OnChanges {
132132
// const componentMap = {
133133
// preview: {
134134
// 'codelab-title-slide': TitleSlideComponent,
135-
// 'codelab-code-demo-console': CodelabCodeDemoPreviewComponent,
135+
// 'codelab-code-demo-console-editor': CodelabCodeDemoPreviewComponent,
136136
// 'codelab-exercise-preview': CodelabCodeDemoPreviewComponent,
137137
// 'codelab-exercise': CodelabCodeDemoPreviewComponent,
138138
// 'codelab-closing-slide': CodelabTitleSlideEditorComponent,
@@ -145,7 +145,7 @@ export class DynamicRendererComponent implements OnChanges {
145145
// },
146146
// edit: {
147147
// 'codelab-title-slide': CodelabTitleSlideEditorComponent,
148-
// 'codelab-code-demo-console': CodelabCodeDemoConsoleComponent,
148+
// 'codelab-code-demo-console-editor': CodelabCodeDemoConsoleEditorComponent,
149149
// 'codelab-exercise-preview': CodelabExerciseComponent,
150150
// 'codelab-exercise': CodelabExerciseComponent,
151151
// 'codelab-closing-slide': CodelabTitleSlideEditorComponent,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.empty-slide {
2+
}

apps/codelab/src/app/admin/content/presentation-editor/preview/slide-preview/slide-preview.component.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
<div *ngIf="slide.blocks.length === 0" class="empty-slide">
2+
Empty slide
3+
</div>
14
<ng-container *ngFor="let block of slide.blocks">
25
<ng-container *ngIf="block.type === 'custom'">
36
<slides-dynamic-renderer

apps/codelab/src/app/admin/content/presentation-editor/reducer.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,16 @@ export function reducer(
9999
case 'updateSlideMeta':
100100
getSlide()[payload.name] = payload.value;
101101
return presentations;
102+
103+
// Presentations
102104
case 'addPresentation':
103105
presentations.push(payload);
104106
return presentations;
105107
case 'deletePresentation':
106108
return presentations.filter(({ id }) => id !== payload.presentationId);
109+
case 'updatePresentationMeta':
110+
getPresentation()[payload.name] = payload.value;
111+
return presentations;
107112
}
108113

109114
console.assert(false);

apps/codelab/src/app/admin/content/presentation-editor/services/content.service.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,16 @@ export class ContentService implements OnDestroy {
125125
};
126126
this.dispatch(presentationId, action);
127127
}
128+
updatePresentationMeta(presentationId: string, name: string, value: string) {
129+
const action = {
130+
type: 'updatePresentationMeta',
131+
payload: {
132+
name,
133+
value
134+
}
135+
};
136+
this.dispatch(presentationId, action);
137+
}
128138

129139
deleteSlide(presentationId: string, slideId: string) {
130140
const action = {

apps/codelab/src/app/admin/content/presentation-editor/slide-editor/action-bar/action-bar.component.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@
22
padding: 16px;
33
display: block;
44
}
5+
6+
.templates {
7+
margin-left: -10px;
8+
}

apps/codelab/src/app/admin/content/presentation-editor/slide-editor/action-bar/action-bar.component.html

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,32 @@
1212
</button>
1313
<button
1414
mat-icon-button
15-
(click)="addCustom('codelab-code-demo-console', defaultDemoProps)"
15+
(click)="addCustom('codelab-code-demo-console-editor', templates.simpleApp)"
1616
>
1717
<mat-icon>web</mat-icon>
1818
</button>
19+
<button class="templates" mat-icon-button [matMenuTriggerFor]="templatesMenu">
20+
<mat-icon>arrow_drop_down</mat-icon>
21+
</button>
22+
23+
<mat-menu #templatesMenu="matMenu">
24+
<button
25+
mat-menu-item
26+
(click)="
27+
addCustom('codelab-code-demo-console-editor', templates.simpleApp)
28+
"
29+
>
30+
Simple / One File
31+
</button>
32+
<button
33+
mat-menu-item
34+
(click)="
35+
addCustom('codelab-code-demo-console-editor', templates.angularApp)
36+
"
37+
>
38+
Angular App
39+
</button>
40+
</mat-menu>
1941

2042
<button mat-icon-button (click)="addCustom('codelab-image')">
2143
<mat-icon>image</mat-icon>

apps/codelab/src/app/admin/content/presentation-editor/slide-editor/action-bar/action-bar.component.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,18 @@ export class ActionBarComponent {
1111
@Output() addBlock = new EventEmitter<ContentBlock>();
1212
@Input() slide: ContentSlide;
1313
@Input() presentationId!: string;
14-
defaultDemoProps = {
15-
code: { 'app.ts': '// Type your code here!' }
14+
15+
readonly templates = {
16+
simpleApp: {
17+
code: { 'app.ts': '// Type your code here!' }
18+
},
19+
angularApp: {
20+
code: {
21+
'app.ts': '// Angular app!!',
22+
'component.ts': '// C',
23+
'module.ts': '// M'
24+
}
25+
}
1626
};
1727

1828
constructor(private contentService: ContentService) {}

0 commit comments

Comments
 (0)