Преглед изворни кода

ABC mantenimiento plazas modal

amenpunk пре 3 година
родитељ
комит
6da79baeb7

+ 149 - 0
psicoadmin/src/Components/AgregarManual.js

@@ -0,0 +1,149 @@
1
+import React from 'react';
2
+import * as Yup from 'yup';
3
+import { Formik, Field, Form } from 'formik';
4
+import { Row, Col, Modal, Button} from 'react-bootstrap'
5
+
6
+import NotFound from '../../Images/not_found.png';
7
+const SUPPORTED_FORMATS = ["image/jpg", "image/jpeg", "image/gif", "image/png"];
8
+
9
+const NewPlazaSchema = Yup.object().shape({
10
+    nombre : Yup.string().required('El nombre es requerido').min(5).max(20),
11
+    description : Yup.string().required('La description es requerida').min(5).max(20),
12
+    salario : Yup.number().required('El salario es requerido'),
13
+    imagen:  Yup.mixed().required('El imagen es requerido').test('fileSize', "El archivo es demasiado grande", value => {
14
+        if(!value || value.length <= 0) return false
15
+        return value[0].size < 200000
16
+    }).test('fileType', "El tipo del archivo no es válido", value => {
17
+        if(!value) return false
18
+        return SUPPORTED_FORMATS.includes(value[0].type)
19
+    })
20
+})
21
+
22
+export default function Manual ( props ) {
23
+
24
+    let [ filename, setFilename ] = React.useState('');
25
+    let [ file, setFile ] = React.useState(undefined);
26
+    let [ type, setType ] = React.useState(undefined);
27
+    let [ validType, setValidType ] = React.useState(false);
28
+
29
+    let { visible, onClose } = props
30
+    const hiddenFileInput = React.useRef(null);
31
+
32
+    const PickFile = event => hiddenFileInput.current.click();
33
+
34
+    React.useEffect(() => {
35
+        if( SUPPORTED_FORMATS.includes(type) ){
36
+            setValidType(true)
37
+        }else{
38
+            setValidType(false)
39
+        }
40
+
41
+    }, [type])
42
+
43
+
44
+    return (
45
+        <Modal size="lg" aria-labelledby="contained-modal-title-vcenter" centered  show={visible} onHide={onClose}>
46
+            <Modal.Header>
47
+                <button onClick={onClose}  type="button" className="close" data-dismiss="modal">&times;</button>
48
+                <h4 className="modal-title">Agregar plaza</h4>
49
+            </Modal.Header>
50
+            <Modal.Body className="modal-body">
51
+
52
+                <Formik
53
+
54
+                    initialValues={{
55
+                        nombre: '',
56
+                        description: '',
57
+                        salario: '',
58
+                        imagen: '',
59
+                    }}
60
+
61
+                    validationSchema={NewPlazaSchema}
62
+                    onSubmit={ (values) => {
63
+                        // console.log('VALUES >> ',values)
64
+                        props.setManual(false)
65
+                    }} >
66
+
67
+
68
+                    { ({  errors, touched, validateField, validateForm, setFieldValue  }) => (
69
+                        <Form>
70
+                            <Row>
71
+
72
+                                <Col md="4">
73
+                                    <div className="img-container">
74
+                                        <img alt="agregar plaza manual" src={ validType ? file : NotFound}/>
75
+                                    </div>
76
+                                </Col>
77
+
78
+                                <Col md="8">
79
+
80
+                                    <input 
81
+                                        value={filename} 
82
+                                        type="text" 
83
+                                        className="file-upload-input" 
84
+                                        disabled="" 
85
+                                        placeholder="Ningún archivo seleccionado" readOnly
86
+                                    />
87
+
88
+                                    <Button className="btn_add_producto_confirm" style={{ marginLeft : 15 }} onClick={PickFile}>
89
+                                        SUBIR FOTO
90
+                                    </Button>
91
+
92
+                                    {errors.imagen && touched.imagen && <div className="error_feedback">{errors.imagen}</div>}
93
+                                    <input
94
+                                        multiple={false}
95
+                                        type="file"
96
+                                        ref={hiddenFileInput}
97
+                                        onChange={(event) => {
98
+                                            const files = event.target.files;
99
+                                            console.log('files crud ', files[0])
100
+                                            let myFiles =Array.from(files);
101
+                                            setFieldValue("imagen", myFiles);
102
+                                            setFilename(myFiles[0].name)
103
+                                            setType(myFiles[0].type)
104
+                                            const objectUrl = URL.createObjectURL(files[0])
105
+                                            setFile(objectUrl)
106
+                                        }}
107
+                                        style={{display: 'none'}}
108
+                                    />
109
+
110
+                                </Col>
111
+
112
+                            </Row>
113
+                            <div className="data_product">
114
+                                <Row>
115
+                                    <Col md="12">
116
+
117
+                                        {errors.nombre && touched.nombre && <div className="error_feedback">{errors.nombre}</div>}
118
+                                        <Field name="nombre" placeholder="Nombre de la plaza"/>
119
+
120
+                                        {errors.description && touched.description && <div className="error_feedback">{errors.description}</div>}
121
+                                        <Field name="description">
122
+                                            {({ field, form, meta }) => {
123
+                                                return(
124
+                                                    <textarea id="description" name="description" value={field.value} onChange={field.onChange} placeholder="Descripción general de la plaza"></textarea>
125
+                                                )
126
+                                            }}
127
+                                        </Field>
128
+
129
+                                        {errors.salario && touched.salario && <div className="error_feedback">{errors.salario}</div>}
130
+                                        <Field name="salario" type="number" placeholder="Salario"/>
131
+
132
+
133
+                                    </Col>
134
+                                    <div className="add_producto_confirm">
135
+                                        <button className="btn_add_producto_confirm" type="submit">Agregar plaza</button>
136
+                                    </div>
137
+                                </Row>
138
+                            </div>
139
+                        </Form>
140
+                    )}
141
+
142
+
143
+
144
+
145
+                </Formik>
146
+            </Modal.Body>
147
+        </Modal>
148
+    )
149
+}

