File size: 2,250 Bytes
0509f82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import React from 'react';
import { Box, TextField, Button, Typography, CircularProgress } from '@mui/material';
import RateReviewIcon from '@mui/icons-material/RateReview';
import { analyzeSentiment } from '../lib/api';

function ReviewInput({

  currentReview,

  setCurrentReview,

  isLoading,

  setIsLoading,

  setHasError,

  setErrorMessage,

  setAnalysisResult,

  addToPreviousAnalyses

}) {
  const handleReviewChange = (e) => {
    setCurrentReview(e.target.value);
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    
    if (!currentReview) {
      setHasError(true);
      setErrorMessage('Please enter a review to analyze.');
      return;
    }

    setIsLoading(true);
    setHasError(false);
    setErrorMessage('');

    try {
      const result = await analyzeSentiment(currentReview);
      setAnalysisResult(result);
      addToPreviousAnalyses({ ...result, text: currentReview });
    } catch (error) {
      console.error('Error analyzing sentiment:', error);
      setHasError(true);
      setErrorMessage(
        error.message || 'An error occurred while analyzing the review. Please try again.'
      );
    } finally {
      setIsLoading(false);
    }
  };

  return (
    <Box component="form" onSubmit={handleSubmit} noValidate>

      <Typography variant="h2" component="h2" gutterBottom>

        Enter Movie Review

      </Typography>

      

      <TextField

        fullWidth

        variant="outlined"

        multiline

        rows={6}

        placeholder="Type or paste a movie review here..."

        value={currentReview}

        onChange={handleReviewChange}

        sx={{ mb: 2 }}

        disabled={isLoading}

      />

      

      <Button

        variant="contained"

        color="primary"

        startIcon={isLoading ? <CircularProgress size={20} color="inherit" /> : <RateReviewIcon />}

        type="submit"

        disabled={isLoading || !currentReview}

        sx={{ 

          px: 4, 

          py: 1.5,

          fontSize: '1rem',

          fontWeight: 'medium'

        }}

      >

        {isLoading ? 'Analyzing...' : 'Analyze Sentiment'}

      </Button>

    </Box>
  );
}

export default ReviewInput;