strated to displaying falgcollection on the left of results
This commit is contained in:
		
							
								
								
									
										1783
									
								
								web/themes/custom/materiotheme/assets/dist/main.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1783
									
								
								web/themes/custom/materiotheme/assets/dist/main.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2613
									
								
								web/themes/custom/materiotheme/assets/dist/main.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2613
									
								
								web/themes/custom/materiotheme/assets/dist/main.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -26,6 +26,7 @@ import router from 'vuejs/route'
 | 
			
		||||
import VUserBlock from 'vuejs/components/Block/UserBlock'
 | 
			
		||||
import VMainContent from 'vuejs/components/Content/MainContent'
 | 
			
		||||
import VSearchBlock from 'vuejs/components/Block/SearchBlock'
 | 
			
		||||
import VLeftContent from 'vuejs/components/Content/LeftContent'
 | 
			
		||||
 | 
			
		||||
import { mapState } from 'vuex'
 | 
			
		||||
 | 
			
		||||
@@ -36,7 +37,7 @@ import 'theme/assets/styles/main.scss'
 | 
			
		||||
  const MaterioTheme = function () {
 | 
			
		||||
    let _v_sitebranding_block, _v_user_block, _v_header_menu,
 | 
			
		||||
      _v_pagetitle_block, _v_search_block,
 | 
			
		||||
      _v_main_content
 | 
			
		||||
      _v_main_content, _v_left_content
 | 
			
		||||
    const _is_front = drupalSettings.path.isFront
 | 
			
		||||
 | 
			
		||||
    console.log('drupalSettings', drupalSettings)
 | 
			
		||||
@@ -71,6 +72,7 @@ import 'theme/assets/styles/main.scss'
 | 
			
		||||
        initVHeaderMenu()
 | 
			
		||||
        initVMainContent()
 | 
			
		||||
        initVSearchBlock()
 | 
			
		||||
        initVLeftContent()
 | 
			
		||||
      }
 | 
			
		||||
      initVUserBlock()
 | 
			
		||||
    }
 | 
			
		||||
