From 83562a046fae0572d4409d19502dd1e5118d328b Mon Sep 17 00:00:00 2001
From: Frank Zhang <fz2907@vt.edu>
Date: Thu, 24 Nov 2022 19:19:14 -0500
Subject: [PATCH] history main body started

---
 .../src/components/AgreedMatchPage.vue        | 208 ++++++++++++++++--
 1 file changed, 186 insertions(+), 22 deletions(-)

diff --git a/FrontendFolder/switch-room/src/components/AgreedMatchPage.vue b/FrontendFolder/switch-room/src/components/AgreedMatchPage.vue
index 3656e71e..02debb66 100644
--- a/FrontendFolder/switch-room/src/components/AgreedMatchPage.vue
+++ b/FrontendFolder/switch-room/src/components/AgreedMatchPage.vue
@@ -25,7 +25,100 @@
             </el-card>
           </el-space>
         </el-aside>
-        <el-main>Main</el-main>
+        <el-main>
+          <!-- This is the main body part -->
+          <el-card shadow="never" class="main-card">
+                <span>{{displayPage}} Matched Record Detail</span>
+                <el-form
+                  ref="ruleFormRef"
+                  :model="agreedRecord"
+                  :rules="rules"
+                  label-width="120px"
+                  :label-position="'left'"
+                  class="demo-ruleForm"
+                  :size="formSize"
+                  status-icon
+                >
+                  <el-form-item></el-form-item>
+
+                  <el-form-item label="City Name:" prop="city">
+                    <el-input v-model="agreedRecord.city" :readonly="true" />
+                  </el-form-item>
+
+                  <el-form-item  label="State:" prop="state">
+                    <el-select
+                        v-model="agreedRecord.state"
+                        placeholder="Please select state"
+                        :disabled="true"
+                    >
+                      <el-option v-for="(state_item, index) in USA_STATE_INITAL_LIST"
+                                 :label="state_item" :value="state_item" />
+                    </el-select>
+                  </el-form-item>
+
+                  <el-form-item label="Trip Start Time">
+                    <el-form-item prop="startTime">
+                      <el-date-picker
+                        v-model="agreedRecord.startTime"
+                        type="date"
+                        label="Pick a date"
+                        placeholder="Pick a date"
+                        style="width: 100%"
+                        :readonly="true"
+                      />
+                    </el-form-item>
+                  </el-form-item>
+
+                  <el-form-item label="Trip End Time">
+                    <el-form-item prop="endTime">
+                      <el-date-picker
+                        v-model="agreedRecord.endTime"
+                        type="date"
+                        label="Pick a date"
+                        placeholder="Pick a date"
+                        style="width: 100%"
+                        :readonly="true"
+                      />
+                    </el-form-item>
+                  </el-form-item>
+
+                  <!-- Rating and comment when the agreement is due -->
+                  <el-form-item label="Rate Your Visitor:" prop="toVisitorStar" 
+                    v-if="!agreedRecord.onGoing && displayPage==='Offer'" >
+                    <el-rate
+                      v-model="agreedRecord.toVisitorStar"
+                      :texts="['oops', 'disappointed', 'normal', 'good', 'great']"
+                      show-text
+                    />
+                  </el-form-item>
+
+                  <el-form-item label="Leave Comment:" prop="toVisitorComment"
+                    v-if="!agreedRecord.onGoing && displayPage==='Offer'">
+
+                  </el-form-item>
+
+                  <el-form-item label="Rate Your Host:" prop="toOfferStar"
+                    v-if="!agreedRecord.onGoing && displayPage==='Wishlist'">
+                    <el-rate
+                      v-model="agreedRecord.toOfferStar"
+                      :texts="['oops', 'disappointed', 'normal', 'good', 'great']"
+                      show-text
+                    />
+                  </el-form-item>
+
+                  <el-form-item label="Leave Comment:" prop="toOfferComment"
+                    v-if="!agreedRecord.onGoing && displayPage==='Wishlist'" >
+
+                  </el-form-item>
+
+
+                  <el-button type="primary" v-if="buttonState === 'edit'" @click="onEdit()"
+                  >Edit Comment</el-button>
+                  <el-button type="success" v-if="buttonState === 'update'" @click="updateForm(ruleFormRef)"
+                  >Save</el-button>
+                </el-form>
+              </el-card>
+        </el-main>
       </el-container>
     </el-container>
   </div>