+ 1 - 1
psicoadmin/src/Components/Modal/AgregarManual.js

@@ -3,7 +3,7 @@ import * as Yup from 'yup';
3 3
 import { Formik, Field, Form } from 'formik';
4 4
 import { Row, Col, Modal, Button} from 'react-bootstrap'
5 5
 
6
-import NotFound from '../Images/not_found.png';
6
+import NotFound from '../../Images/not_found.png';
7 7
 const SUPPORTED_FORMATS = ["image/jpg", "image/jpeg", "image/gif", "image/png"];
8 8
 
9 9
 const NewPlazaSchema = Yup.object().shape({

+ 19 - 0
psicoadmin/src/Components/Modal/EditPlaza.js

@@ -0,0 +1,19 @@
1
+import React from 'react';
2
+import { Modal } from 'react-bootstrap'
3
+
4
+export default function Edit(props) {
5
+
6
+    let { visible, onClose } = props
7
+
8
+    return(
9
+        <Modal size="lg" aria-labelledby="contained-modal-title-vcenter" centered  show={visible} onHide={onClose}>
10
+            <Modal.Header>
11
+                <button onClick={onClose}  type="button" className="close" data-dismiss="modal">&times;</button>
12
+                <h4 className="modal-title">Editar plaza</h4>
13
+            </Modal.Header>
14
+            <Modal.Body className="modal-body">
15
+                <h1>Editar Plaza </h1>
16
+            </Modal.Body>
17
+        </Modal>
18
+    )
19
+}

+ 19 - 0
psicoadmin/src/Components/Modal/EliminarPlaza.js

@@ -0,0 +1,19 @@
1
+import React from 'react';
2
+import { Modal } from 'react-bootstrap'
3
+
4
+export default function Eliminar(props) {
5
+
6
+    let { visible, onClose } = props
7
+
8
+    return(
9
+        <Modal size="lg" aria-labelledby="contained-modal-title-vcenter" centered  show={visible} onHide={onClose}>
10
+            <Modal.Header>
11
+                <button onClick={onClose}  type="button" className="close" data-dismiss="modal">&times;</button>
12
+                <h4 className="modal-title">Eliminar plaza</h4>
13
+            </Modal.Header>
14
+            <Modal.Body className="modal-body">
15
+                <h1>Eliminar Plaza </h1>
16
+            </Modal.Body>
17
+        </Modal>
18
+    )
19
+}

+ 19 - 0
psicoadmin/src/Components/Modal/MostrarPlaza.js

@@ -0,0 +1,19 @@
1
+import React from 'react';
2
+import { Modal } from 'react-bootstrap'
3
+
4
+export default function Mostrar(props) {
5
+
6
+    let { visible, onClose } = props
7
+
8
+    return(
9
+        <Modal size="lg" aria-labelledby="contained-modal-title-vcenter" centered  show={visible} onHide={onClose}>
10
+            <Modal.Header>
11
+                <button onClick={onClose}  type="button" className="close" data-dismiss="modal">&times;</button>
12
+                <h4 className="modal-title">Mostrar plaza</h4>
13
+            </Modal.Header>
14
+            <Modal.Body className="modal-body">
15
+                <h1>Mostrar Plaza </h1>
16
+            </Modal.Body>
17
+        </Modal>
18
+    )
19
+}

+ 36 - 12
psicoadmin/src/Pages/Puestos.js

@@ -17,6 +17,10 @@ import NotFound from '../Images/not_found.png';
17 17
 import Express from '../Components/Modal/AgregarExpress';
18 18
 import Manual from '../Components/Modal/AgregarManual';
19 19
 
20
+import Editar from '../Components/Modal/EditPlaza';
21
+import Eliminar from '../Components/Modal/EliminarPlaza';
22
+import Mostrar from '../Components/Modal/MostrarPlaza';
23
+
20 24
     
21 25
 let data = [{
22 26
     nombre : 'The standard Lorem Ipsum passage, used since the 1500s',
@@ -37,12 +41,14 @@ for ( var _ of new Array(46) ){
37 41
     data.push({ ...data[0], id : ID.next().value, d : _ })
38 42
 }
39 43
 
40
-function ListMode() {
44
+function ListMode(props) {
45
+    
46
+    let { setEdit, setDelete, setShow } = props;
41 47
 
42 48
     let actions = [
43
-        <Button onClick={ ()  => console.log('ver producto') } className="ver_producto">Ver</Button>,
44
-        <Button onClick={ ()  => console.log('editar producto') } className="editar_producto">Editar</Button>,
45
-        <Button onClick={ ()  => console.log('eliminar producto') } className="eliminar_producto">Eliminar</Button>,
49
+        <Button onClick={ ()  => setShow(true)} className="ver_producto">Ver</Button>,
50
+        <Button onClick={() => setEdit(true)} className="editar_producto">Editar</Button>,
51
+        <Button onClick={ ()  => setDelete(true) } className="eliminar_producto">Eliminar</Button>,
46 52
     ]
47 53
 
48 54
     return(
@@ -89,21 +95,23 @@ function ListMode() {
89 95
 }
90 96
 
91 97
 
92
-function GridMode () {
98
+function GridMode (props) {
99
+    
100
+    let { setEdit, setDelete, setShow } = props;
93 101
 
94 102
     let buttons = [
95 103
         <div className="botones_interactivos">
96
-            <span tooltip-location="top" tooltip="Ver plaza">
104
+            <span onClick={ () => setShow(true) } tooltip-location="top" tooltip="Ver plaza">
97 105
                 <RemoveRedEyeIcon className="grid_btn"/>
98 106
             </span>
99 107
         </div>,
100 108
         <div className="botones_interactivos">
101
-            <span tooltip-location="top" tooltip="Editar plaza">
109
+            <span onClick={ () => setEdit(true) } tooltip-location="top" tooltip="Editar plaza">
102 110
                 <EditIcon className="grid_btn"/>
103 111
             </span>
104 112
         </div>,
105 113
         <div className="botones_interactivos">
106
-            <span tooltip-location="top" tooltip="Eliminar plaza">
114
+            <span onClick={() => setDelete(true)} tooltip-location="top" tooltip="Eliminar plaza">
107 115
                 <HighlightOffIcon className="grid_btn"/>
108 116
             </span>
109 117
         </div>
@@ -167,6 +175,10 @@ export function Puestos() {
167 175
     let [manual, setManual] = React.useState(false);
168 176
     let [expres, setExpress] = React.useState(false);
169 177
 
178
+    let [edit, setEdit] = React.useState(false);
179
+    let [del, setDelete] = React.useState(false);
180
+    let [show, setShow] = React.useState(false);
181
+
170 182
     return (
171 183
         <div className="content-section">
172 184
 
@@ -192,18 +204,30 @@ export function Puestos() {
192 204
                 </Row>
193 205
                 <div className={`main_productos ${ alignment === 'grid' ? 'activar_vista' : 'desactivar_vista'  }`} id="grid_view">
194 206
                     <Row>
195
-                        <GridMode/>
207
+                        <GridMode
208
+                            setEdit={setEdit}
209
+                            setDelete={setDelete}
210
+                            setShow={setShow}
211
+                        />
196 212
                     </Row>
197 213
                 </div>
198 214
                 <div className={`main_list_products ${alignment === 'list' ?  'activar_vista' : 'desactivar_vista'}`} id="list_view_products">
199 215
                     <Row>
200
-                        <ListMode/>
216
+                        <ListMode 
217
+                            setEdit={setEdit}
218
+                            setDelete={setDelete}
219
+                            setShow={setShow}
220
+                        />
201 221
                     </Row>
202 222
                 </div>
203 223
             </div>
204 224
 
205
-            <Express setExpress={setExpress} visible={expres} onClose={ () => setExpress(false) } />
206
-            <Manual setManual={setManual} visible={manual}  onClose={ () => setManual(false) } />
225
+            <Express setExpress={setExpress} visible={expres} onClose={() => setExpress(false) } />
226
+            <Manual setManual={setManual} visible={manual}  onClose={() => setManual(false) } />
227
+
228
+            <Editar visible={edit} onClose={() => setEdit(false)} />
229
+            <Eliminar visible={del} onClose={() => setDelete(false)} />
230
+            <Mostrar visible={show} onClose={() => setShow(false)} />
207 231
 
208 232
         </div>
209 233
     )