Skip to content

Commit 83655a7

Browse files
committed
Merge branch 'master' into createComponentDropDown
2 parents 66bd7d0 + f6d4c44 commit 83655a7

File tree

6 files changed

+183
-27
lines changed

6 files changed

+183
-27
lines changed

src/components/ComponentDisplay.vue

Lines changed: 132 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
<template>
2-
<div class="component-display grid-bg" :style="mockBg">
2+
<div class="component-display grid-bg" :style="mockBg" v-on:click ="handleClick">
33
<!-- <p>{{ userImage }}</p> -->
44
<VueDraggableResizable
55
class-name="component-box"
66
v-for="componentData in activeRouteArray"
7+
ref ="boxes"
78
:key="componentData.componentName"
9+
:id ="componentData.componentName"
810
:x="componentData.x"
911
:y="componentData.y + 20"
12+
:z="componentData.z"
1013
:w="componentData.w"
1114
:h="componentData.h"
1215
:parent="true"
16+
:preventDeactivation="true"
1317
@activated="onActivated(componentData)"
1418
@deactivated="onDeactivated(componentData)"
1519
@dragging="onDrag"
@@ -25,19 +29,22 @@
2529
<!-- <p v-for="child in childList" :key="childList.indexOf(child)"> {{ child.text }}</p> -->
2630
</ul>
2731
<q-menu context-menu>
28-
<q-list class="menu">
32+
<q-list color='black' class="menu">
2933
<q-item clickable v-ripple v-close-popup @click="handleAddChild">
3034
<q-item-section style="color: white">Update Children</q-item-section>
3135
<q-item-section avatar>
3236
<q-icon color="primary" name="add" />
3337
</q-item-section>
3438
</q-item>
35-
<!-- <q-item clickable v-ripple v-close-popup auto-close>
36-
<q-item-section style="color: pink">Delete Children</q-item-section>
37-
<q-item-section avatar>
38-
<q-icon color="primary" name="delete" />
39-
</q-item-section>
40-
</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>
4148
</q-list>
4249
</q-menu>
4350
</VueDraggableResizable>
@@ -64,7 +71,7 @@ import { mapState, mapActions } from "vuex";
6471
import VueDraggableResizable from "vue-draggable-resizable";
6572
// import ChildrenMultiselect from '../components/ChildrenMultiselect'
6673
import "vue-draggable-resizable/dist/VueDraggableResizable.css";
67-
74+
// :preventDeactivation="true"
6875
export default {
6976
name: "ComponentDisplay",
7077
components: {
@@ -77,7 +84,8 @@ export default {
7784
abilityToDelete: false,
7885
testOptions: ["parent", "child", "grandchild"],
7986
testModel: [],
80-
mockImg: false
87+
mockImg: false,
88+
counter: 0
8189
};
8290
},
8391
mounted() {
@@ -86,7 +94,7 @@ export default {
8694
window.addEventListener("keyup", event => {
8795
if (event.key === "Backspace") {
8896
if (this.activeComponent && this.activeComponentData.isActive) {
89-
console.log('this:', this)
97+
// console.log('this:', this)
9098
this.$store.dispatch("deleteActiveComponent");
9199
}
92100
}
@@ -116,16 +124,37 @@ export default {
116124
return this.componentMap[componentData.componentName].children;
117125
},
118126
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];
119146
// PROBLEM: the objects on childrenmultiselectvalue are applied
120147
// check to see if there are any existing children
121148
if (this.componentMap[this.activeComponent]) {
122149
// console.log('active component', this.activeComponent)
123150
// console.log('testmodel', this.testModel)
124151
// console.log(this.componentMap[this.activeComponent].children)
125152
this.testModel = this.componentMap[this.activeComponent].children;
153+
lineage = checkParents(this.componentMap[this.activeComponent]);
154+
console.log('Lineage', lineage);
126155
}
127156
const routes = Object.keys(this.routes);
128-
const exceptions = new Set(["App", this.activeComponent, ...routes, ...this.testModel]);
157+
const exceptions = new Set(["App", ...lineage, ...routes, ...this.testModel]);
129158
return Object.keys(this.componentMap).filter(component => {
130159
if (!exceptions.has(component)) return component;
131160
});
@@ -145,6 +174,30 @@ export default {
145174
: {};
146175
}
147176
},
177+
178+
updated() {
179+
console.log("updated")
180+
if(this.activeComponent === '')
181+
{
182+
this.$refs.boxes.forEach((element)=> {
183+
element.enabled = false;
184+
element.$emit('deactivated')
185+
element.$emit('update:active', false)
186+
187+
})
188+
}
189+
else{
190+
this.$refs.boxes.forEach((element)=>{
191+
if(this.activeComponent === element.$attrs.id)
192+
{
193+
element.enabled = true
194+
element.$emit('activated')
195+
element.$emit('update:active', true)
196+
}
197+
})
198+
}
199+
},
200+
148201
methods: {
149202
...mapActions([
150203
"setActiveComponent",
@@ -170,12 +223,34 @@ export default {
170223
this.componentMap[this.activeComponent].y = y;
171224
this.userImage;
172225
},
226+
onLayer: function(z) {
227+
this.activeComponentData.z = z;
228+
},
173229
onActivated(componentData) {
230+
this.$refs.boxes.forEach((element)=> {
231+
if (element.$attrs.id !== componentData.componentName){
232+
element.enabled = false;
233+
element.$emit('deactivated')
234+
element.$emit('update:active', false)
235+
}
236+
})
174237
this.setActiveComponent(componentData.componentName);
175238
this.activeComponentData.isActive = true;
239+
176240
},
177-
onDeactivated() {
241+
242+
// deactivated is emitted before activated
243+
244+
onDeactivated(componentData) {
245+
if(this.activeComponent !== ''){
178246
this.activeComponentData.isActive = false;
247+
}
248+
// console.log("Componentdataname", componentData.componentName)
249+
// console.log("active component",this.activeComponent)
250+
// if(componentData.componentName === this.activeComponent)
251+
// {
252+
// console.log("We just clicked without making a new active component")
253+
// }
179254
},
180255
onDoubleClick(compData) {
181256
this.setActiveComponent(compData.componentName);
@@ -190,12 +265,35 @@ export default {
190265
console.log("Multiselect: ", value);
191266
this.updateActiveComponentChildrenValue(value);
192267
// this.updateComponentChildrenMultiselectValue(value)
193-
}
268+
},
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+
},
194286
// @dblclick.native="onDoubleClick(componentData)"
195287
// onDoubleClick (compData) {
196288
// this.setActiveComponent(compData.componentName)
197289
// this.activeComponentData.isActive = true
198290
// }
291+
handleClick(event){
292+
if(event.target.className === "component-display grid-bg")
293+
{
294+
this.setActiveComponent('')
295+
}
296+
}
199297
}
200298
};
201299
</script>
@@ -212,6 +310,7 @@ export default {
212310
/* width: 1rem; */
213311
line-height: 1.2;
214312
/* margin: 10px; */
313+
z-index: 0;
215314
}
216315
.component-children {
217316
position: absolute;
@@ -272,4 +371,23 @@ export default {
272371
background-color: rgba(105, 179, 190, 0.514);
273372
border: 1px dashed rgb(227, 203, 71);
274373
}
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+
} */
275393
</style>

src/components/CreateComponent.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,12 @@ export default {
7171
componentName: this.componentNameInputValue,
7272
x: 0,
7373
y: 0,
74+
z: 0,
7475
w: 200,
7576
h: 200,
7677
htmlList: this.selectedElementList,
7778
children: [],
79+
parent: {},
7880
isActive: false
7981
}
8082
@@ -83,6 +85,7 @@ export default {
8385
},
8486
resetActiveComponent () {
8587
this.setActiveComponent('')
88+
8689
},
8790
handleIconClick () {
8891
if (this.activeComponent === '') this.setClickedElementList()

src/components/ParentMultiselect.vue

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ export default {
4141
},
4242
methods: {
4343
...mapActions([
44-
'setActiveComponent',
44+
// 'addParent',
4545
'parentSelected'
4646
]),
4747
handleSelect (value) {
4848
// Set Active Component to selected Parent
49-
this.setActiveComponent(value)
49+
// this.setActiveComponent(value)
50+
// this.addParent(value)
5051
// Set parentSelected to true IF VALUE IS A VALID PARENT (not null)
51-
this.parentSelected(true)
52+
this.parentSelected(value)
5253
}
5354
},
5455
watch: {

src/store/actions.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import * as types from './types'
22

33
const actions = {
4+
5+
// add selected parent to component
6+
// [types.addParent]: ({ commit }, payload) => {
7+
// commit(types.ADD_PARENT, payload)
8+
// },
9+
410
// creates a new component in componentMap
511
[types.registerComponent]: ({ state, commit }, payload) => {
612
const { componentName } = payload
713
if (!state.componentMap[componentName]) {
814
commit(types.ADD_COMPONENT_TO_COMPONENT_MAP, payload)
9-
if (!state.parentSelected) {
15+
if (!state.parentSelected.length) {
1016
commit(
1117
types.ADD_COMPONENT_TO_ACTIVE_ROUTE_CHILDREN,
1218
payload.componentName
@@ -20,19 +26,22 @@ const actions = {
2026
return state.componentMap[component]
2127
})
2228

23-
if (state.parentSelected) {
24-
commit(types.UPDATE_ACTIVE_COMPONENT_CHILDREN_VALUE, [
25-
...state.componentMap[state.activeComponent].children,
26-
payload.componentName
27-
])
29+
if (state.parentSelected.length) {
30+
// we want to replace this with an 'add parent' mutation
31+
commit(types.ADD_PARENT, payload)
32+
// commit(types.UPDATE_ACTIVE_COMPONENT_CHILDREN_VALUE, [
33+
// ...state.componentMap[state.activeComponent].children,
34+
// payload.componentName
35+
// ])
2836
}
2937

3038
commit(types.UPDATE_COMPONENT_CHILDREN_VALUE, { component, value })
3139
commit(types.UPDATE_COMPONENT_CHILDREN_MULTISELECT_VALUE, [])
3240
commit(types.UPDATE_COMPONENT_NAME_INPUT_VALUE, '')
3341
commit(types.SET_SELECTED_ELEMENT_LIST, [])
3442
commit(types.SET_ACTIVE_COMPONENT, '')
35-
commit(types.PARENT_SELECTED, false)
43+
// commit(types.PARENT_SELECTED, false)
44+
commit(types.PARENT_SELECTED, '')
3645
}
3746
},
3847
// sets component inside componentDisplay

0 commit comments

Comments
 (0)