|
@@ -1,7 +1,6 @@
|
|
|
import React, { memo } from 'react';
|
|
import React, { memo } from 'react';
|
|
|
import * as Yup from 'yup';
|
|
import * as Yup from 'yup';
|
|
|
import { useFormik, Form, FormikProvider } from 'formik';
|
|
import { useFormik, Form, FormikProvider } from 'formik';
|
|
|
-import { Dialog, DialogContent, DialogTitle, DialogActions } from '@mui/material'
|
|
|
|
|
import toast from 'react-hot-toast';
|
|
import toast from 'react-hot-toast';
|
|
|
|
|
|
|
|
import { AdapterDateFns as DateFnsUtils } from '@mui/x-date-pickers/AdapterDateFns';
|
|
import { AdapterDateFns as DateFnsUtils } from '@mui/x-date-pickers/AdapterDateFns';
|
|
@@ -11,14 +10,20 @@ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
|
|
import {
|
|
import {
|
|
|
Button, Stack, TextField, MenuItem, FormControl, InputLabel, Select,
|
|
Button, Stack, TextField, MenuItem, FormControl, InputLabel, Select,
|
|
|
Backdrop, CircularProgress, Box, Divider,
|
|
Backdrop, CircularProgress, Box, Divider,
|
|
|
- Tabs, Tab, FormGroup, Checkbox, FormControlLabel
|
|
|
|
|
|
|
+ Tabs, Tab, FormGroup, Checkbox, FormControlLabel,
|
|
|
|
|
+ Dialog, DialogContent, DialogTitle, DialogActions,
|
|
|
|
|
+ DialogContentText,
|
|
|
} from '@mui/material';
|
|
} from '@mui/material';
|
|
|
|
|
|
|
|
|
|
+import Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete';
|
|
|
|
|
+
|
|
|
import { Service } from '../../Utils/HTTP';
|
|
import { Service } from '../../Utils/HTTP';
|
|
|
import { useQuery, useMutation, useQueryClient } from 'react-query';
|
|
import { useQuery, useMutation, useQueryClient } from 'react-query';
|
|
|
import { TabPanel } from './TabPanel'
|
|
import { TabPanel } from './TabPanel'
|
|
|
import { useSelector } from 'react-redux';
|
|
import { useSelector } from 'react-redux';
|
|
|
|
|
|
|
|
|
|
+const filter = createFilterOptions();
|
|
|
|
|
+
|
|
|
function Manual(props) {
|
|
function Manual(props) {
|
|
|
|
|
|
|
|
const auth = useSelector((state) => state.token)
|
|
const auth = useSelector((state) => state.token)
|
|
@@ -39,7 +44,7 @@ function Manual(props) {
|
|
|
|
|
|
|
|
const NewPlazaSchema = Yup.object().shape({
|
|
const NewPlazaSchema = Yup.object().shape({
|
|
|
nombrepuesto: Yup.string().required('El nombre es requerido').min(5, "El nombre del puesto debe ser mayor a 5 caracteres").max(100),
|
|
nombrepuesto: Yup.string().required('El nombre es requerido').min(5, "El nombre del puesto debe ser mayor a 5 caracteres").max(100),
|
|
|
- puestosuperior: Yup.number("El puesto superior debe ser un número").required("El puesto es requerido"),
|
|
|
|
|
|
|
+ puestosuperior: Yup.string().required("El puesto es requerido").min(5, "El nombre del puesto debe ser mayor a 5 caracteres").max(15),
|
|
|
aredepto: Yup.number().required('Escoge alguna área'),
|
|
aredepto: Yup.number().required('Escoge alguna área'),
|
|
|
fecha: Yup.date("Ingresa una fecha válida"),
|
|
fecha: Yup.date("Ingresa una fecha válida"),
|
|
|
notas: Yup.string("Ingresa una nota válida").min(5, "Ingresa una nota válida").max(150),
|
|
notas: Yup.string("Ingresa una nota válida").min(5, "Ingresa una nota válida").max(150),
|
|
@@ -47,7 +52,7 @@ function Manual(props) {
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const [departamento, setDepartamento] = React.useState('');
|
|
const [departamento, setDepartamento] = React.useState('');
|
|
|
- const [puestoSup, setPuestoSup] = React.useState('');
|
|
|
|
|
|
|
+ const [puestoSup, setPuestoSup] = React.useState('The Godfather');
|
|
|
const [open, setOpen] = React.useState(false);
|
|
const [open, setOpen] = React.useState(false);
|
|
|
const [date, setDate] = React.useState(new Date());
|
|
const [date, setDate] = React.useState(new Date());
|
|
|
const [tab, setTab] = React.useState(0);
|
|
const [tab, setTab] = React.useState(0);
|
|
@@ -63,6 +68,52 @@ function Manual(props) {
|
|
|
setPuestoSup(event.target.value);
|
|
setPuestoSup(event.target.value);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ const [valueDialog, setValueDialog] = React.useState(null);
|
|
|
|
|
+ const [openDialog, toggleOpenDialog] = React.useState(false);
|
|
|
|
|
+
|
|
|
|
|
+ const handleCloseDialog = () => {
|
|
|
|
|
+ setDialogValue({
|
|
|
|
|
+ title: '',
|
|
|
|
|
+ year: '',
|
|
|
|
|
+ });
|
|
|
|
|
+ toggleOpenDialog(false);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const [dialogValue, setDialogValue] = React.useState({
|
|
|
|
|
+ title: '',
|
|
|
|
|
+ year: '',
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ const handleSubmitDialog = (event) => {
|
|
|
|
|
+ event.preventDefault();
|
|
|
|
|
+ setValueDialog({
|
|
|
|
|
+ title: dialogValue.title,
|
|
|
|
|
+ year: parseInt(dialogValue.year, 10),
|
|
|
|
|
+ });
|
|
|
|
|
+ handleCloseDialog();
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const AutoCompleteChange = (event, newValue) => {
|
|
|
|
|
+ if (typeof newValue === 'string') {
|
|
|
|
|
+ // timeout to avoid instant validation of the dialog's form.
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ toggleOpenDialog(true);
|
|
|
|
|
+ setDialogValue({
|
|
|
|
|
+ title: newValue,
|
|
|
|
|
+ year: '',
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ } else if (newValue && newValue.inputValue) {
|
|
|
|
|
+ toggleOpenDialog(true);
|
|
|
|
|
+ setDialogValue({
|
|
|
|
|
+ title: newValue.inputValue,
|
|
|
|
|
+ year: '',
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ setValueDialog(newValue);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const agregarPuesto = async (puesto) => {
|
|
const agregarPuesto = async (puesto) => {
|
|
|
let rest = new Service('/plaza/save');
|
|
let rest = new Service('/plaza/save');
|
|
|
return await rest.postQuery(puesto, auth.token);
|
|
return await rest.postQuery(puesto, auth.token);
|
|
@@ -75,7 +126,7 @@ function Manual(props) {
|
|
|
const formik = useFormik({
|
|
const formik = useFormik({
|
|
|
initialValues: {
|
|
initialValues: {
|
|
|
nombrepuesto: "",
|
|
nombrepuesto: "",
|
|
|
- puestosuperior: 1,
|
|
|
|
|
|
|
+ puestosuperior: "The Godfather",
|
|
|
aredepto: 1,
|
|
aredepto: 1,
|
|
|
fecha: date,
|
|
fecha: date,
|
|
|
notas: "",
|
|
notas: "",
|
|
@@ -83,7 +134,7 @@ function Manual(props) {
|
|
|
},
|
|
},
|
|
|
onSubmit: (fields, { resetForm }) => {
|
|
onSubmit: (fields, { resetForm }) => {
|
|
|
|
|
|
|
|
- if(fields.tests.length === 0){
|
|
|
|
|
|
|
+ if (fields.tests.length === 0) {
|
|
|
toast.error("Recuerda que seleccionar al menos un test")
|
|
toast.error("Recuerda que seleccionar al menos un test")
|
|
|
setTab(1)
|
|
setTab(1)
|
|
|
return
|
|
return
|
|
@@ -139,9 +190,9 @@ function Manual(props) {
|
|
|
aria-labelledby="contained-modal-title-vcenter"
|
|
aria-labelledby="contained-modal-title-vcenter"
|
|
|
onClose={onClose}>
|
|
onClose={onClose}>
|
|
|
|
|
|
|
|
- <DialogTitle>
|
|
|
|
|
|
|
+ <DialogTitle className="modal-title" style={{ color: '#252525' }}>
|
|
|
<button onClick={onClose} type="button" className="close" data-dismiss="modal">×</button>
|
|
<button onClick={onClose} type="button" className="close" data-dismiss="modal">×</button>
|
|
|
- <h4 className="modal-title" style={{ color: '#252525' }}>Agregar Puesto</h4>
|
|
|
|
|
|
|
+ Agregar Puesto
|
|
|
</DialogTitle>
|
|
</DialogTitle>
|
|
|
|
|
|
|
|
<DialogContent className="modal-body">
|
|
<DialogContent className="modal-body">
|
|
@@ -151,6 +202,54 @@ function Manual(props) {
|
|
|
<Tab label="Pruebas" />
|
|
<Tab label="Pruebas" />
|
|
|
</Tabs>
|
|
</Tabs>
|
|
|
|
|
|
|
|
|
|
+ <Dialog open={openDialog} onClose={handleCloseDialog}>
|
|
|
|
|
+ <form onSubmit={handleSubmitDialog}>
|
|
|
|
|
+ <DialogTitle>Agrega un nuevo Puesto</DialogTitle>
|
|
|
|
|
+ <DialogContent>
|
|
|
|
|
+ <DialogContentText>
|
|
|
|
|
+ Agrega la descripcion del puesto
|
|
|
|
|
+ </DialogContentText>
|
|
|
|
|
+
|
|
|
|
|
+ <TextField
|
|
|
|
|
+ autoFocus
|
|
|
|
|
+ margin="dense"
|
|
|
|
|
+ id="name"
|
|
|
|
|
+ value={dialogValue.title}
|
|
|
|
|
+ onChange={(event) =>
|
|
|
|
|
+ setDialogValue({
|
|
|
|
|
+ ...dialogValue,
|
|
|
|
|
+ title: event.target.value,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ label="Puesto"
|
|
|
|
|
+ type="text"
|
|
|
|
|
+ variant="standard"
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+ <TextField
|
|
|
|
|
+ margin="dense"
|
|
|
|
|
+ id="name"
|
|
|
|
|
+ value={dialogValue.year}
|
|
|
|
|
+ onChange={(event) =>
|
|
|
|
|
+ setDialogValue({
|
|
|
|
|
+ ...dialogValue,
|
|
|
|
|
+ year: event.target.value,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ label="Descripción"
|
|
|
|
|
+ type="text"
|
|
|
|
|
+ variant="standard"
|
|
|
|
|
+ />
|
|
|
|
|
+ </DialogContent>
|
|
|
|
|
+ <DialogActions>
|
|
|
|
|
+ <Button onClick={handleCloseDialog}>Cancelar</Button>
|
|
|
|
|
+ <Button type="submit">Agregar</Button>
|
|
|
|
|
+ </DialogActions>
|
|
|
|
|
+ </form>
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
<FormikProvider style={{ paddingTop: 25 }} value={formik}>
|
|
<FormikProvider style={{ paddingTop: 25 }} value={formik}>
|
|
|
<Form autoComplete="off" noValidate onSubmit={handleSubmit}>
|
|
<Form autoComplete="off" noValidate onSubmit={handleSubmit}>
|
|
|
|
|
|
|
@@ -185,7 +284,6 @@ function Manual(props) {
|
|
|
|
|
|
|
|
<Stack spacing={3}>
|
|
<Stack spacing={3}>
|
|
|
|
|
|
|
|
-
|
|
|
|
|
<Stack direction={{ xs: 'column', sm: 'row' }} spacing={4}>
|
|
<Stack direction={{ xs: 'column', sm: 'row' }} spacing={4}>
|
|
|
<TextField
|
|
<TextField
|
|
|
label="Nombre"
|
|
label="Nombre"
|
|
@@ -196,24 +294,84 @@ function Manual(props) {
|
|
|
/>
|
|
/>
|
|
|
|
|
|
|
|
<FormControl fullWidth>
|
|
<FormControl fullWidth>
|
|
|
|
|
+
|
|
|
|
|
+ {/*
|
|
|
<InputLabel id="demo-simple-select-label">Puesto Superior</InputLabel>
|
|
<InputLabel id="demo-simple-select-label">Puesto Superior</InputLabel>
|
|
|
- <Select
|
|
|
|
|
- labelId="demo-simple-select-label"
|
|
|
|
|
- value={puestoSup}
|
|
|
|
|
- label="Puesto Superior"
|
|
|
|
|
- onChange={changePuestoSup}
|
|
|
|
|
- {...getFieldProps('puestosuperior')}
|
|
|
|
|
- error={Boolean(touched.puestosuperior && errors.puestosuperior)} >
|
|
|
|
|
- {
|
|
|
|
|
- data ?
|
|
|
|
|
- data.data.map(cate => {
|
|
|
|
|
- return (
|
|
|
|
|
- <MenuItem key={cate.id} value={cate.id}>{cate.nombre}</MenuItem>
|
|
|
|
|
- )
|
|
|
|
|
- })
|
|
|
|
|
- : <MenuItem>Null</MenuItem>
|
|
|
|
|
- }
|
|
|
|
|
- </Select>
|
|
|
|
|
|
|
+ <Select
|
|
|
|
|
+ labelId="demo-simple-select-label"
|
|
|
|
|
+ value={puestoSup}
|
|
|
|
|
+ label="Puesto Superior"
|
|
|
|
|
+ onChange={changePuestoSup}
|
|
|
|
|
+ {...getFieldProps('puestosuperior')}
|
|
|
|
|
+ error={Boolean(touched.puestosuperior && errors.puestosuperior)} >
|
|
|
|
|
+ {
|
|
|
|
|
+ data ?
|
|
|
|
|
+ data.data.map(cate => {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <MenuItem key={cate.id} value={cate.id}>{cate.nombre}</MenuItem>
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+ : <MenuItem>Null</MenuItem>
|
|
|
|
|
+ }
|
|
|
|
|
+ </Select>
|
|
|
|
|
+*/}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ <Autocomplete
|
|
|
|
|
+ fullWidth
|
|
|
|
|
+ value={valueDialog}
|
|
|
|
|
+ onChange={AutoCompleteChange}
|
|
|
|
|
+ filterOptions={(options, params) => {
|
|
|
|
|
+ const filtered = filter(options, params);
|
|
|
|
|
+
|
|
|
|
|
+ if (params.inputValue !== '') {
|
|
|
|
|
+ filtered.push({
|
|
|
|
|
+ inputValue: params.inputValue,
|
|
|
|
|
+ title: `Add "${params.inputValue}"`,
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return filtered;
|
|
|
|
|
+ }}
|
|
|
|
|
+ id="puesto_superior_autocomplete"
|
|
|
|
|
+ options={top100Films}
|
|
|
|
|
+ getOptionLabel={(option) => {
|
|
|
|
|
+ if (typeof option === 'string') {
|
|
|
|
|
+ return option;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (option.inputValue) {
|
|
|
|
|
+ return option.inputValue;
|
|
|
|
|
+ }
|
|
|
|
|
+ return option.title;
|
|
|
|
|
+ }}
|
|
|
|
|
+ selectOnFocus
|
|
|
|
|
+ clearOnBlur
|
|
|
|
|
+ handleHomeEndKeys
|
|
|
|
|
+ renderOption={(props, option) => <li {...props}>{option.title}</li>}
|
|
|
|
|
+ freeSolo
|
|
|
|
|
+ renderInput={(params) => <TextField {...params} label="Puesto Superior" />}
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ {/*
|
|
|
|
|
+ <Autocomplete
|
|
|
|
|
+ id="grouped-demo"
|
|
|
|
|
+ value={puestoSup}
|
|
|
|
|
+ label="Puesto Superior"
|
|
|
|
|
+ freeSolo
|
|
|
|
|
+ options={top100Films.map((option) => option.title)}
|
|
|
|
|
+ renderInput={(params) =>
|
|
|
|
|
+ <TextField
|
|
|
|
|
+ onChange={changePuestoSup}
|
|
|
|
|
+ error={Boolean(touched.puestosuperior && errors.puestosuperior)}
|
|
|
|
|
+ {...getFieldProps('puestosuperior')}
|
|
|
|
|
+ {...params}
|
|
|
|
|
+ label="Puesto Superior" />
|
|
|
|
|
+ }
|
|
|
|
|
+ />
|
|
|
|
|
+*/}
|
|
|
|
|
+
|
|
|
</FormControl>
|
|
</FormControl>
|
|
|
|
|
|
|
|
</Stack>
|
|
</Stack>
|
|
@@ -306,3 +464,131 @@ function Manual(props) {
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
export default memo(Manual);
|
|
export default memo(Manual);
|
|
|
|
|
+
|
|
|
|
|
+const top100Films = [
|
|
|
|
|
+ { title: 'The Shawshank Redemption', year: 1994 },
|
|
|
|
|
+ { title: 'The Godfather', year: 1972 },
|
|
|
|
|
+ { title: 'The Godfather: Part II', year: 1974 },
|
|
|
|
|
+ { title: 'The Dark Knight', year: 2008 },
|
|
|
|
|
+ { title: '12 Angry Men', year: 1957 },
|
|
|
|
|
+ { title: "Schindler's List", year: 1993 },
|
|
|
|
|
+ { title: 'Pulp Fiction', year: 1994 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'The Lord of the Rings: The Return of the King',
|
|
|
|
|
+ year: 2003,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: 'The Good, the Bad and the Ugly', year: 1966 },
|
|
|
|
|
+ { title: 'Fight Club', year: 1999 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'The Lord of the Rings: The Fellowship of the Ring',
|
|
|
|
|
+ year: 2001,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'Star Wars: Episode V - The Empire Strikes Back',
|
|
|
|
|
+ year: 1980,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: 'Forrest Gump', year: 1994 },
|
|
|
|
|
+ { title: 'Inception', year: 2010 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'The Lord of the Rings: The Two Towers',
|
|
|
|
|
+ year: 2002,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: "One Flew Over the Cuckoo's Nest", year: 1975 },
|
|
|
|
|
+ { title: 'Goodfellas', year: 1990 },
|
|
|
|
|
+ { title: 'The Matrix', year: 1999 },
|
|
|
|
|
+ { title: 'Seven Samurai', year: 1954 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'Star Wars: Episode IV - A New Hope',
|
|
|
|
|
+ year: 1977,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: 'City of God', year: 2002 },
|
|
|
|
|
+ { title: 'Se7en', year: 1995 },
|
|
|
|
|
+ { title: 'The Silence of the Lambs', year: 1991 },
|
|
|
|
|
+ { title: "It's a Wonderful Life", year: 1946 },
|
|
|
|
|
+ { title: 'Life Is Beautiful', year: 1997 },
|
|
|
|
|
+ { title: 'The Usual Suspects', year: 1995 },
|
|
|
|
|
+ { title: 'Léon: The Professional', year: 1994 },
|
|
|
|
|
+ { title: 'Spirited Away', year: 2001 },
|
|
|
|
|
+ { title: 'Saving Private Ryan', year: 1998 },
|
|
|
|
|
+ { title: 'Once Upon a Time in the West', year: 1968 },
|
|
|
|
|
+ { title: 'American History X', year: 1998 },
|
|
|
|
|
+ { title: 'Interstellar', year: 2014 },
|
|
|
|
|
+ { title: 'Casablanca', year: 1942 },
|
|
|
|
|
+ { title: 'City Lights', year: 1931 },
|
|
|
|
|
+ { title: 'Psycho', year: 1960 },
|
|
|
|
|
+ { title: 'The Green Mile', year: 1999 },
|
|
|
|
|
+ { title: 'The Intouchables', year: 2011 },
|
|
|
|
|
+ { title: 'Modern Times', year: 1936 },
|
|
|
|
|
+ { title: 'Raiders of the Lost Ark', year: 1981 },
|
|
|
|
|
+ { title: 'Rear Window', year: 1954 },
|
|
|
|
|
+ { title: 'The Pianist', year: 2002 },
|
|
|
|
|
+ { title: 'The Departed', year: 2006 },
|
|
|
|
|
+ { title: 'Terminator 2: Judgment Day', year: 1991 },
|
|
|
|
|
+ { title: 'Back to the Future', year: 1985 },
|
|
|
|
|
+ { title: 'Whiplash', year: 2014 },
|
|
|
|
|
+ { title: 'Gladiator', year: 2000 },
|
|
|
|
|
+ { title: 'Memento', year: 2000 },
|
|
|
|
|
+ { title: 'The Prestige', year: 2006 },
|
|
|
|
|
+ { title: 'The Lion King', year: 1994 },
|
|
|
|
|
+ { title: 'Apocalypse Now', year: 1979 },
|
|
|
|
|
+ { title: 'Alien', year: 1979 },
|
|
|
|
|
+ { title: 'Sunset Boulevard', year: 1950 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb',
|
|
|
|
|
+ year: 1964,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: 'The Great Dictator', year: 1940 },
|
|
|
|
|
+ { title: 'Cinema Paradiso', year: 1988 },
|
|
|
|
|
+ { title: 'The Lives of Others', year: 2006 },
|
|
|
|
|
+ { title: 'Grave of the Fireflies', year: 1988 },
|
|
|
|
|
+ { title: 'Paths of Glory', year: 1957 },
|
|
|
|
|
+ { title: 'Django Unchained', year: 2012 },
|
|
|
|
|
+ { title: 'The Shining', year: 1980 },
|
|
|
|
|
+ { title: 'WALL·E', year: 2008 },
|
|
|
|
|
+ { title: 'American Beauty', year: 1999 },
|
|
|
|
|
+ { title: 'The Dark Knight Rises', year: 2012 },
|
|
|
|
|
+ { title: 'Princess Mononoke', year: 1997 },
|
|
|
|
|
+ { title: 'Aliens', year: 1986 },
|
|
|
|
|
+ { title: 'Oldboy', year: 2003 },
|
|
|
|
|
+ { title: 'Once Upon a Time in America', year: 1984 },
|
|
|
|
|
+ { title: 'Witness for the Prosecution', year: 1957 },
|
|
|
|
|
+ { title: 'Das Boot', year: 1981 },
|
|
|
|
|
+ { title: 'Citizen Kane', year: 1941 },
|
|
|
|
|
+ { title: 'North by Northwest', year: 1959 },
|
|
|
|
|
+ { title: 'Vertigo', year: 1958 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'Star Wars: Episode VI - Return of the Jedi',
|
|
|
|
|
+ year: 1983,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: 'Reservoir Dogs', year: 1992 },
|
|
|
|
|
+ { title: 'Braveheart', year: 1995 },
|
|
|
|
|
+ { title: 'M', year: 1931 },
|
|
|
|
|
+ { title: 'Requiem for a Dream', year: 2000 },
|
|
|
|
|
+ { title: 'Amélie', year: 2001 },
|
|
|
|
|
+ { title: 'A Clockwork Orange', year: 1971 },
|
|
|
|
|
+ { title: 'Like Stars on Earth', year: 2007 },
|
|
|
|
|
+ { title: 'Taxi Driver', year: 1976 },
|
|
|
|
|
+ { title: 'Lawrence of Arabia', year: 1962 },
|
|
|
|
|
+ { title: 'Double Indemnity', year: 1944 },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: 'Eternal Sunshine of the Spotless Mind',
|
|
|
|
|
+ year: 2004,
|
|
|
|
|
+ },
|
|
|
|
|
+ { title: 'Amadeus', year: 1984 },
|
|
|
|
|
+ { title: 'To Kill a Mockingbird', year: 1962 },
|
|
|
|
|
+ { title: 'Toy Story 3', year: 2010 },
|
|
|
|
|
+ { title: 'Logan', year: 2017 },
|
|
|
|
|
+ { title: 'Full Metal Jacket', year: 1987 },
|
|
|
|
|
+ { title: 'Dangal', year: 2016 },
|
|
|
|
|
+ { title: 'The Sting', year: 1973 },
|
|
|
|
|
+ { title: '2001: A Space Odyssey', year: 1968 },
|
|
|
|
|
+ { title: "Singin' in the Rain", year: 1952 },
|
|
|
|
|
+ { title: 'Toy Story', year: 1995 },
|
|
|
|
|
+ { title: 'Bicycle Thieves', year: 1948 },
|
|
|
|
|
+ { title: 'The Kid', year: 1921 },
|
|
|
|
|
+ { title: 'Inglourious Basterds', year: 2009 },
|
|
|
|
|
+ { title: 'Snatch', year: 2000 },
|
|
|
|
|
+ { title: '3 Idiots', year: 2009 },
|
|
|
|
|
+ { title: 'Monty Python and the Holy Grail', year: 1975 },
|
|
|
|
|
+];
|
|
|
|
|
+
|