14
14
</button >
15
15
</div >
16
16
</div >
17
-
17
+ <!-- {{ log(elements) }} -->
18
18
<div
19
19
v-for =" element in elements"
20
20
:key =" element.hash"
32
32
{{ element.label }}
33
33
</div >
34
34
<!-- Navigation buttons -->
35
- <div :is =" compile(element.buttons)" ></div >
35
+ <div class =" btn-group ml-auto mr-2" role =" group" aria-label =" Collection buttons" >
36
+ <button class =" action-move-up-collection-item btn btn-light btn-sm" style =" white-space : nowrap " >
37
+ <i class =" fas fa-fw fa-chevron-up" ></i >
38
+ {{ labels.collection_up }}
39
+ </button >
40
+ <button
41
+ class =" action-move-down-collection-item btn btn-light btn-sm"
42
+ style =" white-space : nowrap "
43
+ >
44
+ <i class =" fas fa-fw fa-chevron-down" ></i >
45
+ {{ labels.collection_down }}
46
+ </button >
47
+ <button
48
+ class =" action-remove-collection-item btn btn-light-danger btn-sm"
49
+ style =" white-space : nowrap "
50
+ data-confirmation =" {{ labels.collection_delete_confirm }}"
51
+ >
52
+ <i class =" fas fa-fw fa-trash" ></i >
53
+ {{ labels.collection_delete }}
54
+ </button >
55
+ </div >
36
56
</div >
37
57
</div >
38
58
<div class =" card details" >
39
59
<!-- The actual field -->
40
- <div :is =" currentComponent" class =" card-body" ></div >
60
+ <editor-textarea
61
+ :name =" element.name"
62
+ :rows =" element.rows"
63
+ :required =" element.required"
64
+ :readonly =" element.readonly"
65
+ :data-errormessage =" element.errormessage"
66
+ :placeholder =" element.placeholder"
67
+ :style =" { height: element.styleHeight }"
68
+ :maxlength =" element.maxlength"
69
+ :title =" element.label"
70
+ >
71
+ </editor-textarea >
41
72
</div >
42
73
</div >
43
74
62
93
:key =" field.type"
63
94
class =" dropdown-item"
64
95
:data-field =" field.type"
65
- @click =" addCollectionItem(field.slug )"
96
+ @click =" addCollectionItem($event )"
66
97
>
67
98
<i :class =" [field.icon, 'fas fa-fw']" />
68
99
{{ field.label }}
74
105
type =" button"
75
106
class =" btn btn-secondary btn-small"
76
107
:data-field =" fields[0].slug"
77
- @click =" addCollectionItem(fields.slug )"
108
+ @click =" addCollectionItem(fields.type )"
78
109
>
79
110
<i :class =" [fields[0].icon, 'fas fa-fw']" />
80
111
{{ labels.add_collection_item }}
85
116
</template >
86
117
87
118
<script >
88
- import { compile } from ' vue' ;
119
+ import {compile } from ' vue' ;
89
120
/*
90
121
Editor Components for rendering
91
122
*/
92
- import Text from ' ./Text' ;
93
- import Slug from ' ./Slug' ;
94
- import Date from ' ./Date' ;
95
- import Select from ' ./Select' ;
96
- import Number from ' ./Number' ;
97
- import Html from ' ./Html' ;
98
- import Markdown from ' ./Markdown' ;
99
- import Textarea from ' ./Textarea' ;
100
- import Embed from ' ./Embed' ;
101
- import Image from ' ./Image' ;
102
- import Imagelist from ' ./Imagelist' ;
103
- import Email from ' ./Email' ;
104
- import Password from ' ./Password' ;
105
- import ThemeSelect from ' ./ThemeSelect' ;
106
- import Language from ' ./Language' ;
107
- import File from ' ./File' ;
108
- import Filelist from ' ./Filelist' ;
109
- import Checkbox from ' ./Checkbox' ;
110
-
111
123
import $ from ' jquery' ;
124
+ import EditorTextarea from ' ./Textarea' ;
112
125
113
126
export default {
114
127
name: ' EditorCollection' ,
115
- components: {
116
- Text ,
117
- Slug,
118
- Date ,
119
- Select,
120
- Number ,
121
- Html,
122
- Markdown,
123
- Textarea,
124
- Embed,
125
- Image,
126
- Imagelist,
127
- Email,
128
- Password,
129
- ThemeSelect,
130
- Language,
131
- File ,
132
- Filelist,
133
- Checkbox,
134
- },
128
+ components: { EditorTextarea },
135
129
props: {
136
130
name: {
137
131
type: String ,
@@ -149,6 +143,7 @@ export default {
149
143
required: true ,
150
144
},
151
145
limit: {
146
+ type: Number ,
152
147
required: true ,
153
148
},
154
149
variant: {
@@ -157,6 +152,7 @@ export default {
157
152
},
158
153
},
159
154
data () {
155
+ console .log (this .existingFields );
160
156
let fieldSelectOptions = [];
161
157
return {
162
158
currentComponent: ' ' ,
@@ -313,94 +309,21 @@ export default {
313
309
getCollectionItemFromPressedButton (button ) {
314
310
return window .$ (button).closest (' .collection-item' ).last ();
315
311
},
316
- addCollectionItem (fieldName ) {
317
- console .log (this .fields );
312
+ addCollectionItem (event ) {
318
313
this .counter ++ ;
319
-
320
- // Create switch case for every field type
321
- switch (fieldName) {
322
- case ' text' :
323
- var component = Text ;
324
- break ;
325
- case ' slug' :
326
- this .elements .push (Slug);
327
- this .currentComponent = Slug;
328
- break ;
329
- case ' date' :
330
- this .elements .push (Date );
331
- this .currentComponent = Date ;
332
- break ;
333
- case ' select' :
334
- this .elements .push (Select);
335
- this .currentComponent = Select;
336
- break ;
337
- case ' number' :
338
- this .elements .push (Number );
339
- this .currentComponent = Number ;
340
- break ;
341
- case ' html' :
342
- this .elements .push (Html);
343
- this .currentComponent = Html;
344
- break ;
345
- case ' markdown' :
346
- this .elements .push (Markdown);
347
- this .currentComponent = Markdown;
348
- break ;
349
- case ' textarea' :
350
- this .elements .push (Textarea);
351
- this .currentComponent = Textarea;
352
- break ;
353
- case ' embed' :
354
- this .elements .push (Embed);
355
- this .currentComponent = Embed;
356
- break ;
357
- case ' image' :
358
- this .elements .push (Image);
359
- this .currentComponent = Image;
360
- break ;
361
- case ' imagelist' :
362
- this .elements .push (Imagelist);
363
- this .currentComponent = Imagelist;
364
- break ;
365
- case ' email' :
366
- this .elements .push (Email);
367
- this .currentComponent = Email;
368
- break ;
369
- case ' password' :
370
- this .elements .push (Password);
371
- this .currentComponent = Password;
372
- break ;
373
- case ' themeSelect' :
374
- this .elements .push (ThemeSelect);
375
- this .currentComponent = ThemeSelect;
376
- break ;
377
- case ' language' :
378
- this .elements .push (Language);
379
- this .currentComponent = Language;
380
- break ;
381
- case ' file' :
382
- this .elements .push (File );
383
- this .currentComponent = File ;
384
- break ;
385
- case ' filelist' :
386
- this .elements .push (Filelist);
387
- this .currentComponent = Filelist;
388
- break ;
389
- case ' checkbox' :
390
- this .elements .push (Checkbox);
391
- this .currentComponent = Checkbox;
392
- break ;
393
- }
394
- this .currentComponent (component);
395
- this .elements .push (component);
396
- return this .currentComponent ;
314
+ let field = this .getSelectedField (event );
315
+ this .elements .push (field);
397
316
},
398
317
getSelectedField (event ) {
399
318
const target = $ (event .target ).attr (' data-field' )
400
319
? $ (event .target )
401
320
: $ (event .target ).closest (' [data-field]' );
402
321
let selectValue = target .attr (' data-field' );
403
- return this .fields .find ((field ) => field .label === selectValue);
322
+ let objValues = Object .values (this .fields );
323
+
324
+ console .log (objValues .find ((field ) => field .type === selectValue));
325
+
326
+ return objValues .find ((field ) => field .type === selectValue);
404
327
},
405
328
},
406
329
};
0 commit comments