From d87f81c544ab4b1f613a6a9e9434b817bf0f14a6 Mon Sep 17 00:00:00 2001
From: trymg <trymg@stud.ntnu.no>
Date: Wed, 27 Oct 2021 13:38:27 +0200
Subject: [PATCH] Cleanup and minor fixes including bug with ordering. Also
 implemented bug fix from thomas's branch.

---
 client/src/components/Header.tsx      | 11 +----------
 client/src/components/Movies.tsx      | 19 ++++++-------------
 client/src/components/MoviesStore.tsx |  7 +------
 client/src/components/PrintTable.tsx  |  6 ++----
 client/src/components/services.ts     | 15 ---------------
 server/src/server.ts                  | 17 ++++-------------
 6 files changed, 14 insertions(+), 61 deletions(-)

diff --git a/client/src/components/Header.tsx b/client/src/components/Header.tsx
index 31bdc57..47a4590 100644
--- a/client/src/components/Header.tsx
+++ b/client/src/components/Header.tsx
@@ -35,7 +35,6 @@ class Header extends React.Component<MoviesProps, MyState> {
                 <input type="text" placeholder="Filter on genre..." onChange={this.handleChange} id="textfield2"></input>
                 Order by year:
                 <input type="checkbox" id="checkbox1" onChange={this.handleChange}></input>
-
                 <button onClick={this.search}>Search</button>
             </div>
         )
