Skip to content

Commit fae60c8

Browse files
committed
all integrated with other features
2 parents 40f9eef + c0c59b1 commit fae60c8

File tree

9 files changed

+208
-38
lines changed

9 files changed

+208
-38
lines changed

src/components/ComponentDisplay.vue

Lines changed: 75 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
:id ="componentData.componentName"
1010
:x="componentData.x"
1111
:y="componentData.y + 20"
12+
:z="componentData.z"
1213
:w="componentData.w"
1314
:h="componentData.h"
1415
:parent="true"
@@ -28,19 +29,22 @@
2829
<!-- <p v-for="child in childList" :key="childList.indexOf(child)"> {{ child.text }}</p> -->
2930
</ul>
3031
<q-menu context-menu>
31-
<q-list class="menu">
32+
<q-list color='black' class="menu">
3233
<q-item clickable v-ripple v-close-popup @click="handleAddChild">
3334
<q-item-section style="color: white">Update Children</q-item-section>
3435
<q-item-section avatar>
3536
<q-icon color="primary" name="add" />
3637
</q-item-section>
3738
</q-item>
38-
<!-- <q-item clickable v-ripple v-close-popup auto-close>
39-
<q-item-section style="color: pink">Delete Children</q-item-section>
40-
<q-item-section avatar>
41-
<q-icon color="primary" name="delete" />
42-
</q-item-section>
43-
</q-item> -->
39+
<q-item clickable v-ripple v-close-popup>
40+
<q-item-section class='layer' style="color: pink">Layer</q-item-section>
41+
<q-btn class='btn' color='transparent' text-color='primary' label='-' @click='(e)=>handleLayer(e)'/>
42+
<p id='counter' style="color: white"> {{componentData.z}} </p>
43+
<q-btn class='btn' color='transparent' text-color='primary' label='+' @click='(e)=>handleLayer(e)'/>
44+
<!-- <q-item-section avatar>
45+
<q-icon color="primary" name="layer" />
46+
</q-item-section> -->
47+
</q-item>
4448
</q-list>
4549
</q-menu>
4650
</VueDraggableResizable>
@@ -80,7 +84,8 @@ export default {
8084
abilityToDelete: false,
8185
testOptions: ["parent", "child", "grandchild"],
8286
testModel: [],
83-
mockImg: false
87+
mockImg: false,
88+
counter: 0
8489
};
8590
},
8691
mounted() {
@@ -119,16 +124,37 @@ export default {
119124
return this.componentMap[componentData.componentName].children;
120125
},
121126
options() {
127+
const checkParents = (component, lineage=[component.componentName]) => {
128+
// console.log('component', component)
129+
// component parent is an object of parents
130+
// console.log('component parent',component.parent)
131+
// console.log('component parent parent', component.parent.parent)
132+
if (!Object.keys(component.parent).length) return lineage;
133+
for(var parents in component.parent){
134+
//for each parent in our component
135+
console.log('parents', parents)
136+
lineage.push(parents); //push the parent into lineage
137+
console.log('lineage pre push', component, lineage)
138+
checkParents(component.parent[parents], lineage);
139+
console.log('lineage post recursive call', lineage)
140+
}
141+
// lineage.push(component.parent[component.componentName]);
142+
// return checkParents(component.parent, lineage);
143+
return lineage
144+
};
145+
let lineage = [this.activeComponent];
122146
// PROBLEM: the objects on childrenmultiselectvalue are applied
123147
// check to see if there are any existing children
124148
if (this.componentMap[this.activeComponent]) {
125149
// console.log('active component', this.activeComponent)
126150
// console.log('testmodel', this.testModel)
127151
// console.log(this.componentMap[this.activeComponent].children)
128152
this.testModel = this.componentMap[this.activeComponent].children;
153+
lineage = checkParents(this.componentMap[this.activeComponent]);
154+
console.log('Lineage', lineage);
129155
}
130156
const routes = Object.keys(this.routes);
131-
const exceptions = new Set(["App", this.activeComponent, ...routes, ...this.testModel]);
157+
const exceptions = new Set(["App", ...lineage, ...routes, ...this.testModel]);
132158
return Object.keys(this.componentMap).filter(component => {
133159
if (!exceptions.has(component)) return component;
134160
});
@@ -197,6 +223,9 @@ export default {
197223
this.componentMap[this.activeComponent].y = y;
198224
this.userImage;
199225
},
226+
onLayer: function(z) {
227+
this.activeComponentData.z = z;
228+
},
200229
onActivated(componentData) {
201230
this.$refs.boxes.forEach((element)=> {
202231
if (element.$attrs.id !== componentData.componentName){
@@ -237,6 +266,23 @@ export default {
237266
this.updateActiveComponentChildrenValue(value);
238267
// this.updateComponentChildrenMultiselectValue(value)
239268
},
269+
handleLayer(e){
270+
e.preventDefault()
271+
console.log('event object', e.target.innerText)
272+
console.log('Layer handled')
273+
274+
if(e.target.innerText === '+'){
275+
this.counter++;
276+
// this.activeComponentData.z = z;
277+
}
278+
if(e.target.innerText === '-' && this.counter > 0){
279+
this.counter--;
280+
}
281+
console.log('counter', this.counter)
282+
this.activeComponentData.z = this.counter;
283+
this.componentMap[this.activeComponent].z = this.counter;
284+
285+
},
240286
// @dblclick.native="onDoubleClick(componentData)"
241287
// onDoubleClick (compData) {
242288
// this.setActiveComponent(compData.componentName)
@@ -247,11 +293,6 @@ export default {
247293
{
248294
this.setActiveComponent('')
249295
}
250-
// console.log(this.$children)
251-
// this.$children[1].
252-
// this.$children[1].enabled = false;
253-
// this.$children[1].$emit('deactivated')
254-
// this.$children[1].$emit('update:active', false)
255296
}
256297
}
257298
};
@@ -269,6 +310,7 @@ export default {
269310
/* width: 1rem; */
270311
line-height: 1.2;
271312
/* margin: 10px; */
313+
z-index: 0;
272314
}
273315
.component-children {
274316
position: absolute;
@@ -329,4 +371,23 @@ export default {
329371
background-color: rgba(105, 179, 190, 0.514);
330372
border: 1px dashed rgb(227, 203, 71);
331373
}
374+
.btn {
375+
font-size: 25px;
376+
/* margin-top: 0;
377+
margin-bottom: 0; */
378+
padding: 0 20px;
379+
width: 10px;
380+
height: 10px;
381+
transition: none;
382+
}
383+
.btn:hover, .btn:focus, .btn:active {
384+
color: white;
385+
background-color: transparent;
386+
}
387+
#counter {
388+
margin-top: 20px;
389+
}
390+
/* .layer {
391+
padding: 0 20px;
392+
} */
332393
</style>

src/components/CreateComponent.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
color="secondary"
2828
label="Create Component"
2929
@click="handleClick"
30-
:disabled="!componentNameInputValue"
30+
:disabled="!componentNameInputValue.trim()"
3131
/>
3232
</div>
3333
</template>
@@ -63,18 +63,25 @@ export default {
6363
'addToComponentElementList'
6464
]),
6565
handleClick () {
66+
if (!this.componentNameInputValue.trim()) {
67+
event.preventDefault();
68+
return false;
69+
}
6670
const component = {
6771
componentName: this.componentNameInputValue,
6872
x: 0,
6973
y: 0,
74+
z: 0,
7075
w: 200,
7176
h: 200,
7277
htmlList: this.selectedElementList,
7378
children: [],
79+
parent: {},
7480
isActive: false
7581
}
7682
7783
this.registerComponent(component)
84+
7885
},
7986
resetActiveComponent () {
8087
this.setActiveComponent('')

src/components/Footer.vue

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
indicator-color="secondary"
1616
align="left"
1717
>
18+
1819
<q-tab name="code" label="Code Snippet" id="label-text" />
1920
<q-tab name="detail" label="Component Details" id="label-text" />
2021
<q-tab name="tree" label="Project Tree" id="label-text" />
@@ -43,6 +44,7 @@
4344
</template>
4445

4546
<script>
47+
import { mapState } from 'vuex'
4648
import Tree from './Tree'
4749
import HomeQueue from './HomeQueue'
4850
import CodeSnippet from './CodeSnippet'
@@ -53,6 +55,9 @@ export default {
5355
HomeQueue,
5456
CodeSnippet
5557
},
58+
computed: {
59+
...mapState(['activeComponent', 'componentNameInputValue', 'selectedElementList'])
60+
},
5661
data () {
5762
return {
5863
tab: 'code',
@@ -71,6 +76,30 @@ export default {
7176
this.height === 40 ? (this.height = minHeight) : (this.height = 40)
7277
this.open === true ? (this.open = false) : (this.open = true)
7378
}
79+
},
80+
// toggles footer to "html" tab when existing component is not in focus
81+
watch: {
82+
activeComponent: function () {
83+
// console.log('watching activeComponent in Footer');
84+
if (this.activeComponent === '' && this.selectedElementList.length !== 0) {
85+
this.tab = 'html'
86+
}
87+
},
88+
// toggles footer to "html" tab if component name has value & elements are in queue
89+
componentNameInputValue: function() {
90+
// console.log('watching componentNameInputVal')
91+
if (this.componentNameInputValue !== '' && this.selectedElementList.length !== 0 && this.activeComponent === '') {
92+
// console.log(this.selectedElementList)
93+
this.tab = 'html'
94+
}
95+
},
96+
// toggles footer to "html" tab if elements are added to queue on component creation
97+
selectedElementList: function() {
98+
// console.log('watching selectedElementList')
99+
if (this.activeComponent === '' && this.selectedElementList.length !== 0) {
100+
this.tab = 'html'
101+
}
102+
}
74103
}
75104
}
76105
</script>

src/components/HomeQueue.vue

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<template>
22
<section class="home-queue">
3+
<span class='list-title' v-if='component'> Viewing Elements in '{{ this.activeComponent }}' </span>
4+
<span class='list-title' v-else> Elements in Queue </span>
5+
<hr>
36
<draggable
47
v-model="renderList"
58
group="people"
@@ -31,7 +34,11 @@ export default {
3134
type: Array
3235
}
3336
},
34-
37+
data () {
38+
return {
39+
component: false
40+
}
41+
},
3542
computed: {
3643
...mapState(['selectedElementList', 'componentMap', 'activeComponent']),
3744
renderList: {
@@ -52,6 +59,16 @@ export default {
5259
},
5360
components: {
5461
draggable
62+
},
63+
watch: {
64+
activeComponent: function () {
65+
// console.log('watching activeComponent in HomeQueue')
66+
if (this.activeComponent !== '') {
67+
this.component = true
68+
} else {
69+
this.component = false
70+
}
71+
}
5572
}
5673
}
5774
</script>
@@ -63,6 +80,9 @@ export default {
6380
li {
6481
list-style-type: none;
6582
}
83+
.list-title {
84+
// font-weight: bold;
85+
}
6686
.list-group-item {
6787
display: inline-block;
6888
margin: 2px 1.5%;
@@ -81,4 +101,7 @@ li {
81101
position: relative;
82102
left: 20px;
83103
}
104+
hr {
105+
border: 1px solid grey
106+
}
84107
</style>

src/components/Icons.vue

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,34 @@ export default {
2626
},
2727
name: 'Icons',
2828
computed: {
29-
...mapState(['icons', 'activeComponent', 'componentMap'])
29+
...mapState(['icons', 'activeComponent', 'componentMap', 'selectedElementList'])
3030
},
3131
methods: {
3232
changeState (elementName) {
3333
if (this.activeComponent === '') { this.$emit('getClickedIcon', elementName) } else this.$emit('activeElement', elementName)
3434
}
3535
},
3636
watch: {
37+
selectedElementList: function() {
38+
// console.log('watching selectedElementList');
39+
if (this.activeComponent === '') {
40+
this.elementStorage = {};
41+
this.selectedElementList.forEach(el => {
42+
if (!this.elementStorage[el.text]) {
43+
this.elementStorage[el.text] = 1;
44+
} else {
45+
this.elementStorage[el.text] += 1;
46+
}
47+
})
48+
}
49+
// console.log('storage is ', this.elementStorage)
50+
},
51+
// if componentMap is updated (i.e. element is added to component's htmlList), elementStorage will update its cache of elements & frequency
3752
componentMap: {
3853
deep: true,
3954
handler () {
40-
//console.log('watching componentMap');
41-
//console.log('activecomponent is ', this.activeComponent)
55+
// console.log('watching componentMap');
56+
// console.log('activecomponent is ', this.activeComponent)
4257
// console.log('htmlList', this.componentMap[this.activeComponent].htmlList)
4358
if (this.activeComponent) {
4459
this.elementStorage = {};
@@ -49,12 +64,13 @@ export default {
4964
this.elementStorage[el.text] += 1;
5065
}
5166
})
52-
//console.log('elementStorage is ', this.elementStorage);
67+
// console.log('elementStorage is ', this.elementStorage);
5368
}
5469
},
5570
},
71+
// if activeComponent is updated, elementStorage will update its cache of elements & frequency to reflect new active component
5672
activeComponent: function() {
57-
// console.log('watching activeComponent', this.activeComponent);
73+
// console.log('watching activeComponent', this.activeComponent);
5874
if (this.activeComponent) {
5975
this.elementStorage = {};
6076
this.componentMap[this.activeComponent].htmlList.forEach(el => {
@@ -64,12 +80,21 @@ export default {
6480
this.elementStorage[el.text] += 1;
6581
}
6682
})
67-
//console.log('elementStorage is ', this.elementStorage);
68-
} else {
69-
this.elementStorage = {};
83+
// console.log('elementStorage is ', this.elementStorage);
84+
} else if (this.activeComponent === '') {
85+
// console.log(`watching activeComponent, current active is ''`)
86+
// if component was switched from existing component to '', reset cache and update items
87+
if (this.elementStorage !== {}) this.elementStorage = {};
88+
this.selectedElementList.forEach(el => {
89+
if (!this.elementStorage[el.text]) {
90+
this.elementStorage[el.text] = 1;
91+
} else {
92+
this.elementStorage[el.text] += 1;
93+
}
94+
})
7095
}
7196
}
72-
},
97+
}
7398
}
7499
</script>
75100

0 commit comments

Comments
 (0)