Compare commits

..

469 Commits

Author SHA1 Message Date
Mariela 32966d8334 Merge branch 'dev' into US-24-EditarinformacióncomoAdministradordeComunidaddeViviendas 2022-09-01 01:32:02 -06:00
Mariela b0791c2ed5 editar informacion como admin de vivienda 2022-09-01 01:31:20 -06:00
Eduardo Quiros f37627f662
Merge pull request #216 from DeimosPr4/movil
Movil
2022-09-01 05:44:02 +00:00
Maria Sanchez 90c4fc188e fix reservas create 2022-08-31 23:41:36 -06:00
Maria Sanchez e58ddbb4df fix cancel button reservas 2022-08-31 23:01:28 -06:00
Maria Sanchez b6e44c80c8 fix merge issues and screens 2022-08-31 22:58:53 -06:00
Maria Sanchez 669a28bed3 fix conflict 2022-08-31 22:17:47 -06:00
Maria Sanchez 8b09f2812f fix reservas 2022-08-31 22:14:08 -06:00
Traym17 cc6a35fde2
Merge pull request #215 from DeimosPr4/UH-reservasInquilinoMovil
Reservación por id de inquilino
2022-08-31 22:11:44 -06:00
Traym17 1481cc2c4e Reservación por id de inquilino 2022-08-31 22:11:13 -06:00
Maria Sanchez 0b2ec5800a Merge branch 'US-12-PerfilAdministradordeComunidaddeViviendas' of github.com:DeimosPr4/katoikia-app into movil 2022-08-31 12:28:26 -06:00
Maria Sanchez 8d8540e3f6 testing editar guarda perifl 2022-08-31 12:27:36 -06:00
Mariela a6d68abda5 fix api update user 2022-08-31 12:27:10 -06:00
Maria Sanchez 4558b2cc64 fix response from server 2022-08-31 09:25:16 -06:00
Eduardo Quiros 4ee53476e5
Merge pull request #214 from DeimosPr4/US-12-PerfilAdministradordeComunidaddeViviendas
perfil admin de comunidad
2022-08-31 13:38:26 +00:00
Mariela 1784dd4bbb fix error inquilinos 2022-08-31 02:30:55 -06:00
Mariela 11ac9b0232 obtencion de datos correctos 2022-08-31 01:09:58 -06:00
Mariela 6668d70cfb información básica de la comunidad 2022-08-31 00:41:13 -06:00
Eduardo Quiros 252ef5ae8d
Merge pull request #212 from DeimosPr4/US-26-ModificarÁreaComún
modificar area comun
2022-08-31 06:23:49 +00:00
Mariela 30e559daaf actualizar area comun completo 2022-08-30 23:11:34 -06:00
Maria Sanchez 4298861722 Merge branch 'movil' of github.com:DeimosPr4/katoikia-app into movil 2022-08-30 23:02:24 -06:00
Maria Sanchez 094ee575c4 reservas validaciones 2022-08-30 23:02:15 -06:00
Traym17 e035df8a0c
Merge pull request #211 from DeimosPr4/UH-listaInvitadosGuarda
Pantallas guarda de seguridad
2022-08-30 22:50:57 -06:00
Traym17 d95ffb3853 Pantallas guarda de seguridad
Lista de invitados y comunicados por la comunidad a la que el guarda corresponde
2022-08-30 22:50:34 -06:00
Maria Sanchez 8d020cf055 valdiacion reservas 2022-08-30 22:50:25 -06:00
Maria Sanchez b117491db9 fix update profile 2022-08-30 21:51:17 -06:00
Maria Sanchez 78bad074c7 password validate 2022-08-30 21:22:41 -06:00
Mariela a06fbe5cf3 terminar frontend editar 2022-08-30 18:35:18 -06:00
Mariela e7ac84ea84 fix popup new 2022-08-30 17:15:12 -06:00
Mariela bc684f7950 Merge branch 'dev' into US-26-ModificarÁreaComún 2022-08-30 16:57:35 -06:00
Maria Sanchez 73bd3c5adb fix area comun horas 2022-08-30 07:43:27 -06:00
Eduardo Quiros c5bb85e81e
Merge pull request #209 from DeimosPr4/66-us-36-editar-comunicado-de-administrador-de-comunidad
66 us 36 editar comunicado de administrador de comunidad
2022-08-30 12:10:18 +00:00
Eduardo Quiros 77c3ece1cf
re-fetch lista 2022-08-30 06:08:43 -06:00
Eduardo Quiros 197d1d5e47
hacer editable el campo asociado al valor 2022-08-30 06:07:42 -06:00
Eduardo Quiros 1c6fa54f3a
set post to empty when saving is done 2022-08-30 05:58:33 -06:00
Eduardo Quiros b840ebe654
add service and controller functions to update post 2022-08-30 05:56:59 -06:00
Eduardo Quiros 0ed28237aa
add function to update post 2022-08-30 05:37:53 -06:00
Eduardo Quiros de607882a1
add edit and cancel functions 2022-08-30 04:04:10 -06:00
Eduardo Quiros 200863e797
add edit button 2022-08-30 04:04:02 -06:00
Eduardo Quiros 26e65196da
bind post text to value 2022-08-30 04:03:30 -06:00
Eduardo Quiros a1023fda37
parameterize button label 2022-08-30 04:03:09 -06:00
Eduardo Quiros 99788e7121
fix typo 2022-08-30 00:33:49 -06:00
Eduardo Quiros 8f7c15381e
Merge pull request #207 from DeimosPr4/US-31-Eliminarreservadeinquilino
eliminar reserva de inquilino
2022-08-30 05:25:19 +00:00
Eduardo Quiros 59c393390c
Merge pull request #193 from DeimosPr4/61-us-34-lista-de-invitados-de-inquilinos
61 us 34 lista de invitados de inquilinos
2022-08-30 05:24:54 +00:00
Maria Sanchez 11bf753ca4 Merge branch 'movil' of github.com:DeimosPr4/katoikia-app into movil 2022-08-29 21:08:11 -06:00
Maria Sanchez 30e1fdf53b password edit 2022-08-29 21:08:02 -06:00
Traym17 53b1973d8b
Merge pull request #208 from DeimosPr4/UH-actualizacionInvitado
Agregar categoría al invitado
2022-08-29 20:45:54 -06:00
Traym17 a23691a30d Agregar categoría al invitado
Cambio en el formulario del invitado y en el servicio para agregar la categoría
2022-08-29 20:45:34 -06:00
Maria Sanchez 697d55b5d5 decryption for password 2022-08-29 17:15:46 -06:00
Eduardo Quiros d5c26c703d
fix table headers 2022-08-29 00:06:27 -06:00
Mariela 4707468226 fix const duplicated 2022-08-28 10:08:21 -06:00
Mariela ce0f2046b3 Merge remote-tracking branch 'origin/dev' into US-31-Eliminarreservadeinquilino 2022-08-28 10:07:55 -06:00
Mariela a44f28f2fb areglar elimianr reserva de inquilino y otros detalles del crear 2022-08-28 10:06:17 -06:00
Eduardo Quiros 27f3616ea5
Merge pull request #204 from DeimosPr4/US-30-ReservarÁreacomúnparainquilinoV2
reservar areas comun
2022-08-28 12:16:52 +00:00
Eduardo Quiros 395086122d
Merge branch 'dev' into US-30-ReservarÁreacomúnparainquilinoV2 2022-08-28 12:16:02 +00:00
Mariela c619cc396a fix api 2022-08-28 02:02:02 -06:00
Mariela 2ff3db6615 dialogos y funciones eliminar reserva 2022-08-28 01:58:57 -06:00
Mariela dc3977ef44 Merge branch 'US-30-ReservarÁreacomúnparainquilinoV2' into US-31-Eliminarreservadeinquilino 2022-08-28 01:48:38 -06:00
Mariela 1e8d3f79b3 validaciones repetidos en fechas 2022-08-26 19:08:37 -06:00
Mariela 1b99458b7d formateo de fechas y eliminar impresiones innecesarias 2022-08-26 17:13:18 -06:00
Maria Sanchez 0ebe59cb80 validaciones en agregar invitados 2022-08-26 15:01:29 -06:00
Mariela 5a2f0846d8 descomentar fetch de registro 2022-08-26 13:44:00 -06:00
Mariela ac80892afb validaciones de fechas y horas repetidas 2022-08-26 13:42:46 -06:00
Mariela 47efe0bbdf registro de reservacion 2022-08-26 11:07:35 -06:00
Maria Sanchez 9adba28ee1 fix validacion log in 2022-08-26 08:36:55 -06:00
Mariela bd79c3a6a8 agregar dialogo para agregar y validaciones básicas 2022-08-26 00:30:47 -06:00
Mariela 2bce41dbc0 change manejo de fechas 2022-08-26 00:02:17 -06:00
Maria Sanchez 82588354e4 validacion log in 2022-08-25 15:41:02 -06:00
Mariela 594b59227d nuevos items 2022-08-25 00:06:38 -06:00
Mariela 0a7cc3c1db funciones reservaciones 2022-08-25 00:03:19 -06:00
Traym17 fc36627951
Merge pull request #203 from DeimosPr4/uh-deleteInvitados
Uh delete invitados
2022-08-24 22:37:11 -06:00
Traym17 da98c3ab26 Correcciones 2022-08-24 22:36:55 -06:00
Traym17 8ed2a70eee Eliminar invitado 2022-08-24 22:36:13 -06:00
Eduardo Quiros fb02a51689
Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into 61-us-34-lista-de-invitados-de-inquilinos 2022-08-24 21:16:11 -06:00
Eduardo Quiros 0df8c84a92
Merge pull request #202 from DeimosPr4/US-32-ListarReservas
Listar reservas
2022-08-25 03:14:07 +00:00
Eduardo Quiros a329ec3ee0
Merge branch 'dev' into US-32-ListarReservas 2022-08-24 21:13:00 -06:00
Maria Sanchez b7f6bc70bb top bar navigation profile 2022-08-24 20:38:31 -06:00
Maria Sanchez 5991ee9471 profile dividing user info and password 2022-08-24 19:58:49 -06:00
Mariela ac2f644334 añadir input inquilino 2022-08-24 16:35:20 -06:00
Mariela 1da7b2c63f Áreacomúnparainquilino: Auto stash before merge of "US-30-ReservarÁreacomúnparainquilino" and "US-32-ListarReservas" 2022-08-24 16:14:33 -06:00
Mariela d2c9915669 Merge branch 'US-32-ListarReservas' into US-30-ReservarÁreacomúnparainquilino 2022-08-24 16:12:47 -06:00
Maria Sanchez 51cdecd388 separar vistas del guarda e inquilino 2022-08-24 11:15:27 -06:00
Mariela 069b4592b1 listar reservas 2022-08-24 00:07:11 -06:00
Mariela 0e9c92f744 Merge branch 'agregar-campos-area-nombre' into US-32-ListarReservas 2022-08-23 23:46:48 -06:00
Eduardo Quiros 8cf129dc64
Merge pull request #200 from DeimosPr4/199-issue-enviar-correo-con-nueva-contraseña
199 issue enviar correo con nueva contraseña
2022-08-24 04:32:56 +00:00
Eduardo Quiros 8b6b29ffe5
add template for email 2022-08-23 22:32:07 -06:00
Eduardo Quiros 4556aaba98
agregar funciones para enviar correo con nueva contraseña 2022-08-23 22:27:26 -06:00
Eduardo Quiros f065a0418b
Merge pull request #194 from DeimosPr4/US-20-Eliminarcomunidaddevivienda
eliminar comunidad
2022-08-24 04:15:55 +00:00
Eduardo Quiros 36d2f9817a
Merge pull request #195 from DeimosPr4/agregar-campos-area-nombre
add nuevas columnas
2022-08-24 04:15:25 +00:00
Eduardo Quiros 44445ec493
Merge pull request #198 from DeimosPr4/197-issue-restablecer-contraseña
197 issue restablecer contraseña
2022-08-24 04:13:03 +00:00
Eduardo Quiros 5b2be99a09
add resetUserPassword method to api gateway controller 2022-08-23 22:09:47 -06:00
Eduardo Quiros 842ec2d04d
remove unnecessary await 2022-08-23 21:51:43 -06:00
Eduardo Quiros d0d1d6e396
add reset user pasword function to app service 2022-08-23 21:50:12 -06:00
Eduardo Quiros d13bdb5dd1
add reset function to user service 2022-08-23 21:49:00 -06:00
Eduardo Quiros 8131d1c9fe
remove unused service 2022-08-23 21:18:19 -06:00
Maria Sanchez b7ee2a20a9 modified time picker for reservas 2022-08-23 20:35:11 -06:00
Maria Sanchez ff1af19613 post de reservas 2022-08-23 18:43:50 -06:00
Maria Sanchez d8be6c02a0 agregar placa en invitados 2022-08-23 14:18:49 -06:00
Mariela 149e07bc88 esconder boton configurar 2022-08-23 12:08:53 -06:00
Maria Sanchez 05b72e071a Merge branch 'agregar-campos-area-nombre' of github.com:DeimosPr4/katoikia-app into movil 2022-08-23 12:03:20 -06:00
Maria Sanchez b8d9bd0a4a Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into movil 2022-08-23 11:58:44 -06:00
Maria Sanchez 06ceecbfbf time picker change and name of common area 2022-08-23 11:58:35 -06:00
Mariela e3b50e63d5 add nuevas columnas 2022-08-23 11:52:18 -06:00
Mariela 328265cb8c Merge branch 'US-20-Eliminarcomunidaddevivienda' into US-32-ListarReservas 2022-08-23 11:49:18 -06:00
Mariela f3ba61f060 listar reservaciones 2022-08-23 11:48:55 -06:00
Eduardo Quiros 47db7defbf
fix strings 2022-08-23 04:06:28 -06:00
Eduardo Quiros 64f9216b5f
format 2022-08-23 03:40:54 -06:00
Eduardo Quiros 5db4e8ece3
add column headers 2022-08-23 03:33:40 -06:00
Eduardo Quiros 66bd6c4f78
actually show component :P 2022-08-23 03:33:06 -06:00
Eduardo Quiros 03e12adbc2
export component 2022-08-23 03:19:47 -06:00
Eduardo Quiros ec452b0a7e
add toolbar templates 2022-08-23 03:19:36 -06:00
Eduardo Quiros 90fae98adb
add initial fetch for invitados 2022-08-23 03:19:21 -06:00
Eduardo Quiros 7a192d9a68
use correct imports 2022-08-23 03:19:21 -06:00
Eduardo Quiros 1adaa5bec7
agregar imports 2022-08-23 03:19:20 -06:00
Eduardo Quiros 84c2aff911
agregar invitados a menu 2022-08-23 03:19:20 -06:00
Eduardo Quiros 2c2e54bd19
add initial component 2022-08-23 03:19:20 -06:00
Eduardo Quiros 6a591a5f10
Merge pull request #192 from DeimosPr4/US-11-ModificarAdministradordeComunidaddeViviendas
modificar administrador de comunidad
2022-08-23 07:31:04 +00:00
Eduardo Quiros c476a6d576
Merge branch 'dev' into US-11-ModificarAdministradordeComunidaddeViviendas 2022-08-23 01:28:48 -06:00
Eduardo Quiros bf02f49fe0
Merge pull request #178 from DeimosPr4/movil
Movil
2022-08-23 07:26:10 +00:00
Mariela 9da33006d9 eliminar usuarios, reservaciones y areas 2022-08-23 01:08:55 -06:00
Mariela 49cb71e767 eliminar y eliminar id comunidad de administradores 2022-08-23 00:32:13 -06:00
Maria Sanchez 98ef5dab17 get hour picker on reservation 2022-08-23 00:21:25 -06:00
Eduardo Quiros aacb019a58
Merge pull request #191 from DeimosPr4/69-us-37-eliminar-comunicado-de-administrador-de-comunidad
69 us 37 eliminar comunicado de administrador de comunidad
2022-08-23 06:15:20 +00:00
Eduardo Quiros d42ffc2893
Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into 69-us-37-eliminar-comunicado-de-administrador-de-comunidad 2022-08-23 00:13:35 -06:00
Eduardo Quiros 630a633bfb
agregar metodo de eliminación de comunicado en servicio de API 2022-08-23 00:09:55 -06:00
Eduardo Quiros 1fd25ee469
agregar manejo de DELETE the comunicados en controlador de API 2022-08-23 00:09:14 -06:00
Eduardo Quiros 6c6b944da7
finalizar confirmación en UI de eliminación de comunicado 2022-08-23 00:08:30 -06:00
Maria Sanchez f9e2626e53 invitados css fixes 2022-08-22 23:27:12 -06:00
Mariela 8e63bcae3c fix repetidos entre usuarios de comunidad 2022-08-22 23:10:43 -06:00
Eduardo Quiros c5173895fd
Merge pull request #186 from DeimosPr4/US-05-ModificarAdministradordeSistema
modificar admin del administrador
2022-08-23 05:07:44 +00:00
Eduardo Quiros 1d6aca7d0c
Merge pull request #187 from DeimosPr4/US-42-EliminarInquilino
Eliminar inquilino
2022-08-23 05:06:50 +00:00
Mariela d2c2b8739c Merge branch 'US-05-ModificarAdministradordeSistema' into US-11-ModificarAdministradordeComunidaddeViviendas 2022-08-22 22:58:04 -06:00
Maria Sanchez fd54abcc49 Merge branch 'movil' of github.com:DeimosPr4/katoikia-app into movil 2022-08-22 22:50:47 -06:00
Maria Sanchez 03e78f24c5 time picker reservas 2022-08-22 22:50:38 -06:00
Traym17 e1152dd09f
Merge pull request #190 from DeimosPr4/uh-registroInvitadosMobile
Listar de invitados Inquilino
2022-08-22 22:45:18 -06:00
Traym17 72a2c29c1f Listar de invitados Inquilino
Modificación tanto del frontend y backend
2022-08-22 22:44:55 -06:00
Maria Sanchez d1976e988b fix css and reservas 2022-08-22 22:20:07 -06:00
Maria Sanchez 3b01bbea90 Merge branch 'movil' of github.com:DeimosPr4/katoikia-app into movil 2022-08-22 21:08:02 -06:00
Maria Sanchez 9336bf0bef css reservas card component 2022-08-22 21:07:51 -06:00
Traym17 cf8fc8c73e
Merge pull request #189 from DeimosPr4/uh-registroInvitadosMobile
Registro de invitado parte mobile
2022-08-22 20:54:56 -06:00
Maria Sanchez 1ccadfe6a7 reservas fetch 2022-08-22 20:53:58 -06:00
Traym17 9490351c5b Registro de invitado parte mobile 2022-08-22 20:53:07 -06:00
Mariela f4e1cbef4d fix details 2022-08-22 20:16:22 -06:00
Mariela efbdd0b78c quitar comunidad id de formulario al cancelar y actualizar 2022-08-22 20:13:09 -06:00
Mariela 01bd394a0d actualizar administrador de comunidad 2022-08-22 20:08:37 -06:00
Mariela f8909acc54 agregar funcion actualizar 2022-08-22 19:51:59 -06:00
Maria Sanchez 2a8233cceb screen de agregar invitado 2022-08-22 19:31:42 -06:00
Mariela ad4d194759 eliminar inquilinos varios 2022-08-22 18:23:05 -06:00
Mariela 81cb378a1a agregar funciones en backend 2022-08-22 18:19:27 -06:00
Maria Sanchez 1eb3fa41e6 fix endpoint 2022-08-22 18:10:59 -06:00
Mariela 1865ce73ae Merge branch 'US-42-EliminarInquilino' into US-11-ModificarAdministradordeComunidaddeViviendas 2022-08-22 17:59:19 -06:00
Mariela d7072e64cb 3 2022-08-22 17:58:28 -06:00
Mariela 079e439bf0 2 2022-08-22 17:58:07 -06:00
Mariela 951031592c 2 2022-08-22 17:57:55 -06:00
Mariela b9d79c8402 fix filtro de inquilinos eliminados 2022-08-22 17:54:08 -06:00
Maria Sanchez 421f56b709 merge conflicts fix 2022-08-22 17:51:55 -06:00
Mariela 2dcfdf495f arreglar ultimos detalles para el eliminar 2022-08-22 16:43:52 -06:00
Mariela a9c02244a8 finalizar eliminar inquilino 2022-08-22 16:39:20 -06:00
Mariela 456d9ce4d0 deleteTenant function community 2022-08-22 15:06:44 -06:00
Mariela 9e7ac1d91f arreglar correo de registro 2022-08-22 15:04:47 -06:00
Mariela c8da611700 corregir agregar inquilino a comunidad 2022-08-22 14:58:43 -06:00
Maria Sanchez 5d4aa25259 profile fix update data 2022-08-22 14:38:18 -06:00
Maria Sanchez d6339121b7 Clean project 2022-08-22 14:31:47 -06:00
Maria Sanchez ca6f1d1496 Add item to gitignore 2022-08-22 14:23:54 -06:00
Maria Sanchez 88ca9b6f11 Connect communities and login 2022-08-22 14:22:27 -06:00
Maria Sanchez ddaa33c9ce Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into movil 2022-08-22 14:09:41 -06:00
Maria Sanchez 149ccd7c11 profile send data 2022-08-22 14:09:33 -06:00
Mariela 85e44d8c92 agregar notificacion para inquilino registrado 2022-08-22 13:18:46 -06:00
Mariela b7984b3748 update funciones de notificaciones 2022-08-22 13:10:32 -06:00
Mariela c89e501005 agregar funciones de edici[on de agregar inquilino 2022-08-22 12:57:33 -06:00
Mariela 2cea9bc217 asignar numero de vivienda 2022-08-22 12:35:40 -06:00
Mariela b6b21a19c7 Merge branch 'agregaNumeroViviendaRegistroInquilino' into US-42-EliminarInquilino 2022-08-22 12:22:15 -06:00
Mariela 553351d1d9 acomodar formato estandar de editar 2022-08-22 12:02:45 -06:00
Mariela 04a9a2edfe Merge branch 'dev' into US-42-EliminarInquilino 2022-08-22 11:45:27 -06:00
Mariela 18bab545e7 fix stylos y validaciones del registro 2022-08-22 11:00:08 -06:00
Mariela 08a1b4a1a6 Merge branch 'dev' into US-05-ModificarAdministradordeSistema 2022-08-22 09:15:16 -06:00
Mariela 387cf0ebca editar funcion en backend 2022-08-22 09:14:55 -06:00
Eduardo Quiros 78e8db6e1d
show only relevant communiqués 2022-08-22 07:08:21 -06:00
Eduardo Quiros b26893250c
add delete actions 2022-08-22 07:08:07 -06:00
Eduardo Quiros 2ad4f34bd0
clean up code a little 2022-08-22 06:16:41 -06:00
Eduardo Quiros 5e4dc43e02
remove excessive spaces 2022-08-22 06:14:48 -06:00
Eduardo Quiros 772662f796
remove unnecessary imports 2022-08-22 06:12:01 -06:00
Eduardo Quiros 30f6ca3be7
fix typo 2022-08-22 06:02:50 -06:00
Eduardo Quiros 6d66a783b7
format 2022-08-22 05:59:30 -06:00
Eduardo Quiros f3f02e41ed
Merge pull request #185 from DeimosPr4/45-us-46-modificar-guarda-de-seguridad
45 us 46 modificar guarda de seguridad
2022-08-22 11:19:27 +00:00
Eduardo Quiros 788256782b
reset buttons upon submission 2022-08-22 05:17:12 -06:00
Eduardo Quiros 46db01d30b
add backend plumbing to update guard 2022-08-22 05:15:29 -06:00
Eduardo Quiros 40d0c8d1d1
add format to edit guards 2022-08-22 05:05:03 -06:00
Eduardo Quiros a2af17451d
fix inquilinos title 2022-08-22 05:04:54 -06:00
Eduardo Quiros 19620aabcc
limpiar strings 2022-08-22 04:22:31 -06:00
Eduardo Quiros 7d0bf63b22
remover valores innecesarios 2022-08-22 04:22:17 -06:00
Eduardo Quiros 8a4ffbfe93
clean up code a bit 2022-08-22 04:13:12 -06:00
Eduardo Quiros 06468fa601
eliminar espaciado excesivo 2022-08-22 04:04:36 -06:00
Eduardo Quiros cad12bd638
iniciar proceso de editar guarda 2022-08-22 04:00:25 -06:00
Eduardo Quiros 04da74a2c4
remover datos innecesarios 2022-08-22 03:30:40 -06:00
Eduardo Quiros a1a0534a1f
add expo to devshell 2022-08-22 02:47:58 -06:00
Mariela 05600cb829 editar funciones para editar administrador en backend 2022-08-22 01:22:32 -06:00
Mariela 999175a246 frontend hecho 2022-08-22 01:12:02 -06:00
Maria Sanchez ee456580d3 css fix y params en home 2022-08-22 00:53:54 -06:00
Maria Sanchez 150171fd3b guarda de seguridad 2022-08-22 00:52:20 -06:00
Maria Sanchez f74c539781 scrollview y pasar params del usuario 2022-08-22 00:51:05 -06:00
Mariela f810aa560d primeras funciones para modificar admin del sistema 2022-08-22 00:48:45 -06:00
Eduardo Quiros 2746d29fa4
Merge pull request #183 from DeimosPr4/52-us-39-modificar-inquilino
52 us 39 modificar inquilino
2022-08-22 06:14:28 +00:00
Maria Sanchez ec5c738e6b mobile nav with params 2022-08-22 00:09:51 -06:00
Eduardo Quiros f31576573d
agregar edición de inquilinos 2022-08-22 00:07:33 -06:00
Mariela 64097d735e Merge branch 'dev' into US-42-EliminarInquilino 2022-08-21 23:17:02 -06:00
Eduardo Quiros d517a19872
agregar titulos a botones 2022-08-21 20:27:04 -06:00
Eduardo Quiros 774c1d0657
Merge pull request #181 from DeimosPr4/51-us-54-ver-información-inquilino
51 us 54 ver información inquilino
2022-08-22 02:13:41 +00:00
Eduardo Quiros c3d114f61e
add dialog 2022-08-21 20:11:53 -06:00
Eduardo Quiros 614b058b13
remove unused function 2022-08-21 19:17:19 -06:00
Eduardo Quiros 6fe5a6e1f2
eliminar boton duplicado 2022-08-21 18:55:47 -06:00
Eduardo Quiros 97deae313e
fix saveTenant call 2022-08-21 18:55:12 -06:00
Eduardo Quiros a9d1a9dd26
use names that make sense 2022-08-21 18:55:03 -06:00
Maria Sanchez 66511f4e8a log in testing 2022-08-21 17:25:22 -06:00
Eduardo Quiros cf2fbfcd9c
Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into 51-us-54-ver-información-inquilino 2022-08-21 08:54:16 -06:00
Eduardo Quiros ec2c56ae9c
Merge pull request #180 from DeimosPr4/179-issue-arreglar-fetch-de-casas
179 issue arreglar fetch de casas
2022-08-21 14:16:54 +00:00
Eduardo Quiros 04e6ea02da
remove unnecessary console logs 2022-08-21 08:02:33 -06:00
Eduardo Quiros 8db2845bd5
agregar anotaciones de tipo 2022-08-21 07:26:08 -06:00
Eduardo Quiros a3936c5fdc
agregar check de undefined 2022-08-21 07:23:30 -06:00
Eduardo Quiros 7e7f917750
format 2022-08-21 07:14:08 -06:00
Eduardo Quiros c50fbbeaf8
remover await innecesario 2022-08-21 07:12:29 -06:00
Eduardo Quiros de69d9f4ab
Merge pull request #177 from DeimosPr4/172-issue-arreglar-registro-inquilino
172 issue arreglar registro inquilino
2022-08-21 10:42:57 +00:00
Eduardo Quiros 11aff885e7
add plumbing to delete tenant 2022-08-21 04:35:59 -06:00
Eduardo Quiros 25344faca0
add deleteTenant method to user service 2022-08-21 04:31:46 -06:00
Eduardo Quiros 8096200886
add number_house to new tenant 2022-08-21 04:31:27 -06:00
Eduardo Quiros 20f6aeb376
cambiar selección de comunidad por selección de casas
no tiene sentido que se pueda seleccionar una comunidad y luego
seleccionar una casa, dado que el administrador administra una única
comunidad, y esta se puede inferir del administrador mismo. Además, el
inquilino se asigna a una casa, no necesariamente a la comunidad.
2022-08-21 03:50:27 -06:00
Eduardo Quiros 259444b371
add missing checks and default password 2022-08-20 21:20:50 -06:00
Eduardo Quiros 99e9ef98f6
eliminar componente para completar info de inquilinos 2022-08-20 20:33:16 -06:00
Eduardo Quiros 5689f3053e
arreglar tipos de inputs 2022-08-20 20:31:28 -06:00
Eduardo Quiros 70174ad5df
request complete info on tenant for registration
it's too complex to handle it as a two-step process, plus it makes sense
to get all this information when registering a new tenant into an
apartment anyway
2022-08-20 20:25:55 -06:00
Eduardo Quiros c1106e7d63
format 2022-08-20 19:56:49 -06:00
Eduardo Quiros 8dd3132ec4
garantizar que se analiza la contraseña solo si el usuario existe
estaba dando un error causado por la ausencia de un usuario, pero el
sistema de todos modos intentaba accesar su contraseña, por lo que
resultaba 'undefined'
2022-08-20 19:38:40 -06:00
Eduardo Quiros dd54ee2ce5
Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into 172-issue-arreglar-registro-inquilino 2022-08-20 19:04:11 -06:00
Eduardo Quiros 3cb8e47628
add name as parameter for onInputChange 2022-08-20 19:04:02 -06:00
Eduardo Quiros 2a325d4e2e
add onInputChange to inputs 2022-08-20 04:40:07 -06:00
Eduardo Quiros 435af70439
set emptyTenant to constant 2022-08-20 03:44:14 -06:00
Eduardo Quiros dc65cdda4f
clean up saveTenant function 2022-08-20 02:42:33 -06:00
Eduardo Quiros f6ce86909f
add name to servicio comunidad viviendas 2022-08-20 02:41:46 -06:00
Eduardo Quiros 980ecd9e52
Merge pull request #176 from DeimosPr4/fix-error-ver-comunidad
fix error ver comunidad
2022-08-19 23:30:59 +00:00
Mariela e4f35ebfa0 fix error ver comunidad 2022-08-19 16:38:51 -06:00
Eduardo Quiros 2fbc57ee24
Merge pull request #169 from DeimosPr4/UH-iniciarsesionV2
frontend web iniciar sesion
2022-08-19 21:45:18 +00:00
Eduardo Quiros d4113a2260
Merge branch 'dev' into UH-iniciarsesionV2 2022-08-19 21:41:09 +00:00
Eduardo Quiros 314f825a78
Merge pull request #175 from DeimosPr4/US-14-EliminarAdministradordeComunidaddeViviendas
Eliminar administrador de comunidad
2022-08-19 21:40:02 +00:00
Eduardo Quiros 63a355d10c
Merge pull request #173 from DeimosPr4/UH-comunicadoOficial
Uh comunicado oficial
2022-08-19 21:39:42 +00:00
Eduardo Quiros 18fd3064fc
Merge pull request #174 from DeimosPr4/US-29-Activar/DesactivarÁreaComún
activar/desactivar area comun
2022-08-19 21:39:13 +00:00
Mariela ebd54ad24f Merge branch 'US-15-Activar-DesactivarAdministradordeComunidaddeViviendas' into US-14-EliminarAdministradordeComunidaddeViviendas 2022-08-19 14:15:12 -06:00
Mariela 0175d9065d 1 2022-08-19 14:15:05 -06:00
Mariela 5b5d8835af activar / desactivar administrador comunidad 2022-08-19 09:12:16 -06:00
Mariela 7d42b26eba Merge branch 'US-29-Activar/DesactivarÁreaComún' into US-15-Activar-DesactivarAdministradordeComunidaddeViviendas 2022-08-19 08:32:56 -06:00
Mariela 6ebbdb5a72 Merge branch 'dev' into agregaNumeroViviendaRegistroInquilino 2022-08-19 00:19:50 -06:00
Mariela e1bcdd3995 api change status 2022-08-19 00:19:15 -06:00
Mariela bf2c9b374a change status en service 2022-08-19 00:04:11 -06:00
Mariela 99064e9a4d cambiar status en frontend 2022-08-19 00:02:08 -06:00
Traym17 cc0fae132c Registro y lista de los comunicados de las comunidades 2022-08-18 23:21:29 -06:00
Maria Sanchez 8149ade113 log in css fixes 2022-08-18 22:59:56 -06:00
Maria Sanchez 2d0d55358d log in css fix 2022-08-18 22:52:54 -06:00
Maria Sanchez 0233e0c0b4 componentes de invitados 2022-08-18 22:30:47 -06:00
Maria Sanchez 169585b32e css and inquilino log in 2022-08-18 22:23:54 -06:00
Traym17 210b30c5a6 File del registro del comunicado 2022-08-18 21:18:10 -06:00
Eduardo Quiros 2a69b1ff16
corregir puerto de api para crear inquilino 2022-08-18 21:03:34 -06:00
Eduardo Quiros 176a6931ce
add node to devshell 2022-08-18 20:31:54 -06:00
Eduardo Quiros 399346b0b9
Merge pull request #171 from DeimosPr4/movil
Movil
2022-08-19 00:56:05 +00:00
Maria Sanchez 77b0755a8e mobile log in 2022-08-18 16:02:50 -06:00
Eduardo Quiros ef53fa88b5
Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into 51-us-54-ver-información-inquilino 2022-08-17 16:58:41 -06:00
Maria Sanchez 37e764de60 reservar screen movil 2022-08-17 16:47:48 -06:00
Maria Sanchez 7416803b1a css fixes 2022-08-17 15:08:38 -06:00
Maria Sanchez 50995a06e3 reservas screen 2022-08-17 10:36:33 -06:00
Mariela d710e7c0ed edicion para agregar inquilino al numero de vivienda 2022-08-16 22:23:03 -06:00
Eduardo Quiros ab338109d1
add infodialog 2022-08-16 17:49:10 -06:00
Mariela 69775a366d carga correctamente los id de la vivienda 2022-08-16 16:46:20 -06:00
Mariela ff5c6e55ff agregar numero de vivienda a inquilino 2022-08-16 16:36:06 -06:00
Maria Sanchez dcb77ae10e home nav 2022-08-16 14:27:34 -06:00
Mariela 99d015475b review 404 2022-08-16 02:24:33 -06:00
Maria Sanchez 235e3f7bc9 fix css mobile issues 2022-08-15 23:16:44 -06:00
Eduardo Quiros 6d6fafd177
Merge pull request #168 from DeimosPr4/movil
Movil
2022-08-13 05:34:05 +00:00
Eduardo Quiros 85ae89df61
Merge pull request #166 from DeimosPr4/UH-iniciarsesionV2
login frontend
2022-08-13 05:32:54 +00:00
Maria Sanchez 4b08969ebe navigation and more components 2022-08-12 21:56:58 -06:00
Mariela 4bbe8dfea5 add pagina 404 2022-08-12 21:01:18 -06:00
Mariela 274efecee4 modified modify 2022-08-12 19:22:08 -06:00
Mariela 0dbf6acfc4 eliminar documentos innecesarios 2022-08-12 19:21:24 -06:00
Mariela 59c0ced918 agregar funcionalidades de validaciones en login 2022-08-12 18:40:26 -06:00
Mariela 3fc01cc033 add logos app 2022-08-12 18:40:07 -06:00
Mariela 5ba3fce7e3 funcionalidad hecha 2022-08-11 01:12:15 -06:00
Mariela 24edd8b70a Merge branch 'dev' into UH-iniciarsesionV2 2022-08-11 01:01:53 -06:00
Mariela 48f5c58f4a login for user type 2022-08-11 00:55:45 -06:00
Eduardo Quiros 83383888d2
add onClose function to infoDialog 2022-08-10 01:00:12 -06:00
Eduardo Quiros da332fb887
Merge branch 'dev' of github.com:DeimosPr4/katoikia-app into 51-us-54-ver-información-inquilino 2022-08-10 00:19:13 -06:00
Eduardo Quiros 8b04701111
Merge pull request #165 from DeimosPr4/164-issue-el-ui-no-compila
arreglar nombre de constante InquilinosCompletar para exportar
2022-08-10 06:17:36 +00:00
Eduardo Quiros b58d5ca956
arreglar nombre de constante InquilinosCompletar para exportar 2022-08-10 00:15:33 -06:00
Mariela e059363d53 segunda forma de inicio de sesión, realizad 2022-08-09 17:04:40 -06:00
Maria Sanchez ec0d604e34 insert react navigation and home component 2022-08-09 16:03:48 -06:00
Mariela e56665ff79 cambios de rutas 2022-08-09 14:29:32 -06:00
Mariela 770bbfed43 iniciar sesion funcionalidad frontend 2022-08-09 13:42:47 -06:00
Mariela 8e98739f99 Nueva prueba de inicio de sesion 2022-08-09 11:56:36 -06:00
Eduardo Quiros 9852159e9a
add generic footer to infoDialog 2022-08-09 00:53:52 -06:00
Eduardo Quiros 0d8fc87061
allow passing footer and header 2022-08-08 23:40:26 -06:00
Eduardo Quiros 5f1a962da2
change 'open' prop to 'openInfoDialog' 2022-08-08 23:40:12 -06:00
Eduardo Quiros abca2c58a1
add info for phone and email 2022-08-08 23:26:21 -06:00
Eduardo Quiros 8e97490a16
add ID field 2022-08-08 23:03:26 -06:00
Eduardo Quiros 226e0b81a6
add name and last_name props 2022-08-08 22:59:18 -06:00
Eduardo Quiros 3cf74d6c9d
agregar estado inicial de diálogo 2022-08-08 22:15:05 -06:00
Eduardo Quiros f884fa7aa5
crear componente de diálogo de información
esto va a facilitar el manejo del caso de uso en futuras situaciones
2022-08-08 22:07:23 -06:00
Eduardo Quiros a47f0c1c76
corregir nombramiento de componente para exportar 2022-08-08 21:42:26 -06:00
Eduardo Quiros fb49db7eae
agregar node a devshell 2022-08-08 21:42:04 -06:00
Eduardo Quiros b63fe2b7ec
Merge pull request #157 from DeimosPr4/156-issue-separar-página-de-formulario-de-registro-de-inquilinos
separar página de formulario de registro de inquilinos
2022-08-07 19:51:47 +00:00
Eduardo Quiros dd9ab06933
importar modulo de completar inquilinos en App.js 2022-08-07 05:46:30 -06:00
Eduardo Quiros 9297bdd38f
exportar componente con nombre correcto 2022-08-07 05:44:38 -06:00
Eduardo Quiros 0399891d7a
add devshell 2022-08-07 05:41:41 -06:00
Maria Sanchez d52b47a2c1 mobile home component 2022-08-05 23:16:04 -06:00
Eduardo Quiros 92d1457386
Merge pull request #161 from DeimosPr4/movil
Movil
2022-08-05 22:06:11 +00:00
Maria Sanchez 36e5839b04 log in css mobile 2022-08-05 15:38:20 -06:00
Maria Sanchez 8906880a60 modified mobile template 2022-08-04 01:22:41 -06:00
Eduardo Quiros af57c984e9
use strict equals 2022-08-04 00:57:01 -06:00
Eduardo Quiros a9d851f163
add 'required' key to form 2022-08-04 00:54:36 -06:00
Eduardo Quiros 589a56257e
make tenantsList a callback 2022-08-04 00:31:21 -06:00
Eduardo Quiros b81a38ee4e
remove build-web 2022-08-04 00:02:08 -06:00
Eduardo Quiros df1e383a88
remove unused 'response' parameter 2022-08-04 00:01:39 -06:00
Eduardo Quiros dcc063ce3b
fix assignment of community ID in new tenant form 2022-08-03 23:40:28 -06:00
Eduardo Quiros 1d9b3ba207
fix update user function in controller 2022-08-03 23:40:28 -06:00
Eduardo Quiros 69085b02d7
add function to update user 2022-08-03 23:40:28 -06:00
Eduardo Quiros d3b170424f
change method to PUT 2022-08-03 23:40:28 -06:00
Eduardo Quiros e4b39e8c51
delete unused imports 2022-08-03 23:40:28 -06:00
Eduardo Quiros 842e46726d
fix form header 2022-08-03 23:40:27 -06:00
Eduardo Quiros 8c538ea8e7
fix password form field id
Initially, it was set to "identificacion", which conflicted with another
field with the same name.
2022-08-03 23:40:27 -06:00
Eduardo Quiros 5981b25881
remove unnecessary form field 2022-08-03 23:40:27 -06:00
Eduardo Quiros 67f9f372e5
format inquilinoscompletar 2022-08-03 23:40:27 -06:00
Eduardo Quiros 1bab1ba10f
remove unused imports 2022-08-03 23:40:27 -06:00
Eduardo Quiros 24ec7b69d5
remover componentes innecesarios de formulario para completar registro de inquilino 2022-08-03 23:40:27 -06:00
Eduardo Quiros a2c386bd10
usar nombre con más sentido para nuevo inquilino
Es difícil suponer lo que simboliza con un nombre genérico como "data"
2022-08-03 23:40:26 -06:00
Eduardo Quiros d6ea59679f
format 2022-08-03 23:40:26 -06:00
Eduardo Quiros b16e8623de
use correct format for new tenant 2022-08-03 23:40:26 -06:00
Eduardo Quiros c5bfd00350
remover información innecesaria en registro inicial de inquilino 2022-08-03 23:40:26 -06:00
Eduardo Quiros d119fb68de
remove unused form fields 2022-08-03 23:40:26 -06:00
Eduardo Quiros 45a6e0a446
group up imports 2022-08-03 23:40:26 -06:00
Eduardo Quiros aa95b52c0d
convertir funciones a arrow functions 2022-08-03 23:40:25 -06:00
Eduardo Quiros 95b08d9b53
remove unused fetch in Inquilinos 2022-08-03 23:40:25 -06:00
Eduardo Quiros 34a9a3ea23
duplicar el archivo de inquilinos para crear formulario de completar 2022-08-03 23:40:25 -06:00
Eduardo Quiros 5f3733e05a
remove unused imports 2022-08-03 23:40:25 -06:00
Eduardo Quiros 1a8752a6b0
Merge pull request #160 from DeimosPr4/158-issue-arreglar-ci-para-ui-web
use openssl-legacy-provider
2022-08-04 05:15:01 +00:00
Eduardo Quiros 7727ad4f80
use openssl-legacy-provider 2022-08-03 23:14:43 -06:00
Eduardo Quiros fcee589b6f
Merge pull request #159 from DeimosPr4/158-issue-arreglar-ci-para-ui-web
install dependencies before running ci
2022-08-04 04:47:08 +00:00
Eduardo Quiros c51086ad7c
install dependencies before running ci 2022-08-03 22:45:42 -06:00
Eduardo Quiros cbe1361f59
Merge pull request #153 from DeimosPr4/US-52-Verinformacióndeguardadeseguridad
US - ver perfil del guarda seguridad
2022-08-03 14:42:06 +00:00
Eduardo Quiros bb748477e0
Merge pull request #152 from DeimosPr4/US-09-Activar-DesactivarAdministradoresdeSistema
Activar/Desactivar Admin del Sistema
2022-08-03 14:41:45 +00:00
Mariela 3da1bf7755 Merge branch 'dev' into US-52-Verinformacióndeguardadeseguridad 2022-08-03 08:07:44 -06:00
Mariela 7dc9e0304d Merge branch 'dev' into US-09-Activar-DesactivarAdministradoresdeSistema 2022-08-03 08:06:08 -06:00
Eduardo Quiros bc10a8d3eb
Merge pull request #150 from DeimosPr4/UH-activar&desactivarComunidadFront
fixes functions de cambiar estado
2022-08-03 06:17:25 +00:00
Eduardo Quiros b356c9bd20
Merge pull request #149 from DeimosPr4/US-25-AgregarAreasComunes
Agregar area comun
2022-08-03 06:17:02 +00:00
Mariela 71c3006e49 fix estilo del popup de perfil 2022-08-03 00:10:45 -06:00
Mariela f2e019361d mostrar informacion del guarda 2022-08-02 23:58:45 -06:00
Mariela 8398dd1f21 Merge branch 'US-48-Activar-Desactivarguardadeseguridad' into US-52-Verinformacióndeguardadeseguridad 2022-08-02 23:30:54 -06:00
Mariela f5adbeb20f Merge branch 'US-48-Activar-Desactivarguardadeseguridad' into US-42-EliminarInquilino 2022-08-02 23:28:29 -06:00
Mariela c4a726d050 agregar columna de estado y arreglos de estilos 2022-08-02 23:26:32 -06:00
Mariela 3294422e6a arreglar textos y estilos 2022-08-02 23:22:51 -06:00
Mariela 52fea9937e funcionalidad desactivar-activar guarda de seguridad 2022-08-02 23:19:00 -06:00
Mariela 3463991cd0 Merge branch 'US-43-Activar-DesactivarInquilinos' into US-48-Activar-Desactivarguardadeseguridad 2022-08-02 23:04:00 -06:00
Maria Sanchez 75c463b162 log in 2022-08-02 23:01:58 -06:00
Mariela 5f2e2e764e agregar columna de estado en la tabla 2022-08-02 22:48:36 -06:00
Mariela 8428463a9e Funcionalidad cambiar estado de inquilino 2022-08-02 22:46:15 -06:00
Mariela ce8e16e135 agregar filtros para comunidades eliminadas 2022-08-02 22:38:54 -06:00
Mariela a82ad4ff07 Merge branch 'US-09-Activar-DesactivarAdministradoresdeSistema' into US-43-Activar-DesactivarInquilinos 2022-08-02 22:36:10 -06:00
Mariela e0fe79a1e5 agregar columna de estado en la lista 2022-08-02 22:22:45 -06:00
Mariela 2424d78bf6 finalizar funcionalidad cambiar de estado 2022-08-02 22:09:24 -06:00
Mariela 89469a687c agregar y actualizar funciones en api-gateway 2022-08-02 21:52:30 -06:00
Mariela e2f0b401c5 agregar funciones en servicio de usuarios 2022-08-02 21:50:01 -06:00
Mariela ca19da1d19 remove console.log 2022-08-02 21:48:10 -06:00
Mariela f0078082c6 Merge branch 'UH-activar&desactivarComunidadFront' into US-09-Activar-DesactivarAdministradoresdeSistema 2022-08-02 21:46:29 -06:00
Mariela 45b459742c agregar columna de estado 2022-08-02 21:45:57 -06:00
Mariela 6d8fcd264e fixes functions de cambiar estado
Se deja una sola función y un solo botón para cambiar el estado... también se realizar un filtro para que no se muestren las comunidades marcadas como eliminadas
2022-08-02 21:00:38 -06:00
Mariela 823cba4c3f Merge branch 'dev' into US-09-Activar/DesactivarAdministradoresdeSistema 2022-08-02 19:09:58 -06:00
Mariela 8ce33eefa8 Merge branch 'dev' into US-25-AgregarAreasComunes 2022-08-02 18:27:31 -06:00
Eduardo Quiros 5895f74b9c
Merge pull request #148 from DeimosPr4/UH-activar&desactivarComunidadFront
Agregación de los botones para actualizar y desactivar una comunidad …
2022-08-02 18:54:46 +00:00
Mariela 2499c0ab64 fix estilos de formulario de agregar área común 2022-08-02 12:27:38 -06:00
Mariela e449b28e87 validaciones de comparacion para las horas
que la hora de apertura no sea mayor a la de cierre
2022-08-02 12:09:00 -06:00
Mariela 89134ec7a6 arreglar inputs de tiempos 2022-08-02 00:41:12 -06:00
Mariela ac0984d5af fix error de estado despues de registrar 2022-08-02 00:13:09 -06:00
Mariela fa4dc9f410 formulario de registro 2022-08-02 00:00:55 -06:00
Traym17 112813c216 Agregación de los botones para actualizar y desactivar una comunidad de viviendas 2022-08-01 23:37:10 -06:00
Eduardo Quiros 9676e08e6d
Merge pull request #147 from DeimosPr4/US-17-VerPerfildeinformacióndecomunidaddevivienda
ver perfil comunidada de vivienda
2022-08-02 05:19:53 +00:00
Mariela d6b95dd143 Merge branch 'dev' into US-17-VerPerfildeinformacióndecomunidaddevivienda 2022-08-01 23:17:39 -06:00
Eduardo Quiros 74c5560033
Merge pull request #146 from DeimosPr4/UH-activar&desactivarComunidad
Backend del servicio para activar y desactivar una comunidad de vivienda
2022-08-02 05:17:30 +00:00
Eduardo Quiros a0a342f5dd
Merge pull request #145 from DeimosPr4/US-listarInquilinos
US-Listar Inqullinos
2022-08-02 05:16:44 +00:00
Traym17 b9f04f7221 Backend del servicio para activar y desactivar una comunidad de vivienda 2022-08-01 23:12:58 -06:00
Mariela 38fc80f81e Merge branch 'dev' into US-listarInquilinos 2022-08-01 23:10:19 -06:00
Mariela 162b838e75 fix listar nombre de los inquilinos de cada vivienda 2022-08-01 23:09:43 -06:00
Mariela 6200ebf42c Merge branch 'dev' into US-17-VerPerfildeinformacióndecomunidaddevivienda 2022-08-01 22:49:05 -06:00
Eduardo Quiros 721c9f6fa7
Merge pull request #144 from DeimosPr4/US-28-EliminarÁreaComún
Eliminar Área Común
2022-08-02 04:28:53 +00:00
Mariela 609d5f6741 Merge branch 'US-listarInquilinos' into US-17-VerPerfildeinformacióndecomunidaddevivienda 2022-08-01 18:40:54 -06:00
Mariela 8fa7e4a76f Merge branch 'dev' into US-28-EliminarÁreaComún 2022-08-01 18:35:10 -06:00
Eduardo Quiros b4dd2a7eb1
Merge pull request #143 from DeimosPr4/US-27-ListarAreasComunes
Listar Áreas Comúnes
2022-08-01 23:50:38 +00:00
Mariela d4beea04aa Merge branch 'dev' into US-27-ListarAreasComunes 2022-08-01 16:19:28 -06:00
Mariela 18cf5ea7cc Merge branch 'dev' into US-09-Activar/DesactivarAdministradoresdeSistema 2022-08-01 16:18:55 -06:00
Eduardo Quiros 4e1605c6d3
Merge pull request #142 from DeimosPr4/ISSUE-eliminar-sort-telefono
eliminar el sort de telefonos en tablas
2022-08-01 22:15:44 +00:00
Mariela 060bd28bf8 agregar primeras funciones en el frontend 2022-08-01 02:05:02 -06:00
Mariela eed7af0274 fix iconos y textos de las columnas 2022-08-01 01:51:54 -06:00
Mariela b35666ee5b fix errors de llamado de variables 2022-08-01 01:32:07 -06:00
Mariela b213900733 evitar que se muestren los eliminados 2022-08-01 01:30:38 -06:00
Mariela 443b09e8e3 Merge remote-tracking branch 'origin/dev' into US-28-EliminarÁreaComún 2022-08-01 01:24:43 -06:00
Mariela 373012be14 arreglar endpoint 2022-08-01 01:23:45 -06:00
Mariela fc2dc8e2a6 agregar status en listar areas comunes 2022-08-01 01:23:33 -06:00
Eduardo Quiros a781bf42cf
Merge pull request #141 from DeimosPr4/ISSUE-eliminaciones-logicas
cambio a eliminaciones  lógicas en los microservicios
2022-08-01 07:18:24 +00:00
Mariela 6e24540d00 Arreglar funciones de eliminar área común 2022-08-01 01:10:17 -06:00
Mariela 859c420067 add remove common area en api service 2022-08-01 01:08:27 -06:00
Mariela bb05560668 fix eliminación lógica 2022-08-01 01:07:04 -06:00
Mariela e59678d689 Merge branch 'US-27-ListarAreasComunes' into US-28-EliminarÁreaComún 2022-08-01 01:03:52 -06:00
Mariela 82d0eeb4c6 arreglar textos 2022-08-01 01:02:48 -06:00
Mariela e2d151e155 fix estilo del estado 2022-08-01 01:01:01 -06:00
Mariela 2262484188 fix endpoint en api gateway 2022-08-01 00:38:58 -06:00
Mariela 09f774a5db add function findByCommunity en api gateway 2022-08-01 00:37:05 -06:00
Mariela d0fa99b49b agregar función 'encontrar por comunidad' en controller del servicio 2022-08-01 00:34:52 -06:00
Mariela 0f983cb182 agregar función "encontrar por comunidad" 2022-08-01 00:33:48 -06:00
Mariela c5dfdb480d listar areas comunes en parte web 2022-08-01 00:31:52 -06:00
Mariela 6cf9874cd5 set import and const cookies 2022-07-31 23:58:12 -06:00
Mariela 236bdcd052 install module react cookie 2022-07-31 23:56:28 -06:00
Mariela 7ba62d9db1 fix textos en constantes 2022-07-31 23:53:21 -06:00
Mariela 4a8effac6d create consts e imports 2022-07-31 23:52:01 -06:00
Mariela 9dce98fc76 add areas comunes in app.js 2022-07-31 23:49:05 -06:00
Mariela 0456b3735b add Areas Comunes document .js 2022-07-31 23:46:30 -06:00
Mariela 868049079d se comenta para esperar el PR de inquilinos 2022-07-31 23:40:05 -06:00
Mariela ea3d35158f ver perfil de la comunidad 2022-07-31 23:29:48 -06:00
Mariela 99ecc65b06 fix error de texto en la navegación 2022-07-31 21:14:34 -06:00
Mariela 61ec6018ec fix texto comunidad de vivienda 2022-07-31 21:10:08 -06:00
Mariela 440c13018a arreglar columnas guardas de seguridad 2022-07-31 21:09:57 -06:00
Mariela a9f2e39572 arreglar columnas del administrador del sistema 2022-07-31 21:07:39 -06:00
Mariela 7fc01af71e arreglar columnas comunidad de viviendas 2022-07-31 21:06:50 -06:00
Mariela b89bcd68bb arreglar columnas del listar admin comunidad 2022-07-31 21:05:19 -06:00
Mariela 16b00e9284 agregar sortable en numero de vivienda 2022-07-31 21:00:50 -06:00
Mariela 18ab1f4700 add column numero de vivienda 2022-07-31 20:02:13 -06:00
Mariela 9cac88f333 function para obtener los numeros de casas de los inquilinos 2022-07-31 18:34:26 -06:00
Mariela 8ff8382d54 listar inquilinos de una comunidad 2022-07-31 18:19:20 -06:00
Mariela 17941893cb eliminación lógica en áreas comunes 2022-07-31 17:19:23 -06:00
Mariela 2519136654 eliminación lógica en comunidades 2022-07-31 17:18:56 -06:00
Mariela 14df451c0a eliminación lógica en foro comunicados 2022-07-31 17:18:13 -06:00
Mariela 91ac92719a eliminación lógica en invitados 2022-07-31 17:17:25 -06:00
Mariela 95d5a5dd0f eliminación lógica en reportes 2022-07-31 17:16:40 -06:00
Mariela 86cfcc64cd eliminación lógica en reservaciones 2022-07-31 17:11:23 -06:00
Mariela a39dc26216 elimación lógica en usuarios 2022-07-31 17:10:15 -06:00
Mariela 06084ed899 Merge branch 'dev' into US-listarInquilinos 2022-07-31 15:14:32 -06:00
Eduardo Quiros 437a092920
Merge pull request #139 from DeimosPr4/add-testing-to-web
add yaml config to run build test on web-ui
2022-07-30 02:14:46 -06:00
Eduardo Quiros 6d336228e8
add yaml config to run build test on web-ui 2022-07-30 02:13:36 -06:00
Eduardo Quiros fd19e1f0cb
Merge pull request #138 from DeimosPr4/US-56-completar-registro-de-inquilino
completar registro de inquilino
2022-07-29 21:30:23 -06:00
Eduardo Quiros 6f6ded53bd
remove extra newlines 2022-07-29 20:35:08 -06:00
Eduardo Quiros 66cfa942e7
use correct class name for input divs 2022-07-29 19:41:45 -06:00
Eduardo Quiros af680149bd
format 2022-07-29 19:41:44 -06:00
Eduardo Quiros b00233cd3b
add extra info to registration 2022-07-29 19:41:44 -06:00
Eduardo Quiros 0479a162c1
Merge pull request #137 from DeimosPr4/issue-error-user-service
fix error user service
2022-07-29 00:35:48 -06:00
Mariela 23a8fa192d fix error en user service 2022-07-29 00:26:41 -06:00
Mariela c498db7937 Merge branch 'dev' into issue-error-user-service 2022-07-29 00:24:49 -06:00
Maria Sánchez 2b9d8ab329
Merge pull request #136 from DeimosPr4/issue-fix-estilo-correos
fix estilo de correos
2022-07-28 20:50:03 -06:00
Mariela 9f0f2fc8ef fix estilo correo de administrador Comunidad 2022-07-27 15:54:31 -06:00
Mariela 969c5c5d59 add estilo al correo de registrar admin comunidad 2022-07-27 03:04:35 -06:00
Eduardo Quiros c574326bcc
Merge pull request #130 from DeimosPr4/UH-updateRegistroAdminComunidad
Cambio de estilo a los guardas de seguridad
2022-07-26 23:05:32 -06:00
Eduardo Quiros 6f827b799c
Merge pull request #135 from DeimosPr4/UH-registroAdminComunidad
registro Comunidad y errores de compilacion
2022-07-26 23:04:52 -06:00
Mariela d1c96e641f fixes errores luego de merch de dev 2022-07-26 22:03:08 -06:00
Mariela 7b435df0e3 Merge branch 'dev' into UH-registroAdminComunidad 2022-07-26 21:01:16 -06:00
Mariela ef3e9fcb56 fix bug envío del correo 2022-07-26 17:07:12 -06:00
Mariela 59d99c1cfb registro de administrador de comunidad
con bug en el envio del correo
2022-07-26 16:59:29 -06:00
Traym17 6871c3f22f
Merge branch 'dev' into UH-updateRegistroAdminComunidad 2022-07-26 16:23:51 -06:00
Traym17 8989178ed7 Cambio de estilo a los guardas de seguridad 2022-07-25 19:03:32 -06:00
Mariela cf0b5c2d27 add validaciones en blanco en inputs 2022-07-25 16:08:00 -06:00
Mariela ce4dc9bf53 crear formulario y llamar comunidades 2022-07-25 00:25:39 -06:00
Mariela 51d76c9841 fixes en administradores de comunidad 2022-07-25 00:17:26 -06:00
Mariela 1629edc32a establecer primero constantes para obtener comunidades 2022-07-24 23:53:28 -06:00
Mariela 9b8e324bf1 add get tenants 2022-07-24 17:44:25 -06:00
Mariela 90c329a806 Merge remote-tracking branch 'origin/dev' into US-listarInquilinos 2022-07-24 17:40:02 -06:00
Mariela 4466d48bb6 Merge remote-tracking branch 'origin/dev' into US-listarInquilinos 2022-07-24 17:23:39 -06:00
Mariela 305a343936 set list inquilinos 2022-07-23 23:54:26 -06:00
Mariela 72ea9d2033 obtener inquilinos api 2022-07-23 23:54:05 -06:00
Maria Sanchez bad70d7217 login web component 2022-07-22 15:16:54 -06:00
195 changed files with 29281 additions and 65360 deletions

BIN
.DS_Store vendored

Binary file not shown.

12
.envrc Normal file
View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
# ^ added for shellcheck and file-type detection
# Watch & reload direnv on change
watch_file devshell.toml
if [[ $(type -t use_flake) != function ]]; then
echo "ERROR: use_flake function missing."
echo "Please update direnv to v2.30.0 or later."
exit 1
fi
use flake

15
.expo/README.md Normal file
View File

@ -0,0 +1,15 @@
> Why do I have a folder named ".expo" in my project?
The ".expo" folder is created when an Expo project is started using "expo start" command.
> What do the files contain?
- "devices.json": contains information about devices that have recently opened this project. This is used to populate the "Development sessions" list in your development builds.
- "packager-info.json": contains port numbers and process PIDs that are used to serve the application to the mobile device/simulator.
- "settings.json": contains the server configuration that is used to serve the application manifest.
> Should I commit the ".expo" folder?
No, you should not share the ".expo" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine.
Upon project creation, the ".expo" folder is already added to your ".gitignore" file.

8
.expo/settings.json Normal file
View File

@ -0,0 +1,8 @@
{
"hostType": "lan",
"lanType": "ip",
"dev": true,
"minify": false,
"urlRandomness": null,
"https": false
}

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
.log/ .log/
node_modules node_modules
.DS_Store

View File

@ -5,7 +5,6 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "api-gateway",
"version": "0.0.1", "version": "0.0.1",
"license": "UNLICENSED", "license": "UNLICENSED",
"dependencies": { "dependencies": {

View File

@ -1,4 +1,5 @@
import { Controller, Get, Post, Body, Param, Delete } from '@nestjs/common'; import { Controller, Get, Post, Put, Body, Param, Delete } from '@nestjs/common';
import { Console } from 'console';
import { AppService } from './app.service'; import { AppService } from './app.service';
@Controller() @Controller()
export class AppController { export class AppController {
@ -11,22 +12,12 @@ export class AppController {
@Body('last_name') last_name: string, @Body('last_name') last_name: string,
@Body('email') email: string, @Body('email') email: string,
@Body('phone') phone: number, @Body('phone') phone: number,
@Body('password') password: string,
@Body('user_type') user_type: string, @Body('user_type') user_type: string,
@Body('status') status: string, @Body('status') status: string,
@Body('date_entry') date_entry: Date, @Body('date_entry') date_entry: Date,
) { ) {
return this.appService.createAdminSystem( return this.appService.createAdminSystem(dni, name, last_name, email, phone,
dni, user_type, status, date_entry);
name,
last_name,
email,
phone,
password,
user_type,
status,
date_entry,
);
} }
@Post('user/createGuard') @Post('user/createGuard')
@ -37,24 +28,30 @@ export class AppController {
@Body('last_name') last_name: string, @Body('last_name') last_name: string,
@Body('email') email: string, @Body('email') email: string,
@Body('phone') phone: number, @Body('phone') phone: number,
@Body('password') password: string,
@Body('user_type') user_type: string, @Body('user_type') user_type: string,
@Body('status') status: string, @Body('status') status: string,
@Body('date_entry') date_entry: Date, @Body('date_entry') date_entry: Date,
@Body('community_id') community_id: string, @Body('community_id') community_id: string,
) { ) {
return this.appService.createGuard( return this.appService.createGuard(dni, name, last_name, email, phone,
dni, user_type, status, date_entry, community_id);
name, }
last_name,
email, @Post('user/createAdminCommunity')
phone, createAdminCommunity(
password, //Nombre, Apellidos, Correo electrónico, Cédula, Teléfono, Contraseña
user_type, @Body('dni') dni: string,
status, @Body('name') name: string,
date_entry, @Body('last_name') last_name: string,
community_id, @Body('email') email: string,
); @Body('phone') phone: number,
@Body('user_type') user_type: string,
@Body('status') status: string,
@Body('date_entry') date_entry: Date,
@Body('community_id') community_id: string
) {
return this.appService.createAdminCommunity(dni, name, last_name, email, phone,
user_type, status, date_entry, community_id);
} }
@Post('user/createUser') @Post('user/createUser')
@ -69,6 +66,7 @@ export class AppController {
@Body('status') status: string, @Body('status') status: string,
@Body('date_entry') date_entry: Date, @Body('date_entry') date_entry: Date,
@Body('community_id') community_id: string, @Body('community_id') community_id: string,
@Body('number_house') number_house: string,
) { ) {
return this.appService.createUser( return this.appService.createUser(
dni, dni,
@ -81,6 +79,86 @@ export class AppController {
status, status,
date_entry, date_entry,
community_id, community_id,
number_house,
);
}
@Post('user/createTenant')
createTenant(
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
@Body('user_type') user_type: string,
@Body('status') status: string,
@Body('date_entry') date_entry: Date,
@Body('community_id') community_id: string,
@Body('number_house') number_house: string,
) {
return this.appService.createTenant(
dni,
name,
last_name,
email,
phone,
user_type,
status,
date_entry,
community_id,
number_house,
);
}
@Put('user/updateGuard/:id')
updateGuard(
@Param('id') id: string,
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
@Body('password') password: string,
@Body('user_type') user_type: string,
@Body('status') status: string,
@Body('date_entry') date_entry: Date,
@Body('community_id') community_id: string,
) {
return this.appService.updateGuard(
id,
dni,
name,
last_name,
email,
phone,
password,
user_type,
status,
date_entry,
community_id,
);
}
@Put('user/updateUser/:id')
updateUser(
@Param('id') id: string,
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
@Body('community_id') community_id: string,
) {
return this.appService.updateUser(
id,
dni,
name,
last_name,
email,
phone,
community_id
); );
} }
@ -106,21 +184,149 @@ export class AppController {
allUsersAdminComunidad() { allUsersAdminComunidad() {
return this.appService.allUsersAdminComunidad(); return this.appService.allUsersAdminComunidad();
} }
@Get('user/findGuards/:community') @Get('user/findGuards/:community')
findGuardsCommunity(@Param('community_id') community_id: string) { findGuardsCommunity(@Param('community_id') community_id: string) {
return this.appService.findGuardsCommunity(community_id); return this.appService.findGuardsCommunity(community_id);
} }
@Get('user/findTenants/:community_id')
allUsersTenants(@Param('community_id') paramCommunity_id: string) {
return this.appService.findTenantsCommunity(paramCommunity_id);
}
@Get('user/find/:dni') @Get('user/find/:dni')
findUser(@Param('dni') paramUserDNI: string) { findUser(@Param('dni') paramUserDNI: string) {
return this.appService.findUser(paramUserDNI); return this.appService.findUser(paramUserDNI);
} }
@Get('user/findUserById/:id')
findUserById(@Param('id') id: string) {
return this.appService.findUserById(id);
}
@Delete('user/deleteAdminSystem/:id') @Delete('user/deleteAdminSystem/:id')
deleteAdminSystem(@Param('id') id: string) { deleteAdminSystem(@Param('id') id: string) {
return this.appService.deleteAdminSystem(id); return this.appService.deleteAdminSystem(id);
} }
@Delete('user/deleteAdminCommunity/:id')
deleteAdminCommunity(@Param('id') id: string) {
return this.appService.deleteAdminCommunity(id);
}
@Put('user/deleteTenant/:id')
deleteTenant(
@Param('id') id: string,
@Body('community_id') community_id: string,
@Body('number_house') number_house: string
) {
return this.appService.deleteTenant(id, community_id, number_house);
}
@Put('user/resetUserPassword/:id')
resetUserPassword(@Param('id') id: string,
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
@Body('password') password: string,
@Body('user_type') user_type: string,
@Body('status') status: string,
@Body('date_entry') date_entry: Date,
@Body('community_id') community_id: string,
@Body('number_house') number_house: string,
) {
return this.appService.updateUser(
id,
dni,
name,
last_name,
email,
phone,
password
);
}
@Post('user/changeStatus')
changeStatusUser(
@Body('id') pId: string,
@Body('status') pStatus: string,
) {
return this.appService.changeStatusUser(pId, pStatus);
}
@Put('user/updateAdminCommunity/:id')
updateAdminCommunity(
@Param('id') id: string,
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
@Body('community_id') community_id: string,
) {
return this.appService.updateAdminCommunity(
id,
dni,
name,
last_name,
email,
phone,
community_id,
);
}
@Post('user/updateAdminSystem')
updateAdminSystem(
//Nombre, Apellidos, Correo electrónico, Cédula, Teléfono
@Body('_id') _id: string,
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
) {
return this.appService.updateAdminSystem(_id, dni, name, last_name, email, phone);
}
@Put('user/updateTenant/:id')
updateTenant(
@Param('id') id: string,
@Body('dni') dni: string,
@Body('name') name: string,
@Body('last_name') last_name: string,
@Body('email') email: string,
@Body('phone') phone: number,
@Body('community_id') community_id: string,
@Body('number_house') number_house: string,
) {
return this.appService.updateTenant(
id,
dni,
name,
last_name,
email,
phone,
community_id,
number_house,
);
}
@Put('user/changePassword/:id')
changePassword(
@Param('id') id: string,
@Body('password') password: string,
) {
return this.appService.changePassword(
id,
password,
);
}
// #==== API Communities // #==== API Communities
@Post('community/createCommunity') @Post('community/createCommunity')
createCommunity( createCommunity(
@ -166,7 +372,35 @@ export class AppController {
findCommunityAdmin(@Body('community_id') community_id: string) { findCommunityAdmin(@Body('community_id') community_id: string) {
return this.appService.findCommunityAdmin(community_id); return this.appService.findCommunityAdmin(community_id);
} }
@Post('community/changeStatus')
changeStatusCommunity(
@Body('id') pId: string,
@Body('status') pStatus: string,
) {
return this.appService.changeStatusCommunity(pId, pStatus);
}
@Get('community/findHousesCommunity/:id')
findHousesCommunity(
@Param('id') community_id: string,
) {
return this.appService.findHousesCommunity(community_id);
}
@Post('community/saveTenant')
saveTenant(
@Body('community_id') community_id: string,
@Body('number_house') number_house: string,
@Body('_id') tenant_id: string,
) {
console.log(community_id + ' ' + number_house + ' ' + tenant_id)
return this.appService.saveTenant(community_id, number_house, tenant_id);
}
@Delete('community/deleteCommunity/:id')
deleteCommunity(@Param('id') paramCommunityId: string) {
return this.appService.deleteCommunity(paramCommunityId);
}
// #==== API Common Areas // #==== API Common Areas
@Post('commonArea/createCommonArea') @Post('commonArea/createCommonArea')
createCommonArea( createCommonArea(
@ -195,6 +429,42 @@ export class AppController {
return this.appService.findCommonArea(paramCommonAreaId); return this.appService.findCommonArea(paramCommonAreaId);
} }
@Get('commonArea/findByCommunity/:community_id')
findByCommunity(@Param('community_id') paramCommunityId: string) {
return this.appService.findByCommunity(paramCommunityId);
}
@Delete('commonArea/deleteCommonArea/:id')
deleteCommonArea(@Param('id') id: string) {
return this.appService.deleteCommonArea(id);
}
@Post('commonArea/changeStatus')
changeStatusCommonArea(
@Body('id') pId: string,
@Body('status') pStatus: string,
) {
return this.appService.changeStatusCommonArea(pId, pStatus);
}
@Post('commonArea/updateCommonArea')
updateCommonArea(
@Body('_id') id: string,
@Body('name') name: string,
@Body('hourMin') hourMin: string,
@Body('hourMax') hourMax: string,
@Body('bookable') bookable: number,
@Body('community_id') community_id: string,
) {
return this.appService.updateCommonArea(
id,
name,
hourMin,
hourMax,
bookable,
community_id,);
}
// #==== API GUEST // #==== API GUEST
//#API userService - create user //#API userService - create user
@Post('guest/createGuest') @Post('guest/createGuest')
@ -205,7 +475,10 @@ export class AppController {
@Body('number_plate') number_plate: string, @Body('number_plate') number_plate: string,
@Body('phone') phone: number, @Body('phone') phone: number,
@Body('status') status: string, @Body('status') status: string,
@Body('tenant_id') tenant_id: string,
@Body('community_id') community_id: string,
@Body('date_entry') date_entry: Date, @Body('date_entry') date_entry: Date,
@Body('type_guest') type_guest: string,
) { ) {
return this.appService.createGuest( return this.appService.createGuest(
name, name,
@ -214,7 +487,10 @@ export class AppController {
number_plate, number_plate,
phone, phone,
status, status,
tenant_id,
community_id,
date_entry, date_entry,
type_guest,
); );
} }
@ -228,57 +504,46 @@ export class AppController {
return this.appService.findGuest(paramGuestDNI); return this.appService.findGuest(paramGuestDNI);
} }
// #==== API Payment @Get('guest/findGuestUser/:id')
findGuestUser(@Param('id') paramGuestId: string) {
@Post('payment/createPayment') return this.appService.findGuestUser(paramGuestId);
createPayment(
@Body('date_payment') date_payment: Date,
@Body('mount') mount: number,
@Body('description') description: string,
@Body('period') period: string,
@Body('status') status: string,
@Body('user_id') user_id: string,
@Body('communty_id') communty_id: string,
) {
return this.appService.createPayment(
date_payment,
mount,
description,
period,
status,
user_id,
communty_id,
);
} }
@Get('payment/allPayments') @Get('guest/findGuestCommunity/:id')
allPayments() { findGuestCommunityr(@Param('id') paramGuestId: string) {
return this.appService.allPayments(); return this.appService.findGuestCommunityr(paramGuestId);
} }
@Get('payment/find/:dni') @Post('guest/updateGuest')
findPayment(@Param('dni') paramPaymentDNI: string) { updateGuest(
return this.appService.findPayment(paramPaymentDNI); @Body('_id') _id: string){
return this.appService.updateGuest(_id);
} }
// #==== API Reservation // #==== API Reservation
@Post('reservation/createReservation') @Post('reservation/createReservation')
createReservation( createReservation(
@Body('start_time') start_time: string, @Body('date') date: string,
@Body('finish_time') finish_time: string, @Body('time') time: string,
@Body('status') status: string, @Body('status') status: string,
@Body('date_entry') date_entry: Date, @Body('date_entry') date_entry: Date,
@Body('user_id') user_id: string, @Body('user_id') user_id: string,
@Body('common_area_id') common_area_id: string, @Body('common_area_id') common_area_id: string,
@Body('common_area_name') common_area_name: string,
@Body('community_id') community_id: string,
) { ) {
return this.appService.createReservation( return this.appService.createReservation(
start_time, date,
finish_time, time,
status, status,
date_entry, date_entry,
user_id, user_id,
common_area_id, common_area_id,
common_area_name,
community_id,
); );
} }
@ -292,6 +557,18 @@ export class AppController {
return this.appService.findReservation(paramReservation); return this.appService.findReservation(paramReservation);
} }
@Get('reservation/findReservations/:id')
findReservations(@Param('id') community_id: string) {
return this.appService.findReservations(community_id);
}
@Delete('reservation/deleteReservation/:id')
deleteReservation(@Param('id') id: string) {
return this.appService.deleteReservation(id);
}
// #==== API Post // #==== API Post
@Post('post/createPost') @Post('post/createPost')
@ -304,16 +581,34 @@ export class AppController {
return this.appService.createPost(post, date_entry, user_id, community_id); return this.appService.createPost(post, date_entry, user_id, community_id);
} }
@Put('post/updatePost/:id')
updatePost(
@Param('id') id: string,
@Body('post') post: string,
@Body('user_id') user_id: string,
@Body('community_id') community_id: string,
) {
return this.appService.updatePost(id, post, user_id, community_id);
}
@Get('post/allPosts') @Get('post/allPosts')
allPosts() { allPosts() {
return this.appService.allPosts(); return this.appService.allPosts();
} }
@Get('post/findPostCommunity/:id')
findPostCommunity(@Param('id') paramPost: string) {
return this.appService.findPostCommunity(paramPost);
}
@Get('post/find/:id') @Get('post/find/:id')
findPost(@Param('id') paramPost: string) { findPost(@Param('id') paramPost: string) {
return this.appService.findPost(paramPost); return this.appService.findPost(paramPost);
} }
@Delete('post/deletePost/:id')
deletePost(@Param('id') id: string) {
return this.appService.deletePost(id);
}
// #==== API Comment // #==== API Comment
@Post('post/createComment') @Post('post/createComment')
@ -371,4 +666,10 @@ export class AppController {
html(@Body('email') email: string, @Body('name') name: string) { html(@Body('email') email: string, @Body('name') name: string) {
return this.appService.html(email, name); return this.appService.html(email, name);
} }
@Get('reservation/findReservationUser/:id')
findReservationUser(@Param('id') paramComment: string) {
return this.appService.findReservationUser(paramComment);
}
} }

View File

@ -1,6 +1,7 @@
import { Injectable, Inject } from '@nestjs/common'; import { Injectable, Inject } from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices'; import { ClientProxy } from '@nestjs/microservices';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { lastValueFrom } from 'rxjs';
@Injectable() @Injectable()
export class AppService { export class AppService {
@ -34,6 +35,7 @@ export class AppService {
status: string, status: string,
date_entry: Date, date_entry: Date,
community_id: string, community_id: string,
number_house: string,
) { ) {
const pattern = { cmd: 'createUser' }; const pattern = { cmd: 'createUser' };
const payload = { const payload = {
@ -47,71 +49,194 @@ export class AppService {
status: status, status: status,
date_entry: date_entry, date_entry: date_entry,
community_id: community_id, community_id: community_id,
number_house: number_house,
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
createTenant(
dni: string,
name: string,
last_name: string,
email: string,
phone: number,
user_type: string,
status: string,
date_entry: Date,
community_id: string,
number_house: string,
) {
const pattern = { cmd: 'createTenant' };
const payload = {
dni: dni,
name: name,
last_name: last_name,
email: email,
phone: phone,
password: this.generatePassword(),
user_type: user_type,
status: status,
date_entry: date_entry,
community_id: community_id,
number_house: number_house,
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
updateUser(
_id: string,
dni: string,
name: string,
last_name: string,
email: string,
phone: number,
community_id: string,
) {
const pattern = { cmd: 'updateUser' };
const payload = {
id: _id,
dni: dni,
name: name,
last_name: last_name,
email: email,
phone: phone,
community_id: community_id,
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
updateGuard(
_id: string,
dni: string,
name: string,
last_name: string,
email: string,
phone: number,
password: string,
user_type: string,
status: string,
date_entry: Date,
community_id: string,
) {
const pattern = { cmd: 'updateGuard' };
const payload = {
id: _id,
dni: dni,
name: name,
last_name: last_name,
email: email,
phone: phone,
password: password,
user_type: user_type,
status: status,
date_entry: date_entry,
community_id: community_id,
}; };
return this.clientUserApp return this.clientUserApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
updateAdminCommunity(
//POST parameter from API id: string,
createAdminSystem(
dni: string, dni: string,
name: string, name: string,
last_name: string, last_name: string,
email: string, email: string,
phone: number, phone: number,
password: string, community_id: string,
user_type: string,
status: string,
date_entry: Date,
) { ) {
const pattern = { cmd: 'createAdminSystem' }; const pattern = { cmd: 'updateAdminCommunity' };
const payload = { const payload = {
_id: id,
dni: dni, dni: dni,
name: name, name: name,
last_name: last_name, last_name: last_name,
email: email, email: email,
phone: phone, phone: phone,
password: password, community_id: community_id,
user_type: user_type,
status: status,
date_entry: date_entry,
}; };
return this.clientUserApp return this.clientUserApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
createGuard(
async updateTenant(
_id: string,
dni: string, dni: string,
name: string, name: string,
last_name: string, last_name: string,
email: string, email: string,
phone: number, phone: number,
password: string,
user_type: string,
status: string,
date_entry: Date,
community_id: string, community_id: string,
number_house: string,
) { ) {
const pattern = { cmd: 'createGuard' }; await this.saveTenant(community_id, number_house, _id);
const pattern = { cmd: 'updateTenant' };
const payload = { const payload = {
id: _id,
dni: dni, dni: dni,
name: name, name: name,
last_name: last_name, last_name: last_name,
email: email, email: email,
phone: phone, phone: phone,
password: password, community_id: community_id,
user_type: user_type, number_house: number_house,
status: status,
date_entry: date_entry,
community_id,
}; };
return this.clientUserApp return this.clientUserApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
//POST parameter from API
createAdminSystem(dni: string, name: string, last_name: string, email: string, phone: number
, user_type: string, status: string, date_entry: Date) {
const pattern = { cmd: 'createAdminSystem' };
const payload = {
dni: dni, name: name, last_name: last_name, email: email, phone: phone,
password: this.generatePassword(), user_type: user_type, status: status, date_entry: date_entry
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
createGuard(dni: string, name: string, last_name: string, email: string, phone: number
, user_type: string, status: string, date_entry: Date, community_id: string) {
const pattern = { cmd: 'createGuard' };
const payload = {
dni: dni, name: name, last_name: last_name, email: email, phone: phone,
password: this.generatePassword(), user_type: user_type, status: status, date_entry: date_entry, community_id
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
createAdminCommunity(dni: string, name: string, last_name: string, email: string, phone: number
, user_type: string, status: string, date_entry: Date, community_id: string) {
const pattern = { cmd: 'createAdminCommunity' };
const payload = {
dni: dni, name: name, last_name: last_name, email: email, phone: phone,
password: this.generatePassword(), user_type: user_type, status: status, date_entry: date_entry, community_id
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(
map((message: string) => ({ message })),
);
}
allUsers() { allUsers() {
const pattern = { cmd: 'findAllUsers' }; const pattern = { cmd: 'findAllUsers' };
const payload = {}; const payload = {};
@ -120,6 +245,22 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
resetUserPassword(id: string, dni: string, name: string, last_name: string, email: string, phone: number
, user_type: string, status: string, date_entry: Date, community_id: string) {
const pattern = { cmd: 'resetUserPassword' };
const payload = {
id: id, dni: dni, name: name, last_name: last_name, email: email, phone: phone,
password: this.generatePassword(), user_type: user_type, status: status, date_entry: date_entry, community_id
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(
map((message: string) => ({ message })),
);
}
allUsersAdminSistema() { allUsersAdminSistema() {
const pattern = { cmd: 'findAdminSistema' }; const pattern = { cmd: 'findAdminSistema' };
const payload = {}; const payload = {};
@ -136,6 +277,17 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
allUsersTenants() {
const pattern = { cmd: 'findTenants' };
const payload = {};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(
map((message: string) => ({ message })),
);
}
//GET parameter from API //GET parameter from API
findUser(paramUserDNI: string) { findUser(paramUserDNI: string) {
const pattern = { cmd: 'findUserDNI' }; const pattern = { cmd: 'findUserDNI' };
@ -153,6 +305,14 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
findTenantsCommunity(community_id: string) {
const pattern = { cmd: 'findTenantsCommunity' };
const payload = { community_id: community_id };
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
deleteAdminSystem(id: string) { deleteAdminSystem(id: string) {
const pattern = { cmd: 'deleteAdminSystem' }; const pattern = { cmd: 'deleteAdminSystem' };
const payload = { id: id }; const payload = { id: id };
@ -161,6 +321,22 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
deleteAdminCommunity(id: string) {
const pattern = { cmd: 'deleteAdminCommunity' };
const payload = { id: id };
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
deleteTenant(id: string, community_id: string, number_house: string) {
const pattern = { cmd: 'deleteTenant' };
const payload = { _id: id, community_id: community_id, number_house: number_house };
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
inicioSesion(pEmail: string, pPassword: string) { inicioSesion(pEmail: string, pPassword: string) {
const pattern = { cmd: 'loginUser' }; const pattern = { cmd: 'loginUser' };
const payload = { email: pEmail, password: pPassword }; const payload = { email: pEmail, password: pPassword };
@ -169,6 +345,20 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
updateAdminSystem(_id: string, dni: string, name: string,
last_name: string, email: string, phone: number
) {
const pattern = { cmd: 'updateAdminSystem' };
const payload = {
_id: _id, dni: dni, name: name, last_name: last_name,
email: email, phone: phone
};
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
//GET parameter from API //GET parameter from API
findCommunityAdmin(community_id: string) { findCommunityAdmin(community_id: string) {
const pattern = { cmd: 'findCommunityAdmin' }; const pattern = { cmd: 'findCommunityAdmin' };
@ -178,20 +368,47 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
//GET parameter from API
findUserById(id: string) {
const pattern = { cmd: 'findById' };
const payload = { id: id };
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
changeStatusUser(pId: string, pStatus: string) {
const pattern = { cmd: 'changeStatus' };
const payload = { id: pId, status: pStatus };
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
changePassword(id: string, password: string) {
const pattern = { cmd: 'changePassword' };
const payload = { id: id, password: password };
return this.clientUserApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
// ====================== COMMUNITIES =============================== // ====================== COMMUNITIES ===============================
changeStatusCommunity(pId: string, pStatus: string) {
const pattern = { cmd: 'changeStatus' };
const payload = { id: pId, status: pStatus };
return this.clientCommunityApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
//POST parameter from API //POST parameter from API
createCommunity( createCommunity(name: string, province: string, canton: string, district: string
name: string, , num_houses: number, phone: string, status: string, date_entry: Date, houses: []) {
province: string,
canton: string,
district: string,
num_houses: number,
phone: string,
status: string,
date_entry: Date,
houses: [],
) {
const pattern = { cmd: 'createCommunity' }; const pattern = { cmd: 'createCommunity' };
const payload = { const payload = {
name: name, name: name,
@ -234,6 +451,40 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
async findHousesCommunity(community_id: string) {
const pattern = { cmd: 'findOneCommunity' }
const payload = { _id: community_id }
let callback = await this.clientCommunityApp
.send<string>(pattern, payload)
.pipe(
map((response: string) => ({ response }))
)
const finalValue = await lastValueFrom(callback);
const response = finalValue['response'];
const houses = response['houses'];
return houses;
}
saveTenant(id: string, number_house: string, tenant_id: string) {
const pattern = { cmd: 'saveTenant' };
const payload = { _id: id, number_house: number_house, tenant_id: tenant_id };
return this.clientCommunityApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
deleteCommunity(id: string) {
const pattern = { cmd: 'removeCommunity' };
const payload = { _id: id };
return this.clientCommunityApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
// ====================== COMMON AREAS =============================== // ====================== COMMON AREAS ===============================
//POST parameter from API //POST parameter from API
createCommonArea( createCommonArea(
@ -250,6 +501,7 @@ export class AppService {
hourMax: hourMax, hourMax: hourMax,
bookable: bookable, bookable: bookable,
community_id: community_id, community_id: community_id,
status: '1'
}; };
return this.clientCommonAreaApp return this.clientCommonAreaApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
@ -273,6 +525,55 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
//GET parameter from API
findByCommunity(paramCommunityId: string) {
const pattern = { cmd: 'findByCommunity' };
const payload = { community_id: paramCommunityId };
return this.clientCommonAreaApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
//DELETE parameter from API
deleteCommonArea(paramCommonAreaId: string) {
const pattern = { cmd: 'removeCommonArea' };
const payload = { id: paramCommonAreaId };
return this.clientCommonAreaApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
changeStatusCommonArea(pId: string, pStatus: string) {
const pattern = { cmd: 'changeStatus' };
const payload = { id: pId, status: pStatus };
return this.clientCommonAreaApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
updateCommonArea(
id: string,
name: string,
hourMin: string,
hourMax: string,
bookable: number,
community_id: string,
) {
const pattern = { cmd: 'updateCommonArea' };
const payload = {
id: id,
name: name,
hourMin: hourMin,
hourMax: hourMax,
bookable: bookable,
community_id: community_id,
};
return this.clientCommonAreaApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
// ====================== GUESTS =============================== // ====================== GUESTS ===============================
//POST parameter from API //POST parameter from API
@ -283,17 +584,16 @@ export class AppService {
number_plate: string, number_plate: string,
phone: number, phone: number,
status: string, status: string,
tenant_id: string,
community_id: string,
date_entry: Date, date_entry: Date,
type_guest: string,
) { ) {
const pattern = { cmd: 'createGuest' }; const pattern = { cmd: 'createGuest' };
const payload = { const payload = {
name: name, name: name, last_name: last_name, dni: dni, number_plate: number_plate, phone: phone,
last_name: last_name, status: status,tenant_id:tenant_id, community_id:community_id,date_entry: date_entry,type_guest:type_guest
dni: dni,
number_plate: number_plate,
phone: phone,
status: status,
date_entry: date_entry,
}; };
return this.clientGuestApp return this.clientGuestApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
@ -316,70 +616,44 @@ export class AppService {
.send<string>(pattern, payload) .send<string>(pattern, payload)
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
// ====================== PAYMENTS ===============================
//POST parameter from API
createPayment(
date_payment: Date,
mount: number,
description: string,
period: string,
status: string,
user_id: string,
communty_id: string,
) {
const pattern = { cmd: 'createPayment' };
const payload = {
date_payment: date_payment,
mount: mount,
description: description,
period: period,
status: status,
user_id: user_id,
communty_id: communty_id,
};
return this.clientPaymentApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
allPayments() {
const pattern = { cmd: 'findAllPayments' };
const payload = {};
return this.clientPaymentApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
//GET parameter from API //GET parameter from API
findPayment(paramPaymentId: string) { findGuestUser(paramGuestId: string) {
const pattern = { cmd: 'findOnePayment' }; const pattern = { cmd: 'findGuestUser' };
const payload = { id: paramPaymentId }; const payload = { id: paramGuestId };
return this.clientPaymentApp return this.clientGuestApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
findGuestCommunityr(paramGuestId: string) {
const pattern = { cmd: 'findGuestCommunity' };
const payload = { id: paramGuestId };
return this.clientGuestApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
updateGuest(_id: string
) {
const pattern = { cmd: 'removeGuest' };
const payload = {
_id: _id
};
return this.clientGuestApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })))
}
// ====================== RESERVATIONS =============================== // ====================== RESERVATIONS ===============================
//POST parameter from API //POST parameter from API
createReservation( createReservation(date: string, time: string, status: string,
start_time: string, date_entry: Date, user_id: string, common_area_id: string,
finish_time: string, common_area_name: string, community_id: string) {
status: string,
date_entry: Date,
user_id: string,
common_area_id: string,
) {
const pattern = { cmd: 'createReservation' }; const pattern = { cmd: 'createReservation' };
const payload = { const payload = {
start_time: start_time, date: date, time: time, status: status,
finish_time: finish_time, date_entry: date_entry, user_id: user_id, common_area_id: common_area_id,
status: status, common_area_name: common_area_name, community_id: community_id
date_entry: date_entry,
user_id: user_id,
common_area_id: common_area_id,
}; };
return this.clientReservationApp return this.clientReservationApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
@ -403,21 +677,42 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
findReservations(community_id: string) {
const pattern = { cmd: 'findReservationsByCommunity' };
const payload = { community_id: community_id };
return this.clientReservationApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
//DELETE parameter from API
deleteReservation(paramReservationId: string) {
const pattern = { cmd: 'removeReservation' };
const payload = { id: paramReservationId };
return this.clientReservationApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
// ====================== POSTS =============================== // ====================== POSTS ===============================
//POST parameter from API //POST parameter from API
createPost( createPost(post: string, date_entry: Date, user_id: string,
post: string, community_id: string) {
date_entry: Date,
user_id: string,
community_id: string,
) {
const pattern = { cmd: 'createPost' }; const pattern = { cmd: 'createPost' };
const payload = { const payload = {
post: post, post: post, date_entry: date_entry, user_id: user_id,
date_entry: date_entry, community_id: community_id
user_id: user_id, };
community_id: community_id, return this.clientPostApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
updatePost(id: string, post: string, user_id: string, community_id: string) {
const pattern = { cmd: 'updatePost' };
const payload = {
post: post, id: id, user_id: user_id, community_id: community_id
}; };
return this.clientPostApp return this.clientPostApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
@ -432,6 +727,14 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
findPostCommunity(paramGuestId: string) {
const pattern = { cmd: 'findPostCommunity' };
const payload = { id: paramGuestId };
return this.clientPostApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
//GET parameter from API //GET parameter from API
findPost(paramPostId: string) { findPost(paramPostId: string) {
const pattern = { cmd: 'findOnePost' }; const pattern = { cmd: 'findOnePost' };
@ -441,21 +744,24 @@ export class AppService {
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
//DELETE
deletePost(paramPostId: string) {
const pattern = { cmd: 'removePost' };
const payload = { id: paramPostId };
return this.clientPostApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
// ====================== COMMNENT POSTS =============================== // ====================== COMMNENT POSTS ===============================
//Comment parameter from API //Comment parameter from API
createComment( createComment(comment: string, date_entry: Date, user_id: string,
comment: string, post_id: string) {
date_entry: Date,
user_id: string,
post_id: string,
) {
const pattern = { cmd: 'createComment' }; const pattern = { cmd: 'createComment' };
const payload = { const payload = {
comment: comment, comment: comment, date_entry: date_entry, user_id: user_id,
date_entry: date_entry, post_id: post_id
user_id: user_id,
post_id: post_id,
}; };
return this.clientPostApp return this.clientPostApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
@ -482,18 +788,12 @@ export class AppService {
// ====================== REPORTS =============================== // ====================== REPORTS ===============================
//Report parameter from API //Report parameter from API
createReport( createReport(action: string, description: string, date_entry: Date,
action: string, user_id: string) {
description: string,
date_entry: Date,
user_id: string,
) {
const pattern = { cmd: 'createReport' }; const pattern = { cmd: 'createReport' };
const payload = { const payload = {
action: action, action: action, description: description, date_entry: date_entry,
description: description, user_id: user_id
date_entry: date_entry,
user_id: user_id,
}; };
return this.clientReportApp return this.clientReportApp
.send<string>(pattern, payload) .send<string>(pattern, payload)
@ -532,4 +832,42 @@ export class AppService {
.send<string>(pattern, payload) .send<string>(pattern, payload)
.pipe(map((message: string) => ({ message }))); .pipe(map((message: string) => ({ message })));
} }
/* Function to generate combination of password */
generatePassword() {
var pass = '';
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'abcdefghijklmnopqrstuvwxyz0123456789@#$';
for (let i = 1; i <= 8; i++) {
var char = Math.floor(Math.random()
* str.length + 1);
pass += str.charAt(char)
}
return pass;
}
async saveTenantNumHouse(community_id: string, number_house: string, tenant_id: string) {
const pattern = { cmd: 'saveTenantNumHouse' }
const payload = { _id: community_id, number_house: number_house, tenant_id: tenant_id }
return await this.clientCommunityApp
.send<string>(pattern, payload)
.pipe(
map((response: string) => ({ response }))
)
}
findReservationUser(paramGuestId: string) {
const pattern = { cmd: 'findReservationUser' };
const payload = { id: paramGuestId };
return this.clientReservationApp
.send<string>(pattern, payload)
.pipe(map((message: string) => ({ message })));
}
} }

13
devshell.toml Normal file
View File

@ -0,0 +1,13 @@
# https://numtide.github.io/devshell
[[commands]]
package = "devshell.cli"
help = "Per project developer environments"
[[commands]]
package = "nodejs"
help = "Node.js"
[[commands]]
package = "nodePackages.expo-cli"
help = "Expo CLI"

92
flake.lock Normal file
View File

@ -0,0 +1,92 @@
{
"nodes": {
"devshell": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1658746384,
"narHash": "sha256-CCJcoMOcXyZFrV1ag4XMTpAPjLWb4Anbv+ktXFI1ry0=",
"owner": "numtide",
"repo": "devshell",
"rev": "0ffc7937bb5e8141af03d462b468bd071eb18e1b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"flake-utils": {
"locked": {
"lastModified": 1642700792,
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": {
"lastModified": 1656928814,
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1643381941,
"narHash": "sha256-pHTwvnN4tTsEKkWlXQ8JMY423epos8wUOhthpwJjtpc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5efc8ca954272c4376ac929f4c5ffefcc20551d5",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1659782844,
"narHash": "sha256-tM/qhHFE61puBxh9ebP3BIG1fkRAT4rHqD3jCM0HXGY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c85e56bb060291eac3fb3c75d4e0e64f6836fcfe",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"devshell": "devshell",
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2"
}
}
},
"root": "root",
"version": 7
}

20
flake.nix Normal file
View File

@ -0,0 +1,20 @@
{
description = "virtual environments";
inputs.devshell.url = "github:numtide/devshell";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, flake-utils, devshell, nixpkgs }:
flake-utils.lib.eachDefaultSystem (system: {
devShell =
let pkgs = import nixpkgs {
inherit system;
overlays = [ devshell.overlay ];
};
in
pkgs.devshell.mkShell {
imports = [ (pkgs.devshell.importTOML ./devshell.toml) ];
};
});
}

View File

@ -1,6 +1,5 @@
node_modules/ node_modules/
.expo/ .expo/
dist/
npm-debug.* npm-debug.*
*.jks *.jks
*.p8 *.p8
@ -9,6 +8,6 @@ npm-debug.*
*.mobileprovision *.mobileprovision
*.orig.* *.orig.*
web-build/ web-build/
.vscode
# macOS
.DS_Store .DS_Store
package-lock.json

View File

@ -1,123 +1,103 @@
import React, {useState} from "react"; import React, { useContext, useState } from "react";
import { Image } from "react-native"; import {
import AppLoading from "expo-app-loading"; NativeBaseProvider,
import { useFonts } from '@use-expo/font'; Icon
import { Asset } from "expo-asset"; } from "native-base";
import { Block, GalioProvider } from "galio-framework"; import { NavigationContainer } from '@react-navigation/native';
import { NavigationContainer } from "@react-navigation/native"; import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import LogIn from "./components/LogIn";
import Home from "./components/Home";
import RecoverPassword from "./components/RecoverPassword";
import Reservas from "./components/Reservas";
import Profile from "./components/Profile";
import { MaterialCommunityIcons } from '@expo/vector-icons';
import AreaComun from "./components/AreaComun";
import { UserContext, UserContextProvider } from "./context/UserContext";
import AgregarInvitados from "./components/AgregarInvitados";
import Invitados from "./components/Invitados"
// Before rendering any navigation stack const Stack = createNativeStackNavigator();
import { enableScreens } from "react-native-screens"; const Tab = createBottomTabNavigator();
enableScreens();
import Screens from "./navigation/Screens"; function HomeTab({ route }) {
import { Images, articles, argonTheme } from "./constants"; const { user } = useContext(UserContext);
const [selected, setSelected] = useState(0);
// cache app images
const assetImages = [
Images.Onboarding,
Images.LogoOnboarding,
Images.Logo,
Images.Pro,
Images.ArgonLogo,
Images.iOSLogo,
Images.androidLogo
];
// cache product images
articles.map(article => assetImages.push(article.image));
function cacheImages(images) {
return images.map(image => {
if (typeof image === "string") {
return Image.prefetch(image);
} else {
return Asset.fromModule(image).downloadAsync();
}
});
}
export default props => {
const [isLoadingComplete, setLoading] = useState(false);
let [fontsLoaded] = useFonts({
'ArgonExtra': require('./assets/font/argon.ttf'),
});
function _loadResourcesAsync() {
return Promise.all([...cacheImages(assetImages)]);
}
function _handleLoadingError(error) {
// In this case, you might want to report the error to your error
// reporting service, for example Sentry
console.warn(error);
};
function _handleFinishLoading() {
setLoading(true);
};
if(!fontsLoaded && !isLoadingComplete) {
return ( return (
<AppLoading
startAsync={_loadResourcesAsync} <Tab.Navigator initialParams={user} initialRouteName="Comunicados" >
onError={_handleLoadingError} <Tab.Screen name="Mis Comunicados" component={Home} initialParams={user} options={{headerStyle: {
onFinish={_handleFinishLoading} backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 0 ? 'home' : 'home-outline'} />} color="#D7A86E" size="md" />)}} onclick={() => setSelected(0)}
/> />
); <Tab.Screen name="Mis Reservas" component={Reservas } initialParams={user} options={{headerStyle: {
} else if(fontsLoaded) { backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 1 ? 'tree' : 'tree-outline'} />} color="#D7A86E" size="md" />)} } onclick={() => setSelected(1)} />
<Tab.Screen name="Mis Invitados" component={Invitados} initialParams={user} options={{headerStyle: {
backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 1 ? 'contacts' : 'contacts-outline'} />} color="#D7A86E" size="md" />)} } onclick={() => setSelected(1)} />
<Tab.Screen name="Perfil" component={Profile} initialParams={user} options={{headerStyle: {
backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 2 ? 'account' : 'account-outline'} />} color="#D7A86E" size="md" />)}} onclick={() => setSelected(2)} />
</Tab.Navigator>
)
}
function HomeTabGuarda({ route }) {
const { user } = useContext(UserContext);
const [selected, setSelected] = useState(0);
return ( return (
<Tab.Navigator initialParams={user} initialRouteName="Comunicados" >
<Tab.Screen name="Mis Comunicados Guarda" component={Home} initialParams={user} options={{headerStyle: {
backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 0 ? 'home' : 'home-outline'} />} color="#D7A86E" size="md" />)}} onclick={() => setSelected(0)}
/>
<Tab.Screen name="Mis Invitados" component={Invitados} initialParams={user} options={{headerStyle: {
backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 1 ? 'contacts' : 'contacts-outline'} />} color="#D7A86E" size="md" />)} } onclick={() => setSelected(1)} />
<Tab.Screen name="Mi Perfil" component={Profile} initialParams={user} options={{headerStyle: {
backgroundColor: "#D7A86E"
}, tabBarIcon: () => (<Icon mb="2" as={<MaterialCommunityIcons name={selected === 2 ? 'account' : 'account-outline'} />} color="#D7A86E" size="md" />)}} onclick={() => setSelected(2)} />
</Tab.Navigator>
)
}
export default function App() {
return (
<NativeBaseProvider>
<UserContextProvider>
<NavigationContainer> <NavigationContainer>
<GalioProvider theme={argonTheme}> <Stack.Navigator initialRouteName="Iniciar Sesión">
<Block flex> {/* <Stack.Screen name="Mis Reservas" component={Reservas} options={{
<Screens /> headerStyle: {
</Block> backgroundColor: "#D7A86E"
</GalioProvider> }
}} /> */}
<Stack.Screen name="Comunicados" component={HomeTab} options={{ headerShown: false }} />
<Stack.Screen name="Comunicados Guarda" component={HomeTabGuarda} options={{ headerShown: false }} />
<Stack.Screen name="Reservar" component={AreaComun} options={{
headerStyle: {
backgroundColor: "#D7A86E"
}
}} />
<Stack.Screen name="Agregar Invitado" component={AgregarInvitados} options={{
headerStyle: {
backgroundColor: "#D7A86E"
}
}} />
<Stack.Screen name="Iniciar Sesión" component={LogIn} options={{
headerStyle: {
backgroundColor: "#D7A86E"
}
}} />
</Stack.Navigator>
</NavigationContainer> </NavigationContainer>
</UserContextProvider>
</NativeBaseProvider>
); );
} else {
return null
} }
}
// export default class App extends React.Component {
// state = {
// isLoadingComplete: false
// };
// render() {
// if (!this.state.isLoadingComplete) {
// return (
// <AppLoading
// startAsync={this._loadResourcesAsync}
// onError={this._handleLoadingError}
// onFinish={this._handleFinishLoading}
// />
// );
// } else {
// return (
// <NavigationContainer>
// <GalioProvider theme={argonTheme}>
// <Block flex>
// <Screens />
// </Block>
// </GalioProvider>
// </NavigationContainer>
// );
// }
// }
// _loadResourcesAsync = async () => {
// return Promise.all([...cacheImages(assetImages)]);
// };
// _handleLoadingError = error => {
// // In this case, you might want to report the error to your error
// // reporting service, for example Sentry
// console.warn(error);
// };
// _handleFinishLoading = () => {
// this.setState({ isLoadingComplete: true });
// };
// }

View File

@ -1,25 +0,0 @@
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
//import { NavigationContainer } from "@react-navigation/native";
import { Button } from './components';
export default function App() {
return (
<View style={styles.container}>
<Button>testing</Button>
<Text>Open up App.tsx to start working on your app!</Text>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});

9
mobile-ui/Readme.md Normal file
View File

@ -0,0 +1,9 @@
# NativeBase Expo Template
The official NativeBase template for [Expo](https://docs.expo.io/)
## Usage
```sh
expo init my-app --template @native-base/expo-template
```

View File

@ -1,18 +1,13 @@
{ {
"expo": { "expo": {
"name": "Argon FREE React Native", "name": "my-app",
"slug": "argon-free-react-native", "slug": "my-app",
"privacy": "public", "version": "1.0.0",
"platforms": [
"ios",
"android"
],
"version": "1.7.1",
"orientation": "portrait", "orientation": "portrait",
"icon": "./assets/icon.png", "icon": "./assets/icon.png",
"splash": { "splash": {
"image": "./assets/splash.png", "image": "./assets/splash.png",
"resizeMode": "cover", "resizeMode": "contain",
"backgroundColor": "#ffffff" "backgroundColor": "#ffffff"
}, },
"updates": { "updates": {
@ -22,8 +17,25 @@
"**/*" "**/*"
], ],
"ios": { "ios": {
"supportsTablet": true "supportsTablet": true,
"infoPlist": {
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads" : true,
"NSAllowsArbitraryLoadsForMedia": true,
"NSAllowsArbitraryLoadsInWebContent": true,
"NSExceptionAllowsInsecureHTTPLoads": true
}
}, },
"description": "Argon React Native, based on Argon Design System. Coded by Creative Tim" "bundleIdentifier": "1.1.0"
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#FFFFFF"
}
},
"web": {
"favicon": "./assets/favicon.png"
}
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 778 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M20,0H4C2.3,0,1,1.3,1,3v20c0,0.6,0.4,1,1,1h20c0.6,0,1-0.4,1-1V3C23,1.3,21.7,0,20,0z M12,16 c-3.3,0-6-2.7-6-6c0-0.6,0.4-1,1-1s1,0.4,1,1c0,2.2,1.8,4,4,4s4-1.8,4-4c0-0.6,0.4-1,1-1s1,0.4,1,1C18,13.3,15.3,16,12,16z M20,4H4 C3.4,4,3,3.6,3,3s0.4-1,1-1h16c0.6,0,1,0.4,1,1S20.6,4,20,4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 497 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><path d="M1,10.5A1.5,1.5,0,0,0,2.5,12h7A1.5,1.5,0,0,0,11,10.5V7H1Z" fill="#444444"/> <path d="M9.838,4,8.171.665a.75.75,0,0,0-1.342.67L8.162,4H3.838L5.171,1.335A.75.75,0,0,0,3.829.665L2.162,4H0V6H12V4Z" fill="#444444" data-color="color-2"/></g></svg>

Before

Width:  |  Height:  |  Size: 434 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path d="M20,10V8A8,8,0,0,0,4,8v2a4.441,4.441,0,0,1-1.547,3.193A4.183,4.183,0,0,0,1,16c0,2.5,4.112,4,11,4s11-1.5,11-4a4.183,4.183,0,0,0-1.453-2.807A4.441,4.441,0,0,1,20,10Z" fill="#444444"/> <path data-color="color-2" d="M9.145,21.9a2.992,2.992,0,0,0,5.71,0c-.894.066-1.844.1-2.855.1S10.039,21.968,9.145,21.9Z" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 521 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><rect data-color="color-2" x="4" y="10" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="10" y="10" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="4" y="15" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="10" y="15" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="16" y="10" width="4" height="3" fill="#444444"/> <path d="M23,3H18V1a1,1,0,0,0-2,0V3H8V1A1,1,0,0,0,6,1V3H1A1,1,0,0,0,0,4V22a1,1,0,0,0,1,1H23a1,1,0,0,0,1-1V4A1,1,0,0,0,23,3ZM22,21H2V7H22Z" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 742 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path data-color="color-2" fill="#444444" d="M13,11h10.949C23.466,5.181,18.819,0.534,13,0.051V11z"/> <path fill="#444444" d="M12.414,13l-8.155,8.155C6.351,22.926,9.051,24,12,24c6.279,0,11.438-4.851,11.949-11H12.414z"/> <path fill="#444444" d="M11,11.586V0.051C4.851,0.562,0,5.721,0,12c0,2.949,1.074,5.649,2.845,7.741L11,11.586z"/></g></svg>

Before

Width:  |  Height:  |  Size: 524 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M18.768,1.36C18.578,1.132,18.297,1,18,1H6C5.703,1,5.422,1.132,5.232,1.36l-5,6 c-0.294,0.353-0.31,0.861-0.039,1.231l11,15C11.382,23.848,11.682,24,12,24s0.618-0.152,0.807-0.409l11-15 c0.271-0.371,0.256-0.878-0.039-1.231L18.768,1.36z M19,9H5V7h14V9z"/></g></svg>

Before

Width:  |  Height:  |  Size: 467 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path d="M8,15A7,7,0,0,1,3.333,2.783l1.334,1.49a5,5,0,1,0,6.666,0l1.333-1.49A7,7,0,0,1,8,15Z" fill="#444444"/> <rect x="7" width="2" height="7" fill="#444444" data-color="color-2"/></g></svg>

Before

Width:  |  Height:  |  Size: 375 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M16,3.6L15.2,2C8.3,4,4.8,8.4,4.8,8.4L1.6,6L0,7.6L4.8,14C8.5,7.1,16,3.6,16,3.6z"/></g></svg>

Before

Width:  |  Height:  |  Size: 299 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><rect x="22" y="11" fill="#444444" width="2" height="6"/> <path data-color="color-2" fill="#444444" d="M13.241,15.73C12.847,15.91,12.43,16,12,16s-0.847-0.09-1.24-0.269L4,12.658V18 c0,2.626,4.024,4,8,4s8-1.374,8-4v-5.341L13.241,15.73z"/> <path fill="#444444" d="M23.414,7.09l-11-5c-0.263-0.119-0.564-0.119-0.827,0l-11,5C0.229,7.252,0,7.607,0,8s0.229,0.748,0.586,0.91 l11,5C11.718,13.97,11.859,14,12,14s0.282-0.03,0.414-0.09l11-5C23.771,8.748,24,8.393,24,8S23.771,7.252,23.414,7.09z"/></g></svg>

Before

Width:  |  Height:  |  Size: 677 B

View File

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g class="nc-icon-wrapper" fill="#444444">
<path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 276 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><polygon fill="#444444" points="17,1.382 13,3.382 13,22.618 17,20.618 "/> <polygon data-color="color-2" fill="#444444" points="11,3.382 7,1.382 7,20.618 11,22.618 "/> <path fill="#444444" d="M5,1.434L0.485,4.143C0.185,4.323,0,4.648,0,5v19l5-3.234V1.434z"/> <path data-color="color-2" fill="#444444" d="M23.515,4.143L19,1.434v19.332L24,24V5C24,4.648,23.815,4.323,23.515,4.143z"/></g></svg>

Before

Width:  |  Height:  |  Size: 572 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><path d="M11,9H1a1,1,0,0,0,0,2H11a1,1,0,0,0,0-2Z" fill="#444444"/> <path d="M11,1H1A1,1,0,0,0,1,3H11a1,1,0,0,0,0-2Z" fill="#444444"/> <path d="M11,5H1A1,1,0,0,0,1,7H11a1,1,0,0,0,0-2Z" fill="#444444" data-color="color-2"/></g></svg>

Before

Width:  |  Height:  |  Size: 415 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><polygon points="6 5.882 2.148 2.03 0.074 4.104 6 10.03 11.926 4.104 9.852 2.03 6 5.882" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 299 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><polygon points="7.92 0 1.92 6 7.92 12 10.02 9.9 6.12 6 10.02 2.1 7.92 0" fill="#444444"></polygon></g></svg>

Before

Width:  |  Height:  |  Size: 293 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><polygon points="1.98 2.1 5.88 6 1.98 9.9 4.08 12 10.08 6 4.08 0 1.98 2.1" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 285 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M8,2c0.6,0,1.1,0.2,1.5,0.7l0.7,0.7l1.5-1.3L11,1.3C10.2,0.5,9.1,0,8,0C5.8,0,4,1.8,4,4v1.5 C2.8,6.6,2,8.2,2,10c0,3.3,2.7,6,6,6s6-2.7,6-6s-2.7-6-6-6C7.3,4,6.6,4.1,6,4.4V4C6,2.9,6.9,2,8,2z M8,7c1.1,0,2,0.9,2,2 c0,0.7-0.4,1.4-1,1.7V13H7v-2.3c-0.6-0.3-1-1-1-1.7C6,7.9,6.9,7,8,7z"/></g></svg>

Before

Width:  |  Height:  |  Size: 493 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M20.4,6.1c-1.1-0.5-2.2-0.8-3.4-0.8c-1.6,0-3,0.5-4.3,0.9c-0.8,0.3-1.6,0.5-2.2,0.5c-0.4,0-0.6-0.1-0.7-0.3 c0-0.1,0.1-0.6,0.2-0.9c0.3-0.9,0.6-2-0.2-3.1c-0.5-0.6-1.3-1-2.2-1c-0.9,0-1.7,0.3-2.5,0.8C1.9,4.4,0,8.1,0,12c0,6.6,5.4,12,12,12 c5.3,0,10.1-3.6,11.6-8.8C23.7,14.6,25.1,8.4,20.4,6.1z M3,12c0-1.1,0.9-2,2-2s2,0.9,2,2s-0.9,2-2,2S3,13.1,3,12z M7.5,19 c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S8.6,19,7.5,19z M13,21c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S14.1,21,13,21z M17,15 c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3S18.7,15,17,15z"/></g></svg>

Before

Width:  |  Height:  |  Size: 741 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path data-color="color-2" fill="#444444" d="M10,8H8v2H6V8H4V6h2V4h2v2h2V8z"/> <path fill="#444444" d="M7,14c-3.86,0-7-3.14-7-7s3.14-7,7-7s7,3.14,7,7S10.86,14,7,14z M7,2C4.243,2,2,4.243,2,7s2.243,5,5,5 s5-2.243,5-5S9.757,2,7,2z"/> <path data-color="color-2" fill="#444444" d="M15.707,14.293L13.314,11.9c-0.411,0.529-0.885,1.003-1.414,1.414l2.393,2.393 C14.488,15.902,14.744,16,15,16s0.512-0.098,0.707-0.293C16.098,15.316,16.098,14.684,15.707,14.293z"/> </g></svg>

Before

Width:  |  Height:  |  Size: 647 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M13.9,0.5C13.7,0.2,13.4,0,13,0H3C2.6,0,2.3,0.2,2.1,0.5C0,4.5,0,4.7,0,5c0,1.1,0.9,2,2,2v8c0,0.6,0.4,1,1,1 h10c0.6,0,1-0.4,1-1V7c1.1,0,2-0.9,2-2C16,4.7,16,4.5,13.9,0.5z M10,14v-4H6v4H4V6.7C4.3,6.9,4.6,7,5,7c0.6,0,1.1-0.3,1.5-0.7 C6.9,6.7,7.4,7,8,7s1.1-0.3,1.5-0.7C9.9,6.7,10.4,7,11,7c0.4,0,0.7-0.1,1-0.3V14H10z"></path></g></svg>

Before

Width:  |  Height:  |  Size: 535 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path d="M23.58.424A1,1,0,0,0,22.819.13C8.791.862,3.609,13.358,3.559,13.484a1,1,0,0,0,.22,1.08l5.657,5.657a1,1,0,0,0,1.085.218c.125-.051,12.554-5.291,13.348-19.253A1,1,0,0,0,23.58.424Zm-8.166,10.99a2,2,0,1,1,0-2.828A2,2,0,0,1,15.414,11.414Z" fill="#444444"/> <path data-color="color-2" d="M1.113,18.844a2.844,2.844,0,1,1,4.022,4.022C4.024,23.977,0,24,0,24S0,19.954,1.113,18.844Z" fill="#444444"/> <path id="color-2" d="M10.357,2.341A8.911,8.911,0,0,0,2.522,4.825a9.084,9.084,0,0,0-1.384,1.8,1,1,0,0,0,.155,1.215l1.989,1.99A26.623,26.623,0,0,1,10.357,2.341Z" fill="#444444"/> <path id="color-3" d="M21.659,13.643a8.911,8.911,0,0,1-2.484,7.835,9.084,9.084,0,0,1-1.8,1.384,1,1,0,0,1-1.215-.155l-1.99-1.989A26.623,26.623,0,0,0,21.659,13.643Z" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 949 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M8,0C3.6,0,0,3.6,0,8c0,4.4,3.6,8,8,8s8-3.6,8-8C16,3.6,12.4,0,8,0z M8,10c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2 s2,0.9,2,2C10,9.1,9.1,10,8,10z M8,2c0.9,0,1.8,0.2,2.6,0.6L9.044,4.156c-0.761-0.207-1.327-0.207-2.089,0L5.4,2.6 C6.2,2.2,7.1,2,8,2z M2,8c0-0.9,0.2-1.8,0.6-2.6l1.556,1.556c-0.207,0.761-0.207,1.327,0,2.089L2.6,10.6C2.2,9.8,2,8.9,2,8z M8,14 c-0.9,0-1.8-0.2-2.6-0.6l1.556-1.556c0.761,0.207,1.327,0.207,2.089,0L10.6,13.4C9.8,13.8,8.9,14,8,14z M13.4,10.6l-1.556-1.556 c0.207-0.761,0.207-1.327,0-2.089L13.4,5.4C13.8,6.2,14,7.1,14,8C14,8.9,13.8,9.8,13.4,10.6z"/></g></svg>

Before

Width:  |  Height:  |  Size: 776 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M6.5,11h11c3,0,5.5-2.5,5.5-5.5S20.5,0,17.5,0h-11C3.5,0,1,2.5,1,5.5S3.5,11,6.5,11z M6.5,2 C8.4,2,10,3.6,10,5.5S8.4,9,6.5,9S3,7.4,3,5.5S4.6,2,6.5,2z"></path> <path data-color="color-2" fill="#444444" d="M17.5,13h-11c-3,0-5.5,2.5-5.5,5.5S3.5,24,6.5,24h11c3,0,5.5-2.5,5.5-5.5S20.5,13,17.5,13z M17.5,22c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5s3.5,1.6,3.5,3.5S19.4,22,17.5,22z"></path></g></svg>

Before

Width:  |  Height:  |  Size: 596 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M11,12H1c-0.553,0-1-0.447-1-1V1c0-0.552,0.447-1,1-1h10c0.553,0,1,0.448,1,1v10C12,11.553,11.553,12,11,12z "></path> <path data-color="color-2" fill="#444444" d="M15,16H4v-2h10V4h2v11C16,15.553,15.553,16,15,16z"></path></g></svg>

Before

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -0,0 +1,207 @@
import React, { useContext, useState } from "react";
import { API } from "../environment/api";
import { MaterialCommunityIcons } from '@expo/vector-icons';
import {
Box, Button,
Center, FormControl, Heading, ScrollView, VStack,Select
} from "native-base";
import { StyleSheet, TextInput } from "react-native";
import { UserContext } from "../context/UserContext";
export default function AgregarInvitados({ navigation }) {
const baseURL = `${API.BASE_URL}/guest/createGuest/`;
const [name, setName] = useState();
const [apellido, setApellido] =useState();
const [dni, setDNI] = useState();
const [phone, setPhone] = useState();
const [number_plate, setNumber_plate] = useState();
const [tenant_id, setTenant_id] = useState();
const [community_id, setCommunity_id] = useState();
const { user } = useContext(UserContext);
const [errors, setErrors] = useState({});
const [categoria, setCategoria] = React.useState("");
const [info, setInfo] = useState({
name: "",
last_name: "",
dni: "",
phone: "",
number_plate:"",
status: "1",
tenant_id: user._id,
//tenant_id: "6301df20dac7dcf76dcecade",
community_id: user.community_id,
//community_id: "62be68215692582bbfd77134",
type_guest:""
});
const onHandleChange = (name) => (value) => setInfo(prev => ({...prev, [name]: value}))
const validate = async() => {
if( info.name === "" && info.last_name === "" && info.dni === "" && info.phone === ""){
setErrors({ ...errors,
name: 'Debe ingresar un nombre',
last_name: 'Debe ingresar un apellido',
dni: 'Debe ingresar un número de identificación',
phone: 'Debe ingresar un número de teléfono'
});
return false;
}else if (info.name === "" ) {
setErrors({ ...errors,
name: 'Debe ingresar un nombre'
});
return false;
} else if(info.last_name === ""){
setErrors({ ...errors,
last_name: 'Debe ingresar un apellido'
});
return false;
}else if (info.dni === "") {
setErrors({ ...errors,
dni: 'Debe ingresar un número de identificación'
});
return false;
}else if (info.phone === "") {
setErrors({ ...errors,
phone: 'Debe ingresar un número de teléfono'
});
return false;
}
return true;
}
const saveInvitado = async() => {
const error = await validate();
if (error) {
try {
await fetch(baseURL, {
cache: 'no-cache',
method: 'POST',
body: JSON.stringify(info),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
if (response.status != 201){
console.log('ocurrio un error ');
}else{
navigation.navigate('Inicio');
return response.json();
}
})
} catch (error) {
console.log("ERROR: " + error);
}
}
}
return (
<Center>
<ScrollView width='100%' h='570' ml='36' _contentContainerStyle={{
px: "20px",
mb: "4",
minW: "72"
}}>
<Box safeArea p="2" w="90%" maxW="290" py="8">
<Heading size="lg" color="coolGray.800" _dark={{
color: "warmGray.50"
}} fontWeight="semibold">
Registrar invitado
</Heading>
<Heading mt="1" color="coolGray.600" _dark={{
color: "warmGray.200"
}} fontWeight="medium" size="xs">
Registre el invitado que desee
</Heading>
<VStack space={5} mt="5">
<FormControl isRequired>
<FormControl.Label>Nombre</FormControl.Label>
<TextInput style={'name' in errors ? styles.errorMessage : styles.input} type="text" onChangeText={onHandleChange("name")}/>
{'name' in errors && <FormControl.ErrorMessage _text={{
fontSize: 'xs'
}}>Debe ingresar un correo electrónico</FormControl.ErrorMessage> }
</FormControl>
<FormControl isRequired>
<FormControl.Label>Apellido</FormControl.Label>
<TextInput style={'last_name' in errors ? styles.errorMessage : styles.input} type="text" onChangeText={onHandleChange("last_name")}/>
</FormControl>
<FormControl isRequired>
<FormControl.Label>Identificación</FormControl.Label>
<TextInput style={'dni' in errors ? styles.errorMessage : styles.input}type="text" onChangeText={onHandleChange("dni")}/>
</FormControl>
<FormControl isRequired>
<FormControl.Label>Teléfono</FormControl.Label>
<TextInput style={'phone' in errors ? styles.errorMessage : styles.input}type="text" onChangeText={onHandleChange("phone")} />
</FormControl>
<FormControl >
<FormControl.Label>Placa</FormControl.Label>
<TextInput style={styles.input} type="text" onChangeText={onHandleChange("number_plate")} />
</FormControl>
<FormControl >
<FormControl.Label>Tipo de invitado</FormControl.Label>
<Select onChangeText={onHandleChange("type_guest")} selectedValue={categoria} minWidth="200" accessibilityLabel="Choose Service" placeholder="Elija el tipo de invitado" _selectedItem={{
bg: "teal.600"
}} mt={1} onValueChange={onHandleChange("type_guest")}>
<Select.Item label="Invitado Frecuente" value="Frecuente" />
<Select.Item label="Invitado de acceso rápido" value="Rapido" />
</Select>
</FormControl>
<Button mt="2" backgroundColor='tertiary.600' onPress={() => saveInvitado()}>
Guardar
</Button>
</VStack>
</Box>
</ScrollView>
</Center>
)
}
const styles = StyleSheet.create({
input: {
height: 35,
margin: 3,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 9,
paddingRight: 19,
paddingBottom: 20,
paddingLeft: 0,
marginTop: 6,
marginBottom: 6,
borderRadius: 4
},
errorMessage: {
height: 35,
margin: 3,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 9,
paddingRight: 19,
paddingLeft: 0,
marginTop: 6,
borderRadius: 4,
borderColor: '#be123c'
}
})

View File

@ -0,0 +1,179 @@
import React, {useContext, useEffect, useState} from "react";
import {
Box,
Heading,
VStack,
FormControl,
Button,
Center,
Select, CheckIcon, ScrollView
} from "native-base";
import { UserContext } from "../context/UserContext";
import { API } from "../environment/api";
import {TimePicker} from 'react-native-simple-time-picker';
import { View, StyleSheet } from "react-native";
import { number } from "prop-types";
import DateTimePicker from '@react-native-community/datetimepicker';
export default function AreaComun({navigation}){
const { user } = useContext(UserContext)
const [service, setService] = useState("");
const [areas, setAreas] = useState([])
const [isRequesting, setIsRequesting] = useState(false);
const [time, setTime] = useState(new Date())
const idComunidad = user.community_id
const date = new Date();
const [mode, setMode] = useState('time');
const [startDate, setStartDate] = useState();
const [startTime, setStartTime] = useState()
useEffect(() => {
const onRequestReservasData = async () => {
setIsRequesting(true);
try {
const jsonResponse = await fetch(`${API.BASE_URL}/commonArea/findByCommunity/` + `${idComunidad}`, {
method: "GET",
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonResponse.json();
// console.log(response.message);
setAreas(response.message);
} catch (error) {
console.log("ERROR:" + error);
}
setIsRequesting(false)
}
onRequestReservasData()
}, [user])
const postReserva = async() => {
// console.log(startDate.split('"')[1]);
// console.log(startTime.split('.')[0]);
const data = {
"time": startTime.split('.')[0],
"date": startDate.split('"')[1],
"user_id" : user._id,
"common_area_id": service._id,
"common_area_name": service.name,
"community_id": service.community_id
}
console.log(data);
try {
const jsonDataResponse = await fetch(`${API.BASE_URL}/reservation/createReservation`, {
cache: 'no-cache',
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonDataResponse.json();
console.log(response.message);
} catch (error) {
console.log("ERROR:" + error);
}
}
const onChangeStart = (event, selectedDate) => {
// console.log(selectedDate);
const dateString = JSON.stringify(selectedDate).toString().split("T")
setStartDate(dateString[0])
setStartTime(dateString[1])
console.log(dateString);
// console.log(Date.toString(selectedDate));
const currentDate = selectedDate || time;
setTime(currentDate);
};
return (
<Center>
<Box safeArea p="2" w="90%" maxW="290" py="8">
<Heading size="lg" color="coolGray.800" _dark={{
color: "warmGray.50"
}} fontWeight="semibold">
Katoikia
</Heading>
<Heading mt="1" color="coolGray.600" _dark={{
color: "warmGray.200"
}} fontWeight="medium" size="xs">
Reserve su área común
</Heading>
<ScrollView showsVerticalScrollIndicator={false}>
<VStack space={3} mt="5">
<FormControl isRequired>
<FormControl.Label>Área común</FormControl.Label>
<Select selectedValue={service} minWidth="200" accessibilityLabel="Choose Service" placeholder="Elija su área común" _selectedItem={{
bg: "teal.600",
endIcon: <CheckIcon size="5" />
}} mt={1} onValueChange={itemValue => setService(itemValue)}>
{areas.map(item => (
<Select.Item key={item._id} label={item.name} value={item} />
))}
</Select>
</FormControl>
<FormControl isRequired>
<FormControl.Label>Hora de inicio</FormControl.Label>
<View >
<DateTimePicker minimumDate={date} mode="datetime" is24Hour value={time} onChange={onChangeStart}/>
</View>
</FormControl>
<Button mt="10" backgroundColor="tertiary.600" onPress={()=> postReserva()}>
Reservar
</Button>
<Button mt="3" colorScheme="error" onPress={() => navigation.navigate('Mis Reservas')}>
Cancelar
</Button>
</VStack>
</ScrollView>
</Box>
</Center>
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 10,
justifyContent: 'center',
alignItems: 'center',
height: 40
}
});

View File

@ -1,57 +0,0 @@
import React from "react";
import { StyleSheet } from "react-native";
import PropTypes from 'prop-types';
import { Button } from "galio-framework";
import argonTheme from "../constants/Theme";
class ArButton extends React.Component {
render() {
const { small, shadowless, children, color, style, ...props } = this.props;
const colorStyle = color && argonTheme.COLORS[color.toUpperCase()];
const buttonStyles = [
small && styles.smallButton,
color && { backgroundColor: colorStyle },
!shadowless && styles.shadow,
{...style}
];
return (
<Button
style={buttonStyles}
shadowless
textStyle={{ fontSize: 12, fontWeight: '700' }}
{...props}
>
{children}
</Button>
);
}
}
ArButton.propTypes = {
small: PropTypes.bool,
shadowless: PropTypes.bool,
color: PropTypes.oneOfType([
PropTypes.string,
PropTypes.oneOf(['default', 'primary', 'secondary', 'info', 'error', 'success', 'warning'])
])
}
const styles = StyleSheet.create({
smallButton: {
width: 75,
height: 28
},
shadow: {
shadowColor: 'black',
shadowOffset: { width: 0, height: 4 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 2,
},
});
export default ArButton;

View File

@ -1,98 +0,0 @@
import React from 'react';
import { withNavigation } from '@react-navigation/native';
import PropTypes from 'prop-types';
import { StyleSheet, Dimensions, Image, TouchableWithoutFeedback } from 'react-native';
import { Block, Text, theme } from 'galio-framework';
import { argonTheme } from '../constants';
class Card extends React.Component {
render() {
const { navigation, item, horizontal, full, style, ctaColor, imageStyle } = this.props;
const imageStyles = [
full ? styles.fullImage : styles.horizontalImage,
imageStyle
];
const cardContainer = [styles.card, styles.shadow, style];
const imgContainer = [styles.imageContainer,
horizontal ? styles.horizontalStyles : styles.verticalStyles,
styles.shadow
];
return (
<Block row={horizontal} card flex style={cardContainer}>
<TouchableWithoutFeedback onPress={() => navigation.navigate('Pro')}>
<Block flex style={imgContainer}>
<Image source={{uri: item.image}} style={imageStyles} />
</Block>
</TouchableWithoutFeedback>
<TouchableWithoutFeedback onPress={() => navigation.navigate('Pro')}>
<Block flex space="between" style={styles.cardDescription}>
<Text size={14} style={styles.cardTitle}>{item.title}</Text>
<Text size={12} muted={!ctaColor} color={ctaColor || argonTheme.COLORS.ACTIVE} bold>{item.cta}</Text>
</Block>
</TouchableWithoutFeedback>
</Block>
);
}
}
Card.propTypes = {
item: PropTypes.object,
horizontal: PropTypes.bool,
full: PropTypes.bool,
ctaColor: PropTypes.string,
imageStyle: PropTypes.any,
}
const styles = StyleSheet.create({
card: {
backgroundColor: theme.COLORS.WHITE,
marginVertical: theme.SIZES.BASE,
borderWidth: 0,
minHeight: 114,
marginBottom: 16
},
cardTitle: {
flex: 1,
flexWrap: 'wrap',
paddingBottom: 6
},
cardDescription: {
padding: theme.SIZES.BASE / 2
},
imageContainer: {
borderRadius: 3,
elevation: 1,
overflow: 'hidden',
},
image: {
// borderRadius: 3,
},
horizontalImage: {
height: 122,
width: 'auto',
},
horizontalStyles: {
borderTopRightRadius: 0,
borderBottomRightRadius: 0,
},
verticalStyles: {
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0
},
fullImage: {
height: 215
},
shadow: {
shadowColor: theme.COLORS.BLACK,
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 2,
},
});
export default withNavigation(Card);

View File

@ -0,0 +1,51 @@
import { format } from "date-fns";
import {
Badge,
Box, HStack, Pressable,
Spacer, Text
} from "native-base";
import PropTypes from 'prop-types';
import React from 'react';
export const CommentCard = ({ post }) => {
//const dateFormated = format(new Date(date), "dd LL yyyy")
return (
<Pressable
rounded="8"
overflow="hidden"
borderWidth="1"
borderColor="coolGray.300"
maxW="96"
shadow="3"
bg="coolGray.100"
p="5"
marginTop="4"
>
<Box>
<HStack alignItems="center">
<Badge colorScheme="darkBlue" _text={{
color: "white"
}} variant="solid" rounded="4">
Comunicado
</Badge>
<Spacer />
<Text fontSize={10} color="coolGray.800">
</Text>
</HStack>
<Text color="coolGray.800" mt="3" fontWeight="medium" fontSize="xl">
Administrador de Comunidad
</Text>
<Text mt="2" fontSize="sm" color="coolGray.700">
{post}
</Text>
</Box>
</Pressable>
)
}
CommentCard.propTypes = {
// date: PropTypes.string.isRequired,
post: PropTypes.string.isRequired,
}

View File

@ -1,130 +0,0 @@
import React from "react";
import { StyleSheet, TouchableOpacity, Linking } from "react-native";
import { Block, Text, theme } from "galio-framework";
import Icon from "./Icon";
import argonTheme from "../constants/Theme";
class DrawerItem extends React.Component {
renderIcon = () => {
const { title, focused } = this.props;
switch (title) {
case "Home":
return (
<Icon
name="shop"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.PRIMARY}
/>
);
case "Elements":
return (
<Icon
name="map-big"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.ERROR}
/>
);
case "Articles":
return (
<Icon
name="spaceship"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.PRIMARY}
/>
);
case "Profile":
return (
<Icon
name="chart-pie-35"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.WARNING}
/>
);
case "Account":
return (
<Icon
name="calendar-date"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.INFO}
/>
);
case "Getting Started":
return (<Icon
name="spaceship"
family="ArgonExtra"
size={14}
color={focused ? "white" : "rgba(0,0,0,0.5)"}
/>);
case "Log out":
return <Icon />;
default:
return null;
}
};
render() {
const { focused, title, navigation } = this.props;
const containerStyles = [
styles.defaultStyle,
focused ? [styles.activeStyle, styles.shadow] : null
];
return (
<TouchableOpacity
style={{ height: 60 }}
onPress={() =>
title == "Getting Started"
? Linking.openURL(
"https://demos.creative-tim.com/argon-pro-react-native/docs/"
).catch(err => console.error("An error occurred", err))
: navigation.navigate(title)
}
>
<Block flex row style={containerStyles}>
<Block middle flex={0.1} style={{ marginRight: 5 }}>
{this.renderIcon()}
</Block>
<Block row center flex={0.9}>
<Text
size={15}
bold={focused ? true : false}
color={focused ? "white" : "rgba(0,0,0,0.5)"}
>
{title}
</Text>
</Block>
</Block>
</TouchableOpacity>
);
}
}
const styles = StyleSheet.create({
defaultStyle: {
paddingVertical: 16,
paddingHorizontal: 16
},
activeStyle: {
backgroundColor: argonTheme.COLORS.ACTIVE,
borderRadius: 4
},
shadow: {
shadowColor: theme.COLORS.BLACK,
shadowOffset: {
width: 0,
height: 2
},
shadowRadius: 8,
shadowOpacity: 0.1
}
});
export default DrawerItem;

View File

@ -1,281 +0,0 @@
import React from 'react';
import { withNavigation } from '@react-navigation/native';
import { TouchableOpacity, StyleSheet, Platform, Dimensions } from 'react-native';
import { Button, Block, NavBar, Text, theme } from 'galio-framework';
import Icon from './Icon';
import Input from './Input';
import Tabs from './Tabs';
import argonTheme from '../constants/Theme';
const { height, width } = Dimensions.get('window');
const iPhoneX = () => Platform.OS === 'ios' && (height === 812 || width === 812 || height === 896 || width === 896);
const BellButton = ({isWhite, style, navigation}) => (
<TouchableOpacity style={[styles.button, style]} onPress={() => navigation.navigate('Pro')}>
<Icon
family="ArgonExtra"
size={16}
name="bell"
color={argonTheme.COLORS[isWhite ? 'WHITE' : 'ICON']}
/>
<Block middle style={styles.notify} />
</TouchableOpacity>
);
const BasketButton = ({isWhite, style, navigation}) => (
<TouchableOpacity style={[styles.button, style]} onPress={() => navigation.navigate('Pro')}>
<Icon
family="ArgonExtra"
size={16}
name="basket"
color={argonTheme.COLORS[isWhite ? 'WHITE' : 'ICON']}
/>
</TouchableOpacity>
);
const SearchButton = ({isWhite, style, navigation}) => (
<TouchableOpacity style={[styles.button, style]} onPress={() => navigation.navigate('Pro')}>
<Icon
size={16}
family="Galio"
name="search-zoom-in"
color={theme.COLORS[isWhite ? 'WHITE' : 'ICON']}
/>
</TouchableOpacity>
);
class Header extends React.Component {
handleLeftPress = () => {
const { back, navigation } = this.props;
return (back ? navigation.goBack() : navigation.openDrawer());
}
renderRight = () => {
const { white, title, navigation } = this.props;
if (title === 'Title') {
return [
<BellButton key='chat-title' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-title' navigation={navigation} isWhite={white} />
]
}
switch (title) {
case 'Home':
return ([
<BellButton key='chat-home' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-home' navigation={navigation} isWhite={white} />
]);
case 'Deals':
return ([
<BellButton key='chat-categories' navigation={navigation} />,
<BasketButton key='basket-categories' navigation={navigation} />
]);
case 'Categories':
return ([
<BellButton key='chat-categories' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-categories' navigation={navigation} isWhite={white} />
]);
case 'Category':
return ([
<BellButton key='chat-deals' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-deals' navigation={navigation} isWhite={white} />
]);
case 'Profile':
return ([
<BellButton key='chat-profile' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-deals' navigation={navigation} isWhite={white} />
]);
case 'Product':
return ([
<SearchButton key='search-product' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-product' navigation={navigation} isWhite={white} />
]);
case 'Search':
return ([
<BellButton key='chat-search' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-search' navigation={navigation} isWhite={white} />
]);
case 'Settings':
return ([
<BellButton key='chat-search' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-search' navigation={navigation} isWhite={white} />
]);
default:
break;
}
}
renderSearch = () => {
const { navigation } = this.props;
return (
<Input
right
color="black"
style={styles.search}
placeholder="What are you looking for?"
placeholderTextColor={'#8898AA'}
onFocus={() => navigation.navigate('Pro')}
iconContent={<Icon size={16} color={theme.COLORS.MUTED} name="search-zoom-in" family="ArgonExtra" />}
/>
);
}
renderOptions = () => {
const { navigation, optionLeft, optionRight } = this.props;
return (
<Block row style={styles.options}>
<Button shadowless style={[styles.tab, styles.divider]} onPress={() => navigation.navigate('Pro')}>
<Block row middle>
<Icon name="diamond" family="ArgonExtra" style={{ paddingRight: 8 }} color={argonTheme.COLORS.ICON} />
<Text size={16} style={styles.tabTitle}>{optionLeft || 'Beauty'}</Text>
</Block>
</Button>
<Button shadowless style={styles.tab} onPress={() => navigation.navigate('Pro')}>
<Block row middle>
<Icon size={16} name="bag-17" family="ArgonExtra" style={{ paddingRight: 8 }} color={argonTheme.COLORS.ICON}/>
<Text size={16} style={styles.tabTitle}>{optionRight || 'Fashion'}</Text>
</Block>
</Button>
</Block>
);
}
renderTabs = () => {
const { tabs, tabIndex, navigation } = this.props;
const defaultTab = tabs && tabs[0] && tabs[0].id;
if (!tabs) return null;
return (
<Tabs
data={tabs || []}
initialIndex={tabIndex || defaultTab}
onChange={id => navigation.setParams({ tabId: id })} />
)
}
renderHeader = () => {
const { search, options, tabs } = this.props;
if (search || tabs || options) {
return (
<Block center>
{search ? this.renderSearch() : null}
{options ? this.renderOptions() : null}
{tabs ? this.renderTabs() : null}
</Block>
);
}
}
render() {
const { back, title, white, transparent, bgColor, iconColor, titleColor, navigation, ...props } = this.props;
const noShadow = ['Search', 'Categories', 'Deals', 'Pro', 'Profile'].includes(title);
const headerStyles = [
!noShadow ? styles.shadow : null,
transparent ? { backgroundColor: 'rgba(0,0,0,0)' } : null,
];
const navbarStyles = [
styles.navbar,
bgColor && { backgroundColor: bgColor }
];
return (
<Block style={headerStyles}>
<NavBar
back={false}
title={title}
style={navbarStyles}
transparent={transparent}
right={this.renderRight()}
rightStyle={{ alignItems: 'center' }}
left={
<Icon
name={back ? 'chevron-left' : "menu"} family="entypo"
size={20} onPress={this.handleLeftPress}
color={iconColor || (white ? argonTheme.COLORS.WHITE : argonTheme.COLORS.ICON)}
style={{ marginTop: 2 }}
/>
}
leftStyle={{ paddingVertical: 12, flex: 0.2 }}
titleStyle={[
styles.title,
{ color: argonTheme.COLORS[white ? 'WHITE' : 'HEADER'] },
titleColor && { color: titleColor }
]}
{...props}
/>
{this.renderHeader()}
</Block>
);
}
}
const styles = StyleSheet.create({
button: {
padding: 12,
position: 'relative',
},
title: {
width: '100%',
fontSize: 16,
fontWeight: 'bold',
},
navbar: {
paddingVertical: 0,
paddingBottom: theme.SIZES.BASE * 1.5,
paddingTop: iPhoneX ? theme.SIZES.BASE * 4 : theme.SIZES.BASE,
zIndex: 5,
},
shadow: {
backgroundColor: theme.COLORS.WHITE,
shadowColor: 'black',
shadowOffset: { width: 0, height: 2 },
shadowRadius: 6,
shadowOpacity: 0.2,
elevation: 3,
},
notify: {
backgroundColor: argonTheme.COLORS.LABEL,
borderRadius: 4,
height: theme.SIZES.BASE / 2,
width: theme.SIZES.BASE / 2,
position: 'absolute',
top: 9,
right: 12,
},
header: {
backgroundColor: theme.COLORS.WHITE,
},
divider: {
borderRightWidth: 0.3,
borderRightColor: theme.COLORS.ICON,
},
search: {
height: 48,
width: width - 32,
marginHorizontal: 16,
borderWidth: 1,
borderRadius: 3,
borderColor: argonTheme.COLORS.BORDER
},
options: {
marginBottom: 24,
marginTop: 10,
elevation: 4,
},
tab: {
backgroundColor: theme.COLORS.TRANSPARENT,
width: width * 0.35,
borderRadius: 0,
borderWidth: 0,
height: 24,
elevation: 0,
},
tabTitle: {
lineHeight: 19,
fontWeight: '400',
color: argonTheme.COLORS.HEADER
},
});
export default withNavigation(Header);

View File

@ -0,0 +1,80 @@
import{Box, ScrollView} from "native-base";
import React, { useContext, useEffect, useState } from "react";
import { UserContext } from "../context/UserContext";
import { API } from "../environment/api";
import { CommentCard } from "./CommentCard";
export default function Home() {
const { user } = useContext(UserContext)
const [isRequesting, setIsRequesting] = useState(false);
const [comments, setComments] = useState([]);
const user_type=user.user_type;
//const user_type="4";
const community_id=user.community_id;
//const community_id="1";
useEffect(() => {
console.log(user);
const onRequestCommentsData = async () => {
setIsRequesting(true);
try {
if(user_type=="4"){
const jsonResponse = await fetch(`${API.BASE_URL}/post/findPostCommunity/`+`${community_id}`, {
method: "GET",
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonResponse.json();
setComments(response.message);
}else{
const jsonResponse = await fetch(`${API.BASE_URL}/post/allPosts`, {
method: "GET",
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonResponse.json();
setComments(response.message);
}
} catch (error) {
}
setIsRequesting(false)
}
onRequestCommentsData()
}, [user])
return (
<Box alignItems="center">
<ScrollView width='100%' h='550' ml='1' _contentContainerStyle={{
px: "20px",
mb: "4",
minW: "72"
}}>
{
comments.map(item => (
<CommentCard
key={item._id}
post={item.post}
//date={date}
/>
))
}
</ScrollView>
</Box>
)
}

View File

@ -1,34 +0,0 @@
import React from 'react';
import * as Font from 'expo-font';
import { createIconSetFromIcoMoon } from '@expo/vector-icons';
import { Icon } from 'galio-framework';
import argonConfig from '../assets/config/argon.json';
const ArgonExtra = require('../assets/font/argon.ttf');
const IconArgonExtra = createIconSetFromIcoMoon(argonConfig, 'ArgonExtra');
class IconExtra extends React.Component {
state = {
fontLoaded: false,
}
async componentDidMount() {
await Font.loadAsync({ ArgonExtra: ArgonExtra });
this.setState({ fontLoaded: true });
}
render() {
const { name, family, ...rest } = this.props;
if (name && family && this.state.fontLoaded) {
if (family === 'ArgonExtra') {
return <IconArgonExtra name={name} family={family} {...rest} />;
}
return <Icon name={name} family={family} {...rest} />;
}
return null;
}
}
export default IconExtra;

View File

@ -1,76 +0,0 @@
import React from "react";
import { StyleSheet } from "react-native";
import PropTypes from 'prop-types';
import { Input } from "galio-framework";
import Icon from './Icon';
import { argonTheme } from "../constants";
class ArInput extends React.Component {
render() {
const { shadowless, success, error } = this.props;
const inputStyles = [
styles.input,
!shadowless && styles.shadow,
success && styles.success,
error && styles.error,
{...this.props.style}
];
return (
<Input
placeholder="write something here"
placeholderTextColor={argonTheme.COLORS.MUTED}
style={inputStyles}
color={argonTheme.COLORS.HEADER}
iconContent={
<Icon
size={14}
color={argonTheme.COLORS.ICON}
name="link"
family="AntDesign"
/>
}
{...this.props}
/>
);
}
}
ArInput.defaultProps = {
shadowless: false,
success: false,
error: false
};
ArInput.propTypes = {
shadowless: PropTypes.bool,
success: PropTypes.bool,
error: PropTypes.bool
}
const styles = StyleSheet.create({
input: {
borderRadius: 4,
borderColor: argonTheme.COLORS.BORDER,
height: 44,
backgroundColor: '#FFFFFF'
},
success: {
borderColor: argonTheme.COLORS.INPUT_SUCCESS,
},
error: {
borderColor: argonTheme.COLORS.INPUT_ERROR,
},
shadow: {
shadowColor: argonTheme.COLORS.BLACK,
shadowOffset: { width: 0, height: 1 },
shadowRadius: 2,
shadowOpacity: 0.05,
elevation: 2,
}
});
export default ArInput;

View File

@ -0,0 +1,146 @@
import React, { useContext, useEffect, useState } from "react";
import { MaterialCommunityIcons } from '@expo/vector-icons';
import { UserContext } from "../context/UserContext";
import { API } from "../environment/api";
import {
Box, Button,
Center, FormControl, Heading, ScrollView, VStack,FlatList, HStack,Avatar,Spacer,Text, Icon
} from "native-base";
export default function Invitados({navigation}) {
const [isRequesting, setIsRequesting] = useState(false);
const [invitados, setInvitados] = useState([]);
const { user } = useContext(UserContext);
const id = user._id;
//const id = "6301df20dac7dcf76dcecade";
const user_type=user.user_type;
//const user_type="4";
//const community_id="1";
const community_id=user.community_id;
const [invitado, setInvitado] = useState([]);
useEffect(() => {
const onRequestInvitadosData = async () => {
setIsRequesting(true);
try {
if(user_type=="4"){
const jsonResponse = await fetch(`${API.BASE_URL}/guest/findGuestCommunity/`+`${community_id}`, {
method: "GET",
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonResponse.json();
setInvitados(response.message);
}else{
const jsonResponse = await fetch(`${API.BASE_URL}/guest/findGuestUser/`+`${id}`, {
method: "GET",
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonResponse.json();
setInvitados(response.message);
}
} catch (error) {
}
setIsRequesting(false)
}
onRequestInvitadosData()
})
const deleteInvitado = async(pid) => {
const data = {
"_id": pid
}
try {
await fetch("http://localhost:4000/guest/updateGuest", {
cache: 'no-cache',
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
if (response.status != 201){
console.log('ocurrio un error ');
}else{
return response.json();
}
})
} catch (error) {
console.log("ERROR: " + error);
}
}
return (
<Box>
<Heading fontSize="xl" p="4" pb="3">
Lista de invitados
</Heading>
<Button width='200' mb="4" mt="4" ml='85' backgroundColor='tertiary.600' onPress={() => navigation.navigate('Agregar Invitado')} icon={<Icon mb="0.5" as={<MaterialCommunityIcons name={'plus'} />} color="white" size="sm" />}>
Agregar invitado
</Button>
<FlatList data={invitados} renderItem={({
item
}) => <Box key={item._id} borderBottomWidth="1" _dark={{
borderColor: "gray.600"
}} borderColor="coolGray.200" pl="4" pr="5" py="2">
<HStack space={3} justifyContent="space-between" >
<MaterialCommunityIcons name="account" size={48} color="#D7A86E" />
<VStack>
<Text _dark={{
color: "warmGray.50"
}} color="coolGray.800" bold>
{item.name+" "+item.last_name}
</Text>
<Text color="coolGray.600" _dark={{
color: "warmGray.200"
}}>
{"Identificación: "+item.dni}
</Text>
<Text color="coolGray.600" _dark={{
color: "warmGray.200"
}}>
{"Teléfono: "+item.phone}
</Text>
<Text color="coolGray.600" _dark={{
color: "warmGray.200"
}}>
{"Número Placa: "+item.number_plate}
</Text>
<Text color="coolGray.600" _dark={{
color: "warmGray.200"
}}>
{"Tipo de acceso: "+item.type_guest}
</Text>
</VStack>
<Spacer />
{user_type == 3 && <MaterialCommunityIcons name="delete" size={28} color="#7C0808" onPress={() =>{deleteInvitado(item._id)}} />}
</HStack>
</Box>} keyExtractor={item => item.id} />
</Box>
);
}

View File

@ -0,0 +1,253 @@
import React, { useContext, useState } from "react";
import Cookies from 'universal-cookie';
import {
Text,
Link,
Center,
Heading,
VStack,
Box,
FormControl,
Button,
Image,
ErrorMessage
} from "native-base";
import logo from "../assets/logo-katoikia.png";
import { Entypo } from '@expo/vector-icons';
import { MaterialCommunityIcons } from '@expo/vector-icons';
import { View, TextInput, StyleSheet } from "react-native";
import { UserContext } from "../context/UserContext";
import { API } from "../environment/api";
const baseURL = `${API.BASE_URL}/user/loginUser`;
export default function LogIn({ navigation }) {
const { addUser } = useContext(UserContext);
const [errors, setErrors] = useState({});
const [credentials, setCredentials] = useState({
email: "lalo@lalo.com",
password: "12345"
});
const onHandleChange = (name) => (value) => setCredentials(prev => ({ ...prev, [name]: value }))
const validate = async() => {
if( credentials.email === "" && credentials.password === ""){
setErrors({ ...errors,
email: 'Debe ingresar un correo electrónico',
password: 'Debe ingresar una contraseña'
});
return false;
}else if (credentials.password === "") {
setErrors({ ...errors,
password: 'Debe ingresar una contraseña'
});
return false;
} else if(credentials.email === ""){
setErrors({ ...errors,
email: 'Debe ingresar un correo electrónico'
});
return false;
}
return true;
}
const iniciarSesion = async () => {
const error = await validate();
console.log(error);
if (error) {
try {
await fetch(baseURL, {
cache: 'no-cache',
method: 'POST',
body: JSON.stringify(credentials),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
if (response.status != 201){
console.log('ocurrio un error ');
}else{
return response.json();
}
})
.then( response => {
// inqulino 4 y guarda 3
const user = response.message
if(user !== null){
if(user.user_type == '4'){
addUser(user);
navigation.navigate('Comunicados', {user})
}else if(user.user_type == '3'){
addUser(user);
// cambiar por ComunicadosGuarda luego
navigation.navigate('Comunicados', {user})
}
}else{
setErrors({ ...errors,
user: 'Debe ingresar credenciales válidos'
});
}
})
} catch (error) {
console.log("ERROR: " +error);
}
}
console.log(errors);
}
return (
<Center w="100%" flex={1}>
<Box safeArea p="2" py="8" w="90%" maxW="290">
<Center>
<Image source={
logo
} width={500} height={550} m='2'
alt="Katoikia logo" size="xl" justifyContent="center" />
</Center>
<Heading
size="lg"
fontWeight="600"
color="coolGray.800"
_dark={{
color: "warmGray.50",
}}
>
Bienvenido a Katoikia
</Heading>
<Heading
mt="1"
_dark={{
color: "warmGray.200",
}}
color="coolGray.600"
fontWeight="medium"
size="xs"
>
Su app de comunidad de confianza
</Heading>
<View style={styles.container}>
<VStack width="90%" mx="3" maxW="300px" mb={10}>
<FormControl isRequired isInvalid={'email' in errors}>
<FormControl.Label Text='bold'> Correo Electrónico </FormControl.Label>
<View style={styles.viewSection}>
<Entypo name="email" size={20} color="grey" style={styles.iconStyle} />
<TextInput
name='email'
type="text"
style={'email' in errors ? styles.errorMessage : styles.input}
value={credentials.email}
placeholder='Correo electrónico'
onChangeText={onHandleChange("email")} />
</View>
{'email' in errors && <FormControl.ErrorMessage _text={{
fontSize: 'xs'
}}>Debe ingresar un correo electrónico</FormControl.ErrorMessage> }
</FormControl>
<FormControl isRequired isInvalid={'password' in errors}>
<FormControl.Label Text='bold'> Contraseña </FormControl.Label>
<View style={styles.viewSection}>
<MaterialCommunityIcons name="form-textbox-password" size={20} color="grey" style={styles.iconStyle} />
<TextInput
name='password'
type="password"
style={'password' in errors ? styles.errorMessage : styles.input}
value={credentials.password}
placeholder='Contraseña'
onChangeText={onHandleChange("password")} />
</View>
{'password' in errors && <FormControl.ErrorMessage _text={{
fontSize: 'xs'
}}
>Debe ingresar una contraseña</FormControl.ErrorMessage> }
</FormControl>
<Button mt="2" backgroundColor="#D7A86E" onPress={iniciarSesion}
>
<Text>Continuar</Text>
</Button>
{/* {'user' in errors && <ErrorMessage _text={{
fontSize: 'xs'
}}
>Debe ingresar credenciales válidos</ErrorMessage> } */}
</VStack></View>
</Box>
</Center>
);
}
const styles = StyleSheet.create({
input: {
height: 40,
margin: 10,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 10,
paddingRight: 10,
paddingLeft: 0,
marginTop: 50,
borderRadius: 4
},
errorMessage: {
height: 40,
margin: 10,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 10,
paddingRight: 10,
paddingLeft: 0,
marginTop: 50,
borderRadius: 4,
borderColor: '#be123c'
},
iconStyle: {
paddingBottom: 20,
marginTop: 3,
paddingTop: 35
},
viewSection: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
marginBottom: 50
},
container: {
marginBottom: 6
}
})

View File

@ -0,0 +1,44 @@
import React from "react";
import { Icon } from "native-base";
import { G, Path } from "react-native-svg";
const NativeBaseIcon = () => {
return (
<Icon size="220px" viewBox="0 0 602.339 681.729">
<G
id="Group_403"
data-name="Group 403"
transform="translate(14575 1918.542)"
>
<Path
id="Path_1"
data-name="Path 1"
d="M488.722,0A45.161,45.161,0,0,1,527.83,22.576L675.676,278.584a45.162,45.162,0,0,1,0,45.171L527.83,579.763a45.162,45.162,0,0,1-39.108,22.576H193.008A45.162,45.162,0,0,1,153.9,579.763L6.053,323.755a45.162,45.162,0,0,1,0-45.171L153.9,22.576A45.162,45.162,0,0,1,193.008,0Z"
transform="translate(-13972.661 -1918.542) rotate(90)"
fill="#356290"
/>
<Path
id="Path_252"
data-name="Path 252"
d="M401.1,0A60.816,60.816,0,0,1,453.77,30.405L567.2,226.844a60.816,60.816,0,0,1,0,60.82L453.77,484.1A60.816,60.816,0,0,1,401.1,514.509H174.241A60.816,60.816,0,0,1,121.575,484.1L8.149,287.665a60.816,60.816,0,0,1,0-60.82L121.575,30.405A60.816,60.816,0,0,1,174.241,0Z"
transform="translate(-14016.576 -1865.281) rotate(90)"
fill="#1784b2"
/>
<Path
id="Path_251"
data-name="Path 251"
d="M345.81,0a36.573,36.573,0,0,1,31.674,18.288L480.566,196.856a36.573,36.573,0,0,1,0,36.569L377.484,411.993a36.573,36.573,0,0,1-31.674,18.288H139.655a36.572,36.572,0,0,1-31.674-18.288L4.9,233.425a36.573,36.573,0,0,1,0-36.569L107.981,18.288A36.573,36.573,0,0,1,139.655,0Z"
transform="translate(-14058.69 -1820.41) rotate(90)"
fill="#50bfc3"
/>
<Path
id="_x3C__x2F__x3E_"
d="M187.066,335.455V297.993l-65.272-21.949,65.272-22.523V216.059L81,259.5v32.521Zm38.726,29.3L286.123,174H256.7l-60.33,190.759Zm72.052-29.3,106.066-43.783V259.267L297.844,216.059V254.44l59.3,23.328-59.3,19.421Z"
transform="translate(-14516.286 -1846.988)"
fill="#fff"
/>
</G>
</Icon>
);
};
export default NativeBaseIcon;

View File

@ -0,0 +1,283 @@
import React, { useContext, useState } from "react";
import { API } from "../environment/api";
import {
Box, Button,
Center, FormControl, Heading, ScrollView, VStack
} from "native-base";
import { StyleSheet, TextInput, useWindowDimensions } from "react-native";
import { UserContext } from "../context/UserContext";
import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
import { stringMd5 } from 'react-native-quick-md5';
const { Navigator, Screen } = createMaterialTopTabNavigator();
export default function Profile({ navigation }) {
const baseURL = `${API.BASE_URL}/user/updateUser/`
const [index, setIndex] = useState(0);
const layout = useWindowDimensions();
const userData = useContext(UserContext)
const [name, setName] = useState(userData.user.name);
const [apellido, setApellido] =useState(userData.user.last_name);
const [email, setEmail] = useState(userData.user.email);
const [password, setPassword] = useState();
const [confirmPassword, setConfirmPassword] = useState()
const id = userData.user._id;
const decode = userData.Password;
const [error, setError] = useState({})
console.log(userData.user);
const onHandleChangePassword = (value) => {
//console.log(value);
const dpassword = stringMd5(value)
console.log(dpassword);
console.log(userData.user.password);
if (userData.user.password == dpassword) {
console.log(true);
setError({});
}else{
console.log(false);
setError({ ...error,
password: 'La contraseña no coincide con la actual'
});
}
}
const ProfileView = () => (
<ScrollView width='100%' h='550' ml='36' _contentContainerStyle={{
px: "20px",
mb: "4",
minW: "72"
}}>
<Box safeArea p="2" w="90%" maxW="290" py="8">
<Heading size="lg" color="coolGray.800" _dark={{
color: "warmGray.50"
}} fontWeight="semibold">
Bienvenido {userData.user.name}
</Heading>
<Heading mt="1" color="coolGray.600" _dark={{
color: "warmGray.200"
}} fontWeight="medium" size="xs">
Modifique sus datos
</Heading>
<VStack space={3} mt="5">
<FormControl>
<FormControl.Label>DNI</FormControl.Label>
<TextInput type="text" defaultValue={userData.user.dni} editable={false} />
</FormControl>
{/* <FormControl>
<FormControl.Label>Teléfono</FormControl.Label>
<TextInput type="text" defaultValue={userData.user.phone} editable={false} />
</FormControl> */}
<FormControl>
<FormControl.Label>Nombre</FormControl.Label>
<TextInput style={styles.input} type="text" defaultValue={userData.user.name} onChangeText={(value) => setName(value) }/>
</FormControl>
<FormControl>
<FormControl.Label>Apellido</FormControl.Label>
<TextInput style={styles.input} type="text" defaultValue={userData.user.last_name} onChangeText={(value) => setApellido(value) } />
</FormControl>
<FormControl>
<FormControl.Label>Correo electrónico</FormControl.Label>
<TextInput style={styles.input} type="text" defaultValue={userData.user.email} onChangeText={(value) => setEmail(value) }/>
</FormControl>
<Button mt="2" backgroundColor="orange.300" onPress={() => updateInfo()}>
Actualizar
</Button>
<Button mt="6" colorScheme="error" onPress={() => navigation.navigate('Inicio')}>
Cerrar sesión
</Button>
</VStack>
</Box>
</ScrollView>
)
const PasswordView = () => (
<ScrollView width='100%' h='550' ml='36' _contentContainerStyle={{
px: "20px",
mb: "4",
minW: "72"
}}>
<Box safeArea p="2" w="90%" maxW="290" py="8">
<Heading size="lg" color="coolGray.800" _dark={{
color: "warmGray.50"
}} fontWeight="semibold">
Bienvenido {userData.user.name}
</Heading>
<Heading mt="1" color="coolGray.600" _dark={{
color: "warmGray.200"
}} fontWeight="medium" size="xs">
Modifique sus contraseña
</Heading>
<VStack space={3} mt="5">
<FormControl>
<FormControl.Label>Contraseña actual</FormControl.Label>
<TextInput style={'password' in error ? styles.errorMessage : styles.input} type="password" onChangeText={(value) => onHandleChangePassword(value) }/>
</FormControl>
<FormControl>
<FormControl.Label>Nueva Contraseña</FormControl.Label>
<TextInput editable={!error} style={styles.input} type="password" onChangeText={(value) => setPassword(value) } />
</FormControl>
<FormControl>
<FormControl.Label>Confirmar nueva contraseña</FormControl.Label>
<TextInput editable={!error} style={styles.input} type="password" onChangeText={(value) => setConfirmPassword(value) }/>
</FormControl>
<Button mt="2" backgroundColor="orange.300" onPress={() => updatePassword()} disabled={error}>
Actualizar contraseña
</Button>
{/* {'password' in error && <FormControl.ErrorMessage _text={{
fontSize: 'xs'
}}>La contraseña no coincide con la actual</FormControl.ErrorMessage> } */}
</VStack>
</Box>
</ScrollView>
)
const updatePassword = async() =>{
const dataPassword = {
"_id": userData.user._id,
"dni": userData.user.dni,
"name": userData.user.name,
"last_name": userData.user.last_name,
"email": userData.user.email,
"phone": userData.user.phone,
"password": password,
"user_type": userData.user.user_type,
"status": userData.user.status,
"date_entry": userData.user.date_entry,
"community_id": userData.user.community_id,
}
try {
await fetch(baseURL+`${id}`, {
cache: 'no-cache',
method: 'PUT',
body: JSON.stringify(dataPassword),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
// console.log(baseURL+`${id}`);
if (response.status != 201 && response.status != 200){
console.log('ocurrio un error ' + response);
}else{
return response.json();
}
})
} catch (error) {
console.log("ERROR: " + error);
}
}
const updateInfo = async() => {
const data = {
"_id": userData.user._id,
"dni": userData.user.dni,
"name": name,
"last_name": apellido,
"email": email,
"community_id": userData.user.community_id
}
console.log(data);
try {
await fetch(baseURL+`${id}`, {
cache: 'no-cache',
method: 'PUT',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
console.log(response);
//console.log(baseURL+`${id}`);
if (response.status != 201){
console.log('ocurrio un error ');
}else{
return response.json();
}
})
} catch (error) {
console.log("ERROR: " + error);
}
}
return (
<Navigator>
<Screen name="Datos Personales" component={ProfileView} />
<Screen name="Contraseña" component={PasswordView} />
</Navigator>
)
}
const styles = StyleSheet.create({
input: {
height: 35,
margin: 3,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 9,
paddingRight: 19,
paddingLeft: 0,
marginTop: 6,
borderRadius: 4
},
errorMessage: {
height: 35,
margin: 3,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 9,
paddingRight: 19,
paddingLeft: 0,
marginTop: 6,
borderRadius: 4,
borderColor: '#be123c'
}
})

View File

@ -0,0 +1,103 @@
import React, { useState } from "react";
import {
Box,
Heading,
VStack,
FormControl,
Button,
Center,
ScrollView
} from "native-base";
import { View, TextInput, StyleSheet } from "react-native";
export default function ProfileGuarda({route, navigation}){
const userData = JSON.parse(JSON.stringify(route.params));
const [name, setName] = useState();
const [apellido, setApellido] =useState();
const [email, setEmail] = useState();
const [password, setPassword] = useState();
console.log(userData.user);
const updateInfo = async() => {
}
return (
<Center>
<ScrollView width='100%' h='550' ml='36' _contentContainerStyle={{
px: "20px",
mb: "4",
minW: "72"
}}>
<Box safeArea p="2" w="90%" maxW="290" py="8">
<Heading size="lg" color="coolGray.800" _dark={{
color: "warmGray.50"
}} fontWeight="semibold">
Bienvenido {userData.user.name}
</Heading>
<Heading mt="1" color="coolGray.600" _dark={{
color: "warmGray.200"
}} fontWeight="medium" size="xs">
Modifique sus datos
</Heading>
<VStack space={3} mt="5">
<FormControl>
<FormControl.Label>DNI</FormControl.Label>
<TextInput type="text" defaultValue={userData.user.dni} editable='false' />
</FormControl>
<FormControl>
<FormControl.Label>Nombre</FormControl.Label>
<TextInput style={styles.input} type="text" defaultValue={userData.user.name} onChangeText={(value) => setName(value) }/>
</FormControl>
<FormControl>
<FormControl.Label>Apellido</FormControl.Label>
<TextInput style={styles.input} type="text"defaultValue={userData.user.last_name} onChangeText={(value) => setApellido(value) } />
</FormControl>
<FormControl>
<FormControl.Label>Correo electrónico</FormControl.Label>
<TextInput style={styles.input} type="text" defaultValue={userData.user.email} onChangeText={(value) => setEmail(value) }/>
</FormControl>
<FormControl>
<FormControl.Label>Contraseña actual</FormControl.Label>
<TextInput style={styles.input} type="password" defaultValue="" onChangeText={(value) => setPassword(value) }/>
</FormControl>
<Button mt="2" backgroundColor="orange.300">
Actualizar
</Button>
<Button mt="6" colorScheme="error" onPress={() => navigation.navigate('Inicio')}>
Cerrar sesión
</Button>
</VStack>
</Box>
</ScrollView>
</Center>
)
}
const styles = StyleSheet.create({
input: {
height: 10,
margin:3,
borderWidth: 0.5,
padding: 5,
flex: 1,
paddingTop: 9,
paddingRight: 19,
paddingBottom: 20,
paddingLeft: 0,
marginTop: 6,
marginBottom:6,
borderRadius: 4
}
})

View File

@ -0,0 +1,56 @@
import React from "react";
import {
Text,
Link,
Center,
Heading,
VStack,
Box,
FormControl,
Input,
Button
} from "native-base";
export default function RecoverPassword () {
return (
<Center w="100%">
<Box safeArea p="2" py="8" w="90%" maxW="290">
<Heading
size="lg"
fontWeight="600"
color="coolGray.800"
_dark={{
color: "warmGray.50",
}}
>
Recupere su contraseña
</Heading>
<Heading
mt="1"
_dark={{
color: "warmGray.200",
}}
color="coolGray.600"
fontWeight="medium"
size="xs"
>
Se le enviaran las instrucciones al correo electrónico
</Heading>
<VStack space={3} mt="5">
<FormControl>
<FormControl.Label> Correo Electrónico</FormControl.Label>
<Input />
</FormControl>
<Button mt="2" colorScheme="primary" onPress={() => navigation.navigate('Home')}
>
<Text>Recuperar contraseña</Text>
</Button>
</VStack>
</Box>
</Center>
)
}

View File

@ -0,0 +1,89 @@
import React, {useContext, useEffect, useState} from "react";
import {
Box,
ScrollView,
Text,
Icon,
Button,
Heading
} from "native-base";
import { API } from "../environment/api";
import { MaterialCommunityIcons } from '@expo/vector-icons';
import { UserContext } from "../context/UserContext";
import { ReservasCard } from "./ReservasCard";
export default function Reservas({navigation}) {
const { user } = useContext(UserContext)
const [isRequesting, setIsRequesting] = useState(false);
const [reservas, setReservas] = useState([]);
const id = user._id;
// const id = "6301df20dac7dcf76dcecade";
console.log(user);
useEffect(() => {
const onRequestReservasData = async () => {
setIsRequesting(true);
console.log(user);
try {
const jsonResponse = await fetch(`${API.BASE_URL}/reservation/findReservationUser/`+`${id}`, {
method: "GET",
headers: {
'Content-Type': 'application/json'
}
})
const response = await jsonResponse.json();
console.log(response);
setReservas(response.message);
} catch (error) {
console.log("ERROR:" + error);
}
setIsRequesting(false)
}
onRequestReservasData()
}, [user])
console.log(reservas);
return (
<Box>
<Heading fontSize="xl" p="4" pb="3">
Lista de reservas
</Heading>
<ScrollView showsVerticalScrollIndicator={false}>
<Button width='200' mb="4" mt="4" ml='85' backgroundColor='tertiary.600' onPress={() => navigation.navigate('Reservar')} icon={<Icon mb="0.5" as={<MaterialCommunityIcons name={'plus'} />} color="white" size="sm" />}>
Reservar
</Button>
{ reservas == [] ? <Text mt="9" ml='10'> No hay reservas relacionados a su usuario</Text> :
reservas.map(item => (
<ReservasCard
key={item._id}
date={item.date}
startTime={item.time}
status={item.status}
name={item.common_area_name}
/>
))
}
</ScrollView>
</Box>
);
}

View File

@ -0,0 +1,70 @@
import { format } from "date-fns";
import {
Box,
ScrollView,
Text,
Stack,
Heading,
Badge
} from "native-base";
import PropTypes from 'prop-types';
import React from 'react';
export const ReservasCard = ({ date, startTime, name}) => {
const dateFormated = date.toString().split("T")[0]
console.log(dateFormated);
return (
<ScrollView showsVerticalScrollIndicator={false}>
<Box mt="5" alignItems="center">
<Box width="80" rounded="lg" overflow="hidden" borderColor="coolGray.200" borderWidth="1" _dark={{
borderColor: "coolGray.600",
backgroundColor: "gray.700"
}} _web={{
shadow: 2,
borderWidth: 0
}} _light={{
backgroundColor: "gray.50"
}}>
<Stack p="4" space={3}>
<Stack space={2}>
<Heading size="lg" ml="-1">
{name}
</Heading>
<Text fontSize="md" _light={{
color: "amber.600"
}} _dark={{
color: "violet.400"
}} fontWeight="500" ml="-0.5" mt="-1">
{dateFormated}
</Text>
</Stack>
<Text fontSize="md" fontWeight="400">
Hora de inicio: {startTime}
</Text>
</Stack>
</Box>
</Box>
</ScrollView>
)
}
// ReservasCard.propTypes = {
// date: PropTypes.string.isRequired,
// startTime: PropTypes.string.isRequired,
// status: PropTypes.string.isRequired
// }

View File

@ -1,85 +0,0 @@
import React from 'react';
import { StyleSheet } from 'react-native';
import PropTypes from 'prop-types';
import ModalDropdown from 'react-native-material-dropdown';
import { Block, Text } from 'galio-framework';
import Icon from './Icon';
import { argonTheme } from '../constants';
class DropDown extends React.Component {
state = {
value: 1,
}
handleOnSelect = (index, value) => {
const { onSelect } = this.props;
this.setState({ value: value });
onSelect && onSelect(index, value);
}
render() {
const { onSelect, iconName, iconFamily, iconSize, iconColor, color, textStyle, style, ...props } = this.props;
const modalStyles = [
styles.qty,
color && { backgroundColor: color },
style
];
const textStyles = [
styles.text,
textStyle
];
return (
<ModalDropdown
style={modalStyles}
onSelect={this.handleOnSelect}
dropdownStyle={styles.dropdown}
dropdownTextStyle={{paddingLeft:16, fontSize:12}}
{...props}>
<Block flex row middle space="between">
<Text size={12} style={textStyles}>{this.state.value}</Text>
<Icon name={iconName || "nav-down"} family={iconFamily || "ArgonExtra"} size={iconSize || 10} color={iconColor || argonTheme.COLORS.WHITE} />
</Block>
</ModalDropdown>
)
}
}
DropDown.propTypes = {
onSelect: PropTypes.func,
iconName: PropTypes.string,
iconFamily: PropTypes.string,
iconSize: PropTypes.number,
color: PropTypes.string,
textStyle: PropTypes.any,
};
const styles = StyleSheet.create({
qty: {
width: 100,
backgroundColor: argonTheme.COLORS.DEFAULT,
paddingHorizontal: 16,
paddingTop: 10,
paddingBottom:9.5,
borderRadius: 4,
shadowColor: "rgba(0, 0, 0, 0.1)",
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 1,
},
text: {
color: argonTheme.COLORS.WHITE,
fontWeight: '600'
},
dropdown: {
marginTop: 8,
marginLeft: -16,
width: 100,
},
});
export default DropDown;

View File

@ -1,24 +0,0 @@
import React from 'react';
import { Switch, Platform } from 'react-native';
import argonTheme from '../constants/Theme';
class MkSwitch extends React.Component {
render() {
const { value, ...props } = this.props;
const thumbColor = Platform.OS === 'ios' ? null :
Platform.OS === 'android' && value ? argonTheme.COLORS.SWITCH_ON : argonTheme.COLORS.SWITCH_OFF;
return (
<Switch
value={value}
thumbColor={thumbColor}
ios_backgroundColor={argonTheme.COLORS.SWITCH_OFF}
trackColor={{ false: argonTheme.COLORS.SWITCH_ON, true: argonTheme.COLORS.SWITCH_ON }}
{...props}
/>
);
}
}
export default MkSwitch;

View File

@ -1,159 +0,0 @@
import React from 'react';
import { StyleSheet, Dimensions, FlatList, Animated } from 'react-native';
import { Block, theme } from 'galio-framework';
const { width } = Dimensions.get('screen');
import argonTheme from '../constants/Theme';
const defaultMenu = [
{ id: 'popular', title: 'Popular', },
{ id: 'beauty', title: 'Beauty', },
{ id: 'cars', title: 'Cars', },
{ id: 'motocycles', title: 'Motocycles', },
];
export default class Tabs extends React.Component {
static defaultProps = {
data: defaultMenu,
initialIndex: null,
}
state = {
active: null,
}
componentDidMount() {
const { initialIndex } = this.props;
initialIndex && this.selectMenu(initialIndex);
}
animatedValue = new Animated.Value(1);
animate() {
this.animatedValue.setValue(0);
Animated.timing(this.animatedValue, {
toValue: 1,
duration: 300,
useNativeDriver: false, // color not supported
}).start()
}
menuRef = React.createRef();
onScrollToIndexFailed = () => {
this.menuRef.current.scrollToIndex({
index: 0,
viewPosition: 0.5
});
}
selectMenu = (id) => {
this.setState({ active: id });
this.menuRef.current.scrollToIndex({
index: this.props.data.findIndex(item => item.id === id),
viewPosition: 0.5
});
this.animate();
this.props.onChange && this.props.onChange(id);
}
renderItem = (item) => {
const isActive = this.state.active === item.id;
const textColor = this.animatedValue.interpolate({
inputRange: [0, 1],
outputRange: [argonTheme.COLORS.BLACK, isActive ? argonTheme.COLORS.WHITE : argonTheme.COLORS.BLACK],
extrapolate: 'clamp',
});
const containerStyles = [
styles.titleContainer,
!isActive && { backgroundColor: argonTheme.COLORS.SECONDARY },
isActive && styles.containerShadow
];
return (
<Block style={containerStyles}>
<Animated.Text
style={[
styles.menuTitle,
{ color: textColor }
]}
onPress={() => this.selectMenu(item.id)}>
{item.title}
</Animated.Text>
</Block>
)
}
renderMenu = () => {
const { data, ...props } = this.props;
return (
<FlatList
{...props}
data={data}
horizontal={true}
ref={this.menuRef}
extraData={this.state}
keyExtractor={(item) => item.id}
showsHorizontalScrollIndicator={false}
onScrollToIndexFailed={this.onScrollToIndexFailed}
renderItem={({ item }) => this.renderItem(item)}
contentContainerStyle={styles.menu}
/>
)
}
render() {
return (
<Block style={styles.container}>
{this.renderMenu()}
</Block>
)
}
}
const styles = StyleSheet.create({
container: {
width: width,
backgroundColor: theme.COLORS.WHITE,
zIndex: 2,
},
shadow: {
shadowColor: theme.COLORS.BLACK,
shadowOffset: { width: 0, height: 2 },
shadowRadius: 8,
shadowOpacity: 0.2,
elevation: 4,
},
menu: {
paddingHorizontal: theme.SIZES.BASE * 2.5,
paddingTop: 8,
paddingBottom: 16,
},
titleContainer: {
alignItems: 'center',
backgroundColor: argonTheme.COLORS.ACTIVE,
borderRadius: 4,
marginRight: 9
},
containerShadow: {
shadowColor: 'black',
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 1,
},
menuTitle: {
fontWeight: '600',
fontSize: 14,
// lineHeight: 28,
paddingVertical: 10,
paddingHorizontal: 16,
color: argonTheme.COLORS.MUTED
},
});

View File

@ -1,19 +0,0 @@
import Button from './Button';
import Card from './Card';
import DrawerItem from './DrawerItem';
import Icon from './Icon';
import Header from './Header';
import Input from './Input';
import Switch from './Switch';
import Select from './Select';
export {
Button,
Card,
DrawerItem,
Icon,
Input,
Header,
Switch,
Select
};

View File

@ -1,41 +0,0 @@
// local imgs
const Onboarding = require("../assets/imgs/bg.png");
const Logo = require("../assets/imgs/argon-logo.png");
const LogoOnboarding = require("../assets/imgs/argon-logo-onboarding.png");
const ProfileBackground = require("../assets/imgs/profile-screen-bg.png");
const RegisterBackground = require("../assets/imgs/register-bg.png");
const Pro = require("../assets/imgs/getPro-bg.png");
const ArgonLogo = require("../assets/imgs/argonlogo.png");
const iOSLogo = require("../assets/imgs/ios.png");
const androidLogo = require("../assets/imgs/android.png");
// internet imgs
const ProfilePicture = 'https://images.unsplash.com/photo-1492633423870-43d1cd2775eb?fit=crop&w=1650&q=80';
const Viewed = [
'https://images.unsplash.com/photo-1501601983405-7c7cabaa1581?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1543747579-795b9c2c3ada?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1551798507-629020c81463?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1470225620780-dba8ba36b745?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1503642551022-c011aafb3c88?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1482686115713-0fbcaced6e28?fit=crop&w=240&q=80',
];
const Products = {
'View article': 'https://images.unsplash.com/photo-1501601983405-7c7cabaa1581?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=840&q=840',
};
export default {
Onboarding,
Logo,
LogoOnboarding,
ProfileBackground,
ProfilePicture,
RegisterBackground,
Viewed,
Products,
Pro,
ArgonLogo,
iOSLogo,
androidLogo
};

View File

@ -1,32 +0,0 @@
export default {
COLORS: {
DEFAULT: '#172B4D',
PRIMARY: '#5E72E4',
SECONDARY: '#F7FAFC',
LABEL: '#FE2472',
INFO: '#11CDEF',
ERROR: '#F5365C',
SUCCESS: '#2DCE89',
WARNING: '#FB6340',
/*not yet changed */
MUTED: '#ADB5BD',
INPUT: '#DCDCDC',
INPUT_SUCCESS: '#7BDEB2',
INPUT_ERROR: '#FCB3A4',
ACTIVE: '#5E72E4', //same as primary
BUTTON_COLOR: '#9C26B0', //wtf
PLACEHOLDER: '#9FA5AA',
SWITCH_ON: '#5E72E4',
SWITCH_OFF: '#D4D9DD',
GRADIENT_START: '#6B24AA',
GRADIENT_END: '#AC2688',
PRICE_COLOR: '#EAD5FB',
BORDER_COLOR: '#E7E7E7',
BLOCK: '#E7E7E7',
ICON: '#172B4D',
HEADER: '#525F7F',
BORDER: '#CAD1D7',
WHITE: '#FFFFFF',
BLACK: '#000000'
}
};

View File

@ -1,29 +0,0 @@
export default [
{
title: 'Ice cream is made with carrageenan …',
image: 'https://images.unsplash.com/photo-1516559828984-fb3b99548b21?ixlib=rb-1.2.1&auto=format&fit=crop&w=2100&q=80',
cta: 'View article',
horizontal: true
},
{
title: 'Is makeup one of your daily esse …',
image: 'https://images.unsplash.com/photo-1519368358672-25b03afee3bf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2004&q=80',
cta: 'View article'
},
{
title: 'Coffee is more than just a drink: Its …',
image: 'https://images.unsplash.com/photo-1500522144261-ea64433bbe27?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2102&q=80',
cta: 'View article'
},
{
title: 'Fashion is a popular style, especially in …',
image: 'https://images.unsplash.com/photo-1487222477894-8943e31ef7b2?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1326&q=80',
cta: 'View article'
},
{
title: 'Argon is a great free UI packag …',
image: 'https://images.unsplash.com/photo-1482686115713-0fbcaced6e28?fit=crop&w=1947&q=80',
cta: 'View article',
horizontal: true
},
];

View File

@ -1,11 +0,0 @@
import argonTheme from './Theme';
import articles from './articles';
import Images from './Images';
import tabs from './tabs';
export {
articles,
argonTheme,
Images,
tabs
};

View File

@ -1,8 +0,0 @@
export default tabs = {
categories: [
{ id: 'popular', title: 'Popular' },
{ id: 'beauty', title: 'Beauty' },
{ id: 'fashion', title: 'Fashion' },
{ id: 'car_motorcycle', title: 'Car & Motorcycle' },
],
}

View File

@ -1,6 +0,0 @@
import { Platform, StatusBar } from 'react-native';
import { theme } from 'galio-framework';
export const StatusHeight = StatusBar.currentHeight;
export const HeaderHeight = (theme.SIZES.BASE * 3.5 + (StatusHeight || 0));
export const iPhoneX = () => Platform.OS === 'ios' && (height === 812 || width === 812);

View File

@ -0,0 +1,23 @@
import React, { createContext, useState } from 'react'
export const UserContext = createContext({});
export const UserContextProvider = ({ children }) => {
const [user, setUser] = useState(null);
const addUser = (user) => setUser(user);
const removeUser = () => setUser(null);
const value = {
user,
addUser,
removeUser
}
return (
<UserContext.Provider value={value}>
{children}
</UserContext.Provider>
)
}

View File

@ -0,0 +1,3 @@
export class API {
static BASE_URL = "http://localhost:4000"
}

View File

@ -1,71 +0,0 @@
import { Block, Text, theme } from "galio-framework";
import { Image, ScrollView, StyleSheet } from "react-native";
import { DrawerItem as DrawerCustomItem } from "../components";
import Images from "../constants/Images";
import React from "react";
function CustomDrawerContent({
drawerPosition,
navigation,
profile,
focused,
state,
...rest
}) {
const screens = ["Home", "Profile", "Account", "Elements", "Articles"];
return (
<Block
style={styles.container}
forceInset={{ top: "always", horizontal: "never" }}
>
<Block flex={0.06} style={styles.header}>
<Image styles={styles.logo} source={Images.Logo} />
</Block>
<Block flex style={{ paddingLeft: 8, paddingRight: 14 }}>
<ScrollView style={{ flex: 1 }} showsVerticalScrollIndicator={false}>
{screens.map((item, index) => {
return (
<DrawerCustomItem
title={item}
key={index}
navigation={navigation}
focused={state.index === index ? true : false}
/>
);
})}
<Block
flex
style={{ marginTop: 24, marginVertical: 8, paddingHorizontal: 8 }}
>
<Block
style={{
borderColor: "rgba(0,0,0,0.2)",
width: "100%",
borderWidth: StyleSheet.hairlineWidth,
}}
/>
<Text color="#8898AA" style={{ marginTop: 16, marginLeft: 8 }}>
DOCUMENTATION
</Text>
</Block>
<DrawerCustomItem title="Getting Started" navigation={navigation} />
</ScrollView>
</Block>
</Block>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
header: {
paddingHorizontal: 28,
paddingBottom: theme.SIZES.BASE,
paddingTop: theme.SIZES.BASE * 3,
justifyContent: "center",
},
});
export default CustomDrawerContent;

View File

@ -1,256 +0,0 @@
import { Animated, Dimensions, Easing } from "react-native";
// header for screens
import { Header, Icon } from "../components";
import { argonTheme, tabs } from "../constants";
import Articles from "../screens/Articles";
import { Block } from "galio-framework";
// drawer
import CustomDrawerContent from "./Menu";
import Elements from "../screens/Elements";
// screens
import Home from "../screens/Home";
import Onboarding from "../screens/Onboarding";
import Pro from "../screens/Pro";
import Profile from "../screens/Profile";
import React from "react";
import Register from "../screens/Register";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { createDrawerNavigator } from "@react-navigation/drawer";
import { createStackNavigator } from "@react-navigation/stack";
const { width } = Dimensions.get("screen");
const Stack = createStackNavigator();
const Drawer = createDrawerNavigator();
const Tab = createBottomTabNavigator();
function ElementsStack(props) {
return (
<Stack.Navigator
screenOptions={{
mode: "card",
headerShown: false,
}}
>
<Stack.Screen
name="Elements"
component={Elements}
options={{
header: ({ navigation, scene }) => (
<Header title="Elements" navigation={navigation} scene={scene} />
),
cardStyle: { backgroundColor: "#F8F9FE" },
}}
/>
<Stack.Screen
name="Pro"
component={Pro}
options={{
header: ({ navigation, scene }) => (
<Header
title=""
back
white
transparent
navigation={navigation}
scene={scene}
/>
),
headerTransparent: true,
}}
/>
</Stack.Navigator>
);
}
function ArticlesStack(props) {
return (
<Stack.Navigator
screenOptions={{
mode: "card",
headerShown: "screen",
}}
>
<Stack.Screen
name="Articles"
component={Articles}
options={{
header: ({ navigation, scene }) => (
<Header title="Articles" navigation={navigation} scene={scene} />
),
cardStyle: { backgroundColor: "#F8F9FE" },
}}
/>
<Stack.Screen
name="Pro"
component={Pro}
options={{
header: ({ navigation, scene }) => (
<Header
title=""
back
white
transparent
navigation={navigation}
scene={scene}
/>
),
headerTransparent: true,
}}
/>
</Stack.Navigator>
);
}
function ProfileStack(props) {
return (
<Stack.Navigator
initialRouteName="Profile"
screenOptions={{
mode: "card",
headerShown: "screen",
}}
>
<Stack.Screen
name="Profile"
component={Profile}
options={{
header: ({ navigation, scene }) => (
<Header
transparent
white
title="Profile"
navigation={navigation}
scene={scene}
/>
),
cardStyle: { backgroundColor: "#FFFFFF" },
headerTransparent: true,
}}
/>
<Stack.Screen
name="Pro"
component={Pro}
options={{
header: ({ navigation, scene }) => (
<Header
title=""
back
white
transparent
navigation={navigation}
scene={scene}
/>
),
headerTransparent: true,
}}
/>
</Stack.Navigator>
);
}
function HomeStack(props) {
return (
<Stack.Navigator
screenOptions={{
mode: "card",
headerShown: "screen",
}}
>
<Stack.Screen
name="Home"
component={Home}
options={{
header: ({ navigation, scene }) => (
<Header
title="Home"
search
options
navigation={navigation}
scene={scene}
/>
),
cardStyle: { backgroundColor: "#F8F9FE" },
}}
/>
<Stack.Screen
name="Pro"
component={Pro}
options={{
header: ({ navigation, scene }) => (
<Header
title=""
back
white
transparent
navigation={navigation}
scene={scene}
/>
),
headerTransparent: true,
}}
/>
</Stack.Navigator>
);
}
export default function OnboardingStack(props) {
return (
<Stack.Navigator
screenOptions={{
mode: "card",
headerShown: false,
}}
>
<Stack.Screen
name="Onboarding"
component={Onboarding}
option={{
headerTransparent: true,
}}
/>
<Stack.Screen name="App" component={AppStack} />
</Stack.Navigator>
);
}
function AppStack(props) {
return (
<Drawer.Navigator
style={{ flex: 1 }}
drawerContent={(props) => <CustomDrawerContent {...props} />}
drawerStyle={{
backgroundColor: "white",
width: width * 0.8,
}}
drawerContentOptions={{
activeTintcolor: "white",
inactiveTintColor: "#000",
activeBackgroundColor: "transparent",
itemStyle: {
width: width * 0.75,
backgroundColor: "transparent",
paddingVertical: 16,
paddingHorizonal: 12,
justifyContent: "center",
alignContent: "center",
alignItems: "center",
overflow: "hidden",
},
labelStyle: {
fontSize: 18,
marginLeft: 12,
fontWeight: "normal",
},
}}
initialRouteName="Home"
>
<Drawer.Screen name="Home" component={HomeStack} />
<Drawer.Screen name="Profile" component={ProfileStack} />
<Drawer.Screen name="Account" component={Register} />
<Drawer.Screen name="Elements" component={ElementsStack} />
<Drawer.Screen name="Articles" component={ArticlesStack} />
</Drawer.Navigator>
);
}

40466
mobile-ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,39 +1,59 @@
{ {
"name": "mobile-ui", "name": "my-app",
"version": "1.0.0", "version": "1.0.0",
"main": "node_modules/expo/AppEntry.js", "main": "node_modules/expo/AppEntry.js",
"keywords": [
"react",
"expo",
"template",
"nativebase"
],
"license": "MIT",
"scripts": { "scripts": {
"start": "expo start", "start": "expo start",
"android": "expo start --android", "android": "expo start --android",
"ios": "expo start --ios", "ios": "expo start --ios",
"web": "expo start --web", "web": "expo start --web",
"eject": "expo eject" "eject": "expo eject",
"test" : "jest"
}, },
"dependencies": { "dependencies": {
"@react-native-community/datetimepicker": "4.0.0",
"@react-native-community/masked-view": "^0.1.11", "@react-native-community/masked-view": "^0.1.11",
"@react-navigation/bottom-tabs": "^6.3.2",
"@react-navigation/material-top-tabs": "^6.2.3",
"@react-navigation/native": "^6.0.11", "@react-navigation/native": "^6.0.11",
"expo": "~45.0.0", "@react-navigation/native-stack": "^6.7.0",
"expo-cli": "^5.4.12", "@react-navigation/stack": "^6.2.2",
"expo-status-bar": "~1.3.0", "date-fns": "^2.29.2",
"galio-framework": "^0.8.0", "expo": "^44.0.0",
"react": "17.0.2", "expo-status-bar": "~1.2.0",
"react-dom": "17.0.2", "native-base": "3.4.0",
"react-native": "0.68.2", "prop-types": "^15.8.1",
"react-native-gesture-handler": "~2.2.1", "react": "17.0.1",
"react-native-material-dropdown": "^0.11.1", "react-dom": "17.0.1",
"react-native-reanimated": "~2.8.0", "react-native": "0.64.3",
"react-native-safe-area-context": "4.2.4", "react-native-gesture-handler": "~2.1.0",
"react-native-screens": "~3.11.1", "react-native-pager-view": "5.4.9",
"react-native-web": "0.17.7", "react-native-quick-md5": "^3.0.4",
"react-navigation": "^4.4.4", "react-native-reanimated": "~2.3.1",
"react-navigation-stack": "^2.10.4", "react-native-safe-area-context": "3.3.2",
"sharp-cli": "^2.1.1" "react-native-screens": "~3.10.1",
"react-native-simple-time-picker": "^1.3.11",
"react-native-svg": "12.1.1",
"react-native-tab-view": "^3.1.1",
"react-native-table-component": "^1.2.2",
"react-native-web": "0.17.1",
"universal-cookie": "^4.0.4"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.12.9", "@babel/core": "^7.12.9",
"@types/react": "~17.0.21", "jest": "^29.0.1"
"@types/react-native": "~0.66.13",
"typescript": "~4.3.5"
}, },
"bugs": {
"url": "https://github.com/GeekyAnts/nativebase-templates/issues"
},
"homepage": "https://github.com/GeekyAnts/nativebase-templates#readme",
"author": "Aditya Jamuar",
"private": true "private": true
} }

View File

@ -1,252 +0,0 @@
//galio
import { Block, Text, theme } from "galio-framework";
import {
Dimensions,
Image,
ImageBackground,
ScrollView,
StyleSheet,
TouchableWithoutFeedback,
} from "react-native";
//argon
import { Images, argonTheme, articles } from "../constants/";
import { Card } from "../components/";
import React from "react";
const { width } = Dimensions.get("screen");
const thumbMeasure = (width - 48 - 32) / 3;
const cardWidth = width - theme.SIZES.BASE * 2;
const categories = [
{
title: "Music Album",
description:
"Rock music is a genre of popular music. It developed during and after the 1960s in the United Kingdom.",
image:
"https://images.unsplash.com/photo-1470225620780-dba8ba36b745?fit=crop&w=840&q=80",
price: "$125",
},
{
title: "Events",
description:
"Rock music is a genre of popular music. It developed during and after the 1960s in the United Kingdom.",
image:
"https://images.unsplash.com/photo-1543747579-795b9c2c3ada?fit=crop&w=840&q=80",
price: "$35",
},
];
class Articles extends React.Component {
renderProduct = (item, index) => {
const { navigation } = this.props;
return (
<TouchableWithoutFeedback
style={{ zIndex: 3 }}
key={`product-${item.title}`}
onPress={() => navigation.navigate("Pro", { product: item })}
>
<Block center style={styles.productItem}>
<Image
resizeMode="cover"
style={styles.productImage}
source={{ uri: item.image }}
/>
<Block center style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Text
center
size={16}
color={theme.COLORS.MUTED}
style={styles.productPrice}
>
{item.price}
</Text>
<Text center size={34}>
{item.title}
</Text>
<Text
center
size={16}
color={theme.COLORS.MUTED}
style={styles.productDescription}
>
{item.description}
</Text>
</Block>
</Block>
</TouchableWithoutFeedback>
);
};
renderCards = () => {
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Cards
</Text>
<Block flex>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Card item={articles[0]} horizontal />
<Block flex row>
<Card
item={articles[1]}
style={{ marginRight: theme.SIZES.BASE }}
/>
<Card item={articles[2]} />
</Block>
<Card item={articles[4]} full />
<Block flex card shadow style={styles.category}>
<ImageBackground
source={{ uri: Images.Products["View article"] }}
style={[
styles.imageBlock,
{ width: width - theme.SIZES.BASE * 2, height: 252 },
]}
imageStyle={{
width: width - theme.SIZES.BASE * 2,
height: 252,
}}
>
<Block style={styles.categoryTitle}>
<Text size={18} bold color={theme.COLORS.WHITE}>
View article
</Text>
</Block>
</ImageBackground>
</Block>
</Block>
<Block flex style={{ marginTop: theme.SIZES.BASE / 2 }}>
<ScrollView
horizontal={true}
pagingEnabled={true}
decelerationRate={0}
scrollEventThrottle={16}
snapToAlignment="center"
showsHorizontalScrollIndicator={false}
snapToInterval={cardWidth + theme.SIZES.BASE * 0.375}
contentContainerStyle={{
paddingHorizontal: theme.SIZES.BASE / 2,
}}
>
{categories &&
categories.map((item, index) =>
this.renderProduct(item, index)
)}
</ScrollView>
</Block>
</Block>
</Block>
);
};
renderAlbum = () => {
const { navigation } = this.props;
return (
<Block
flex
style={[styles.group, { paddingBottom: theme.SIZES.BASE * 5 }]}
>
<Text bold size={16} style={styles.title}>
Album
</Text>
<Block style={{ marginHorizontal: theme.SIZES.BASE * 2 }}>
<Block flex right>
<Text
size={12}
color={theme.COLORS.PRIMARY}
onPress={() => navigation.navigate("Home")}
>
View All
</Text>
</Block>
<Block
row
space="between"
style={{ marginTop: theme.SIZES.BASE, flexWrap: "wrap" }}
>
{Images.Viewed.map((img, index) => (
<Block key={`viewed-${img}`} style={styles.shadow}>
<Image
resizeMode="cover"
source={{ uri: img }}
style={styles.albumThumb}
/>
</Block>
))}
</Block>
</Block>
</Block>
);
};
render() {
return (
<Block flex center>
<ScrollView showsVerticalScrollIndicator={false}>
{this.renderCards()}
{this.renderAlbum()}
</ScrollView>
</Block>
);
}
}
const styles = StyleSheet.create({
title: {
paddingBottom: theme.SIZES.BASE,
paddingHorizontal: theme.SIZES.BASE * 2,
marginTop: 22,
color: argonTheme.COLORS.HEADER,
},
group: {
paddingTop: theme.SIZES.BASE,
},
albumThumb: {
borderRadius: 4,
marginVertical: 4,
alignSelf: "center",
width: thumbMeasure,
height: thumbMeasure,
},
category: {
backgroundColor: theme.COLORS.WHITE,
marginVertical: theme.SIZES.BASE / 2,
borderWidth: 0,
},
categoryTitle: {
height: "100%",
paddingHorizontal: theme.SIZES.BASE,
backgroundColor: "rgba(0, 0, 0, 0.5)",
justifyContent: "center",
alignItems: "center",
},
imageBlock: {
overflow: "hidden",
borderRadius: 4,
},
productItem: {
width: cardWidth - theme.SIZES.BASE * 2,
marginHorizontal: theme.SIZES.BASE,
shadowColor: "black",
shadowOffset: { width: 0, height: 7 },
shadowRadius: 10,
shadowOpacity: 0.2,
},
productImage: {
width: cardWidth - theme.SIZES.BASE,
height: cardWidth - theme.SIZES.BASE,
borderRadius: 3,
},
productPrice: {
paddingTop: theme.SIZES.BASE,
paddingBottom: theme.SIZES.BASE / 2,
},
productDescription: {
paddingTop: theme.SIZES.BASE,
// paddingBottom: theme.SIZES.BASE * 2,
},
});
export default Articles;

View File

@ -1,487 +0,0 @@
// Galio components
import { Block, Button as GaButton, Text, theme } from "galio-framework";
import { Button, Header, Icon, Input, Select, Switch } from "../components/";
import {
Dimensions,
ScrollView,
StyleSheet,
TouchableOpacity,
} from "react-native";
// Argon themed components
import { argonTheme, tabs } from "../constants/";
import React from "react";
const { width } = Dimensions.get("screen");
class Elements extends React.Component {
state = {
"switch-1": true,
"switch-2": false,
};
toggleSwitch = (switchId) =>
this.setState({ [switchId]: !this.state[switchId] });
renderButtons = () => {
return (
<Block flex>
<Text bold size={16} style={styles.title}>
Buttons
</Text>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Block center>
<Button color="default" style={styles.button}>
DEFAULT
</Button>
</Block>
<Block center>
<Button
color="secondary"
textStyle={{ color: "black", fontSize: 12, fontWeight: "700" }}
style={styles.button}
>
SECONDARY
</Button>
</Block>
<Block center>
<Button style={styles.button}>PRIMARY</Button>
</Block>
<Block center>
<Button color="info" style={styles.button}>
INFO
</Button>
</Block>
<Block center>
<Button color="success" style={styles.button}>
SUCCESS
</Button>
</Block>
<Block center>
<Button color="warning" style={styles.button}>
WARNING
</Button>
</Block>
<Block center>
<Button color="error" style={styles.button}>
ERROR
</Button>
</Block>
<Block row space="evenly">
<Block flex left style={{ marginTop: 8 }}>
<Select
defaultIndex={1}
options={["01", "02", "03", "04", "05"]}
/>
</Block>
<Block flex center>
<Button small center color="default" style={styles.optionsButton}>
DELETE
</Button>
</Block>
<Block flex={1.25} right>
<Button center color="default" style={styles.optionsButton}>
SAVE FOR LATER
</Button>
</Block>
</Block>
</Block>
</Block>
);
};
renderText = () => {
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Typography
</Text>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Text
h1
style={{ marginBottom: theme.SIZES.BASE / 2 }}
color={argonTheme.COLORS.DEFAULT}
>
Heading 1
</Text>
<Text
h2
style={{ marginBottom: theme.SIZES.BASE / 2 }}
color={argonTheme.COLORS.DEFAULT}
>
Heading 2
</Text>
<Text
h3
style={{ marginBottom: theme.SIZES.BASE / 2 }}
color={argonTheme.COLORS.DEFAULT}
>
Heading 3
</Text>
<Text
h4
style={{ marginBottom: theme.SIZES.BASE / 2 }}
color={argonTheme.COLORS.DEFAULT}
>
Heading 4
</Text>
<Text
h5
style={{ marginBottom: theme.SIZES.BASE / 2 }}
color={argonTheme.COLORS.DEFAULT}
>
Heading 5
</Text>
<Text
p
style={{ marginBottom: theme.SIZES.BASE / 2 }}
color={argonTheme.COLORS.DEFAULT}
>
Paragraph
</Text>
<Text muted>This is a muted paragraph.</Text>
</Block>
</Block>
);
};
renderInputs = () => {
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Inputs
</Text>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Input right placeholder="Regular" iconContent={<Block />} />
</Block>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Input
right
placeholder="Regular Custom"
style={{
borderColor: argonTheme.COLORS.INFO,
borderRadius: 4,
backgroundColor: "#fff",
}}
iconContent={<Block />}
/>
</Block>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Input
placeholder="Icon left"
iconContent={
<Icon
size={11}
style={{ marginRight: 10 }}
color={argonTheme.COLORS.ICON}
name="search-zoom-in"
family="ArgonExtra"
/>
}
/>
</Block>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Input
right
placeholder="Icon Right"
iconContent={
<Icon
size={11}
color={argonTheme.COLORS.ICON}
name="search-zoom-in"
family="ArgonExtra"
/>
}
/>
</Block>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Input
success
right
placeholder="Success"
iconContent={
<Block
middle
style={{
width: 20,
height: 20,
borderRadius: 10,
backgroundColor: argonTheme.COLORS.INPUT_SUCCESS,
}}
>
<Icon
size={11}
color={argonTheme.COLORS.ICON}
name="g-check"
family="ArgonExtra"
/>
</Block>
}
/>
</Block>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Input
error
right
placeholder="Error Input"
iconContent={
<Block
middle
style={{
width: 20,
height: 20,
borderRadius: 10,
backgroundColor: argonTheme.COLORS.INPUT_ERROR,
}}
>
<Icon
size={11}
color={argonTheme.COLORS.ICON}
name="support"
family="ArgonExtra"
/>
</Block>
}
/>
</Block>
</Block>
);
};
renderSwitches = () => {
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Switches
</Text>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Block
row
middle
space="between"
style={{ marginBottom: theme.SIZES.BASE }}
>
<Text size={14}>Switch is ON</Text>
<Switch
value={this.state["switch-1"]}
onValueChange={() => this.toggleSwitch("switch-1")}
/>
</Block>
<Block row middle space="between">
<Text size={14}>Switch is OFF</Text>
<Switch
value={this.state["switch-2"]}
onValueChange={() => this.toggleSwitch("switch-2")}
/>
</Block>
</Block>
</Block>
);
};
renderTableCell = () => {
const { navigation } = this.props;
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Table Cell
</Text>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Block style={styles.rows}>
<TouchableOpacity onPress={() => navigation.navigate("Pro")}>
<Block row middle space="between" style={{ paddingTop: 7 }}>
<Text size={14}>Manage Options</Text>
<Icon
name="chevron-right"
family="entypo"
style={{ paddingRight: 5 }}
/>
</Block>
</TouchableOpacity>
</Block>
</Block>
</Block>
);
};
renderSocial = () => {
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Social
</Text>
<Block style={{ paddingHorizontal: theme.SIZES.BASE }}>
<Block row center space="between">
<Block flex middle right>
<GaButton
round
onlyIcon
shadowless
icon="facebook"
iconFamily="Font-Awesome"
iconColor={theme.COLORS.WHITE}
iconSize={theme.SIZES.BASE * 1.625}
color={theme.COLORS.FACEBOOK}
style={[styles.social, styles.shadow]}
/>
</Block>
<Block flex middle center>
<GaButton
round
onlyIcon
shadowless
icon="twitter"
iconFamily="Font-Awesome"
iconColor={theme.COLORS.WHITE}
iconSize={theme.SIZES.BASE * 1.625}
color={theme.COLORS.TWITTER}
style={[styles.social, styles.shadow]}
/>
</Block>
<Block flex middle left>
<GaButton
round
onlyIcon
shadowless
icon="dribbble"
iconFamily="Font-Awesome"
iconColor={theme.COLORS.WHITE}
iconSize={theme.SIZES.BASE * 1.625}
color={theme.COLORS.DRIBBBLE}
style={[styles.social, styles.shadow]}
/>
</Block>
</Block>
</Block>
</Block>
);
};
renderNavigation = () => {
return (
<Block flex style={styles.group}>
<Text bold size={16} style={styles.title}>
Navigation
</Text>
<Block>
<Block style={{ marginBottom: theme.SIZES.BASE }}>
<Header back title="Title" navigation={this.props.navigation} />
</Block>
<Block style={{ marginBottom: theme.SIZES.BASE }}>
<Header
white
back
title="Title"
navigation={this.props.navigation}
bgColor={argonTheme.COLORS.ACTIVE}
titleColor="white"
iconColor="white"
/>
</Block>
<Block style={{ marginBottom: theme.SIZES.BASE }}>
<Header search title="Title" navigation={this.props.navigation} />
</Block>
<Block style={{ marginBottom: theme.SIZES.BASE }}>
<Header
tabs={tabs.categories}
search
title="Title"
navigation={this.props.navigation}
/>
</Block>
<Block style={{ marginBottom: theme.SIZES.BASE }}>
<Header
options
search
title="Title"
optionLeft="Option 1"
optionRight="Option 2"
navigation={this.props.navigation}
/>
</Block>
</Block>
</Block>
);
};
render() {
return (
<Block flex center>
<ScrollView
showsVerticalScrollIndicator={false}
contentContainerStyle={{ paddingBottom: 30, width }}
>
{this.renderButtons()}
{this.renderText()}
{this.renderInputs()}
{this.renderSocial()}
{this.renderSwitches()}
{this.renderNavigation()}
{this.renderTableCell()}
</ScrollView>
</Block>
);
}
}
const styles = StyleSheet.create({
title: {
paddingBottom: theme.SIZES.BASE,
paddingHorizontal: theme.SIZES.BASE * 2,
marginTop: 44,
color: argonTheme.COLORS.HEADER,
},
group: {
paddingTop: theme.SIZES.BASE * 2,
},
shadow: {
shadowColor: "black",
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 0.2,
elevation: 2,
},
button: {
marginBottom: theme.SIZES.BASE,
width: width - theme.SIZES.BASE * 2,
},
optionsButton: {
width: "auto",
height: 34,
paddingHorizontal: theme.SIZES.BASE,
paddingVertical: 10,
},
input: {
borderBottomWidth: 1,
},
inputDefault: {
borderBottomColor: argonTheme.COLORS.PLACEHOLDER,
},
inputTheme: {
borderBottomColor: argonTheme.COLORS.PRIMARY,
},
inputInfo: {
borderBottomColor: argonTheme.COLORS.INFO,
},
inputSuccess: {
borderBottomColor: argonTheme.COLORS.SUCCESS,
},
inputWarning: {
borderBottomColor: argonTheme.COLORS.WARNING,
},
inputDanger: {
borderBottomColor: argonTheme.COLORS.ERROR,
},
social: {
width: theme.SIZES.BASE * 3.5,
height: theme.SIZES.BASE * 3.5,
borderRadius: theme.SIZES.BASE * 1.75,
justifyContent: "center",
},
});
export default Elements;

View File

@ -1,47 +0,0 @@
import React from 'react';
import { StyleSheet, Dimensions, ScrollView } from 'react-native';
import { Block, theme } from 'galio-framework';
import { Card } from '../components';
import articles from '../constants/articles';
const { width } = Dimensions.get('screen');
class Home extends React.Component {
renderArticles = () => {
return (
<ScrollView
showsVerticalScrollIndicator={false}
contentContainerStyle={styles.articles}>
<Block flex>
<Card item={articles[0]} horizontal />
<Block flex row>
<Card item={articles[1]} style={{ marginRight: theme.SIZES.BASE }} />
<Card item={articles[2]} />
</Block>
<Card item={articles[3]} horizontal />
<Card item={articles[4]} full />
</Block>
</ScrollView>
)
}
render() {
return (
<Block flex center style={styles.home}>
{this.renderArticles()}
</Block>
);
}
}
const styles = StyleSheet.create({
home: {
width: width,
},
articles: {
width: width - theme.SIZES.BASE * 2,
paddingVertical: theme.SIZES.BASE,
},
});
export default Home;

View File

@ -1,99 +0,0 @@
import React from "react";
import {
ImageBackground,
Image,
StyleSheet,
StatusBar,
Dimensions
} from "react-native";
import { Block, Button, Text, theme } from "galio-framework";
const { height, width } = Dimensions.get("screen");
import argonTheme from "../constants/Theme";
import Images from "../constants/Images";
class Onboarding extends React.Component {
render() {
const { navigation } = this.props;
return (
<Block flex style={styles.container}>
<StatusBar hidden />
<Block flex center>
<ImageBackground
source={Images.Onboarding}
style={{ height, width, zIndex: 1 }}
/>
</Block>
<Block center>
<Image source={Images.LogoOnboarding} style={styles.logo} />
</Block>
<Block flex space="between" style={styles.padded}>
<Block flex space="around" style={{ zIndex: 2 }}>
<Block style={styles.title}>
<Block>
<Text color="white" size={60}>
Design
</Text>
</Block>
<Block>
<Text color="white" size={60}>
System
</Text>
</Block>
<Block style={styles.subTitle}>
<Text color="white" size={16}>
Fully coded React Native components.
</Text>
</Block>
</Block>
<Block center>
<Button
style={styles.button}
color={argonTheme.COLORS.SECONDARY}
onPress={() => navigation.navigate("App")}
textStyle={{ color: argonTheme.COLORS.BLACK }}
>
Get Started
</Button>
</Block>
</Block>
</Block>
</Block>
);
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: theme.COLORS.BLACK
},
padded: {
paddingHorizontal: theme.SIZES.BASE * 2,
position: "relative",
bottom: theme.SIZES.BASE,
zIndex: 2,
},
button: {
width: width - theme.SIZES.BASE * 4,
height: theme.SIZES.BASE * 3,
shadowRadius: 0,
shadowOpacity: 0
},
logo: {
width: 200,
height: 60,
zIndex: 2,
position: 'relative',
marginTop: '-50%'
},
title: {
marginTop:'-5%'
},
subTitle: {
marginTop: 20
}
});
export default Onboarding;

View File

@ -1,100 +0,0 @@
import React from 'react';
import { ImageBackground, Image, StyleSheet, StatusBar, Dimensions, Platform, Linking } from 'react-native';
import { Block, Button, Text, theme } from 'galio-framework';
const { height, width } = Dimensions.get('screen');
import { Images, argonTheme } from '../constants/';
import { HeaderHeight } from "../constants/utils";
export default class Pro extends React.Component {
render() {
const { navigation } = this.props;
return (
<Block flex style={styles.container}>
<StatusBar barStyle="light-content" />
<Block flex>
<ImageBackground
source={Images.Pro}
style={{ flex: 1, height: height, width, zIndex: 1 }}
/>
<Block space="between" style={styles.padded}>
<Block>
<Block>
<Image source={Images.ArgonLogo}
style={{ marginBottom: theme.SIZES.BASE * 1.5 }}/>
</Block>
<Block >
<Block>
<Text color="white" size={60}>Argon</Text>
</Block>
<Block>
<Text color="white" size={60}>Design</Text>
</Block>
<Block row>
<Text color="white" size={60}>System</Text>
<Block middle style={styles.pro}>
<Text size={16} color="white">PRO</Text>
</Block>
</Block>
</Block>
<Text size={16} color='rgba(255,255,255,0.6)' style={{ marginTop: 35 }}>
Take advantage of all the features and screens made upon Galio Design System, coded on React Native for both.
</Text>
<Block row style={{ marginTop: theme.SIZES.BASE * 1.5, marginBottom: theme.SIZES.BASE * 4 }}>
<Image
source={Images.iOSLogo}
style={{ height: 38, width: 82, marginRight: theme.SIZES.BASE * 1.5 }} />
<Image
source={Images.androidLogo}
style={{ height: 38, width: 140 }} />
</Block>
<Button
shadowless
style={styles.button}
color={argonTheme.COLORS.INFO}
onPress={() => Linking.openURL('https://www.creative-tim.com/product/argon-pro-react-native').catch((err) => console.error('An error occurred', err))}>
<Text bold color={theme.COLORS.WHITE}>BUY NOW</Text>
</Button>
</Block>
</Block>
</Block>
</Block>
);
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: theme.COLORS.BLACK,
marginTop: Platform.OS === 'android' ? -HeaderHeight : 0,
},
padded: {
paddingHorizontal: theme.SIZES.BASE * 2,
zIndex: 3,
position: 'absolute',
bottom: Platform.OS === 'android' ? theme.SIZES.BASE * 2 : theme.SIZES.BASE * 3,
},
button: {
width: width - theme.SIZES.BASE * 4,
height: theme.SIZES.BASE * 3,
shadowRadius: 0,
shadowOpacity: 0,
},
pro: {
backgroundColor: argonTheme.COLORS.INFO,
paddingHorizontal: 8,
marginLeft: 3,
borderRadius: 4,
height: 22,
marginTop: 15
},
gradient: {
zIndex: 1,
position: 'absolute',
bottom: 0,
left: 0,
right: 0,
height: 66,
},
});

View File

@ -1,342 +0,0 @@
import React from "react";
import {
StyleSheet,
Dimensions,
ScrollView,
Image,
ImageBackground,
Platform
} from "react-native";
import { Block, Text, theme } from "galio-framework";
import { Button } from "../components";
import { Images, argonTheme } from "../constants";
import { HeaderHeight } from "../constants/utils";
const { width, height } = Dimensions.get("screen");
const thumbMeasure = (width - 48 - 32) / 3;
class Profile extends React.Component {
render() {
return (
<Block flex style={styles.profile}>
<Block flex>
<ImageBackground
source={Images.ProfileBackground}
style={styles.profileContainer}
imageStyle={styles.profileBackground}
>
<ScrollView
showsVerticalScrollIndicator={false}
style={{ width, marginTop: '25%' }}
>
<Block flex style={styles.profileCard}>
<Block middle style={styles.avatarContainer}>
<Image
source={{ uri: Images.ProfilePicture }}
style={styles.avatar}
/>
</Block>
<Block style={styles.info}>
<Block
middle
row
space="evenly"
style={{ marginTop: 20, paddingBottom: 24 }}
>
<Button
small
style={{ backgroundColor: argonTheme.COLORS.INFO }}
>
CONNECT
</Button>
<Button
small
style={{ backgroundColor: argonTheme.COLORS.DEFAULT }}
>
MESSAGE
</Button>
</Block>
<Block row space="between">
<Block middle>
<Text
bold
size={18}
color="#525F7F"
style={{ marginBottom: 4 }}
>
2K
</Text>
<Text size={12} color={argonTheme.COLORS.TEXT}>Orders</Text>
</Block>
<Block middle>
<Text
bold
color="#525F7F"
size={18}
style={{ marginBottom: 4 }}
>
10
</Text>
<Text size={12} color={argonTheme.COLORS.TEXT}>Photos</Text>
</Block>
<Block middle>
<Text
bold
color="#525F7F"
size={18}
style={{ marginBottom: 4 }}
>
89
</Text>
<Text size={12} color={argonTheme.COLORS.TEXT}>Comments</Text>
</Block>
</Block>
</Block>
<Block flex>
<Block middle style={styles.nameInfo}>
<Text bold size={28} color="#32325D">
Jessica Jones, 27
</Text>
<Text size={16} color="#32325D" style={{ marginTop: 10 }}>
San Francisco, USA
</Text>
</Block>
<Block middle style={{ marginTop: 30, marginBottom: 16 }}>
<Block style={styles.divider} />
</Block>
<Block middle>
<Text
size={16}
color="#525F7F"
style={{ textAlign: "center" }}
>
An artist of considerable range, Jessica name taken by
Melbourne
</Text>
<Button
color="transparent"
textStyle={{
color: "#233DD2",
fontWeight: "500",
fontSize: 16
}}
>
Show more
</Button>
</Block>
<Block
row
space="between"
>
<Text bold size={16} color="#525F7F" style={{marginTop: 12}}>
Album
</Text>
<Button
small
color="transparent"
textStyle={{ color: "#5E72E4", fontSize: 12, marginLeft: 24 }}
>
View all
</Button>
</Block>
<Block style={{ paddingBottom: -HeaderHeight * 2 }}>
<Block row space="between" style={{ flexWrap: "wrap" }}>
{Images.Viewed.map((img, imgIndex) => (
<Image
source={{ uri: img }}
key={`viewed-${img}`}
resizeMode="cover"
style={styles.thumb}
/>
))}
</Block>
</Block>
</Block>
</Block>
</ScrollView>
</ImageBackground>
</Block>
{/* <ScrollView showsVerticalScrollIndicator={false}
contentContainerStyle={{ flex: 1, width, height, zIndex: 9000, backgroundColor: 'red' }}>
<Block flex style={styles.profileCard}>
<Block middle style={styles.avatarContainer}>
<Image
source={{ uri: Images.ProfilePicture }}
style={styles.avatar}
/>
</Block>
<Block style={styles.info}>
<Block
middle
row
space="evenly"
style={{ marginTop: 20, paddingBottom: 24 }}
>
<Button small style={{ backgroundColor: argonTheme.COLORS.INFO }}>
CONNECT
</Button>
<Button
small
style={{ backgroundColor: argonTheme.COLORS.DEFAULT }}
>
MESSAGE
</Button>
</Block>
<Block row space="between">
<Block middle>
<Text
bold
size={12}
color="#525F7F"
style={{ marginBottom: 4 }}
>
2K
</Text>
<Text size={12}>Orders</Text>
</Block>
<Block middle>
<Text bold size={12} style={{ marginBottom: 4 }}>
10
</Text>
<Text size={12}>Photos</Text>
</Block>
<Block middle>
<Text bold size={12} style={{ marginBottom: 4 }}>
89
</Text>
<Text size={12}>Comments</Text>
</Block>
</Block>
</Block>
<Block flex>
<Block middle style={styles.nameInfo}>
<Text bold size={28} color="#32325D">
Jessica Jones, 27
</Text>
<Text size={16} color="#32325D" style={{ marginTop: 10 }}>
San Francisco, USA
</Text>
</Block>
<Block middle style={{ marginTop: 30, marginBottom: 16 }}>
<Block style={styles.divider} />
</Block>
<Block middle>
<Text size={16} color="#525F7F" style={{ textAlign: "center" }}>
An artist of considerable range, Jessica name taken by
Melbourne
</Text>
<Button
color="transparent"
textStyle={{
color: "#233DD2",
fontWeight: "500",
fontSize: 16
}}
>
Show more
</Button>
</Block>
<Block
row
style={{ paddingVertical: 14, alignItems: "baseline" }}
>
<Text bold size={16} color="#525F7F">
Album
</Text>
</Block>
<Block
row
style={{ paddingBottom: 20, justifyContent: "flex-end" }}
>
<Button
small
color="transparent"
textStyle={{ color: "#5E72E4", fontSize: 12 }}
>
View all
</Button>
</Block>
<Block style={{ paddingBottom: -HeaderHeight * 2 }}>
<Block row space="between" style={{ flexWrap: "wrap" }}>
{Images.Viewed.map((img, imgIndex) => (
<Image
source={{ uri: img }}
key={`viewed-${img}`}
resizeMode="cover"
style={styles.thumb}
/>
))}
</Block>
</Block>
</Block>
</Block>
</ScrollView>*/}
</Block>
);
}
}
const styles = StyleSheet.create({
profile: {
marginTop: Platform.OS === "android" ? -HeaderHeight : 0,
// marginBottom: -HeaderHeight * 2,
flex: 1
},
profileContainer: {
width: width,
height: height,
padding: 0,
zIndex: 1
},
profileBackground: {
width: width,
height: height / 2
},
profileCard: {
// position: "relative",
padding: theme.SIZES.BASE,
marginHorizontal: theme.SIZES.BASE,
marginTop: 65,
borderTopLeftRadius: 6,
borderTopRightRadius: 6,
backgroundColor: theme.COLORS.WHITE,
shadowColor: "black",
shadowOffset: { width: 0, height: 0 },
shadowRadius: 8,
shadowOpacity: 0.2,
zIndex: 2
},
info: {
paddingHorizontal: 40
},
avatarContainer: {
position: "relative",
marginTop: -80
},
avatar: {
width: 124,
height: 124,
borderRadius: 62,
borderWidth: 0
},
nameInfo: {
marginTop: 35
},
divider: {
width: "90%",
borderWidth: 1,
borderColor: "#E9ECEF"
},
thumb: {
borderRadius: 4,
marginVertical: 4,
alignSelf: "center",
width: thumbMeasure,
height: thumbMeasure
}
});
export default Profile;

Some files were not shown because too many files have changed in this diff Show More