@@ -44,11 +43,7 @@ class Header extends React.Component<MoviesProps, MyState> {
 
     handleChange = (event: any) => {
         let element = event.target.id
-        if (event.keyCode === 13) { // not working
-            console.log("enter")
-            this.search()
-        }
-
+        
         if (element == 'textfield1') {
             this.setState({ inputTitle: event.target.value })
         }
@@ -58,12 +53,8 @@ class Header extends React.Component<MoviesProps, MyState> {
         else if (element == 'checkbox1') {
             this.setState({ checkbox1_checked: event.target.checked })
         }
-        // else if (element == 'checkbox12') {
-        //     this.setState({ checkbox2_checked: event.target.checked })
-        // }
     }
 
-// TODO mysql ordering not working because of graphql scrambling
     search = () => {
         this.getMoviesBySearch('title genre year', this.state.inputTitle, this.state.inputGenre, this.state.checkbox1_checked);
     }
diff --git a/client/src/components/Movies.tsx b/client/src/components/Movies.tsx
index d0c0587..e22bb2e 100644
--- a/client/src/components/Movies.tsx
+++ b/client/src/components/Movies.tsx
@@ -4,12 +4,7 @@ import InfiniteScroll from "react-infinite-scroller";
 import { MoviesStore, MoviesStoreImplementation } from "./MoviesStore";
 import { inject, observer } from 'mobx-react';
 import * as services from './services';
-import { observe } from 'mobx';
 
-// type MyProps = {};
-type MyState = {
-    movies: any
-};
 
 interface MoviesProps {
     moviesStore: MoviesStoreImplementation
@@ -17,7 +12,6 @@ interface MoviesProps {
 
 
 function Movies(props: MoviesProps){
-    // const [movies, setMovies] = useState([]);
 
     useEffect(() => {
         if (MoviesStore.hasMore){
@@ -26,7 +20,6 @@ function Movies(props: MoviesProps){
     }, []);
 
     
-
     function generateAllMoviesQuery(lim: number){
         return `
             query {
@@ -45,7 +38,6 @@ function Movies(props: MoviesProps){
             props.moviesStore.setMovies(res.data.getAllMovies);
             props.moviesStore.setHasMore(true);
         })
-
     }
 
     function getMovieByColumnType(columnType : services.ColumnType, value: string, neededData: string) {
@@ -53,17 +45,17 @@ function Movies(props: MoviesProps){
         .then(res => res.json())
         // .then(res => setMovies(res.data.getMovieByColumnType))
         .then(res => props.moviesStore.setMovies(res.data.getMovieByColumnType))
-
     }
 
 
-
-
-
     return (
         <InfiniteScroll
             pageStart={0}
-            loadMore={() => getAllMovies({ lim: MoviesStore.movies.length + 13 })}
+            loadMore={() => {
+                if (MoviesStore.hasMore){
+                    getAllMovies({ lim: MoviesStore.movies.length + 13 })
+                }
+            }}
             hasMore={MoviesStore.hasMore}
             useWindow={true}
             loader={
@@ -76,6 +68,7 @@ function Movies(props: MoviesProps){
         </InfiniteScroll>
     );
 
+
 }
 
 export default inject('moviesStore')(observer(Movies))
diff --git a/client/src/components/MoviesStore.tsx b/client/src/components/MoviesStore.tsx
index f480e5a..d6615fc 100644
--- a/client/src/components/MoviesStore.tsx
+++ b/client/src/components/MoviesStore.tsx
@@ -1,13 +1,8 @@
 import { action, makeObservable, observable } from "mobx";
 
-interface Movie {
-
-}
-
-
 export class MoviesStoreImplementation {
 
-    movies: Movie[] = [];
+    movies: Array<object> = [];
     hasMore: boolean = true;
     
     constructor() {
diff --git a/client/src/components/PrintTable.tsx b/client/src/components/PrintTable.tsx
index 2a0489a..358207f 100644
--- a/client/src/components/PrintTable.tsx
+++ b/client/src/components/PrintTable.tsx
@@ -1,13 +1,12 @@
 
 function PrintTable(props: any) {
     return (
-
         <table>
             <thead>
             <tr>
                 <th>Title</th>
                 <th>Genre</th>
-                <th>Year</th>
+                <th>Year released</th>
             </tr>
             </thead>
             <tbody>{
@@ -16,8 +15,7 @@ function PrintTable(props: any) {
                         <td>{row.title}</td>
                         <td>{row.genre}</td>
                         <td>{row.year}</td>
-                    </tr>;
-
+                    </tr>;  
                 })
             }</tbody></table>
     )
diff --git a/client/src/components/services.ts b/client/src/components/services.ts
index 3519d71..76e9a0a 100644
--- a/client/src/components/services.ts
+++ b/client/src/components/services.ts
@@ -4,7 +4,6 @@ export function queryFetch(query: String) {
         headers: { "Content-Type": "application/json" },
         body: JSON.stringify({
         query: query,
-        // variables: variables
         })
     })
 }
@@ -71,17 +70,3 @@ export function generateSearchQuery(neededData: string, title: string, genre: st
     console.log(query)
     return query
 }
-
-export const getAllMoviesQuery = `
-query {
-    getAllMovies {
-        id,title,genre,rating_dice_throw,year,director_first_name,director_last_name,description,cover_image
-    }
-}`
-
-export const createMovieQuery = `
-mutation {
-    createMovie(title: "testing", genre: "gaming", rating_dice_throw: 1, year: '2000', director_first_name: "torje", director_last_name: "the_gamer", description: "amazing", cover_image: "url123") {
-        id
-    }
-}`
diff --git a/server/src/server.ts b/server/src/server.ts
index f165613..cee17fe 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -1,7 +1,7 @@
 declare var require: any
 var express = require('express');
 var { graphqlHTTP } = require('express-graphql');
-var { GraphQLObjectType, GraphQLSchema, buildSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql');
+var { GraphQLObjectType, GraphQLSchema, GraphQLInt, GraphQLString, GraphQLList, GraphQLBoolean } = require('graphql');
 
 import {connect} from "./database"
 
@@ -77,17 +77,9 @@ const RootQuery = new GraphQLObjectType({
             async resolve(parent: any, args: any) {
                 const connection = await connect();
                 let query = '';
-                // if(typeof args.id!='undefined' && args.id){query = getQuery('id' , args.id)}
                 if(typeof args.title!='undefined'  && typeof args.genre!='undefined'){
                     console.log("resolve")
                     query = getSearchQuery(args.title, args.genre, args.order)}
-                // else if(typeof args.genre!='undefined' && args.genre){query = getQuery('genre' , args.genre)}
-                // else if(typeof args.rating_dice_throw!='undefined' && args.rating_dice_throw){query = getQuery('rating_dice_throw' , args.rating_dice_throw)}
-                // else if(typeof args.year!='undefined' && args.year){query = getQuery('year' , args.year)}
-                // else if(typeof args.director_first_name!='undefined' && args.director_first_name){query = getQuery('director_first_name' , args.director_first_name)}
-                // else if(typeof args.director_last_name!='undefined' && args.director_last_name){query = getQuery('director_last_name' , args.director_last_name)}
-                // else if(typeof args.description!='undefined' && args.description){query = getQuery('description' , args.description)}
-
                 const response = await connection.query(query);
                 return response[0];
             }
@@ -114,7 +106,7 @@ function getSearchQuery(title: string, genre: string, order: boolean): string {
         query = query +  ' genre LIKE "%' + genre + '%"'
     }
     if (order) {
-        query = query + ' ORDER BY "year"'
+        query = query + ' ORDER BY "year" DESC'
     }
     console.log(query)
     return query
@@ -173,7 +165,7 @@ const Mutation = new GraphQLObjectType({
                 return response[0];
             }
         },
-        updateRating: { // TODO test this
+        updateRating: {
             type: MovieType,
             args: {
                 id: {type: GraphQLInt},
@@ -193,8 +185,7 @@ const schema = new GraphQLSchema({query: RootQuery, mutation: Mutation})
 var app = express();
 app.use('/graphql', graphqlHTTP({
     schema: schema,
-    // rootValue: RootQuery,
-    graphiql: true, // graphql gui
+    graphiql: true,
 }));
 
 app.listen(4000, () => console.log('Now browse to localhost:4000/graphql on local'));
-- 
GitLab