]> Repos - mime-chat/commitdiff
rafactor input handler + renderer
authorriqo <hernandeze2@xavier.edu>
Sun, 13 Dec 2020 18:39:57 +0000 (12:39 -0600)
committerriqo <hernandeze2@xavier.edu>
Sun, 13 Dec 2020 18:39:57 +0000 (12:39 -0600)
src/components/UI/UIDetails/messageRenderer.vue
src/components/input/inputDetails/audioInput.vue
src/components/input/inputDetails/textInput.vue
src/components/input/inputItem.vue
src/composables/inputItem/useInputRenderer.ts
src/composables/inputItem/useTextInput.ts

index 761b347f10d8cf87c977306916f172e4ac890022..2068c80e44405d52791a316783de800396d04ba7 100644 (file)
@@ -29,7 +29,7 @@
 
 <script lang="ts">
 import useMessageRenderer from "@/composables/messageRenderer/useMessageRenderer";
-import useScroller from "@/composables/scroller/useScroller";
+import useScrollView from "@/composables/scrollView/useScrollView";
 import {
   defineComponent,
   reactive,
@@ -55,7 +55,7 @@ export default defineComponent({
     }
 
     const { beforeEnter, enter, afterEnter } = useMessageRenderer();
-    const {scrollView} = useScroller({ targetId: "messageRenderer"});
+    const {scrollView} = useScrollView({ targetId: "messageRenderer"});
 
     return {
       renderArr,
index 7526e123257a694614240d6b16391b5341df492f..7626ac784866b7b1033d8d58547bac1e3bbbc344 100644 (file)
@@ -1,7 +1,7 @@
 <template>
-<svg xmlns="http://www.w3.org/2000/svg" :width="reactiveWidth" height="34" x="50%" y="450" >
+<svg xmlns="http://www.w3.org/2000/svg" :width="bubbleWidth" height="34" :x="center" y="450" >
   <g id="Group_126" data-name="Group 126" transform="translate(0 0)">
-    <rect id="Rectangle_478" data-name="Rectangle 478" :width="reactiveWidth" height="34" rx="10" transform="translate(0 0)" fill="#b9b9b9"/>
+    <rect id="Rectangle_478" data-name="Rectangle 478" :width="bubbleWidth" height="34" rx="10" transform="translate(0 0)" fill="#b9b9b9"/>
     <g id="Group_125" data-name="Group 125">
       <!-- <path id="Path_328" data-name="Path 328" d="M0,25v-10" transform="translate(10 0)" fill="none" stroke="#000" stroke-linecap="round" stroke-width="1.5"/>
       <path id="Path_328" data-name="Path 328" d="M0,25v-15" transform="translate(15 0)" fill="none" stroke="#000" stroke-linecap="round" stroke-width="1.5"/>
 </template>
 
 <script lang="ts">
-import {ref, defineComponent, onMounted, watch} from 'vue'
-import useInputRenderer from "@/composables/inputItem/useInputRenderer";
+import { defineComponent, computed } from 'vue'
 export default defineComponent ({
   name: 'AudioInput',
-  setup() {
-
-  const { reactiveWidth, input } = useInputRenderer();
-
-
-
-    return {
-      reactiveWidth
-    }
-    // const { initRecorder } = useStreamRecorder(record);
-
-    // onMounted(async () => {
-    //   // step get streamRecorder reference
-    //   const { streamRecorder } = await initRecorder();
-
-    // });
+  props: {
+    bubbleWidth: Number
+  },
+  setup(props){
+    const center = computed(() => {
+      if (props.bubbleWidth) {
+        return 175 - props.bubbleWidth / 2;
+      }
+    })
+    return { center }
   }
 })
 </script>
\ No newline at end of file
index 06e8c3bd1609c667f136f0f49c8caf46bbf9f398..06419e9fb1f36628ed90d229b28e9646f6add77e 100644 (file)
@@ -1,5 +1,5 @@
 <template>
-  <foreignObject class="inputContainer" :x="inputXoffset" y="450" width="55%" height="50%">
+  <foreignObject class="inputContainer" :x="textXoffset" y="450" width="55%" height="50%">
     <div xmlns="http://www.w3.org/1999/xhtml">
       <div class="inputBubble" contenteditable v-show="input.length > 0">
         <p>{{ input }}</p>
@@ -9,20 +9,12 @@
 </template>
 
 <script lang="ts">
-import useInputRenderer from "@/composables/inputItem/useInputRenderer";
-import useStreamRecorder from "@/composables/streamRecorder/useStreamRecorder";
 import { defineComponent, watch, onMounted, ref } from "vue";
-import useTextInput from '@/composables/inputItem/useTextInput';
 export default defineComponent({
   name: "TextInput",
-  setup() {
-    const record = ref(false);
-    const { inputXoffset, input } = useTextInput();
-
-    return {
-      input,
-      inputXoffset,
-    };
+  props: {
+    input: String,
+    textXoffset: String
   },
 });
 </script>
index bd5612d9c6470948db7579f63dd151ae3b68f0ad..16942c4da76d988a93f6f24b704a5ade2108c566 100644 (file)
@@ -1,6 +1,13 @@
 <template>
-  <audio-input v-if="renderAudio" />
-  <text-input v-else />
+  <audio-input 
+    v-if="renderAudio" 
+    :bubbleWidth="reactiveWidth" 
+  />
+  <text-input 
+    v-else 
+    :input="input" 
+    :textXoffset="textInputXoffset"  
+  />
 </template>
 
 <script lang="ts">
@@ -12,10 +19,14 @@ export default defineComponent({
   name: "InputItem",
   components: {TextInput, AudioInput},
   setup() {
-    const { renderAudio } = useInputRenderer();
+
+    const { input, renderAudio, reactiveWidth, textInputXoffset } = useInputRenderer();
 
     return {
-      renderAudio
+      input,
+      textInputXoffset,
+      renderAudio,
+      reactiveWidth
     }
   }
 })
index d7227561ea542e3a6dfb8823900a63d75d2888c4..34a797bf07db5f1f2bd1a51396fb2d3e84d90634 100644 (file)
@@ -1,32 +1,35 @@
-import {ref, computed, inject, watch, onUnmounted, onMounted, render} from "vue";
-import useInputAnims from "./useInputAnims";
+import {ref, watch, onUnmounted, onMounted } from "vue";
 import useKeyDownHandler from "@/composables/keyDownHandler/useKeyDownHandler";
 import useMediaStream from "@/composables/mediaStream/useMediaStream";
 import useStreamRecorder from "@/composables/streamRecorder/useStreamRecorder";
+import useTextInput from '@/composables/inputItem/useTextInput';
+/* 
+* Renders input to the user
+*/
 export default function useInputRenderer() {
+  // program ref varaiables
+  const renderAudio = ref(false);
+  const reactiveWidth = ref(10);
+  
+  // get input feedback & handler function
   const { keyDownHandler, input } = useKeyDownHandler();
+  // get text Offset and & textRender function
+  const { textInputXoffset, renderTextInput } = useTextInput(input, renderAudio);
+
+  // why do we have audio stuff here 
   let stream: any;
-  const renderAudio = ref(false);
   const {handleStream} = useStreamRecorder(renderAudio)
-
   onMounted(async () => {
     stream = await useMediaStream()
   })
 
+  // stop stream recording on space keyup event
   function keyupHandler(e: any) {
     if (e.key === " " && renderAudio.value) {
       console.log("stop recording");
       renderAudio.value = false;
-
-      // window.postMessage(
-      //   {
-      //     myTypeField: "audio-stream",
-      //     stream: false,
-      //   },
-      //   "*"
-      // );
       input.value = "";
-      reactiveWidth.value = 35;
+      reactiveWidth.value = 10;
     }
   }
 
@@ -34,49 +37,34 @@ export default function useInputRenderer() {
   window.addEventListener("keydown", keyDownHandler);
   window.addEventListener('keyup', keyupHandler);
 
-  // remove Event Listener on component unMount
+  // remove Event Listeners on component unMount
   onUnmounted(() => {
     window.removeEventListener("keydown", keyDownHandler);
     window.removeEventListener("keyup", keyupHandler);
   });
 
+  // determine whether to render text or audio based one the keyboard input
   watch(input, async (input, prevInput) => {
-    console.log(input)
-    if (prevInput === '' && input === ' ') {
-      // begin recording
-      console.log('record')
+    if (prevInput !== "" || prevInput.length > 0) {
+      if (!renderAudio.value) {
+        renderTextInput();
+      }
+      return;
     }
-    // if (prevInput !== "" || prevInput.length > 0) {
-    //   if (!renderAudio.value) {
-    //     // renderInput();
-    //   }
-    //   return;
-    // }
-    // if (input === " " && renderAudio.value === false) {
-    //   console.log("record");
-    //   renderAudio.value = true;
-    //   // handleStream(stream.stream, reactiveWidth);
-    //   return;
-    //   // window.postMessage(
-    //   //   {
-    //   //     myTypeField: "audio-stream",
-    //   //     stream: true,
-    //   //   },
-    //   //   "*"
-    //   // );
-    // }           
-    // renderInput();
+    if (input === " " && renderAudio.value === false) {
+      console.log("record");
+      renderAudio.value = true;
+      handleStream(stream.stream, reactiveWidth);
+      return;
+    }           
+    renderTextInput();
   });
 
-  const reactiveWidth = ref(35);
-  watch(reactiveWidth, (w) => {
-    console.log(w)
-  })
-
   return {
     input,
     renderAudio,
-    reactiveWidth
+    reactiveWidth,
+    textInputXoffset
   }
 
 }
\ No newline at end of file
index 97162d89968cf5a012d4078c909e88bd339fefd5..58f9c4179171dd5f8e351f8d780e01b09b9ae1ff 100644 (file)
@@ -1,9 +1,7 @@
 import {ref, computed, watch, inject} from 'vue';
 import useInputAnims from "./useInputAnims";
 import useInputRenderer from './useInputRenderer';
-export default function useTextInput() {
-
-  const {input, renderAudio} = useInputRenderer();
+export default function useTextInput(input: any, audioRender: any) {
 
   const emitter: any = inject("mitt");
   const {animateSend, verticalShiftInput, inputAppear} = useInputAnims();
@@ -29,24 +27,18 @@ export default function useTextInput() {
       }
   }
 
-  watch(input, async (input, prevInput) => {
-    if (!renderAudio.value) {
-      renderTextInput();
-    }
-  });
-
   emitter.on("newSelfMessage", async (payload: any) => {
     const inputEl = document.getElementsByClassName("inputContainer");
     const foreignEl = inputEl[0] as HTMLElement;
     animateSend(foreignEl, inputHeight.value, input);
   });
 
-  const inputXoffset = computed(() => {
+  const textInputXoffset = computed(() => {
     return `calc(50% - ${inputWidth.value / 2})`;
   });
 
   return {
-    input,
-    inputXoffset,
+    textInputXoffset,
+    renderTextInput
   }
 }
\ No newline at end of file