@@ -268,7 +270,15 @@ import 'theme/assets/styles/main.scss'
 | 
			
		||||
        render: h => h(VSearchBlock, { props: { blockid: id, formhtml: formhtml } })
 | 
			
		||||
      }).$mount('#' + id)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function initVLeftContent () {
 | 
			
		||||
      const id = 'content-left'
 | 
			
		||||
      const $leftContent = document.getElementById(id)
 | 
			
		||||
      // in any case create the vue
 | 
			
		||||
      _v_left_content = new Vue({
 | 
			
		||||
        store,
 | 
			
		||||
        render: h => h(VLeftContent, { props: { id: id } })
 | 
			
		||||
      }).$mount('#' + id)
 | 
			
		||||
    }
 | 
			
		||||
    init()
 | 
			
		||||
  } // end MaterioTheme()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -93,10 +93,22 @@ main[role="main"]{
 | 
			
		||||
  flex:1 1 auto;
 | 
			
		||||
  overflow-y: auto;
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
  &>.wrapper{
 | 
			
		||||
  >.scroller{
 | 
			
		||||
    width:100vw;
 | 
			
		||||
    &>*{
 | 
			
		||||
    >.wrapper{
 | 
			
		||||
      @extend %grided-width;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: row-reverse;
 | 
			
		||||
      #content-left{
 | 
			
		||||
        flex-basis: $column_width*2+$column_goutiere;
 | 
			
		||||
        // width:$column_width*2+$column_goutiere;
 | 
			
		||||
        >*{
 | 
			
		||||
          width:$column_width*2+$column_goutiere;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      #content-center{
 | 
			
		||||
        flex-basis: $column_width*10+$column_goutiere*9;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -390,6 +390,20 @@ aside.messages{
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//   ___         _           _       _         __ _
 | 
			
		||||
//  / __|___ _ _| |_ ___ _ _| |_ ___| |   ___ / _| |_
 | 
			
		||||
// | (__/ _ \ ' \  _/ -_) ' \  _|___| |__/ -_)  _|  _|
 | 
			
		||||
//  \___\___/_||_\__\___|_||_\__|   |____\___|_|  \__|
 | 
			
		||||
#content-left{
 | 
			
		||||
  max-width:1px;
 | 
			
		||||
  overflow-x: hidden;
 | 
			
		||||
  transition: all 0.3s ease-in-out;
 | 
			
		||||
  &.opened{
 | 
			
		||||
    max-width: 500px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//   __             _
 | 
			
		||||
//  / _|_ _ ___ _ _| |_
 | 
			
		||||
// |  _| '_/ _ \ ' \  _|
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ regions:
 | 
			
		||||
  header_left: 'Header left'
 | 
			
		||||
  header_right: 'Header right'
 | 
			
		||||
  header_bottom: 'Header bottom'
 | 
			
		||||
  content_left: 'Content Left'
 | 
			
		||||
  content_top: 'Content Top'
 | 
			
		||||
  content: Content
 | 
			
		||||
  footer_left: 'Footer Left'
 | 
			
		||||
 
 | 
			
		||||
@@ -58,19 +58,28 @@
 | 
			
		||||
  </header>
 | 
			
		||||
 | 
			
		||||
  <main role="main">
 | 
			
		||||
    <div class="wrapper">
 | 
			
		||||
      {% if page.content.messages %}
 | 
			
		||||
        <aside class="messages">
 | 
			
		||||
          {{ page.content.messages }}
 | 
			
		||||
        </aside>
 | 
			
		||||
      {% endif %}
 | 
			
		||||
    <div class="scroller">
 | 
			
		||||
      <div class="wrapper">
 | 
			
		||||
        <div id="content-left">
 | 
			
		||||
          {% if page.content_left %}
 | 
			
		||||
            {{ page.content_left }}
 | 
			
		||||
          {% endif %}
 | 
			
		||||
        </div>
 | 
			
		||||
        <div id="content-center">
 | 
			
		||||
          {% if page.content.messages %}
 | 
			
		||||
            <aside class="messages">
 | 
			
		||||
              {{ page.content.messages }}
 | 
			
		||||
            </aside>
 | 
			
		||||
          {% endif %}
 | 
			
		||||
 | 
			
		||||
      <div id="content-top">
 | 
			
		||||
        {{ page.content_top }}
 | 
			
		||||
          <div id="content-top">
 | 
			
		||||
            {{ page.content_top }}
 | 
			
		||||
          </div>
 | 
			
		||||
          <div id="main-content">
 | 
			
		||||
            {{ page.content|without('messages') }}
 | 
			
		||||
          </div>{# /.layout-content #}
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div id="main-content">
 | 
			
		||||
        {{ page.content|without('messages') }}
 | 
			
		||||
      </div>{# /.layout-content #}
 | 
			
		||||
    </div>
 | 
			
		||||
  </main>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -138,7 +138,6 @@ export default {
 | 
			
		||||
            this.loadingFlag = false;
 | 
			
		||||
          })
 | 
			
		||||
        }else{
 | 
			
		||||
          
 | 
			
		||||
          this.flag({uuid: this.item.uuid, collid: collid})
 | 
			
		||||
          .then(data => {
 | 
			
		||||
            console.log("onFlagActionCard then", data);
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
<template lang="html">
 | 
			
		||||
  <div
 | 
			
		||||
    :id="id"
 | 
			
		||||
    :class="{opened: isopened}"
 | 
			
		||||
  >
 | 
			
		||||
    <FlagCollection v-if='openedCollid' :collection='flagcolls[openedCollid]'/>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState, mapActions } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { MA } from 'vuejs/api/ma-axios'
 | 
			
		||||
import router from 'vuejs/route'
 | 
			
		||||
 | 
			
		||||
import FlagCollection from 'vuejs/components/User/FlagCollection'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  router,
 | 
			
		||||
  props:['id'],
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      // isOpened: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState({
 | 
			
		||||
      flagcolls: state => state.User.flagcolls,
 | 
			
		||||
      openedCollid: state => state.User.openedCollid
 | 
			
		||||
    }),
 | 
			
		||||
    isopened () {
 | 
			
		||||
      return this.openedCollid
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  beforeMount() {
 | 
			
		||||
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
 | 
			
		||||
  },
 | 
			
		||||
  components: {
 | 
			
		||||
    FlagCollection
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
@@ -0,0 +1,60 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <section class="flag-collection">
 | 
			
		||||
    <h3>{{collection.name}}</h3>
 | 
			
		||||
    <ul v-if="loadedItems">
 | 
			
		||||
      <li
 | 
			
		||||
        v-for="item in loadedItems"
 | 
			
		||||
        :key="item.id"
 | 
			
		||||
      >{{item.attributes.title}}</li>
 | 
			
		||||
    </ul>
 | 
			
		||||
    <span v-else class="loading">Loading</span>
 | 
			
		||||
  </section>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { mapState, mapActions } from 'vuex'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "FlagCollection",
 | 
			
		||||
  props: ['collection'],
 | 
			
		||||
  data: () => ({
 | 
			
		||||
    loadedItems: false
 | 
			
		||||
  }),
 | 
			
		||||
  computed: {
 | 
			
		||||
    ...mapState({
 | 
			
		||||
      flagcolls: state => state.User.flagcolls
 | 
			
		||||
      // openedCollid: state => state.User.openedCollid
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  // watch: {
 | 
			
		||||
  //   flagcolls (newv, oldv) {
 | 
			
		||||
  //     console.log('watching flagcolls');
 | 
			
		||||
  //     if( typeof this.flagcolls[this.collection.id].loadedItems !== 'undefined' ) {
 | 
			
		||||
  //       this.loadedItems = this.flagcolls[this.collection.id].loadedItems
 | 
			
		||||
  //     }
 | 
			
		||||
  //   }
 | 
			
		||||
  // },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.unsubscribe = this.$store.subscribe((mutation, state) => {
 | 
			
		||||
      if (mutation.type === 'User/setLoadedCollItems') {
 | 
			
		||||
        this.loadedItems = state.User.flagcolls[this.collection.id].loadedItems
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    this.unsubscribe()
 | 
			
		||||
  },
 | 
			
		||||
  // beforeMount () {
 | 
			
		||||
  //   if (typeof this.flagcolls[collection.id].loadedItems === 'undefined') {
 | 
			
		||||
  //     this.
 | 
			
		||||
  //   }
 | 
			
		||||
  // },
 | 
			
		||||
  // methods: {
 | 
			
		||||
  //   ...mapActions({
 | 
			
		||||
  //     loadFlagCollItems: 'User/loadFlagCollItems'
 | 
			
		||||
  //   })
 | 
			
		||||
  // }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
</style>
 | 
			
		||||
@@ -4,8 +4,11 @@
 | 
			
		||||
      class="mdi mdi-folder-outline"
 | 
			
		||||
    >My folders</h2>
 | 
			
		||||
    <ul>
 | 
			
		||||
      <li  v-if="flagcolls" v-for="coll in flagcolls" :key="coll.id">
 | 
			
		||||
        <h5>{{ coll.name }} ({{ coll.items.length }})</h5>
 | 
			
		||||
      <li v-if="flagcolls" v-for="coll in flagcolls" :key="coll.id">
 | 
			
		||||
        <h5
 | 
			
		||||
          :flagcollid="coll.id"
 | 
			
		||||
          @click.prevent="onOpenFlagColl"
 | 
			
		||||
        >{{ coll.name }} ({{ coll.items.length }})</h5>
 | 
			
		||||
        <div class="actions">
 | 
			
		||||
          <span
 | 
			
		||||
            class="delete-btn mdi"
 | 
			
		||||
@@ -64,7 +67,8 @@ export default {
 | 
			
		||||
  methods: {
 | 
			
		||||
    ...mapActions({
 | 
			
		||||
      createFlagColl: 'User/createFlagColl',
 | 
			
		||||
      deleteFlagColl: 'User/deleteFlagColl'
 | 
			
		||||
      deleteFlagColl: 'User/deleteFlagColl',
 | 
			
		||||
      openFlagColl: 'User/openFlagColl'
 | 
			
		||||
    }),
 | 
			
		||||
    onCreateFlagColl () {
 | 
			
		||||
      console.log("UserFlags onCreateFlagColl", this.new_folder_name)
 | 
			
		||||
@@ -77,7 +81,7 @@ export default {
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    onDeleteFlagColl (e) {
 | 
			
		||||
      let flagcollid = e.target.getAttribute('flagcollid');
 | 
			
		||||
      const flagcollid = e.target.getAttribute('flagcollid');
 | 
			
		||||
      console.log("UserFlags onDeleteFlagColl", flagcollid);
 | 
			
		||||
      this.is_deleting_folder = flagcollid;
 | 
			
		||||
      this.deleteFlagColl(flagcollid)
 | 
			
		||||
@@ -85,6 +89,14 @@ export default {
 | 
			
		||||
          // console.log("onDeleteFlagColl then", data);
 | 
			
		||||
          this.is_deleting_folder = false;
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    onOpenFlagColl (e) {
 | 
			
		||||
      const flagcollid = e.target.getAttribute('flagcollid');
 | 
			
		||||
      console.log("UserFlags onDeleteFlagColl", flagcollid);
 | 
			
		||||
      this.openFlagColl(flagcollid)
 | 
			
		||||
        .then(() => {
 | 
			
		||||
          // console.log("onDeleteFlagColl then", data);
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ Vue.use(VueRouter)
 | 
			
		||||
// const languages = ['en', 'fr'];
 | 
			
		||||
// console.log('path aliases', (() => languages.map(l => `/${l}/base`))() );
 | 
			
		||||
 | 
			
		||||
let basePath = drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix;
 | 
			
		||||
const basePath = drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix
 | 
			
		||||
 | 
			
		||||
const routes = [
 | 
			
		||||
  {
 | 
			
		||||
@@ -32,11 +32,11 @@ const routes = [
 | 
			
		||||
    // }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    name:'base',
 | 
			
		||||
    name: 'base',
 | 
			
		||||
    path: `${basePath}base`,
 | 
			
		||||
    // path: `/base`,
 | 
			
		||||
    // alias: (() => languages.map(l => `/${l}/base`))(),
 | 
			
		||||
    component: Base,
 | 
			
		||||
    component: Base
 | 
			
		||||
    // components: {
 | 
			
		||||
    //   'base': Base
 | 
			
		||||
    // }
 | 
			
		||||
@@ -53,20 +53,20 @@ const routes = [
 | 
			
		||||
  //   ]
 | 
			
		||||
  // }
 | 
			
		||||
  {
 | 
			
		||||
    name:'blabla',
 | 
			
		||||
    name: 'blabla',
 | 
			
		||||
    path: `${basePath}blabla`,
 | 
			
		||||
    component: Blabla
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    name:'article',
 | 
			
		||||
    name: 'article',
 | 
			
		||||
    path: `${basePath}blabla/:alias`,
 | 
			
		||||
    component: Article,
 | 
			
		||||
    component: Article
 | 
			
		||||
    // meta: { uuid:null }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    name:'showrooms',
 | 
			
		||||
    name: 'showrooms',
 | 
			
		||||
    path: `${basePath}showrooms`,
 | 
			
		||||
    component: Showrooms,
 | 
			
		||||
    component: Showrooms
 | 
			
		||||
    // meta: { uuid:null }
 | 
			
		||||
  },
 | 
			
		||||
  // {
 | 
			
		||||
@@ -77,7 +77,7 @@ const routes = [
 | 
			
		||||
  //   }
 | 
			
		||||
  // },
 | 
			
		||||
  {
 | 
			
		||||
    name:'pricing',
 | 
			
		||||
    name: 'pricing',
 | 
			
		||||
    path: `${basePath}pricing`,
 | 
			
		||||
    component: Pricing
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { REST } from 'vuejs/api/rest-axios'
 | 
			
		||||
// import { JSONAPI } from 'vuejs/api/json-axios';
 | 
			
		||||
import { JSONAPI } from 'vuejs/api/json-axios'
 | 
			
		||||
import { MA } from 'vuejs/api/ma-axios'
 | 
			
		||||
import qs from 'querystring-es3'
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +18,8 @@ export default {
 | 
			
		||||
    isAdherent: false,
 | 
			
		||||
    canSearch: false,
 | 
			
		||||
    roles: [],
 | 
			
		||||
    flagcolls: false
 | 
			
		||||
    flagcolls: false,
 | 
			
		||||
    openedCollid: null
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // getters
 | 
			
		||||
@@ -84,6 +85,13 @@ export default {
 | 
			
		||||
    setFlagColls (state, flagcolls) {
 | 
			
		||||
      console.log('User setFlagColls', flagcolls)
 | 
			
		||||
      state.flagcolls = flagcolls
 | 
			
		||||
    },
 | 
			
		||||
    openFlagColl (state, collid) {
 | 
			
		||||
      state.openedCollid = collid
 | 
			
		||||
    },
 | 
			
		||||
    setLoadedCollItems (state, data) {
 | 
			
		||||
      console.log('setLoadedCollItems', data)
 | 
			
		||||
      state.flagcolls[data.collid].loadedItems = data.items
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@@ -262,6 +270,39 @@ export default {
 | 
			
		||||
          })
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
    openFlagColl ({ commit, dispatch }, collid) {
 | 
			
		||||
      console.log('user openFlagColl', collid)
 | 
			
		||||
      commit('openFlagColl', collid)
 | 
			
		||||
      dispatch('loadFlagCollItems', collid)
 | 
			
		||||
    },
 | 
			
		||||
    loadFlagCollItems ({ commit, state }, collid) {
 | 
			
		||||
      console.log('loadFlagCollItems', state.flagcolls[collid].items_uuids)
 | 
			
		||||
      const params = {
 | 
			
		||||
        'filter[uuids-groupe][group][conjunction]': 'OR'
 | 
			
		||||
      }
 | 
			
		||||
      const uuids = state.flagcolls[collid].items_uuids
 | 
			
		||||
      // console.log('uuids', uuids)
 | 
			
		||||
      for (let i = 0; i < uuids.length; i++) {
 | 
			
		||||
        let uuid = uuids[i]
 | 
			
		||||
        // console.log('uuid', uuid)
 | 
			
		||||
        params[`filter[${uuid}][condition][path]`] = 'id'
 | 
			
		||||
        params[`filter[${uuid}][condition][value]`] = uuid
 | 
			
		||||
        params[`filter[${uuid}][condition][operator]`] = '='
 | 
			
		||||
        params[`filter[${uuid}][condition][memberOf]`] = 'uuids-groupe'
 | 
			
		||||
      }
 | 
			
		||||
      console.log('search JSONAPI params', params);
 | 
			
		||||
      const q = qs.stringify(params)
 | 
			
		||||
      return JSONAPI.get('node/materiau?' + q)
 | 
			
		||||
        .then(({ data }) => {
 | 
			
		||||
          console.log('user loadFlagCollItems data', data)
 | 
			
		||||
          // dispatch('parseItems', { data: data.data, uuids: uuids })
 | 
			
		||||
          commit('setLoadedCollItems', {collid: collid, items: data.data})
 | 
			
		||||
        })
 | 
			
		||||
        .catch((error) => {
 | 
			
		||||
          console.warn('Issue with loadFlagCollItems', error)
 | 
			
		||||
          Promise.reject(error)
 | 
			
		||||
        })
 | 
			
		||||
    },
 | 
			
		||||
    userLogout ({ commit, state }) {
 | 
			
		||||
      const credentials = qs.stringify({
 | 
			
		||||
        token: state.csrf_token
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user