@@ -37,16 +130,20 @@ import { Calendar } from '@element-plus/icons-vue'
 import { reactive, ref, onMounted } from "vue";
 import {AgreedRecordModel} from "@/models/AgreedRecordModel";
 import * as AgreedRecordService from "@/services/AgreedMatchService";
+import type { FormInstance, FormRules } from "element-plus";
+import { USA_STATE_INITAL_LIST } from "@/services/Constans";
 
-let displayPage = null;
+let displayPage = ref("");
 const sideList = reactive({value:[]});
 const agreedRecord = ref(new AgreedRecordModel());
+const buttonState = ref("edit");
 
-const selectItem = (listIdx) => {
-  agreedRecord.value = sideList[listIdx];
+const selectItem = (listIdx:number) => {
+  agreedRecord.value = sideList.value[listIdx];
+  console.log("You selected index: " + listIdx+" , and data is: ", agreedRecord.value)
 }
 
-const handleTabClick = (tabIdx) => {
+const handleTabClick = (tabIdx: number) => {
   if(tabIdx == 0){
     clickOnOfferTab();
   }else if(tabIdx == 1){
@@ -56,7 +153,7 @@ const handleTabClick = (tabIdx) => {
 
 const clickOnOfferTab = async() =>{
   // Load agreed offers from backend
-  displayPage = "offer";
+  displayPage.value = "Offer";
   await AgreedRecordService.getAgreedOfferRecord().then((response)=>{
     console.log("Receiving offer records from backend: ", response);
     if(response["data"]!== null){
@@ -69,11 +166,10 @@ const clickOnOfferTab = async() =>{
 
 const clickOnWishlistTab = async() =>{
   // Load agreed Wishlist from backend
-  displayPage = "wishlist";
-  await AgreedRecordService.getAgreedWishlistRecord().then((response)=>{
-    console.log("Receiving wishlist records from backend: ", response);
-    // remove it when done
-    let testData = {
+  displayPage.value = "Wishlist";
+
+  // remove it when done
+  let testData = {
       "message": "Success",
       "status": "OK",
       "data": [
@@ -95,22 +191,90 @@ const clickOnWishlistTab = async() =>{
         }
       ]
     }
-    if(response === undefined){
-      sideList.value = testData["data"]
-    }
-    // remove it when done
-    if(response["data"]!== null){
-      sideList.value = response["data"];
-    }else{
-      // TODO: display empty page
-    }
-  })
+    
+    sideList.value = testData.data
+    
+
+  // await AgreedRecordService.getAgreedWishlistRecord().then((response)=>{
+  //   console.log("Receiving wishlist records from backend: ", response);
+  //   if(response["data"]!== null){
+  //     sideList.value = response["data"];
+  //   }else{
+  //     // TODO: display empty page
+  //   }
+  // })
 }
 
-const formatDate = (dateString) => {
+const formatDate = (dateString: string) => {
   const date = new Date(dateString);
   return new Intl.DateTimeFormat('en-US').format(date);
 }
+
+const rules = reactive<FormRules>({
+  cityName: [
+    {
+      required: true,
+      message: "Please give which city you want to visit.",
+      trigger: "blur",
+    },
+    { min: 0, max: 20, message: "Length should be 0 to 20", trigger: "blur" },
+  ],
+  zipCode:[
+    {
+      required: true,
+      message: "Please give the stat of the city located.",
+      trigger: "blur",
+    },
+  ],
+  state: [
+    {
+      required: true,
+      message: "Please give the stat of the city located.",
+      trigger: "blur",
+    },
+  ],
+  startTime: [
+    {
+      type: "date",
+      required: true,
+      message: "Please pick a date",
+      trigger: "change",
+    },
+  ],
+  endTime: [
+    {
+      type: "date",
+      required: true,
+      message: "Please pick a time",
+      trigger: "change",
+    },
+  ],
+});
+
+const onEdit = () =>{
+  buttonState.value = "update";
+}
+
+const updateForm = async (formEl: FormInstance | undefined) =>{
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      AgreedRecordService.updateRatingInformation( agreedRecord.value).then((response)=>{
+        console.log("Receiving wishlist item data", response);
+        if(response["data"] === null){
+          // TODO: create failed, handle it later
+        }else{
+          buttonState.value = "edit";
+        }
+        console.log("submit!");
+        })
+    } else {
+      console.log("error submit!", fields);
+    }
+    console.log(agreedRecord.value);
+  });
+}
+
 </script>
 
 <style>
-- 
GitLab