Snippets

John Martini Quasar Snippets

Created by John Martini last modified
<template>
  <q-page class="column">
    <div class="col bg-purple relative-position">
      <div class="absolute-full scroll overflow-auto">
        <div class="text-h4 q-mb-md">Before</div>
        <div v-for="n in 50" :key="n" class="q-my-md">
          {{ n }}. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
          Quis praesentium cumque magnam odio iure quidem, quod illum numquam
          possimus obcaecati commodi minima assumenda consectetur culpa fuga
          nulla ullam. In, libero.
        </div>
      </div>
    </div>

    <div v-if="isCategoriesEnabled">
      <q-bar
        class="bg-primary cursor-n-size"
        style="cursor: n-resize"
        v-touch-pan.vertical.prevent.mouse="handlePan"
      >
        <div>Console</div>
        <q-space />
        <q-btn dense flat round icon="mdi-text-box-remove-outline">
          <q-tooltip :delay="1000">Clear</q-tooltip>
        </q-btn>
        <q-btn
          dense
          round
          flat
          icon="mdi-close"
          @click="isCategoryEnabled = False"
        >
          <q-tooltip :delay="1000">Close</q-tooltip>
        </q-btn>
      </q-bar>

      <div
        class="col-auto bg-green relative-position"
        :style="`height: ${consoleHeight}px`"
      >
        <div class="absolute-full scroll overflow-auto">
          <div v-for="n in 6" :key="n" class="q-my-md">
            {{ n }}. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
            Quis praesentium cumque magnam odio iure quidem, quod illum numquam
            possimus obcaecati commodi minima assumenda consectetur culpa fuga
            nulla ullam. In, libero.
          </div>
        </div>
      </div>
    </div>
  </q-page>
</template>

<script>
import { defineComponent, ref, computed, onMounted } from "vue";
import { useStore } from "vuex";
import AppItemsView from "components/AppItemsView.vue";

export default defineComponent({
  name: "PageIndex",
  components: {
    //AppItemsView,
  },
  setup() {
    const $store = useStore();
    const splitterModel = ref(75);
    const isBusy = computed(() => $store.state.app.isBusy);
    const isCategoriesEnabled = computed(
      () => $store.state.app.isCategoriesEnabled
    );
    const categories = computed(() => $store.state.app.categories);
    const changedExpandedState = (value, name) => {
      $store.commit("app/setCategoryExpanded", { expanded: value, name: name });
    };

    onMounted(() => {
      $store.dispatch("app/initialize");
    });

    // console
    const consoleHeight = ref(100);
    let originalHeight;
    let originalY;

    return {
      isBusy,
      isCategoriesEnabled,
      categories,
      splitterModel,
      changedExpandedState,
      consoleHeight,

      handlePan({ evt, ...newInfo }) {
        console.log("here");
        if (newInfo.isFirst) {
          originalHeight = consoleHeight.value;
          originalY = newInfo.position.top;
        } else {
          const newDelta = newInfo.position.top - originalY;
          // Should add (instead of subtract) for top drawer
          const newHeight = Math.max(
            100,
            Math.min(400, originalHeight - newDelta)
          );
          consoleHeight.value = newHeight;
        }
      },
    };
  },
});
</script>
<div class="row items-stretch content-stretch q-gutter-md">
  <div class="col">
    <q-card class="bg-red fit">Here we go </q-card>
  </div>
  <div class="col">
    <q-card class=" bg-green fit">Here we go this is longer and it should wrap nicely in the column </q-card>
  </div>
  <div class="col">
    <q-card class=" bg-blue fit">Here we go </q-card>
  </div>
  <div class="col">
    <q-card class=" bg-orange fit">Here we go </q-card>
  </div>
</div>
<template>
  <q-page class="bg-red row justify-start">
    <div class="bg-green row col absolute-full"> 
      
      <q-splitter v-model="splitterModel" horizontal class="fit">
        <template v-slot:before>
          <div class="q-pa-md">
            <div class="text-h4 q-mb-md">Before</div>
            <div v-for="n in 20" :key="n" class="q-my-md">
              {{ n }}. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
              Quis praesentium cumque magnam odio iure quidem, quod illum
              numquam possimus obcaecati commodi minima assumenda consectetur
              culpa fuga nulla ullam. In, libero.
            </div>
          </div>
        </template>
        
        <template v-slot:after>
          <div class="q-pa-md">
            <div class="text-h4 q-mb-md">After</div>
            <div v-for="n in 20" :key="n" class="q-my-md">
              {{ n }}. Lorem ipsum dolor sit, amet consectetur adipisicing elit.
              Quis praesentium cumque magnam odio iure quidem, quod illum
              numquam possimus obcaecati commodi minima assumenda consectetur
              culpa fuga nulla ullam. In, libero.
            </div>
          </div>
        </template>
      </q-splitter>
    </div>
  </q-page>
</template>

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.