{"version":3,"sources":["config.js","constants.js","services/User.js","redux/actions/userActions.js","components/PersistentDrawerLeft.js","components/FullWidthTabs.js","modules/Header.js","modules/Footer.js","components/FlipCounter/FlipCounter.js","pages/Home.js","components/AlertDialog.js","pages/loginAndRegister/Login.js","pages/Main.js","components/TablePaginationActions.js","services/Movement.js","components/TableMovements.js","redux/actions/movementActions.js","pages/ListMovements.js","services/Gift.js","../../src/config.js","../../src/constants.js","../../src/services/Center.js","../../src/services/Gift.js","../../src/components/RangeSlider.js","../../src/components/ScanCode.js","../../src/modules/FilterItem.js","../../src/components/CardGift.js","../../src/components/TablePaginationActions.js","../../src/modules/GridCardItem.js","../../node_modules/clsx/dist/clsx.m.js","../../src/services/User.js","../../src/services/Location.js","../../node_modules/style-inject/dist/style-inject.es.js","../../src/components/Snackbar/Snackbar.js","../../src/components/AlertDialog.js","../../src/components/DatePicker.js","../../src/pages/footer/PrivacyPolicy.js","../../src/modules/FormUser.js","../../src/components/Loading.js","pages/ListGift.js","redux/actions/giftActions.js","pages/Profile.js","pages/FrequentQuestion.js","pages/loginAndRegister/Register.js","pages/loginAndRegister/Registered.js","pages/footer/PrivacyPolicy.js","pages/loginAndRegister/EmailConfirmed.js","pages/loginAndRegister/EmailModified.js","pages/loginAndRegister/RestorePassword.js","pages/footer/CookiesPolicy.js","pages/footer/LegalWarning.js","pages/footer/LegalClub.js","components/utils/PrivateRoute.js","components/utils/PublicRoute.js","components/utils/Loading.js","Routes.js","redux/reducers/userReducers.js","redux/reducers/giftReducers.js","redux/reducers/index.js","redux/store.js","App.js","serviceWorker.js","index.js"],"names":["API_URI","URLIDENTITY","HREF","name","url","internal","HEADER","token","headers","Authorization","Cookies","get","TOKENIDENTITY","refresh","Promise","resolve","reject","axios","post","qs","stringify","grant_type","client_secret","client_id","then","response","set","data","access_token","expires","GETTOKEN","GETDATA","thenHandler","errorHandler","header","catch","error","status","v","CAPITALIZEFIRSTLETTER","word","splitWord","split","forEach","index","toUpperCase","slice","toLowerCase","join","FORMATDATE","date","d","Date","getDate","getMonth","getFullYear","FORMATNUMBER","number","decimal","toFixed","replace","User","user","id","isPrivacity","isPublicity","email","mobile","cp","idPopulation","idProvince","idCenter","gender","born","dni","lastname","login","password","a","body","username","getPoints","userId","restorePassword","mail","headerWithToken","console","log","resendConfirmationMail","changeUser","changePassword","userToChange","oldPassword","idencr","atr","bAceptaPublicidad","bAceptaCondiciones","bConfirmado","isConfirm","put","INSTANCE","changeUserAction","changeEmail","dispatch","type","ServiceUser","payload","setPointsAction","points","logoutAction","remove","loadingAction","loading","useStyles","makeStyles","theme","root","display","appBar","transition","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","width","marginLeft","easeOut","enteringScreen","menuButton","marginRight","spacing","hide","drawer","flexShrink","drawerPaper","drawerHeader","alignItems","padding","mixins","toolbar","justifyContent","content","flexGrow","contentShift","withRouter","history","classes","useTheme","React","useState","open","setOpen","useDispatch","className","CssBaseline","AppBar","position","clsx","Toolbar","style","backgroundColor","IconButton","color","aria-label","onClick","edge","Box","textAlign","alt","src","process","title","height","Drawer","variant","anchor","paper","direction","Divider","List","map","value","ListItem","button","key","ListItemText","primary","push","window","icon","fontSize","href","comp","target","rel","ListItemIcon","my","cursor","StyledBottomNavigationAction","styled","BottomNavigationAction","navigation","bottomNavigationAction","maxWidth","tab","setTab","useSelector","state","Grid","container","justify","item","md","lg","BottomNavigation","onChange","event","newValue","showLabels","label","overflow","whiteSpace","textOverflow","paddingLeft","Header","isLogged","Fragment","Hidden","smDown","smUp","marginTop","link","Footer","year","isMobile","useMediaQuery","Typography","align","GetDigits","positions","auxPositions","toString","reverse","parseInt","AnimatedCard","animation","digit","StaticCard","FlipUnitContainer","shuffle","currentDigit","previousDigit","digit1","digit2","animation1","animation2","FlipCounter","since","values","counters","digits","marginBottom","text","breakpoints","down","up","image","Home","props","useEffect","document","querySelector","offsetTop","scroll","behavior","top","Fade","in","timeout","xs","xl","includes","useMap","createElement","appendChild","click","removeChild","Transition","forwardRef","ref","Slide","AlertDialog","children","show","setShow","handleClose","Dialog","TransitionComponent","keepMounted","onClose","aria-labelledby","aria-describedby","DialogContent","DialogActions","Button","boxform","paddingTop","paddingBottom","border","borderRadius","boxShadow","secondari","textTransform","buttonlink","Login","showPassword","errorMessage","typeMessage","showRestorePassword","showDialog","dialogMessage","dialogLink","setValues","loginAction","r","restorePasswordAction","handleChange","prop","onClickShowRestorePassword","copyValues","Object","assign","DialogContentText","form","noValidate","length","role","TextField","margin","fullWidth","autoComplete","FormControl","textField","InputLabel","htmlFor","OutlinedInput","endAdornment","InputAdornment","onMouseDown","preventDefault","labelWidth","Link","disabled","e","trim","secondary","autoFocus","test","Main","match","params","useStyles1","TablePaginationActions","count","page","rowsPerPage","onChangePage","Math","ceil","max","Movement","listMovement","center","description","detail","saldo","getListMovement","parseResponse","centro","fecha","descripcion","detalle","point","puntos","balance","StyledTableCell","withStyles","head","palette","common","white","TableCell","StyledTableRow","background","default","TableRow","table","minWidth","progress","heading","typography","pxToRem","fontWeight","fontWeightRegular","TableMovements","setLoading","setError","rows","setRows","setPage","setRowsPerPage","setPoints","ServiceMovement","listProvince","getListMovementAction","TableContainer","component","Paper","CircularProgress","size","Table","TableHead","TableBody","row","TableFooter","TablePagination","rowsPerPageOptions","newPage","onChangeRowsPerPage","ActionsComponent","ListMovements","Gift","listGift","getListGift","filter","from","to","order","filtro","idCentro","nombre","familia","family","undefined","JSON","POSTDATA","Id","Nombre","Puntos","stock","Stock","Foto","numOfGift","URL","actualDate","Center","listCenter","getListCenter","getListFamily","IluSlider","RangeSlider","initialState","setMax","PropTypes","isRequired","canCheckCode","ScanCode","powerOn","powerOff","setCode","options","turnOn","setTurnOn","swapCamera","localstream","mode","navigator","exact","getUserMedia","stream","video","err","result","code","track","autoPlay","objectFit","FilterItem","setFilter","powerCodeScan","setPowerCodeScan","listFamily","setListFamily","listProvinceCenter","setListProvinceCenter","isHorizontal","expanded","setExpanded","isFidelizacion","isWeb","isInventario","haveClient","haveMovement","sizeItemGrid","optionsSelect","province","disableSticky","c","handleChangeBarCode","newFilter","handleChangePoints","copyPoints","onChangeSlider","displayInputBarCode","input","barCode","isLoading","paddingRight","CardGift","gift","placement","tooltip","titleCard","object","GridCardItem","pagination","setPagination","listItems","numOfItem","isntFilter","handleChangePage","handleChangeRowsForPage","transformOrigin","colSpan","toVal","mix","k","y","str","Array","isArray","call","x","i","arguments","register","reason","check","now","getListReason","descr","Location","listPopulation","getListProvince","provincia","getListPopulation","population","municipio","css","insertAt","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","Snackbar","message","showSnackbar","setShowSnackbar","Div","styles","onBlur","required","utils","locale","isNaN","CALCULATEDATEMORETHAN18","DatePicker","Example","FormUser","dataUser","userProfile","setResponse","isRegister","setListProvince","setListPopulation","listReason","setListReason","optionsSelectProvinceCenter","setOptionsSelectProvinceCenter","formValues","setFormValues","checkValues","setCheckValues","isChangePassword","isChangeMail","checkSpecialCondition","atribute","telf","age","diffMs","dob","ageDt","CALCULATEAGE","numero","leta","expresion_regular_dni","letra","checkDNINIE","orderCentres","t","specialAccionOnHandleChange","copyFormValues","copyCheckValues","handleBlur","handleDateChange","handleClickBoolean","handleChangeFormValuesBoolean","handleMouseDownPassword","onClickShowRegister","onClickBackLogin","onClickGoToPrivacity","showPrivacity","onClickRegisterAndModified","allCheck","variable","checkFieldIsEmptyOrNoneSelected","showSnackBar","snackMessage","userMod","centerUserId","active","doFunct","userIdPin","modified","pin","function","onClickBlockUser","onClickRemoveUser","confirmation","displayTextFieldError","displayInputName","sm","edit","displayInputLastName","displayInputDni","displayDateBorn","displaySelectGender","displayInputCP","displaySelectProvince","displaySelectPopulation","displaySelectCenter","displayInputMobile","displayInputMail","displayInputPassword","displayInputRePassword","displayCheckBoxPrivacity","checked","displayCheckBoxPublicity","displayCheckboxPublicityShort","fAlta","editPassword","close","ListGift","rowsForPage","listNumRows","listGifts","ServiceGift","getListGiftAction","Profile","logout","registered","userC","parse","setUserAction","setUser","textJustifyXS","FrequentQuestion","checkboxError","borderStyle","borderWidth","borderColor","Register","labelBig","Registered","setShowdialog","table_td","EmailConfirmed","reConfirm","FormControlLabel","control","Checkbox","RestorePassword","editMail","repassword","checkPassword","onClickChangePassword","LegalClub","PrivateRoute","Component","rest","render","PublicRoute","bottom","right","left","zIndex","spinner","Loading","displayLoading","Routes","path","PrivacyPolicy","CookiesPolicy","LegalWarning","EmailModified","combineReducers","action","copyUser","middleware","thunk","store","createStore","rootReducer","compose","applyMiddleware","__REDUX_DEVTOOLS_EXTENSION__","f","valuesBreak","createMuiTheme","keys","light","main","dark","overrides","MuiButton","containedPrimary","containedSecondary","fontFamily","useNextVariants","esES","subtitle2","responsiveFontSizes","App","pjson","require","version","location","reload","CHANGEVERSIONBUILD","Boolean","hostname","ReactDOM","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.699dfbf2.chunk.js","sourcesContent":["/* \r\nURLs para comunicarnos con las diferentes apis\r\n*/\r\n\r\nexport const API_URI = \"https://ilusiona-api.azurewebsites.net/api\";\r\n//export const API_URI = \"https://localhost:5001/api\";\r\n//export const URLIDENTITY = \"http://localhost:5003\";\r\nexport const URLIDENTITY = \"https://ilusionaClubIdentityserver.azurewebsites.net\";\r\nexport const LOCAL = false;\r\n\r\n","import Cookies from \"js-cookie\";\r\nimport axios from \"axios\";\r\nimport qs from \"querystring\";\r\nimport { URLIDENTITY, API_URI } from './config';\r\n\r\n//Opciones del header/enrutado\r\nexport const HREF = [\r\n { name: \"Inicio\", url: \"/\", internal: true },\r\n { name: \"Mis Movimientos\", url: \"/home/list-movements\", internal: true },\r\n { name: \"Regalos\", url: \"/home/list-gift\", internal: true },\r\n { name: \"Mis Datos\", url: \"/home/profile\", internal: true },\r\n {\r\n name: \"Preguntas frecuentes\",\r\n url: \"/home/frequent-question\",\r\n internal: true\r\n },\r\n {\r\n name: \"Contacto\",\r\n url: \"https://www.ilusiona.com/contacto/\",\r\n internal: false\r\n }\r\n];\r\n\r\n//FUNCTIONS\r\nexport function CHANGEVERSIONBUILD() {\r\n let pjson = require(\"../package.json\");\r\n GETDATA('/Global/1', response => {\r\n if (pjson.version < response.data) {\r\n window.location.reload(true);\r\n }\r\n },()=>{},false);\r\n}\r\n\r\nexport function HEADER(token = true) {\r\n if (token) {\r\n return {\r\n headers: {\r\n Authorization: \"Bearer \" + Cookies.get(\"iluToken\"),\r\n \"Access-Control-Allow-Origin\": \"*\"\r\n }\r\n };\r\n } else {\r\n return {\r\n headers: {\r\n \"Access-Control-Allow-Origin\": \"*\"\r\n }\r\n };\r\n }\r\n}\r\n\r\n//Actualizacion del token del usuario para hacer peticiones\r\nexport function TOKENIDENTITY(refresh) {\r\n return new Promise((resolve, reject) => {\r\n axios.post(`${URLIDENTITY}/connect/token`,\r\n qs.stringify({\r\n grant_type: \"client_credentials\",\r\n client_secret: \"secret\",\r\n client_id: \"client\"\r\n }), {\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n \"Access-Control-Allow-Origin\": \"*\"\r\n }\r\n }).then(response => {\r\n if (refresh) {\r\n Cookies.set(\"iluToken\", response.data.access_token, { expires: 1 });\r\n }\r\n resolve(\r\n {\r\n headers: {\r\n Authorization: \"Bearer \" + response.data.access_token,\r\n \"Access-Control-Allow-Origin\": \"*\"\r\n }\r\n }\r\n );\r\n });\r\n });\r\n}\r\n\r\nexport function GETTOKEN() {\r\n if (Cookies.get(\"iluToken\")) {\r\n return Cookies.get(\"iluToken\");\r\n }\r\n}\r\n\r\nexport function GETDATA(url, thenHandler, errorHandler, header) {\r\n return axios.get(API_URI + url, HEADER(header)\r\n ).then((response) => {\r\n thenHandler(response);\r\n }).catch((error) => {\r\n if (error) {\r\n if (error.response) {\r\n if (error.response.status === 401) {\r\n TOKENIDENTITY(true).then(v => {\r\n GETDATA(url, thenHandler, errorHandler);\r\n });\r\n } else {\r\n if (errorHandler) {\r\n errorHandler(error);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport function POSTDATA(url, data, thenHandler, errorHandler) {\r\n return axios.post(API_URI + url, data, HEADER()\r\n ).then((response) => {\r\n thenHandler(response);\r\n }).catch((error) => {\r\n if (error) {\r\n if (error.response.status === 401) {\r\n TOKENIDENTITY(true).then(v => {\r\n POSTDATA(url, data, thenHandler, errorHandler);\r\n });\r\n } else {\r\n if (errorHandler) {\r\n errorHandler(error);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport function CALCULATEAGE(dob) {\r\n var diff_ms = Date.now() - dob.getTime();\r\n if (diff_ms > 0) {\r\n var age_dt = new Date(diff_ms);\r\n return Math.abs(age_dt.getUTCFullYear() - 1970);\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nexport function CALCULATEDATEMORETHAN18() {\r\n const actualDate = new Date();\r\n return `${actualDate.getFullYear() - 18}-${\r\n actualDate.getMonth() < 10 ? \"0\" : \"\"\r\n }${actualDate.getMonth() + 1}-${\r\n actualDate.getDate() < 10 ? \"0\" : \"\"\r\n }${actualDate.getDate()}`;\r\n}\r\n\r\nexport function CAPITALIZEFIRSTLETTER(word) {\r\n if (word) {\r\n let splitWord = word.split(\" \");\r\n splitWord.forEach((split, index) => {\r\n if (split[0]) {\r\n splitWord[index] =\r\n split[0].toUpperCase() + split.slice(1).toLowerCase();\r\n }\r\n });\r\n return splitWord.join(\" \");\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\nexport function FORMATDATE(date) {\r\n if (date) {\r\n let d = new Date(date);\r\n let ret =\r\n (d.getDate() < 10 ? \"0\" + d.getDate() : d.getDate()) +\r\n \"/\" +\r\n (d.getMonth() + 1 < 10 ? \"0\" + (d.getMonth() + 1) : d.getMonth() + 1) +\r\n \"/\" +\r\n d.getFullYear();\r\n return ret;\r\n } else {\r\n return \"Sin fecha\";\r\n }\r\n}\r\n\r\nexport default function FORMATNUMBER(number, decimal = 0) {\r\n return number\r\n ? number\r\n .toFixed(decimal) // always two decimal digits\r\n .replace(\".\", \",\") // replace decimal point character with ,\r\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, \"$1.\")\r\n : \"0\";\r\n}\r\n","/* \r\nBridge de comunicación con la Api, diferentes funciones para coger información del usuario.\r\n*/\r\n\r\nimport axios from \"axios\";\r\nimport { HEADER, TOKENIDENTITY, GETDATA} from \"../constants\";\r\nimport { API_URI, URLIDENTITY, LOCAL } from \"../config\";\r\nimport Cookies from \"js-cookie\";\r\n\r\nexport default class User {\r\n static INSTANCE = new User();\r\n\r\n user = { //Ejemplo de objeto usuario\r\n id: 0,\r\n isPrivacity: true,\r\n isPublicity: true,\r\n email: \"test@test.com\",\r\n mobile: \"661661661\",\r\n cp: \"08002\",\r\n idPopulation: \"8051\",\r\n idProvince: \"33\",\r\n idCenter: \"86\",\r\n gender: \"1\",\r\n born: \"1993-12-15\",\r\n dni: \"07839337V\",\r\n lastname: \"De los Palotes\",\r\n name: \"Pepito\"\r\n };\r\n\r\n User() { }\r\n\r\n login = async (email, password) => {\r\n const body = {\r\n username: email,\r\n password: password\r\n };\r\n\r\n if (!LOCAL) {\r\n let url = `${URLIDENTITY}/api/login${URLIDENTITY === \"http://localhost:5000\" ? \"/local\" : \"\" }`;\r\n return await axios.post(url, body, HEADER(false)).then(response => {\r\n //Cookies.set('refresh_token', response.data.refresh_token, HttpOnly)\r\n response.data.born = response.data.born.split(\"T\")[0];\r\n Cookies.set(\"iluToken\", response.data.token, { expires: 1 });\r\n delete response.data.token;\r\n Cookies.set(\"iluUser\", response.data, { expires: 1 });\r\n this.user = response.data;\r\n return this.user;\r\n });\r\n } else {\r\n return this.user;\r\n }\r\n };\r\n\r\n getPoints = (userId) => {\r\n return new Promise((resolve, reject) => {\r\n let url = `/Clientes/${userId}/Points`;\r\n GETDATA(url,\r\n response => {\r\n resolve(response.data);\r\n });\r\n });\r\n }\r\n\r\n restorePassword = async mail => {\r\n if (!LOCAL) {\r\n let url = `${API_URI}/Clientes/newPassword`;\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n console.log(headerWithToken);\r\n \r\n return axios\r\n .post(url, { mail }, headerWithToken).then(response => {\r\n return response.data;\r\n });\r\n });\r\n\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n resendConfirmationMail = async mail => {\r\n if (!LOCAL) {\r\n let url = `${API_URI}/Clientes/resendConfirmationMail?email=${mail}`;\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .get(url, headerWithToken).then(response => {\r\n return response.data;\r\n });\r\n });\r\n\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n changeUser = async (\r\n userId,\r\n user,\r\n changePassword = false\r\n ) => {\r\n let userToChange = {};\r\n\r\n console.log(\"User.js changeUser function mod RRLL\");\r\n\r\n if (changePassword) {\r\n userToChange = {\r\n oldPassword: user.oldPassword,\r\n password: user.password,\r\n idencr: \"263101\"\r\n };\r\n } else if (user) {\r\n userToChange = {\r\n bAceptaPublicidad: user.isPublicity,\r\n bAceptaCondiciones: user.isPrivacity,\r\n bConfirmado: user.isConfirm,\r\n };\r\n for (let atr in userToChange) {\r\n let variable = userToChange[atr];\r\n if (!variable) {\r\n delete userToChange[atr];\r\n }\r\n }\r\n } else {\r\n userToChange = {\r\n bConfirmado: true\r\n };\r\n }\r\n\r\n if (!LOCAL) {\r\n let url = `${API_URI}/Clientes/part/${userId}`;\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .put(url, userToChange, headerWithToken).then(response => {\r\n return response.data;\r\n });\r\n });\r\n } else {\r\n return this.user;\r\n }\r\n };\r\n}\r\n","//SERVICES\r\nimport ServiceUser from \"../../services/User\";\r\n\r\n//COOKIE\r\nimport Cookies from \"js-cookie\";\r\n\r\n//TYPES\r\nexport const START_LOGGED = \"START_LOGGED\";\r\nexport const IS_LOGGED = \" IS_LOGGED\";\r\nexport const ERROR_LOGGED = \" ERROR_LOGGED\";\r\nexport const START_LOGOUT = \"START_LOGOUT\";\r\nexport const IS_LOGOUT = \" IS_LOGOUT\";\r\nexport const START_LOADING = \"START_LOADING\";\r\nexport const END_LOADING = \" END_LOADING\";\r\nexport const ERROR_LOGOUT = \" ERROR_LOGOUT\";\r\nexport const START_REGISTER = \"START_REGISTER\";\r\nexport const IS_REGISTER = \" IS_REGISTER\";\r\nexport const ERROR_REGISTER = \" ERROR_REGISTER\";\r\nexport const START_RESTORE_PASSWORD = \"START_RESTORE_PASSWORD\";\r\nexport const IS_RESTORE_PASSWORD = \" IS_RESTORE_PASSWORD\";\r\nexport const ERROR_RESTORE_PASSWORD = \" ERROR_RESTORE_PASSWORD\";\r\nexport const START_RESEND_CONFIRMATION = \"START_RESEND_CONFIRMATION\";\r\nexport const IS_RESEND_CONFIRMATION = \" IS_RESEND_CONFIRMATION\";\r\nexport const ERROR_RESEND_CONFIRMATION = \" ERROR_RESEND_CONFIRMATION\";\r\nexport const START_CHECK = \"START_CHECK\";\r\nexport const IS_CHECK = \" IS_CHECK\";\r\nexport const ERROR_CHECK = \" ERROR_RESTORE_PASSWORD\";\r\nexport const START_MODIFIED_USER = \"START_MODIFIED_USER\";\r\nexport const IS_MODIFIED_USER = \" IS_MODIFIED_USER\";\r\nexport const IS_MODIFIED_POINTS_USER = \" IS_MODIFIED_POINTS_USER\";\r\nexport const ERROR_MODIFIED_USER = \" ERROR_MODIFIED_USER\";\r\nexport const START_CARD_USER = \"START_CARD_USER\";\r\nexport const IS_CARD_USER = \" IS_CARD_USER\";\r\nexport const ERROR_CARD_USER = \" ERROR_CARD_USER\";\r\n\r\nexport const IS_IN_SESSION = \" IS_IN_SESSION\";\r\nexport const ISNT_IN_SESSION = \" ISNT_IN_SESSION\";\r\n\r\nexport function loginAction(email, password) {\r\n return async dispatch => {\r\n dispatch({ type: START_LOGGED });\r\n\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.login(email, password)\r\n .then(user => {\r\n dispatch({\r\n type: IS_LOGGED,\r\n payload: user\r\n });\r\n resolve();\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_LOGGED });\r\n reject(error.response);\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function restorePasswordAction(email) {\r\n return async dispatch => {\r\n dispatch({ type: START_RESTORE_PASSWORD });\r\n\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.restorePassword(email)\r\n .then(r => {\r\n dispatch({\r\n type: IS_RESTORE_PASSWORD\r\n });\r\n resolve(r);\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_RESTORE_PASSWORD });\r\n reject(error.response);\r\n });\r\n });\r\n };\r\n}\r\nexport function resendConfirmationMailAction(email) {\r\n return async dispatch => {\r\n dispatch({ type: START_RESEND_CONFIRMATION });\r\n\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.resendConfirmationMail(email)\r\n .then(r => {\r\n dispatch({\r\n type: IS_RESEND_CONFIRMATION\r\n });\r\n resolve();\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_RESEND_CONFIRMATION });\r\n reject(error.response);\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function changeUserAction(userId, user, changePassword, changeEmail) {\r\n return async dispatch => {\r\n dispatch({ type: START_MODIFIED_USER });\r\n\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.changeUser(userId, user, changePassword, changeEmail)\r\n .then(user => {\r\n dispatch({\r\n type: IS_MODIFIED_USER,\r\n payload: user\r\n });\r\n resolve();\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_MODIFIED_USER });\r\n reject(error.response);\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function setPointsAction(userId) {\r\n return async dispatch => {\r\n //dispatch({ type: START_MODIFIED_USER });\r\n\r\n ServiceUser.INSTANCE.getPoints(userId)\r\n .then(points => {\r\n dispatch({\r\n type: IS_MODIFIED_POINTS_USER,\r\n payload: points\r\n });\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_MODIFIED_USER });\r\n });\r\n };\r\n}\r\n\r\nexport function setUserAction(user) {\r\n return async dispatch => {\r\n dispatch({ type: START_MODIFIED_USER });\r\n\r\n dispatch({\r\n type: IS_MODIFIED_USER,\r\n payload: user\r\n });\r\n };\r\n}\r\n\r\nexport function logoutAction() {\r\n return async dispatch => {\r\n dispatch({ type: START_LOGOUT });\r\n\r\n return new Promise((resolve, reject) => {\r\n Cookies.remove(\"iluToken\");\r\n dispatch({\r\n type: IS_LOGOUT\r\n });\r\n resolve();\r\n });\r\n };\r\n}\r\n\r\nexport function loadingAction(loading) {\r\n return async dispatch => {\r\n if (loading) {\r\n dispatch({ type: START_LOADING });\r\n } else {\r\n dispatch({\r\n type: END_LOADING,\r\n payload: loading\r\n });\r\n }\r\n };\r\n}\r\n\r\nexport function checkIsSessionAction() {\r\n return async dispatch => {\r\n if (Cookies.get(\"iluToken\")) {\r\n return dispatch({\r\n type: IS_IN_SESSION,\r\n payload: JSON.parse(Cookies.get(\"iluUser\"))\r\n });\r\n } else {\r\n return dispatch({ type: ISNT_IN_SESSION });\r\n }\r\n };\r\n}\r\n","/* \r\nComponente cabezera, aparece en dispositivos mobiles.\r\nEs un enrutado para las diferentes paginas\r\n */\r\n\r\nimport React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport { logoutAction } from \"../redux/actions/userActions\";\r\n\r\n//CONSTANT\r\nimport { HREF } from \"../constants\";\r\n\r\n//CSS\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport List from \"@material-ui/core/List\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport MenuIcon from \"@material-ui/icons/Menu\";\r\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\r\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\n//ICON\r\nimport FacebookIcon from \"@material-ui/icons/Facebook\";\r\nimport InstagramIcon from \"@material-ui/icons/Instagram\";\r\nimport YouTubeIcon from \"@material-ui/icons/YouTube\";\r\n\r\nconst drawerWidth = 240;\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: \"flex\"\r\n },\r\n appBar: {\r\n transition: theme.transitions.create([\"margin\", \"width\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen\r\n })\r\n },\r\n appBarShift: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginLeft: drawerWidth,\r\n transition: theme.transitions.create([\"margin\", \"width\"], {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen\r\n })\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2)\r\n },\r\n hide: {\r\n display: \"none\"\r\n },\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0\r\n },\r\n drawerPaper: {\r\n width: drawerWidth\r\n },\r\n drawerHeader: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n padding: theme.spacing(0, 1),\r\n ...theme.mixins.toolbar,\r\n justifyContent: \"flex-end\"\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(1),\r\n transition: theme.transitions.create(\"margin\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen\r\n }),\r\n marginLeft: -drawerWidth\r\n },\r\n contentShift: {\r\n transition: theme.transitions.create(\"margin\", {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen\r\n }),\r\n marginLeft: 0\r\n }\r\n}));\r\n\r\nfunction PersistentDrawerLeft({ history }) {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n const logout = () => dispatch(logoutAction());\r\n //#endregion\r\n\r\n //#region Handle\r\n const handleDrawerOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleDrawerClose = () => {\r\n setOpen(false);\r\n };\r\n //#endregion\r\n\r\n //#region OnClick\r\n const onClickLogout = () => {\r\n logout()\r\n .then(() => {\r\n history.push(\"/login\");\r\n })\r\n .catch(error => {\r\n console.log(\"error logout\");\r\n });\r\n };\r\n\r\n //#endregion\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {theme.direction === \"ltr\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n {HREF.map((value, index) => (\r\n \r\n {\r\n if (value.internal) {\r\n history.push(value.url);\r\n } else {\r\n window.open(value.url, \"_blank\");\r\n }\r\n setOpen(false);\r\n }}\r\n />\r\n \r\n ))}\r\n \r\n \r\n \r\n {[\r\n {\r\n icon: (\r\n \r\n ),\r\n href: \"https://m.facebook.com/ilusionamaskebowling/\"\r\n },\r\n {\r\n icon: (\r\n \r\n ),\r\n href: \"https://www.instagram.com/ilusionamaskebowling/\"\r\n },\r\n {\r\n icon: ,\r\n href: \"https://www.youtube.com/channel/UCXHpHJ78EBvZsjBNrU4VSfg/\"\r\n }\r\n ].map((comp, index) => (\r\n \r\n \r\n {comp.icon}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Cerrar sesión\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default withRouter(PersistentDrawerLeft);\r\n","/* \r\nComponente cabezera, aparece en dispositivos web\r\nEs un enrutado para las diferentes paginas\r\n */\r\n\r\nimport React from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\n//CONSTANT\r\nimport { HREF } from \"../constants\";\r\n\r\n//REDUX\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { logoutAction } from \"../redux/actions/userActions\";\r\n\r\n//CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport styled from \"styled-components\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport BottomNavigation from \"@material-ui/core/BottomNavigation\";\r\nimport BottomNavigationAction from \"@material-ui/core/BottomNavigationAction\";\r\n//ICON\r\nimport FacebookIcon from \"@material-ui/icons/Facebook\";\r\nimport InstagramIcon from \"@material-ui/icons/Instagram\";\r\nimport YouTubeIcon from \"@material-ui/icons/YouTube\";\r\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\r\n\r\nconst StyledBottomNavigationAction = styled(BottomNavigationAction)`\r\n .MuiBottomNavigationAction-label {\r\n color: #FFFFFF;\r\n font-size: 1rem;\r\n &:hover MuiBottomNavigationAction-label: none\r\n }\r\n .MuiBottomNavigationAction-label:hover {\r\n color: #DF7D44;\r\n }\r\n .MuiBottomNavigationAction-label.Mui-selected {\r\n color: #DF7D44;\r\n font-size: 1rem;\r\n }\r\n`;\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n backgroundColor: \"#363636\",\r\n padding: \"8px\"\r\n },\r\n navigation: {\r\n height: \"auto\",\r\n backgroundColor: \"#363636\",\r\n //paddingTop: \"15px\"\r\n },\r\n bottomNavigationAction: {\r\n padding: \"0px !important\",\r\n maxWidth: \"180px\",\r\n }\r\n});\r\n\r\nfunction FullWidthTabs({ history }) {\r\n const classes = useStyles();\r\n const [tab, setTab] = React.useState(0);\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n const logout = () => dispatch(logoutAction());\r\n const user = useSelector(state=>state.user.user)\r\n //#endregion\r\n\r\n //#region OnClick\r\n const onClickLogout = () => {\r\n logout()\r\n .then(() => {\r\n history.push(\"/\");\r\n })\r\n .catch(error => {\r\n console.log(\"error logout\");\r\n });\r\n };\r\n\r\n //#endregion\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setTab(newValue);\r\n }}\r\n showLabels\r\n className={classes.navigation}\r\n >\r\n {HREF.map((value, index) => (\r\n {\r\n if (value.internal) {\r\n history.push(value.url);\r\n } else {\r\n window.open(value.url, \"_blank\");\r\n }\r\n }}\r\n className={classes.bottomNavigationAction}\r\n />\r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Hola, {user.name}!\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default withRouter(FullWidthTabs);\r\n","/* \r\nModulo de enrutado, para ir a las diversas páginas\r\n */\r\n\r\nimport React from \"react\";\r\n\r\n//REDUX\r\nimport { useSelector } from \"react-redux\";\r\n\r\n//Componentes\r\nimport PersistentDrawerLeft from \"../components/PersistentDrawerLeft\";\r\nimport FullWidthTabs from \"../components/FullWidthTabs\";\r\n\r\n//CSS\r\nimport Hidden from \"@material-ui/core/Hidden\";\r\n\r\nexport default function Header() {\r\n \r\n \r\n\r\n const user = useSelector(state => state.user);\r\n\r\n return (\r\n
\r\n {!user || user.isLogged ?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :null}\r\n
\r\n );\r\n}\r\n\r\n","/* \r\nModulo informativo de ilusiona\r\n */\r\n\r\nimport React from \"react\";\r\n\r\n//REDUX\r\n//import { useSelector } from \"react-redux\";\r\n\r\n//CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n // padding: \"8px\",\r\n marginTop: \"50px\"\r\n /* position: \"absolute\",\r\n bottom: \"0px\" */\r\n },\r\n navigation: {\r\n height: \"50px\",\r\n backgroundColor: \"#363636\"\r\n },\r\n link: {\r\n color: \"#FFFFFF\",\r\n '&:hover': {\r\n color: \"#DF7D44\"\r\n }\r\n }\r\n});\r\n\r\nexport default function Footer() {\r\n const classes = useStyles();\r\n\r\n let d = new Date();\r\n let year = d.getFullYear();\r\n const isMobile = useMediaQuery(\"(max-width:500px)\");\r\n\r\n //const user = useSelector(state => state.user);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n © {year} -{\" \"}\r\n \r\n Ilusiona Gestión de Negocios\r\n \r\n \r\n \r\n {isMobile ? : null}\r\n \r\n \r\n \r\n Política de Privacidad\r\n \r\n \r\n \r\n \r\n \r\n \r\n Política de Cookies\r\n \r\n \r\n \r\n \r\n \r\n \r\n Aviso Legal\r\n \r\n \r\n \r\n \r\n \r\n \r\n Bases del Ilusiona Club\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","/* \r\nComponente decorativo para cuantificar el numero de puntos de un cliente de ilusiona\r\n*/\r\n\r\nimport React from \"react\";\r\n\r\n//CSS\r\nimport \"./FlipCounter.css\";\r\n\r\nconst GetDigits = (value) => {\r\n let positions = [0, 0, 0, 0, 0, 0];\r\n if (value) {\r\n let auxPositions = value\r\n .toString()\r\n .replace(/\\B(?=(\\d{1})+(?!\\d))/g, \",\")\r\n .split(\",\");\r\n auxPositions = auxPositions.reverse();\r\n auxPositions.forEach((value, index) => {\r\n positions[index] = parseInt(value);\r\n });\r\n positions = positions.reverse();\r\n }\r\n\r\n return positions;\r\n};\r\n\r\nconst AnimatedCard = ({ animation, digit }) => {\r\n return (\r\n
\r\n {digit}\r\n
\r\n );\r\n};\r\n\r\nconst StaticCard = ({ position, digit }) => {\r\n return (\r\n
\r\n {digit}\r\n
\r\n );\r\n};\r\n\r\nconst FlipUnitContainer = ({ digit, shuffle }) => {\r\n // assign digit values\r\n let currentDigit = digit;\r\n let previousDigit = digit - 1;\r\n\r\n // to prevent a negative value\r\n previousDigit = previousDigit === -1 ? 9 : previousDigit;\r\n\r\n // shuffle digits\r\n const digit1 = shuffle ? previousDigit : currentDigit;\r\n const digit2 = !shuffle ? previousDigit : currentDigit;\r\n\r\n // shuffle animations\r\n const animation1 = shuffle ? \"fold\" : \"unfold\";\r\n const animation2 = !shuffle ? \"fold\" : \"unfold\";\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default function FlipCounter({ since }) {\r\n const values = {\r\n counters: [\r\n { value: 0, shuffle: false },\r\n { value: 0, shuffle: false },\r\n { value: 0, shuffle: false },\r\n { value: 0, shuffle: false },\r\n { value: 0, shuffle: false },\r\n { value: 0, shuffle: false }\r\n ],\r\n digits: GetDigits(since)\r\n };\r\n\r\n const updateCounter = counter => {\r\n /* values.digits.forEach((digit, index) => {\r\n if (values.counters[index].value !== digit) {\r\n values.counters[index].shuffle = !values.counters[index].shuffle;\r\n values.counters[index].value = values.counters[index].value + 1;\r\n }\r\n }); */\r\n values.digits.forEach((digit, index) => {\r\n if (values.counters[index].value !== digit) {\r\n values.counters[index].shuffle = !values.counters[index].shuffle;\r\n values.counters[index].value = values.digits[index];\r\n }\r\n });\r\n };\r\n\r\n updateCounter();\r\n\r\n return (\r\n
\r\n {values.counters.map((digit, index) => (\r\n \r\n ))}\r\n
\r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\n\r\nimport { API_URI } from \"../config\";\r\n\r\n//REDUX\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { setPointsAction } from \"../redux/actions/userActions\";\r\n\r\n//COMPONENT\r\nimport FlipCounter from \"../components/FlipCounter/FlipCounter\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\n// eslint-disable-next-line\r\n// import Button from \"@material-ui/core/Button\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\n\r\nimport { GETDATA } from \"../constants\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n marginBottom: \"30px\",\r\n height: \"80%\"\r\n },\r\n text: {\r\n padding: theme.spacing(1),\r\n [theme.breakpoints.down(\"sm\")]: {\r\n textAlign: \"center\"\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n textAlign: \"start\"\r\n }\r\n },\r\n image: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n height: \"350px\"\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n height: \"400px\"\r\n }\r\n }\r\n}));\r\n//#endregion\r\n\r\nfunction Home(props) {\r\n const classes = useStyles();\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n const user = useSelector(state => state.user.user);\r\n //#endregion\r\n\r\n //#region OnClick\r\n /*const onClickImage = () => {\r\n window.open(`${API_URI}/clientes/${user.id}/card/${user.dni}/ilusiona`, \"download\");\r\n };*/\r\n \r\n const onClickCW = () => {\r\n let url = `/Clientes/${user.id}/CW`;\r\n GETDATA(url, response => {\r\n //window.open(response.data);\r\n const link = document.createElement('a');\r\n link.href = response.data;\r\n //link.target = \"_blank\"; // Abre en una nueva pestaña\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link); // Remueve el enlace una vez hecho el clic\r\n }, error => {\r\n // reject(error);\r\n });\r\n };\r\n\r\n //#endregion\r\n\r\n useEffect(() => {\r\n const setPoints = userId => dispatch(setPointsAction(userId));\r\n setPoints(user.id);\r\n\r\n //Move camera top\r\n const comp = document.querySelector(\"#root\").offsetTop - 100;\r\n window.scroll({ behavior: \"smooth\", top: comp });\r\n }, [dispatch, user.id]);\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n BIENVENIDO A ILUSIONA CLUB\r\n \r\n \r\n \r\n \r\n \r\n \r\n Acumula puntos y suma ventajas con nuestra tarjeta de\r\n fidelización.\r\n \r\n \r\n \r\n \r\n \r\n

\r\n Hola {user.name} actualmente dispones de:\r\n

\r\n
\r\n
\r\n \r\n \r\n 999999 ? 999999 : user.points} />\r\n \r\n \r\n\r\n {/* { user.email.includes(\"@ilusiona.com\") ?\r\n \r\n \r\n \r\n Captain Wallet\r\n \r\n \r\n \r\n :\r\n ''\r\n } */}\r\n\r\n { user.email.includes(\"@ilusiona.com\") || true ?\r\n \r\n \r\n \r\n {/*\"wallet\"*/}\r\n \r\n \r\n :\r\n ''\r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/*\r\n \r\n \r\n Descargar tarjeta\r\n \r\n \r\n */}\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Home;\r\n","/* \r\nComponente para confirmación, informativo.\r\n*/\r\n\r\nimport React, { useEffect } from \"react\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport Slide from \"@material-ui/core/Slide\";\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nexport default function AlertDialog({ children, show, setShow }) {\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n setShow(false);\r\n };\r\n\r\n useEffect(() => {\r\n setOpen(show);\r\n }, [show]);\r\n\r\n return (\r\n
\r\n \r\n {/* {\"Use Google's location service?\"} */}\r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","/* \r\nPantalla de login enrutado para registrar, contraseña olvidada, reenviar mail de confirmación\r\n */\r\n\r\nimport React from \"react\";\r\nimport clsx from \"clsx\";\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport {\r\n loginAction,\r\n restorePasswordAction,\r\n resendConfirmationMailAction\r\n} from \"../../redux/actions/userActions\";\r\n\r\n//COMPONENTS\r\nimport AlertDialog from \"../../components/AlertDialog\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\n// eslint-disable-next-line\r\n// import Tooltip from \"@material-ui/core/Tooltip\";\r\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport Visibility from \"@material-ui/icons/Visibility\";\r\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport { Link } from \"@material-ui/core\";\r\nconst useStyles = makeStyles({\r\n \"@global\": {\r\n body: {\r\n backgroundColor: \"#363636\",\r\n },\r\n },\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\"\r\n },\r\n boxform: {\r\n backgroundColor: \"#FFFFFF\",\r\n paddingTop: \"20px\",\r\n paddingBottom: \"20px\",\r\n marginTop: \"5px\",\r\n marginBottom: \"25px\",\r\n border: \"1px solid #30363db3\",\r\n borderRadius: \"0.1875rem\",\r\n },\r\n border: {\r\n boxShadow: \"0px 0px 3px 1px #363636\",\r\n paddingTop: \"20px\",\r\n paddingBottom: \"20px\",\r\n marginTop: \"5px\",\r\n marginBottom: \"25px\"\r\n },\r\n primary: {\r\n color: \"white\",\r\n marginTop: \"10px\"\r\n },\r\n secondari: {\r\n color: \"white\",\r\n textTransform: \"none\"\r\n },\r\n link: {\r\n color: \"#DF7D44\"\r\n },\r\n buttonlink: {\r\n color: \"#DF7D44\",\r\n marginTop: \"10px\"\r\n }\r\n});\r\n//#endregion\r\n\r\nfunction Login({ history, mail }) {\r\n const classes = useStyles();\r\n const disabledBtn = false;\r\n //Move camera top\r\n /* const comp = document.querySelector(\"#root\").offsetTop - 100;\r\n window.scroll({ behavior: \"smooth\", top: comp });\r\n */\r\n //#region Values\r\n const [values, setValues] = React.useState({\r\n email: mail !== \"home\" ? mail : \"\",\r\n password: \"\",\r\n /* email: \"test@test.com\",\r\n password: \"Test15\", */\r\n showPassword: false,\r\n errorMessage: \"\",\r\n typeMessage: \"\",\r\n showRestorePassword: false,\r\n showDialog: false,\r\n dialogMessage: \"\",\r\n dialogLink: false\r\n });\r\n //#endregion\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n const login = (email, password) => dispatch(loginAction(email, password));\r\n const restorePassword = email => dispatch(restorePasswordAction(email));\r\n const resendConfirmationMail = mail =>\r\n dispatch(resendConfirmationMailAction(mail));\r\n //#endregion\r\n\r\n //#region HandleChange\r\n const handleChange = prop => event => {\r\n setValues({ ...values, [prop]: event.target.value });\r\n };\r\n\r\n const handleClickShowPassword = () => {\r\n setValues({ ...values, showPassword: !values.showPassword });\r\n };\r\n\r\n const handleMouseDownPassword = event => {\r\n event.preventDefault();\r\n };\r\n //#endregion\r\n\r\n //#region OnClicks\r\n const onClickLogin = e => {\r\n e.preventDefault();\r\n\r\n if (\r\n values.email.trim().length === 0 ||\r\n values.password.trim().length === 0\r\n ) {\r\n setValues({ ...values, errorMessage: \"Rellene los campos\" });\r\n return;\r\n }\r\n\r\n login(values.email, values.password)\r\n .then(() => {\r\n history.push(\"/home\");\r\n })\r\n .catch(error => {\r\n if (error) {\r\n switch (error.status) {\r\n case 404:\r\n let copyValues = Object.assign({}, values);\r\n copyValues.errorMessage = \"Email o contraseña erronea\";\r\n copyValues.typeMessage = \"\";\r\n setValues(copyValues);\r\n break;\r\n case 409:\r\n if (error.data === \"ChangePassword\") {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.showDialog = true;\r\n copyValues.dialogMessage = \"Hemos enviado una nueva contraseña a su email.\"\r\n setValues(copyValues);\r\n } else if (error.data === \"Bloqueado\") {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.showDialog = true;\r\n copyValues.dialogLink = true;\r\n setValues(copyValues);\r\n } else {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.errorMessage = \"Debes confirmar el email.\";\r\n copyValues.typeMessage = \"link\";\r\n setValues(copyValues);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n setValues({\r\n ...values,\r\n errorMessage:\r\n \"Hay un problema con el servidor, pruebe más tarde. Perdone las molestias.\"\r\n });\r\n }\r\n });\r\n };\r\n\r\n const onClickRegister = () => {\r\n history.push(\"/registrar\");\r\n };\r\n\r\n const onClickShowRestorePassword = () => {\r\n const copyValues = Object.assign({}, values);\r\n copyValues.showRestorePassword = !copyValues.showRestorePassword;\r\n copyValues.errorMessage = \"\";\r\n setValues(copyValues);\r\n };\r\n\r\n const onClickRestorePassword = () => {\r\n if (!/^[a-zA-Z0-9._-]+@[a-zA-Z0-9]+\\.[A-Za-z]+$/.test(values.email)) {\r\n setValues({\r\n ...values,\r\n errorMessage: \"Formato del email incorrecto\"\r\n });\r\n return;\r\n }\r\n\r\n restorePassword(values.email)\r\n .then(v => {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.errorMessage = \"\";\r\n copyValues.showDialog = true;\r\n copyValues.dialogMessage = \"Hemos enviado una nueva contraseña a su email.\"\r\n copyValues.showRestorePassword = !copyValues.showRestorePassword;\r\n setValues(copyValues);\r\n })\r\n .catch(error => {\r\n if (error) {\r\n switch (error.status) {\r\n case 404:\r\n let copyValues = Object.assign({}, values);\r\n copyValues.errorMessage = \"Correo erroneo\";\r\n copyValues.typeMessage = \"\";\r\n setValues(copyValues);\r\n break;\r\n case 409:\r\n if (error.data === \"Bloqueado\") {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.showDialog = true;\r\n copyValues.dialogLink = true;\r\n setValues(copyValues);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n setValues({\r\n ...values,\r\n errorMessage:\r\n \"Hay un problema con el servidor, pruebe más tarde. Perdone las molestias.\"\r\n });\r\n }\r\n });\r\n };\r\n\r\n const onClickResendConfirmation = () => {\r\n resendConfirmationMail(values.email).then(() => {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.showDialog = true;\r\n copyValues.dialogLink = false;\r\n copyValues.dialogMessage = \"Hemos enviado la confirmación a su email.\"\r\n setValues(copyValues);\r\n }).catch(() => {\r\n let copyValues = Object.assign({}, values);\r\n copyValues.showDialog = true;\r\n copyValues.dialogLink = false;\r\n copyValues.dialogMessage = \"Hay un problema con el servidor, pruebe más tarde. Perdone las molestias.\"\r\n setValues(copyValues);\r\n });\r\n\r\n }\r\n //#endregion\r\n\r\n return (\r\n
\r\n setValues({ ...values, showDialog: v })}\r\n >\r\n \r\n {values.dialogLink ?\r\n \r\n

\r\n Consulta con tu centro tienes la tarjeta bloqueada o envia un mail a{\" \"}\r\n \r\n ilusiona.club@ilusiona.com\r\n .\r\n

\r\n
\r\n : values.dialogMessage}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Tarjeta Fidelización de ILUSIONA CLUB\r\n \r\n \r\n \r\n \r\n \r\n \r\n ¡Consigue ya tu tarjeta, totalmente gratis!\r\n \r\n \r\n \r\n\r\n {/* Seccion IMAGEN TARJETA */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {/* Seccion LOGIN FORM */}\r\n \r\n \r\n {/* */}\r\n \r\n
\r\n {values.errorMessage.length > 0 ? (\r\n \r\n
\r\n {values.errorMessage}{\" \"}\r\n {values.typeMessage === \"link\" ? (\r\n \r\n Reenviar\r\n \r\n ) : null}\r\n
\r\n
\r\n ) : null}\r\n \r\n \r\n \r\n Contraseña\r\n \r\n \r\n \r\n {values.showPassword ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n }\r\n labelWidth={90}\r\n />\r\n \r\n\r\n
\r\n \r\n ¿Olvidaste tu contraseña?\r\n \r\n
\r\n\r\n \r\n Entrar\r\n \r\n \r\n
\r\n {/*
*/}\r\n {/**/}\r\n \r\n \r\n Si NO eres socio\r\n ÚNETE AL CLUB\r\n \r\n \r\n {/* */}\r\n {/**/}\r\n
\r\n
\r\n\r\n {/* Seccion RECUPERAR CONTRASEÑA */}\r\n \r\n \r\n \r\n \r\n \r\n Recuperar contraseña\r\n \r\n \r\n {values.errorMessage.length > 0 ? (\r\n \r\n
\r\n {values.errorMessage}\r\n
\r\n
\r\n ) : null}\r\n \r\n \r\n Recuperar\r\n \r\n \r\n Atrás\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n {/* Seccion TIENES DUDA */}\r\n \r\n \r\n

*Tarjeta de Fidelización únicamente para mayores de 18 años

\r\n
\r\n \r\n

\r\n ¿Tienes alguna duda?\r\n \r\n ¡Pincha aquí!\r\n \r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Login;\r\n","/* \r\nMain es el encargado de ver si esta logueado para mostrar login o home\r\n */\r\n\r\nimport React from \"react\";\r\n\r\n//REDUX\r\nimport { useSelector } from \"react-redux\";\r\n\r\n//PAGES\r\nimport Home from \"../pages/Home\";\r\nimport Login from \"../pages/loginAndRegister/Login\";\r\n\r\nexport default function Main({ history, match }) {\r\n const { mail } = match.params;\r\n\r\n const user = useSelector(state => state.user);\r\n\r\n return (\r\n
\r\n {!user || user.isLogged ?\r\n \r\n : }\r\n
\r\n );\r\n}\r\n\r\n","/* \r\nComponente encargado de la actualizacion de listas (movimientos ilusiona, regalos)\r\n */\r\n\r\nimport React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\n//#region CSS\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport FirstPageIcon from \"@material-ui/icons/FirstPage\";\r\nimport KeyboardArrowLeft from \"@material-ui/icons/KeyboardArrowLeft\";\r\nimport KeyboardArrowRight from \"@material-ui/icons/KeyboardArrowRight\";\r\nimport LastPageIcon from \"@material-ui/icons/LastPage\";\r\nconst useStyles1 = makeStyles(theme => ({\r\n root: {\r\n flexShrink: 0,\r\n marginLeft: theme.spacing(2.5)\r\n }\r\n }));\r\n \r\n//#endregion\r\n\r\nexport default function TablePaginationActions(props) {\r\n const classes = useStyles1();\r\n const theme = useTheme();\r\n const { count, page, rowsPerPage, onChangePage } = props;\r\n \r\n const handleFirstPageButtonClick = event => {\r\n onChangePage(event, 0);\r\n };\r\n \r\n const handleBackButtonClick = event => {\r\n onChangePage(event, page - 1);\r\n };\r\n \r\n const handleNextButtonClick = event => {\r\n onChangePage(event, page + 1);\r\n };\r\n \r\n const handleLastPageButtonClick = event => {\r\n onChangePage(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\r\n };\r\n \r\n return (\r\n
\r\n \r\n {theme.direction === \"rtl\" ? : }\r\n \r\n \r\n {theme.direction === \"rtl\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label=\"next page\"\r\n >\r\n {theme.direction === \"rtl\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label=\"last page\"\r\n >\r\n {theme.direction === \"rtl\" ? : }\r\n \r\n
\r\n );\r\n }\r\n\r\nTablePaginationActions.propTypes = {\r\n count: PropTypes.number.isRequired,\r\n onChangePage: PropTypes.func.isRequired,\r\n page: PropTypes.number.isRequired,\r\n rowsPerPage: PropTypes.number.isRequired\r\n };\r\n ","/* \r\nBridge de comunicación con la Api, diferentes funciones para coger información de los movimientos del usuario.\r\n*/\r\nimport {\r\n CAPITALIZEFIRSTLETTER,\r\n FORMATDATE,\r\n GETDATA\r\n} from \"../constants\";\r\nimport { LOCAL } from \"../config\";\r\n\r\nexport default class Movement {\r\n static INSTANCE = new Movement();\r\n\r\n listMovement = [ //Ejemplo de movimiento\r\n {\r\n id: 50,\r\n center: \"Bolera Gorbea\",\r\n date: \"1993-12-15\",\r\n description: \"Descripcion\",\r\n detail: \"Detalle\",\r\n points: 100,\r\n saldo: 100\r\n }\r\n ];\r\n\r\n Movement() { }\r\n\r\n getListMovement = userId => {\r\n return new Promise((resolve, reject) => {\r\n if (!LOCAL) {\r\n let url = `/DCMovRedems/Movimientos?cliente_id=${userId}`;\r\n\r\n GETDATA(url, response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n id: item.id,\r\n center: CAPITALIZEFIRSTLETTER(item.centro.trim()),\r\n date: FORMATDATE(item.fecha),\r\n description: item.descripcion,\r\n detail: item.detalle,\r\n point: item.puntos,\r\n balance: item.saldo\r\n };\r\n });\r\n this.listMovement = parseResponse;\r\n resolve(this.listMovement);\r\n }, error => {\r\n reject(error);\r\n });\r\n\r\n } else {\r\n resolve(this.listMovement);\r\n }\r\n });\r\n };\r\n}\r\n","/* \r\nComponente para mostrar los movimientos MovRedem de Ilusiona de cada usuario.\r\n */\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\n\r\n//CONSTANTS\r\nimport FORMATNUMBER from \"../constants\";\r\n\r\n//COMPONENTS\r\nimport TablePaginationActions from \"./TablePaginationActions\";\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport { getListMovementAction } from \"../redux/actions/movementActions\";\r\nimport { setPointsAction } from \"../redux/actions/userActions\";\r\n\r\n//#region CSS\r\nimport { withStyles, makeStyles } from \"@material-ui/core/styles\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableFooter from \"@material-ui/core/TableFooter\";\r\nimport TablePagination from \"@material-ui/core/TablePagination\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\n\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst StyledTableCell = withStyles(theme => ({\r\n head: {\r\n backgroundColor: \"#363636\",\r\n color: theme.palette.common.white,\r\n fontSize: \"1.10rem\"\r\n },\r\n body: {\r\n fontSize: 14\r\n }\r\n}))(TableCell);\r\n\r\nconst StyledTableRow = withStyles(theme => ({\r\n root: {\r\n \"&:nth-of-type(odd)\": {\r\n backgroundColor: theme.palette.background.default\r\n }\r\n }\r\n}))(TableRow);\r\nconst useStyles = makeStyles(theme => ({\r\n table: {\r\n minWidth: 700\r\n },\r\n progress: {\r\n width: \"100%\",\r\n marginTop: \"50px\",\r\n marginBottom: \"50px\",\r\n textAlign: \"center\"\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n fontWeight: theme.typography.fontWeightRegular,\r\n padding: \"20px\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function TableMovements({ userId }) {\r\n const classes = useStyles();\r\n\r\n //#region Values\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n const [rows, setRows] = useState([]);\r\n const [page, setPage] = React.useState(0);\r\n const [rowsPerPage, setRowsPerPage] = React.useState(5);\r\n //#endregion\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n //#endregion\r\n\r\n //#region HandleChange\r\n const handleChangePage = (event, newPage) => {\r\n setPage(newPage);\r\n };\r\n\r\n const handleChangeRowsPerPage = event => {\r\n setRowsPerPage(parseInt(event.target.value, 10));\r\n setPage(0);\r\n };\r\n //#endregion\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n const setPoints = userId => dispatch(setPointsAction(userId));\r\n setPoints(userId);\r\n const getListMovement = userId => dispatch(getListMovementAction(userId));\r\n getListMovement(userId)\r\n .then(data => {\r\n setRows(data);\r\n setLoading(false);\r\n })\r\n .catch(error => {\r\n setLoading(false);\r\n setError(true);\r\n });\r\n }, [dispatch, userId]);\r\n\r\n return (\r\n \r\n {loading ? (\r\n
\r\n \r\n
\r\n )\r\n : error ?\r\n \r\n \r\n \r\n Hay un problema con el servidor, pruebe más tarde. Perdone las molestias.\r\n \r\n \r\n \r\n : rows.length === 0 ?\r\n (\r\n \r\n \r\n \r\n No hay movimientos\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n Fecha\r\n Centro\r\n Descripción\r\n Detalles\r\n Puntos\r\n Saldo\r\n \r\n \r\n \r\n {(rowsPerPage > 0\r\n ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\r\n : rows\r\n ).map(row => (\r\n \r\n {row.date}\r\n {row.center}\r\n {row.description}\r\n {row.detail}\r\n {FORMATNUMBER(row.point)}\r\n {FORMATNUMBER(row.balance)}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n","//SERVICES\r\nimport ServiceMovement from \"../../services/Movement\";\r\n\r\n//TYPES\r\nexport const START_GET_MOVEMENT = \"START_GET_MOVEMENT\";\r\nexport const SUCCESS_GET_MOVEMENT = \" SUCCESS_GET_MOVEMENT\";\r\nexport const ERROR_GET_MOVEMENT = \" ERROR_GET_MOVEMENT\";\r\n\r\nexport function getListMovementAction(userId) {\r\n return async dispatch => {\r\n dispatch({ type: START_GET_MOVEMENT });\r\n\r\n return new Promise((resolve, reject) => {\r\n ServiceMovement.INSTANCE.getListMovement(userId)\r\n .then(listProvince => {\r\n dispatch({\r\n type: SUCCESS_GET_MOVEMENT\r\n });\r\n resolve(listProvince);\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_GET_MOVEMENT });\r\n reject(error);\r\n });\r\n });\r\n };\r\n}\r\n\r\n","/* \r\nPantalla de movimientos compuesta por TableMovements\r\n*/\r\n\r\nimport React from \"react\";\r\n\r\n//REDUX\r\nimport { useSelector } from \"react-redux\";\r\n\r\n\r\n//CONSTANTS\r\nimport FORMATNUMBER from \"../constants\";\r\n\r\n//COMPONENTS\r\nimport TableMovements from \"../components/TableMovements\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n height: \"100vh\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function ListMovements(props) {\r\n const classes = useStyles();\r\n\r\n const user = useSelector(state => state.user.user);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Lista de Movimientos\r\n \r\n \r\n \r\n \r\n \r\n \r\n Tiene un total de {FORMATNUMBER(user.points)} puntos\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","/* \r\nBridge de comunicación con la Api, diferentes funciones para coger información de los articulos de ilusiona.\r\n*/\r\n\r\nimport { POSTDATA, CAPITALIZEFIRSTLETTER } from \"../constants\";\r\nimport { LOCAL } from \"../config\";\r\n\r\nexport default class Gift {\r\n static INSTANCE = new Gift();\r\n\r\n listGift = [ //Ejemplo de un articulo/regalo\r\n {\r\n name: \"AURICULARES PLEGABLES COLOR PASTEL\",\r\n points: 100,\r\n image: \"gift1.jpg\"\r\n }\r\n ];\r\n\r\n Gift() { }\r\n\r\n getListGift = (filter, from, to, order) => {\r\n let filtro = {\r\n idCentro: filter.idCenter,\r\n nombre: filter.name,\r\n familia: filter.family === \"0\" ? undefined : filter.family,\r\n puntos: filter.points ? JSON.stringify(filter.points) : undefined\r\n };\r\n\r\n for (let atr in filtro) {\r\n let variable = filtro[atr];\r\n if (!variable) {\r\n delete filtro[atr];\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n if (!LOCAL) {\r\n let url = `/ArticuloCompras/Filtro?from=${from}&to=${to}&order=${order}&source=web`;\r\n\r\n POSTDATA(url, filtro, response => {\r\n const parseResponse = response.data.listGift.map(item => {\r\n return {\r\n id: item.Id,\r\n name: CAPITALIZEFIRSTLETTER(item.Nombre.trim()),\r\n points: item.Puntos,\r\n stock: item.Stock,\r\n image: `https://neuriteilusiona.blob.core.windows.net/fotos/${item.Foto}`\r\n };\r\n });\r\n resolve({ numOfGift: response.data.numOfGift, listGift: parseResponse });\r\n }, error => {\r\n reject(error);\r\n });\r\n } else {\r\n resolve({ numOfGift: 1, listGift: this.listGift });\r\n }\r\n });\r\n };\r\n}\r\n","/*\r\nSe necesita este fichero para poder vincular cada dominio a su respectiva API.\r\n*/\r\n\r\nexport const URLIDENTITY = 'https://ilusionaClubIdentityserver.azurewebsites.net'\r\nexport const URL = () => {\r\n let url = window.location.origin\r\n console.log(url)\r\n switch (url) {\r\n case 'http://localhost:3000':\r\n // url = \"https://3aguas-api.azurewebsites.net/api\";\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n // url = \"https://localhost:5001/api\";\r\n break\r\n case 'https://fidelizacion.ilusiona.com':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'https://club.ilusiona.com':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'https://tcg.ilusiona.com':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'https://ilusiona-redemption.azurewebsites.net':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'http://debug-n-ilu.azurewebsites.net':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'https://ilusiona-web.azurewebsites.net':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'https://ilusiona-inventario.azurewebsites.net':\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n case 'https://3aguas-redemption.azurewebsites.net':\r\n url = 'https://3aguas-api.azurewebsites.net/api/'\r\n break\r\n case 'http://3aguas-tcg.azurewebsites.net':\r\n url = 'https://3aguas-api.azurewebsites.net/api'\r\n break\r\n default:\r\n url = 'https://ilusiona-api.azurewebsites.net/api'\r\n break\r\n }\r\n return url\r\n // return window.location.origin;\r\n}\r\n// export var URL = urlTest(\"agua\");\r\nexport const LOCAL = false\r\n","import {URLIDENTITY} from './config'\r\nimport axios from 'axios'\r\nimport qs from 'querystring'\r\n\r\n// FUNCTIONS\r\nexport function HEADER(token) {\r\n if (token) {\r\n return {\r\n headers: {\r\n Authorization: 'Bearer ' + token,\r\n 'Access-Control-Allow-Origin': '*'\r\n }\r\n }\r\n } else {\r\n return {\r\n headers: {\r\n 'Access-Control-Allow-Origin': '*'\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function TOKENIDENTITY() {\r\n return new Promise((resolve, reject) => {\r\n axios.post(`${URLIDENTITY}/connect/token`,\r\n qs.stringify({\r\n grant_type: 'client_credentials',\r\n client_secret: 'secret',\r\n client_id: 'client'\r\n }), {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'Access-Control-Allow-Origin': '*'\r\n }\r\n }).then(response => {\r\n resolve(\r\n {\r\n headers: {\r\n Authorization: 'Bearer ' + response.data.access_token,\r\n 'Access-Control-Allow-Origin': '*'\r\n }\r\n }\r\n )\r\n })\r\n })\r\n}\r\n\r\nexport function CALCULATEAGE(dob) {\r\n var diffMs = Date.now() - dob.getTime()\r\n if (diffMs > 0) {\r\n var ageDt = new Date(diffMs)\r\n return Math.abs(ageDt.getUTCFullYear() - 1970)\r\n } else {\r\n return 0\r\n }\r\n}\r\n\r\nexport function CALCULATEDATEMORETHAN18() {\r\n const actualDate = new Date()\r\n return `${actualDate.getFullYear() - 18}-${\r\n actualDate.getMonth() < 10 ? '0' : ''\r\n }${actualDate.getMonth() + 1}-${\r\n actualDate.getDate() < 10 ? '0' : ''\r\n }${actualDate.getDate()}`\r\n}\r\n\r\nexport default function FORMATNUMBER(number, decimal = 0) {\r\n return number\r\n ? number\r\n .toFixed(decimal) // always two decimal digits\r\n .replace('.', ',') // replace decimal point character with ,\r\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1.')\r\n : '0'\r\n}\r\n\r\nexport function CAPITALIZEFIRSTLETTER(word) {\r\n if (word) {\r\n let splitWord = word.split(' ')\r\n splitWord.forEach((split, index) => {\r\n if (split[0]) {\r\n splitWord[index] =\r\n split[0].toUpperCase() + split.slice(1).toLowerCase()\r\n }\r\n })\r\n return splitWord.join(' ')\r\n } else {\r\n return ''\r\n }\r\n}\r\n\r\nexport function FORMATDATE(date) {\r\n if (date) {\r\n let d = new Date(date)\r\n let ret =\r\n (d.getDate() < 10 ? '0' + d.getDate() : d.getDate()) +\r\n '/' +\r\n (d.getMonth() + 1 < 10 ? '0' + (d.getMonth() + 1) : d.getMonth() + 1) +\r\n '/' +\r\n d.getFullYear()\r\n return ret\r\n } else {\r\n return 'Sin fecha'\r\n }\r\n}\r\n","import axios from 'axios'\r\nimport { HEADER, CAPITALIZEFIRSTLETTER, TOKENIDENTITY } from '../constants'\r\nimport { URL, LOCAL } from '../config'\r\n\r\nexport default class Center {\r\n static INSTANCE = new Center();\r\n\r\n listCenter = [\r\n {\r\n id: 50,\r\n name: 'Bolera Gorbea'\r\n },\r\n {\r\n id: 43,\r\n name: 'Bolera Xanadu'\r\n }\r\n ];\r\n\r\n Center() {}\r\n\r\n getListCenter = async (token) => {\r\n if (!LOCAL) {\r\n let url = `${URL()}/Centros/GetCentrosProvince`\r\n if (token) {\r\n return await axios.get(url, HEADER(token)).then(response => {\r\n response.data.listCenter = response.data.listCenter.map(item => {\r\n return {\r\n id: item.id,\r\n name: CAPITALIZEFIRSTLETTER(item.name),\r\n idProvince: item.idProvince\r\n }\r\n })\r\n\r\n this.listCenter = response.data\r\n return this.listCenter\r\n })\r\n } else {\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .get(url, headerWithToken).then(response => {\r\n return response.data\r\n })\r\n })\r\n }\r\n } else {\r\n return this.listCenter\r\n }\r\n };\r\n}\r\n","import axios from 'axios'\r\nimport { HEADER, CAPITALIZEFIRSTLETTER } from '../constants'\r\nimport { URL } from '../config'\r\n\r\nexport default class Gift {\r\n static INSTANCE = new Gift();\r\n\r\n listGift = [\r\n {\r\n name: 'AURICULARES PLEGABLES COLOR PASTEL',\r\n points: 100,\r\n image: 'gift1.jpg'\r\n }\r\n ];\r\n\r\n Gift() {}\r\n\r\n getListFamily = async (token) => {\r\n let url = `${URL()}/CvFamilias?source=web`\r\n return await axios.get(url, HEADER(token)).then(response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n id: item.id,\r\n name: CAPITALIZEFIRSTLETTER(item.descr.trim())\r\n }\r\n })\r\n\r\n return parseResponse\r\n })\r\n }\r\n}\r\n","/*\r\nComponente para dar un rango de valores numericos [desde, hasta]\r\n*/\r\n\r\nimport React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// #region CSS\r\nimport { withStyles, makeStyles } from '@material-ui/core/styles'\r\nimport Slider from '@material-ui/core/Slider'\r\n// import Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {},\r\n margin: {\r\n height: theme.spacing(3)\r\n }\r\n}))\r\nconst IluSlider = withStyles({\r\n root: {\r\n color: '#52af00',\r\n height: 8,\r\n marginTop: '20px'\r\n },\r\n thumb: {\r\n height: 24,\r\n width: 24,\r\n backgroundColor: '#fff',\r\n border: '2px solid currentColor',\r\n marginTop: -8,\r\n marginLeft: -12,\r\n '&:focus,&:hover,&$active': {\r\n boxShadow: 'inherit'\r\n }\r\n },\r\n active: {},\r\n valueLabel: {\r\n left: 'calc(-50% + 4px)',\r\n display: 'none'\r\n },\r\n track: {\r\n height: 8,\r\n borderRadius: 4\r\n },\r\n rail: {\r\n height: 8,\r\n borderRadius: 4\r\n }\r\n})(Slider)\r\n// #endregion\r\n\r\nexport default function RangeSlider({ onChange, initialState }) {\r\n const classes = useStyles()\r\n\r\n // #region Values\r\n const [max, setMax] = useState(initialState[1] + 500)\r\n // #endregion\r\n\r\n // #region HandleChange\r\n const handleChange = (event, value) => {\r\n if (value[1] >= 90000) {\r\n setMax(100000)\r\n } else {\r\n setMax(value[1] + 10000)\r\n }\r\n onChange(value)\r\n }\r\n\r\n const handleChangeCommitted = (event, value) => {\r\n onChange(value)\r\n }\r\n // #endregion\r\n\r\n return (\r\n
\r\n {/* Puntos */}\r\n \r\n
\r\n )\r\n}\r\n\r\nRangeSlider.propTypes = {\r\n onChange: PropTypes.func.isRequired,\r\n initialState: PropTypes.array.isRequired\r\n}\r\n","/*\r\nComponente para scanear codigos de barras\r\n*/\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport Quagga from 'quagga'\r\n\r\n// #region CSS\r\n// import { makeStyles } from '@material-ui/core/styles'\r\nimport Grid from '@material-ui/core/Grid'\r\n// import Button from '@material-ui/core/Button'\r\n// import FlipCameraIosIcon from '@material-ui/icons/FlipCameraIos'\r\n\r\n/* const useStyles = makeStyles(theme => ({\r\n btn_camera: {\r\n color: 'white'\r\n }\r\n})) */\r\n// #endregion\r\n\r\n// powerOff = setPowerOn(false);\r\nlet canCheckCode = true\r\nexport default function ScanCode({ powerOn, powerOff, setCode, options }) {\r\n // const classes = useStyles()\r\n const [turnOn, setTurnOn] = useState(powerOn)\r\n const [swapCamera, setSwapCamera] = useState(true)// false=camara delantera true = camara trasera\r\n let localstream\r\n\r\n const media = mode => navigator.getUserMedia({\r\n video: {\r\n facingMode: mode\r\n }\r\n },\r\n function (stream) {\r\n const video = document.getElementById('video-player')\r\n localstream = stream\r\n if (localstream && video) {\r\n video.srcObject = localstream\r\n\r\n Quagga.init({\r\n inputStream: {\r\n name: 'Live',\r\n type: 'LiveStream',\r\n target: video\r\n },\r\n // frequency: 1,\r\n decoder: {\r\n readers: ['code_128_reader', 'ean_reader'] //, \"ean_8_reader\"\r\n }\r\n }, function (err) {\r\n if (err) {\r\n console.log(err)\r\n return\r\n }\r\n Quagga.start()\r\n })\r\n\r\n Quagga.onDetected(function (result) {\r\n if (powerOn) {\r\n if (canCheckCode) {\r\n canCheckCode = false\r\n var code = result.codeResult.code\r\n setCode(code)\r\n }\r\n }\r\n })\r\n }\r\n },\r\n function (e) {\r\n const video = document.getElementById('video-player')\r\n if (video) {\r\n video.srcObject = null\r\n }\r\n })\r\n\r\n useEffect(() => {\r\n if (turnOn) {\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n media(swapCamera ? { exact: 'environment' } : 'user')\r\n } else {\r\n alert('Navigator.mediaDevices not supported')\r\n }\r\n }\r\n setTurnOn(powerOn)\r\n return () => {\r\n if (localstream) {\r\n localstream.getAudioTracks().forEach(function (track) {\r\n track.stop()\r\n })\r\n localstream.getVideoTracks().forEach(function (track) {\r\n track.stop()\r\n })\r\n Quagga.offProcessed()\r\n Quagga.offDetected()\r\n Quagga.stop()\r\n const video = document.getElementById('video-player')\r\n if (video !== null) {\r\n video.pause()\r\n video.currentTime = 0\r\n }\r\n }\r\n // localstream = null;\r\n }\r\n // eslint-disable-next-line\r\n }, [turnOn, powerOn, swapCamera]);\r\n\r\n useEffect(() => {\r\n if (!options.isLoading) { canCheckCode = true }\r\n // eslint-disable-next-line\r\n }, [options.isLoading]);\r\n\r\n return (\r\n \r\n \r\n {/* setSwapCamera(!swapCamera)}\r\n startIcon={}\r\n /> */}\r\n
Tocar para cerrar
\r\n
\r\n
\r\n )\r\n}\r\n","/*\r\nModulo para filtrar articulos/regalos utilizado apartir de variables para modificar tamaños y vistas del componente\r\nir al pie de pagina, Proptypes\r\n\r\nValues = filtre = {\r\n name: \"\",\r\n family: \"\",\r\n idCenter: user.idCenter,\r\n points: [user.points + 1, 100000] //[0]Desde [1]hasta\r\n }\r\n*/\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// SERVICE\r\nimport ServiceCenter from '../services/Center'\r\nimport ServiceGift from '../services/Gift'\r\n\r\n// COMPONENT\r\nimport RangeSlider from '../components/RangeSlider'\r\nimport ScanCode from '../components/ScanCode'\r\n\r\n// #region CSS\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery'\r\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel'\r\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary'\r\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport Select from '@material-ui/core/Select'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport ListSubheader from '@material-ui/core/ListSubheader'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\r\nimport PhotoCamera from '@material-ui/icons/PhotoCamera'\r\nimport PhotoCameraOutlinedIcon from '@material-ui/icons/PhotoCameraOutlined'\r\nimport ClearIcon from '@material-ui/icons/Clear'\r\nconst useStyles = makeStyles(theme => ({\r\n btn_camera: {\r\n marginLeft: '5px',\r\n marginTop: '5px',\r\n height: '56px'\r\n },\r\n input: {\r\n backgroundColor: '#ffffff',\r\n fontSize: 18,\r\n textAlign: 'right',\r\n paddingRight: 15\r\n }\r\n}))\r\n// #endregion\r\n\r\nexport default function FilterItem({\r\n filter,\r\n setFilter,\r\n token,\r\n options\r\n}) {\r\n const classes = useStyles()\r\n // #region Values & Const\r\n const [powerCodeScan, setPowerCodeScan] = useState(options.powerOff)\r\n const [values, setValues] = useState(filter)\r\n const [listFamily, setListFamily] = useState([])\r\n const [listProvinceCenter, setListProvinceCenter] = useState([])\r\n const isHorizontal = options ? !!options.isHorizontal : false\r\n const isMobile = useMediaQuery('(max-width:500px)')\r\n const [expanded, setExpanded] = useState(!isMobile)\r\n const isFidelizacion = options ? !!options.isFidelizacion : false\r\n const isWeb = options ? !!options.isWeb : false\r\n const isInventario = options ? !!options.isInventario : false\r\n const haveClient = options ? !!options.haveClient : false\r\n const haveMovement = options ? !!options.haveMovement : false\r\n const sizeItemGrid = isHorizontal ? (haveClient || haveMovement) ? 3 : 2 : 12\r\n // #endregion\r\n\r\n // #region Funtion\r\n const getListCenter = (token) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceCenter.INSTANCE.getListCenter(token)\r\n .then(listProvince => {\r\n resolve(listProvince)\r\n })\r\n .catch(error => {\r\n reject(error)\r\n })\r\n })\r\n }\r\n const getListFamily = (token) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceGift.INSTANCE.getListFamily(token)\r\n .then(listProvince => {\r\n resolve(listProvince)\r\n })\r\n .catch(error => {\r\n reject(error)\r\n })\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n if (isWeb || isFidelizacion || isInventario) {\r\n getListFamily(token).then(v => {\r\n setListFamily(v)\r\n })\r\n }\r\n\r\n if (isWeb) {\r\n getListCenter(token).then(v => {\r\n let optionsSelect = []\r\n if (v) {\r\n v.listProvince.forEach(province => {\r\n optionsSelect.push(\r\n \r\n {province.name}\r\n \r\n )\r\n v.listCenter\r\n .filter(c => c.idProvince === province.id)\r\n .forEach(center => {\r\n optionsSelect.push(\r\n \r\n {center.name}\r\n \r\n )\r\n })\r\n })\r\n setListProvinceCenter(optionsSelect)\r\n }\r\n })\r\n }\r\n if (isMobile) {\r\n setExpanded(false)\r\n }\r\n }, [isMobile])\r\n // #endregion\r\n\r\n // #region HandleChange\r\n const handleChange = prop => event => {\r\n setValues({ ...values, [prop]: event.target.value })\r\n }\r\n const handleChangeBarCode = value => {\r\n // const copyValues = Object.assign({}, values);\r\n // copyValues.barCode = value;\r\n setValues({ ...values, 'barCode': value })\r\n let newFilter = {\r\n name: '',\r\n idCenter: values.idCenter,\r\n family: '',\r\n barCode: value,\r\n points: [0, 100000] // Rango de puntos de un articulo [0] Desde [1] Hasta\r\n }\r\n setFilter(newFilter)\r\n }\r\n const handleChangePoints = prop => event => {\r\n if (event.target.value <= 1000000) {\r\n let copyPoints = Object.assign([], values.points)\r\n copyPoints[prop] = parseInt(event.target.value)\r\n setValues({ ...values, points: copyPoints })\r\n }\r\n }\r\n const onChangeSlider = value => { // RangSlider value = [desde, hasta]\r\n setValues({ ...values, points: value })\r\n }\r\n // #endregion\r\n\r\n // #region OnClick\r\n const onClickFilter = e => {\r\n e.preventDefault()\r\n const copyValues = Object.assign({}, values)\r\n copyValues.barCode = ''\r\n setFilter(copyValues)\r\n if (isMobile) {\r\n setExpanded(false)\r\n }\r\n }\r\n // #endregion\r\n\r\n // #region Displays\r\n const displayVideoBarCode = (powerCodeScan, width, isLoading) => {\r\n try {\r\n if (powerCodeScan) {\r\n return \r\n \r\n \r\n }\r\n } catch (e) {\r\n alert(e)\r\n }\r\n }\r\n const displayInputBarCode = () => {\r\n if (isInventario || isFidelizacion) {\r\n return \r\n \r\n \r\n { setValues({ ...values, barCode: '' }) }}>\r\n \r\n \r\n \r\n ) : null\r\n }}\r\n value={values.barCode}\r\n onChange={handleChange('barCode')}\r\n />\r\n \r\n {!isFidelizacion ? \r\n { setPowerCodeScan(!powerCodeScan); setValues({ ...values, barCode: '' }) }}\r\n startIcon={powerCodeScan ? : }\r\n />\r\n : null}\r\n \r\n }\r\n }\r\n const displaySelectFamily = () => {\r\n if (isWeb || isFidelizacion || isInventario) {\r\n return \r\n \r\n \r\n Familia\r\n \r\n \r\n Sin seleccionar\r\n {listFamily.map(family => (\r\n \r\n {family.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n }\r\n }\r\n const displaySelectCentros = () => {\r\n if (isWeb) {\r\n return \r\n \r\n \r\n Centro\r\n \r\n \r\n {listProvinceCenter}\r\n \r\n \r\n \r\n }\r\n }\r\n const displayRangeSlider = () => {\r\n if (isWeb || isInventario) {\r\n return \r\n \r\n \r\n Puntos\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n }\r\n }\r\n const displayInputsPoints = () => {\r\n if (isWeb || isInventario || isFidelizacion) {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n }\r\n // #endregion\r\n\r\n useEffect(() => {\r\n setPowerCodeScan(options.powerOff)\r\n }, [options])\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {displayVideoBarCode(powerCodeScan, options.width, options.isLoading)}\r\n {isInventario ? {displayInputBarCode()} : null}\r\n \r\n }\r\n aria-controls='panel1a-content'\r\n id='panel1a-header'\r\n onClick={() => setExpanded(!expanded)}\r\n >\r\n Filtros\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isFidelizacion ? displayInputBarCode() : null}\r\n {displaySelectFamily()}\r\n {displaySelectCentros()}\r\n {displayRangeSlider()}\r\n {displayInputsPoints()}\r\n \r\n \r\n Filtrar\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nFilterItem.propTypes = {\r\n filter: PropTypes.object.isRequired, // Objeto con el filtro\r\n setFilter: PropTypes.func.isRequired, // Funcion para modificar el filtro\r\n token: PropTypes.string, // Token para realizar las peticiones a la API, con el identificador del usuario\r\n options: PropTypes.object // Opciones para identificar que displays necesitamos [isHorizontal,isMobile,isFidelizacion,isWeb,isInventario] para diferentes aplicaciones\r\n}\r\n\r\n/*\r\nAplicaciones:\r\n -Web: [isWeb, isMobile, isHorizontal] si es web mostramos diferentes displays que se modificaran\r\n apartir de si es visualizado desdel mobil si esta en horizontal o vertial.\r\n -Fidelización: [isFidelizacion, haveClientes, haveMovements] si es fidelización mostramos diferentes displays que\r\n se modificaran a partir de si en la pantalla hay movimientos de regalos o de clientes para cambiar los tamaños.\r\n -Inventario: [isInventario] si es inventarios mostramos diferentes displays como el escaneador de codigo de barras.\r\n */\r\n","/*\r\nComponente tarjeta de regalos/articulos de ilusiona\r\nInformativo\r\n*/\r\n\r\nimport React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// CONSTANTS\r\nimport FORMATNUMBER from '../constants'\r\n\r\n// #region CSS\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Card from '@material-ui/core/Card'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport CardActionArea from '@material-ui/core/CardActionArea'\r\nimport CardContent from '@material-ui/core/CardContent'\r\nimport CardMedia from '@material-ui/core/CardMedia'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Tooltip from '@material-ui/core/Tooltip'\r\nimport Zoom from '@material-ui/core/Zoom'\r\n\r\nconst useStyles = makeStyles({\r\n card: {\r\n width: 345\r\n },\r\n media: {\r\n // maxHeight: \"100%\",\r\n height: '200px',\r\n width: '100%',\r\n backgroundSize: 'contain'\r\n },\r\n titleCard: {\r\n height: '65px',\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n WebkitBoxOrient: 'vertical'\r\n },\r\n titleCardFideliz: {\r\n height: '65px',\r\n display: '-webkit-box',\r\n WebkitLineClamp: '2',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n WebkitBoxOrient: 'vertical',\r\n fontSize: '1rem'\r\n },\r\n tooltip: {\r\n fontSize: 14,\r\n color: 'white',\r\n backgroundColor: '#3a3434',\r\n fontWeight: 200\r\n }\r\n})\r\n// #endregion\r\n\r\nexport default function CardGift({ gift, onClick, options }) {\r\n const classes = useStyles()\r\n\r\n const isFidelizacion = options ? !!options.isFidelizacion : false\r\n // Checkeamos si la pantalla tiene esos modulos, para mostrar diferentes estilos\r\n const haveClient = options ? !!options.haveClient : false\r\n const haveMovement = options ? !!options.haveMovement : false\r\n\r\n return (\r\n \r\n onClick(gift)}>\r\n \r\n \r\n \r\n \r\n {gift.name}\r\n \r\n \r\n \r\n \r\n {FORMATNUMBER(gift.points)} puntos\r\n \r\n \r\n {options ? (\r\n options.isFidelizacion ? (\r\n \r\n \r\n {FORMATNUMBER(gift.stock)} stock\r\n \r\n \r\n ) : null\r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nCardGift.propTypes = {\r\n gift: PropTypes.shape({\r\n name: PropTypes.string,\r\n image: PropTypes.string,\r\n points: PropTypes.number,\r\n stock: PropTypes.number\r\n }).isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n options: PropTypes.object\r\n}\r\n","/*\r\nComponente encargado de la actualizacion de listas (movimientos ilusiona, regalos)\r\n */\r\n\r\nimport React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// #region CSS\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport FirstPageIcon from '@material-ui/icons/FirstPage'\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft'\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight'\r\nimport LastPageIcon from '@material-ui/icons/LastPage'\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n flexShrink: 0,\r\n marginLeft: theme.spacing(2.5)\r\n }\r\n}))\r\n\r\n// #endregion\r\n\r\nexport default function TablePaginationActions(props) {\r\n const classes = useStyles()\r\n const theme = useTheme()\r\n\r\n // #region Values\r\n const { count, page, rowsPerPage, onChangePage } = props\r\n // #endregion\r\n\r\n // #region HandleClick\r\n const handleFirstPageButtonClick = event => {\r\n onChangePage(event, 0)\r\n }\r\n\r\n const handleBackButtonClick = event => {\r\n onChangePage(event, page - 1)\r\n }\r\n\r\n const handleNextButtonClick = event => {\r\n onChangePage(event, page + 1)\r\n }\r\n\r\n const handleLastPageButtonClick = event => {\r\n onChangePage(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1))\r\n }\r\n // #endregion\r\n\r\n return (\r\n
\r\n \r\n {theme.direction === 'rtl' ? : }\r\n \r\n \r\n {theme.direction === 'rtl' ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label='next page'\r\n >\r\n {theme.direction === 'rtl' ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n = Math.ceil(count / rowsPerPage) - 1}\r\n aria-label='last page'\r\n >\r\n {theme.direction === 'rtl' ? : }\r\n \r\n
\r\n )\r\n}\r\n\r\nTablePaginationActions.propTypes = {\r\n count: PropTypes.number.isRequired,\r\n onChangePage: PropTypes.func.isRequired,\r\n page: PropTypes.number.isRequired,\r\n rowsPerPage: PropTypes.number.isRequired\r\n}\r\n","/*\r\nModulo que muestra cuadricula de items/articulos/gifts compuesto por [CardGift, TablePagination]\r\n*/\r\n\r\nimport React, { useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// import { URL } from '../config'\r\n\r\n// COMPONENTS\r\nimport CardGift from '../components/CardGift'\r\nimport TablePaginationActions from '../components/TablePaginationActions'\r\n\r\n// #region CSS\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Box from '@material-ui/core/Box'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Grow from '@material-ui/core/Grow'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\nimport Table from '@material-ui/core/Table'\r\nimport TableRow from '@material-ui/core/TableRow'\r\nimport TableHead from '@material-ui/core/TableHead'\r\nimport TablePagination from '@material-ui/core/TablePagination'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport TableCell from '@material-ui/core/TableCell'\r\nimport Select from '@material-ui/core/Select'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\n\r\nconst useStyles = makeStyles(() => ({\r\n container: {\r\n display: 'flex'\r\n },\r\n progress: {\r\n marginTop: '200px'\r\n }\r\n}))\r\n// #endregion\r\n\r\nexport default function GridCardItem({ pagination, setPagination, loading, error, listItems, numOfItem, onClick, options }) {\r\n const classes = useStyles()\r\n const isntFilter = options ? (!!options.isntFilter) : false\r\n const isFidelizacion = options ? (!!options.isFidelizacion) : false\r\n const isInventario = options ? !!options.isInventario : false\r\n const isMobile = useMediaQuery('(max-width:500px)')\r\n const haveClient = options ? (!!options.haveClient) : false\r\n const haveMovement = options ? (!!options.haveMovement) : false\r\n\r\n // #region HandleChange\r\n const handleChange = prop => event => {\r\n setPagination({ ...pagination, order: event.target.value })\r\n }\r\n\r\n const handleChangePage = (event, newPage) => {\r\n setPagination({ ...pagination, page: newPage })\r\n }\r\n\r\n const handleChangeRowsForPage = event => {\r\n setPagination({\r\n ...pagination,\r\n page: 0,\r\n rowsForPage: parseInt(event.target.value, 10)\r\n })\r\n }\r\n // #endregion\r\n\r\n useEffect(() => {\r\n\r\n }, [loading])\r\n\r\n return (\r\n
\r\n {loading ? (\r\n \r\n \r\n \r\n ) : error ? (\r\n \r\n \r\n \r\n \r\n Hay un problema con el servidor, pruebe más tarde. Perdone las molestias.\r\n \r\n \r\n \r\n \r\n ) : listItems.length === 0 && isntFilter ? (\r\n \r\n \r\n \r\n \r\n Filtrar para visualizar productos.\r\n \r\n \r\n \r\n \r\n ) : listItems.length === 0 ? (\r\n \r\n \r\n \r\n \r\n No se han encontrado, modifique el filtro.\r\n \r\n \r\n \r\n \r\n ) : isInventario ? (\r\n {listItems.map((gift, index) => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {isMobile ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n\r\n
) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {isMobile ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n {listItems.map((gift, index) => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nGridCardItem.propTypes = {\r\n pagination: PropTypes.object.isRequired,\r\n setPagination: PropTypes.func.isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n listItems: PropTypes.array.isRequired,\r\n numOfItem: PropTypes.number.isRequired,\r\n options: PropTypes.object\r\n}\r\n","function toVal(mix) {\n\tvar k, y, str='';\n\tif (mix) {\n\t\tif (typeof mix === 'object') {\n\t\t\tif (Array.isArray(mix)) {\n\t\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\t\tif (mix[k] && (y = toVal(mix[k]))) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (k in mix) {\n\t\t\t\t\tif (mix[k] && (y = toVal(k))) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof mix !== 'boolean' && !mix.call) {\n\t\t\tstr && (str += ' ');\n\t\t\tstr += mix;\n\t\t}\n\t}\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (x = toVal(arguments[i++])) {\n\t\t\tstr && (str += ' ');\n\t\t\tstr += x\n\t\t}\n\t}\n\treturn str;\n}\n","import axios from 'axios'\r\nimport { HEADER, TOKENIDENTITY } from '../constants'\r\nimport { URL, LOCAL } from '../config'\r\n\r\nexport default class User {\r\n static INSTANCE = new User();\r\n\r\n User() { }\r\n\r\n register = async (token, user) => {\r\n const userToRegister = {\r\n id: 0,\r\n activo: true,\r\n fAlta: new Date(),\r\n nombres: user.name,\r\n apellidos: user.lastname,\r\n dni: user.dni,\r\n Mail: user.email,\r\n movil: user.mobile,\r\n aniversario: user.born,\r\n codigoPostal: user.cp,\r\n poblacion: user.population,\r\n bAceptaPublicidad: user.isPublicity,\r\n centroId: user.idCenter,\r\n iProvincia: user.idProvince,\r\n iMunicipio: user.idPopulation,\r\n iSexo: user.gender ? user.gender : 0,\r\n bConfirmado: false,\r\n bAceptaCondiciones: user.isPrivacity,\r\n hash: user.password,\r\n obsv: user.publicObserv,\r\n obsvPriv: user.privObserv,\r\n bBloqueado: !!(user.reason || user.reason !== ''),\r\n iMotivo: user.reason\r\n }\r\n\r\n if (!LOCAL) {\r\n let url = `${URL()}/Clientes`\r\n\r\n if (token) {\r\n return await axios.post(url, userToRegister, HEADER(token)).then(response => {\r\n return response.data\r\n })\r\n } else {\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios.post(url, userToRegister, headerWithToken).then(response => {\r\n return response.data\r\n })\r\n })\r\n }\r\n } else {\r\n return this.user\r\n }\r\n };\r\n\r\n check = async (token, id, dni, mobile, email) => {\r\n if (!LOCAL) {\r\n let url = `${URL()}/Clientes/check?idClient=${id}`\r\n if (dni) {\r\n url += `&dni=${dni}`\r\n } else if (mobile) {\r\n url += `&mobile=${mobile}`\r\n } else if (email) {\r\n url += `&email=${email}`\r\n }\r\n if (token) {\r\n return await axios.get(url, HEADER(token)).then(response => {\r\n return response\r\n })\r\n } else {\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .get(url, headerWithToken).then(response => {\r\n return response\r\n })\r\n })\r\n }\r\n } else {\r\n return false\r\n }\r\n };\r\n\r\n changeUser = async (token, userId, user, changePassword = false, changeEmail = false) => {\r\n let userToChange = {}\r\n\r\n if (changePassword) {\r\n userToChange = {\r\n oldPassword: user.oldPassword,\r\n password: user.password,\r\n idencr: user.idencr\r\n }\r\n } else if (changeEmail) {\r\n userToChange = {\r\n Mail: user.email,\r\n //idencr: user.idencr\r\n }\r\n } else if (user) {\r\n const now = new Date()\r\n const d = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds()))\r\n\r\n userToChange = {\r\n nombres: user.name,\r\n apellidos: user.lastname,\r\n dni: user.dni,\r\n aniversario: user.born,\r\n movil: user.mobile,\r\n iSexo: user.gender ? user.gender : 0,\r\n codigoPostal: user.cp,\r\n iProvincia: user.idProvince,\r\n poblacion: user.population,\r\n centroId: user.idCenter,\r\n iMunicipio: user.idPopulation,\r\n bAceptaPublicidad: user.isPublicity,\r\n bAceptaCondiciones: user.isPrivacity,\r\n obsv: user.publicObserv,\r\n obsvPriv: user.privObserv,\r\n bBloqueado: !!user.reason,\r\n iMotivo: user.reason,\r\n usuarioId: user.userId,\r\n centroUsuarioId: user.centerUserId,\r\n fechaCliente: d.toISOString(),\r\n activo: user.active,\r\n idencr: user.idencr\r\n }\r\n } else {\r\n userToChange = {\r\n bConfirmado: true\r\n }\r\n }\r\n\r\n if (!LOCAL) {\r\n let url = `${URL()}/Clientes/part/${userId}`\r\n console.log('URL for update:', url);\r\n console.log('Sending update request:', userToChange);\r\n \r\n if (token) {\r\n return await axios.put(url, userToChange, HEADER(token))\r\n .then(response => {\r\n console.log('Update response:', response);\r\n \r\n // If this is an email change and it was successful\r\n if (changeEmail && response.status === 200) {\r\n \r\n console.log(`Email updated to ${user.email}`);\r\n }\r\n\r\n if (changePassword && response.status === 200) {\r\n \r\n console.log(`User password updated`);\r\n }\r\n \r\n return user;\r\n \r\n })\r\n .catch(error => {\r\n console.error('Update error:', error.response || error);\r\n throw error;\r\n });\r\n } else {\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .put(url, userToChange, headerWithToken).then(response => {\r\n return user\r\n })\r\n })\r\n }\r\n } else {\r\n return user\r\n }\r\n };\r\n\r\n getListReason = async (token) => {\r\n let url = `${URL()}/CvMotivos?i_kind=1`\r\n\r\n return await axios.get(url, HEADER(token)).then(response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n id: item.id,\r\n name: item.descr\r\n }\r\n })\r\n return parseResponse\r\n })\r\n };\r\n}\r\n","import axios from 'axios'\r\nimport { HEADER, TOKENIDENTITY } from '../constants'\r\nimport { URL, LOCAL } from '../config'\r\n\r\nexport default class Location {\r\n static INSTANCE = new Location();\r\n\r\n listProvince = [\r\n {\r\n idProvince: 1,\r\n province: 'Álava'\r\n },\r\n {\r\n idProvince: 37,\r\n province: 'Burgos'\r\n }\r\n ];\r\n\r\n listPopulation = [\r\n {\r\n idPopulation: 1016,\r\n idProvince: 1,\r\n population: 'Bernedo'\r\n },\r\n {\r\n idPopulation: 9109,\r\n idProvince: 37,\r\n population: 'Condado de Treviño'\r\n },\r\n {\r\n idPopulation: 1030,\r\n idProvince: 1,\r\n population: 'Lagrán'\r\n }\r\n ];\r\n\r\n Location() {}\r\n\r\n getListProvince = async (token, cp) => {\r\n if (!LOCAL) {\r\n let url = `${URL()}/CvProvincias/${cp}`\r\n if (token) {\r\n return await axios.get(url, HEADER(token)).then(response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n idProvince: item.iProvincia,\r\n province: item.provincia\r\n }\r\n })\r\n this.listProvince = parseResponse\r\n return this.listProvince\r\n })\r\n } else {\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .get(url, headerWithToken).then(response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n idProvince: item.iProvincia,\r\n province: item.provincia\r\n }\r\n })\r\n this.listProvince = parseResponse\r\n return this.listProvince\r\n })\r\n })\r\n }\r\n } else {\r\n return this.listProvince\r\n }\r\n };\r\n\r\n getListPopulation = async (token, cp, idProvince) => {\r\n if (!LOCAL) {\r\n let url = `${URL()}/CvMunicipios/${cp}`\r\n if (idProvince) {\r\n return this.listPopulation.filter(\r\n population => population.idProvince === idProvince\r\n )\r\n } else {\r\n if (token) {\r\n return await axios.get(url, HEADER(token)).then(response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n idPopulation: item.iMunicipio,\r\n idProvince: item.iProvincia,\r\n population: item.municipio\r\n }\r\n })\r\n this.listPopulation = parseResponse\r\n return this.listPopulation\r\n })\r\n } else {\r\n return TOKENIDENTITY().then(headerWithToken => {\r\n return axios\r\n .get(url, headerWithToken).then(response => {\r\n const parseResponse = response.data.map(item => {\r\n return {\r\n idPopulation: item.iMunicipio,\r\n idProvince: item.iProvincia,\r\n population: item.municipio\r\n }\r\n })\r\n this.listPopulation = parseResponse\r\n return this.listPopulation\r\n })\r\n })\r\n }\r\n }\r\n } else {\r\n return this.listPopulation\r\n }\r\n };\r\n}\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/*\r\nComponente para mostrar información temporal\r\n*/\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// CSS\r\nimport styles from './Snackbar.css'\r\nimport styled from 'styled-components'\r\n\r\nexport default function Snackbar({ show, setShow, message }) {\r\n const [showSnackbar, setShowSnackbar] = useState('')\r\n\r\n const Div = styled.div`\r\n visibility: hidden;\r\n min-width: 250px;\r\n margin-left: -125px;\r\n background-color: #333;\r\n color: #fff;\r\n text-align: center;\r\n border-radius: 20px;\r\n padding: 16px;\r\n position: fixed;\r\n z-index: 100;\r\n left: 50%;\r\n bottom: 50%;\r\n `\r\n\r\n useEffect(() => {\r\n if (show) {\r\n setShowSnackbar(styles.show)\r\n setTimeout(() => {\r\n setShowSnackbar('')\r\n setShow(false)\r\n }, 3000)\r\n }\r\n }, [show, setShow])\r\n\r\n return (\r\n
\r\n {message}\r\n
\r\n )\r\n}\r\n\r\nSnackbar.propTypes = {\r\n show: PropTypes.bool.isRequired,\r\n setShow: PropTypes.func.isRequired,\r\n message: PropTypes.string.isRequired\r\n}\r\n","/*\r\nComponente para mostrar un mensaje de confirmación\r\n*/\r\n\r\nimport React, { useEffect } from 'react'\r\n\r\n// #region CSS\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport Slide from '@material-ui/core/Slide'\r\n// #endregion\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return \r\n})\r\n\r\nexport default function AlertDialog({ children, show, setShow }) {\r\n const [open, setOpen] = React.useState(false)\r\n\r\n const handleClose = () => {\r\n setOpen(false)\r\n setShow(false)\r\n }\r\n\r\n useEffect(() => {\r\n setOpen(show)\r\n }, [show])\r\n\r\n return (\r\n
\r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n","/*\r\nComponentes para seleccionar la fecha y hora\r\n*/\r\n\r\nimport React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\n// CONSTANT\r\nimport { CALCULATEDATEMORETHAN18 } from '../constants'\r\n\r\n// #region DATERPICKER\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDatePicker\r\n} from '@material-ui/pickers'\r\nimport 'date-fns'\r\nimport esLocale from 'date-fns/locale/es'\r\nimport DateFnsUtils from '@date-io/date-fns'\r\n// #endregion\r\n\r\nexport default function DatePicker({\r\n value,\r\n onChange,\r\n onBlur,\r\n disabled,\r\n required,\r\n error\r\n}) {\r\n return (\r\n \r\n {\r\n if (event && !isNaN(event)) {\r\n const d = new Date(Date.UTC(event.getFullYear(), event.getMonth(), event.getDate()))\r\n onChange(\r\n d.toISOString().slice(0, 10)\r\n )\r\n } else {\r\n onChange(null)\r\n }\r\n }}\r\n onBlur={onBlur}\r\n KeyboardButtonProps={{\r\n 'aria-label': 'change date'\r\n }}\r\n minDate={new Date('1900-01-02')}\r\n maxDate={CALCULATEDATEMORETHAN18()}\r\n />\r\n \r\n )\r\n}\r\n\r\nDatePicker.propTypes = {\r\n value: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n onBlur: PropTypes.func.isRequired,\r\n disabled: PropTypes.bool.isRequired,\r\n required: PropTypes.bool.isRequired,\r\n error: PropTypes.bool.isRequired\r\n}\r\n","/* Ejemplo no utilizado */\r\nimport React from 'react'\r\n\r\n// #region CSS\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Fade from '@material-ui/core/Fade'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Box from '@material-ui/core/Box'\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: '30px',\r\n display: 'flex'\r\n }\r\n}))\r\n// #endregion\r\n\r\nexport default function Example(props) {\r\n const classes = useStyles()\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n POLÍTICA DE PRIVACIDAD\r\n \r\n \r\n \r\n \r\n
\r\n

\r\n El respeto a la privacidad del usuario y protección de sus\r\n datos de carácter personal que puedan ser recabados a través\r\n de los formularios contenidos en la presente website{' '}\r\n son uno de los objetivos primordiales para ILUSIONA GESTIÓN DE\r\n NEGOCIOS, S.L. (en adelante, ILUSIONA).\r\n

\r\n

\r\n En respeto a la Ley Orgánica 15/1999, de 13 de diciembre, de\r\n Protección de Datos de Carácter Personal y el Reglamento\r\n General de Protección de Datos 2016/679 de la Unión Europea,\r\n esta labor de recopilación de los datos se regirá a partir de\r\n los términos descritos a continuación:\r\n

\r\n
\r\n

\r\n \r\n Información sobre la recopilación, finalidad, legitimación y\r\n tiempo de conservación de los datos de carácter personal\r\n \r\n

\r\n

\r\n ILUSIONA puede recopilar datos de aquellos usuarios que se\r\n pongan en contacto a través de los formularios puestos a su\r\n disposición en{' '}\r\n clubilusiona.com o\r\n a través de correo electrónico, y que legitimarán el\r\n tratamiento de los datos según las estipulaciones recogidas en\r\n el presente apartado y el consentimiento prestado por el\r\n usuario.\r\n

\r\n

\r\n El usuario consiente expresa e inequívocamente que aquellos\r\n datos de carácter personal que facilite sean incorporados a\r\n nuestros ficheros, así como su tratamiento automatizado, o no,\r\n con la finalidad de gestionar el motivo de su contacto, darle\r\n trámite a nivel administrativo, gestionar el alta y gestión en\r\n el club ilusiona, así como con el objeto de remitirle\r\n comunicaciones comerciales, promocionales o publicitarias,\r\n incluidas las relativas al CLUB ILUSIONA. Dichos ficheros se\r\n encuentran debidamente inscritos en la Agencia Española de\r\n Protección de Datos conforme a la legislación vigente y\r\n normativa de desarrollo.\r\n

\r\n

\r\n Así mismo, se comunica a los usuarios que los datos de\r\n carácter personal serán conservados hasta que hayan dejado de\r\n ser necesarios o pertinentes para la finalidad por los que\r\n fueron recabados o registrados en nuestros ficheros.\r\n Posteriormente, los datos de carácter personal que cumplan\r\n esta condición, serán cancelados, a no ser que haya una norma\r\n de rango legal que habilite su conservación. Destacar que los\r\n datos de carácter personal serán cancelados cuando el usuario\r\n haya ejercido el derecho de cancelación de los mismos.\r\n

\r\n
\r\n

\r\n Cesión de datos\r\n

\r\n

\r\n La aceptación de esta política implica que el usuario expresa\r\n e inequívocamente consienta que los datos que ILUSIONA hayan\r\n podido recopilar e incluir en los ficheros mencionados sean\r\n cedidos o comunicados a las empresas asociadas del GRUPO\r\n ILUSIONA, que, por otra parte, aparecen referenciadas en la\r\n página web, así como a las demás empresas colaboradoras con\r\n las mismas finalidades para los que han sido recabados.\r\n

\r\n
\r\n

\r\n Derechos de los usuarios\r\n

\r\n

\r\n El consentimiento otorgado puede ser revocado y por ello los\r\n usuarios pueden ejercer sus derechos de acceso, rectificación,\r\n cancelación y oposición previstos en la Ley Orgánica 15/1999,\r\n de 13 de diciembre, de Protección de Datos de Carácter\r\n Personal dirigiendo una comunicación por escrito a la\r\n dirección: C/ Modolell, número 50, Bajos, (C.P. 08021)\r\n Barcelona; o bien a través de email{' '}\r\n central@ilusiona.com\r\n {' '}incluyendo en ambos casos fotocopia de su DNI u otro documento\r\n identificativo similar y asunto “PROTECCIÓN DE DATOS –\r\n ILUSIONA”.\r\n

\r\n

\r\n El usuario tiene derecho a presentar una reclamación ante la{' '}\r\n \r\n Agencia Española de Protección de Datos\r\n {' '}\r\n si considera que se vulneran los derechos anteriormente\r\n expuestos en la presente política de privacidad o si considera\r\n que el tratamiento de datos personales que le conciernen\r\n infringe el Reglamento (UE) 2016/679 del Parlamento Europeo y\r\n del Consejo, de 27 de abril de 2016, la Ley Orgánica 15/1999,\r\n de 13 de diciembre, de Protección de Datos de Carácter\r\n Personal y su Reglamento de desarrollo.\r\n

\r\n
\r\n

\r\n \r\n Seguridad aplicada a los datos de carácter personal\r\n \r\n

\r\n

\r\n Con el objeto de garantizar la seguridad e integridad de los\r\n datos facilitados que sean de carácter personal, ILUSIONA ha\r\n adoptado las medidas técnicas y organizativas necesarias con\r\n el objetivo de evitar la pérdida de los datos, el tratamiento\r\n o el acceso no autorizado de terceros tal y como estipula la\r\n legislación vigente en la materia y habida cuenta del estado\r\n de la tecnología y la naturaleza de los datos almacenados.\r\n

\r\n
\r\n

\r\n Redes Sociales\r\n

\r\n

\r\n ILUSIONA actualmente está presente en alguna de las\r\n principales redes sociales: Facebook, Twitter, Google +,\r\n Youtube y Pinterest . Por este motivo asume el papel de\r\n Responsable del Tratamiento de los Datos vertidos en sus\r\n perfiles derivado de los amigos, me gusta, followers o\r\n seguidores, comentarios…\r\n

\r\n

\r\n El usuario acepta expresamente estar sometido a las\r\n condiciones y términos que, en materia de privacidad, disponen\r\n las distintas redes sociales o plataformas donde la Bolera\r\n está presente, facultando a ésta a utilizar los medios que las\r\n mismas redes le permite para poder informar a los usuarios\r\n sobre las diferentes actividades y servicios que realiza.\r\n

\r\n
\r\n

\r\n Modificaciones\r\n

\r\n

\r\n La presente Política de Privacidad podrá ser actualizada en\r\n cualquier momento en base a las necesidades propias de la{' '}\r\n website y futuros cambios legislativos en materia de\r\n privacidad, reservándose ILUSIONA este derecho en exclusiva.\r\n

\r\n
\r\n

\r\n Contacto con ILUSIONA\r\n
\r\n Calle Modolell
\r\n Número 50, Bajos\r\n
\r\n Barcelona (08021)\r\n
\r\n Telf. 934.340.317\r\n
\r\n \r\n central@ilusiona.com \r\n \r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n","/*\r\nFormulario de registro y de modificacion de usuario/cliente de ilusiona\r\nutilizado apartir de variables para modificar tamaños y vistas del componente\r\nir al pie de pagina, Proptypes\r\n*/\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\n\r\n// SERVICES\r\nimport ServiceUser from '../services/User'\r\nimport ServiceCenter from '../services/Center'\r\nimport ServiceLocation from '../services/Location'\r\n\r\n// CONSTANT\r\nimport { CALCULATEAGE, FORMATDATE } from '../constants'\r\n\r\n// COMPONENT\r\nimport Snackbar from '../components/Snackbar/Snackbar'\r\nimport AlertDialog from '../components/AlertDialog'\r\nimport DatePicker from '../components/DatePicker'\r\n\r\n// PAGE\r\nimport PrivacityPolicy from '../pages/footer/PrivacyPolicy'\r\n\r\n// #region CSS\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport Fade from '@material-ui/core/Fade'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Box from '@material-ui/core/Box'\r\nimport Button from '@material-ui/core/Button'\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport Select from '@material-ui/core/Select'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport OutlinedInput from '@material-ui/core/OutlinedInput'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport ListSubheader from '@material-ui/core/ListSubheader'\r\nimport Visibility from '@material-ui/icons/Visibility'\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff'\r\nimport Typography from '@material-ui/core/Typography'\r\n// import { getDisplayDate } from '@material-ui/pickers/_helpers/text-field-helper'\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: '10px',\r\n display: 'flex'\r\n },\r\n border: {\r\n boxShadow: '0px 0px 3px 1px #9abf3a',\r\n paddingTop: '20px',\r\n paddingBottom: '20px',\r\n marginTop: '30px',\r\n marginBottom: '50px'\r\n },\r\n form: {\r\n width: '90%',\r\n marginTop: theme.spacing(3),\r\n paddingBottom: '20px'\r\n },\r\n link: {\r\n color: 'blue'\r\n },\r\n disabled: {},\r\n checkboxError: {\r\n borderStyle: 'solid',\r\n borderRadius: '5px',\r\n borderWidth: '1px',\r\n borderColor: 'red',\r\n marginTop: '1px'\r\n }\r\n}))\r\n// #endregion\r\n\r\nexport default function FormUser({ dataUser, userProfile, setResponse, token, options }) {\r\n console.log('FormUser V1 - RRLL 4.0')\r\n const classes = useStyles()\r\n if (!userProfile) {\r\n userProfile = 0\r\n }\r\n\r\n // #region Values\r\n const isMobile = options ? (!!options.isMobile) : false\r\n const isFidelizacion = options ? (!!options.isFidelizacion) : false\r\n const isRegister = options ? (!!options.isRegister) : false\r\n const userId = dataUser ? dataUser.id : '0'\r\n const [listProvince, setListProvince] = useState([])\r\n const [listPopulation, setListPopulation] = useState([])\r\n const [listReason, setListReason] = useState([])\r\n const [optionsSelectProvinceCenter, setOptionsSelectProvinceCenter] = useState([])\r\n const [formValues, setFormValues] = useState({\r\n showFormUser: isRegister && isFidelizacion ? true : !isRegister,\r\n showSelectReason: dataUser ? (!!dataUser.reason) : false,\r\n showSnackBar: false,\r\n snackMessage: 'Datos modificados',\r\n // showRegister: true,\r\n showPassword: false,\r\n edit: !!(!isRegister && isFidelizacion),\r\n editPassword: false,\r\n editMail: false,\r\n errorMessage: '',\r\n showPrivacity: false,\r\n step: 0,\r\n fAlta: dataUser ? FORMATDATE(dataUser.fAlta) : '',\r\n isActive: dataUser ? dataUser.active : false\r\n })\r\n /* const [values, setValues] = useState({\r\n isPrivacity: true,\r\n isPublicity: true,\r\n password: \"Test\",\r\n repassword: \"Test\",\r\n email: \"carlos.mesa@neuritelab.com\",\r\n mobile: \"691464928\",\r\n cp: \"0821\",\r\n idPopulation: \"\",\r\n idProvince: \"\",\r\n idCenter: \"\",\r\n gender: \"1\",\r\n born: \"1993-12-15\",\r\n dni: \"79274015F\",\r\n lastname: \"Mesa Cabrera\",\r\n name: \"Carlos\"\r\n }); */\r\n\r\n const [values, setValues] = useState({\r\n name: dataUser ? dataUser.name : '',\r\n lastname: dataUser ? dataUser.lastname : '',\r\n dni: dataUser ? dataUser.dni : '',\r\n born: dataUser ? dataUser.born : null,\r\n gender: dataUser ? dataUser.gender : '',\r\n cp: dataUser ? dataUser.cp : '',\r\n idProvince: dataUser ? dataUser.idProvince : '',\r\n idPopulation: dataUser ? dataUser.idPopulation : '',\r\n idCenter: dataUser ? dataUser.idCenter : '',\r\n mobile: dataUser ? dataUser.mobile : '',\r\n email: dataUser ? dataUser.email : '',\r\n publicObserv: dataUser ? dataUser.publicObserv : '',\r\n privObserv: dataUser ? dataUser.privObserv : '',\r\n reason: dataUser ? dataUser.reason : '',\r\n oldPassword: isRegister ? 'DontCheck' : '',\r\n password: '',\r\n repassword: '',\r\n isPrivacity: dataUser ? dataUser.isPrivacity : !!isFidelizacion,\r\n isPublicity: dataUser ? dataUser.isPublicity : !!isFidelizacion,\r\n idencr: dataUser ? dataUser.idencr : -1\r\n })\r\n const [checkValues, setCheckValues] = useState({\r\n name: false,\r\n lastname: false,\r\n dni: false,\r\n born: false,\r\n cp: false,\r\n idProvince: false,\r\n idPopulation: false,\r\n idCenter: false,\r\n gender: false,\r\n mobile: false,\r\n email: false,\r\n publicObserv: false,\r\n privObserv: false,\r\n reason: false,\r\n oldPassword: false,\r\n password: false,\r\n repassword: false,\r\n isPrivacity: false,\r\n isPublicity: false,\r\n idencr: -1\r\n })\r\n // #endregion\r\n\r\n // #region Dispatch\r\n const register = (token, user) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.register(token, user)\r\n .then(user => {\r\n resolve()\r\n })\r\n .catch(error => {\r\n reject(error.response)\r\n })\r\n })\r\n }\r\n const changeUser = (token, userId, user, isChangePassword, isChangeMail) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.changeUser(token, userId, user, isChangePassword, isChangeMail)\r\n .then(user => {\r\n resolve(user)\r\n })\r\n .catch(error => {\r\n reject(error.response)\r\n })\r\n })\r\n }\r\n const getListProvince = (token, cp) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceLocation.INSTANCE.getListProvince(token, cp)\r\n .then(listProvince => {\r\n resolve(listProvince)\r\n })\r\n .catch(error => {\r\n reject(error)\r\n })\r\n })\r\n }\r\n const getListReason = (token) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.getListReason(token)\r\n .then(listProvince => {\r\n resolve(listProvince)\r\n })\r\n .catch(error => {\r\n reject(error)\r\n })\r\n })\r\n }\r\n const getListCenter = (token) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceCenter.INSTANCE.getListCenter(token)\r\n .then(listProvince => {\r\n resolve(listProvince)\r\n })\r\n .catch(error => {\r\n reject(error)\r\n })\r\n })\r\n }\r\n const getListPopulation = (token, cp, idProvince) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceLocation.INSTANCE.getListPopulation(token, cp, idProvince)\r\n .then(listPopulation => {\r\n resolve(listPopulation)\r\n })\r\n .catch(error => {\r\n reject(error)\r\n })\r\n })\r\n }\r\n const check = (token, dni, mobile, email) => {\r\n return new Promise((resolve, reject) => {\r\n ServiceUser.INSTANCE.check(token, dataUser ? dataUser.id : 0, dni, mobile, email)\r\n .then(r => {\r\n resolve(r)\r\n })\r\n .catch(error => {\r\n reject(error.response)\r\n })\r\n })\r\n }\r\n // #endregion\r\n\r\n // #region Functions\r\n // Comprobamos y validamos el DNI\r\n const checkDNINIE = (dni) => {\r\n let numero, leta, letra\r\n let expresion_regular_dni = /^[XYZ]?\\d{5,8}[A-Z]$/\r\n\r\n dni = dni.toUpperCase()\r\n\r\n if (expresion_regular_dni.test(dni) === true) {\r\n numero = dni.substr(0, dni.length - 1)\r\n numero = numero.replace('X', 0)\r\n numero = numero.replace('Y', 1)\r\n numero = numero.replace('Z', 2)\r\n leta = dni.substr(dni.length - 1, 1)\r\n numero = numero % 23\r\n letra = 'TRWAGMYFPDXBNJZSQVHLCKET'\r\n letra = letra.substring(numero, numero + 1)\r\n if (letra != leta) {\r\n // alert('Dni erroneo, la letra del NIF no se corresponde');\r\n return false\r\n } else {\r\n // alert('Dni correcto');\r\n return true\r\n }\r\n } else {\r\n // alert('Dni erroneo, formato no válido');\r\n return false\r\n }\r\n }\r\n // Hacemos comprobaciones especiales para cada uno de los atributos\r\n const checkSpecialCondition = (atribute, value) => {\r\n let result = {\r\n check: false,\r\n errorMessage: ''\r\n }\r\n switch (atribute) {\r\n case 'email':\r\n if (!/^[a-zA-Z0-9._-]+@[a-zA-Z0-9]+\\.[A-Za-z]+$/.test(value)) {\r\n result.check = true\r\n result.errorMessage = 'Formato del email incorrecto'\r\n } else {\r\n check(token, null, null, value)\r\n .then(v => {\r\n setCheckValues({\r\n ...checkValues,\r\n email: false\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: ''\r\n })\r\n })\r\n .catch(e => {\r\n setCheckValues({\r\n ...checkValues,\r\n email: true\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Email ya registrado'\r\n })\r\n })\r\n }\r\n break\r\n case 'mobile':\r\n // if (/(\\+34|0034|34)?[ -]*(6|7)[ -]*([0-9][ -]*){8,12}/.test(value)) {\r\n if (\r\n /^(\\+34|34)?[ -]*(6|7)[ -]*([0-9])*$/.test(value) &&\r\n ((value.substring(0, 3) === '+34' && value.length === 12) || (value.substring(0, 2) === '34' && value.length === 11) || value.length === 9)\r\n ) {\r\n let telf = value.substring(value.length === 9 ? 0 : value.length === 11 ? 2 : 3, value.length)\r\n check(token, null, telf)\r\n .then(v => {\r\n setValues({\r\n ...values,\r\n mobile: telf\r\n })\r\n setCheckValues({\r\n ...checkValues,\r\n mobile: false\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: ''\r\n })\r\n })\r\n .catch(e => {\r\n setCheckValues({\r\n ...checkValues,\r\n mobile: true\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Movil ya registrado'\r\n })\r\n })\r\n } else {\r\n result.check = true\r\n result.errorMessage = 'Formato del movil incorrecto.'\r\n }\r\n break\r\n case 'born':\r\n let age = CALCULATEAGE(new Date(values.born))\r\n\r\n if (age < 18) {\r\n result.check = true\r\n result.errorMessage = 'Debes ser mayor de edad.'\r\n } else if (age > 100) {\r\n result.check = true\r\n result.errorMessage = 'Fecha de nacimiento incorrecta.'\r\n } else {\r\n result.check = false\r\n result.errorMessage = ''\r\n }\r\n break\r\n case 'dni':\r\n // let leterDNI = checkLeterDNI(value.substr(0, value.length - 1));\r\n // if ((/^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKE]$/i.test(value) && leterDNI === value.toUpperCase().charAt(value.length - 1)) || /^\\w{1}-?\\d{7}-?\\w{1}$/i.test(value)) {\r\n if (checkDNINIE(value)) {\r\n result.check = false\r\n result.errorMessage = ''\r\n if (value.length === 9) {\r\n check(token, value)\r\n .then(v => {\r\n setCheckValues({\r\n ...checkValues,\r\n dni: false\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: ''\r\n })\r\n })\r\n .catch(e => {\r\n setCheckValues({\r\n ...checkValues,\r\n dni: true\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'DNI/NIE ya registrado'\r\n })\r\n })\r\n }\r\n } else {\r\n result.check = true\r\n result.errorMessage = 'Formato DNI/NIE incorrecto'\r\n }\r\n break\r\n case 'password':\r\n console.log(\"Password\");\r\n // !/^[a-z0-9_-]{6,16}$/i.test(value)\r\n if (!/^[a-z0-9@#$%&!*_-]{6,16}$/i.test(value)) {\r\n result.check = true\r\n result.errorMessage = 'La contraseña debe tener al menos entre 6 y 16 caracteres.'\r\n } else {\r\n result.check = false\r\n result.errorMessage = ''\r\n }\r\n break\r\n case 'repassword':\r\n // First check if the format is valid\r\n console.log(\"Repassword\");\r\n if (!/^[a-z0-9@#$%&!*_-]{6,16}$/i.test(value)) {\r\n result.check = true\r\n result.errorMessage = 'La contraseña debe tener al menos entre 6 y 16 caracteres.'\r\n } \r\n // Then check if passwords match\r\n else if (values.password !== value) {\r\n result.check = true\r\n result.errorMessage = 'Las contraseñas deberian coincidir.'\r\n } else {\r\n result.check = false\r\n result.errorMessage = ''\r\n }\r\n break\r\n default:\r\n break\r\n }\r\n\r\n return result\r\n }\r\n const checkFieldIsEmptyOrNoneSelected = () => {\r\n // COPY CheckValues\r\n let copyCheckValues = Object.assign({}, checkValues)\r\n let result = {\r\n check: true,\r\n errorMessage: ''\r\n }\r\n\r\n for (let atr in values) {\r\n let variable = values[atr]\r\n // console.log(atr, typeof variable, values[atr])\r\n if (typeof variable === 'string') {\r\n if (checkValues[atr]) {\r\n result.check = false\r\n }\r\n if (atr === 'gender' || atr === 'publicObserv' || atr === 'privObserv' || atr === 'reason' || atr === '_oldMail') {\r\n continue\r\n }\r\n if (values[atr].trim().length === 0) {\r\n copyCheckValues[atr] = true\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Campos necesarios'\r\n })\r\n result.errorMessage = 'Campos necesarios'\r\n result.check = false\r\n }\r\n } else if (typeof variable === 'boolean') {\r\n if (!values[atr]) {\r\n if (result.errorMessage === 'Campos necesarios') {\r\n break\r\n } else {\r\n if (formValues.editPassword) {\r\n\r\n } else {\r\n if (atr !== 'isPublicity') {\r\n copyCheckValues[atr] = true\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Acepta las condiciones'\r\n })\r\n result.errorMessage = 'Acepta las condiciones'\r\n result.check = false\r\n }\r\n }\r\n }\r\n }\r\n } else if (typeof variable === 'object') {\r\n if (values[atr] === null) {\r\n copyCheckValues[atr] = true\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Campos necesarios'\r\n })\r\n result.errorMessage = 'Campos necesarios'\r\n result.check = false\r\n }\r\n } else if (typeof variable === 'undefined') {\r\n if (atr === 'idCenter') {\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Campo Centro es necesario'\r\n })\r\n result.errorMessage = 'Campo Centro es necesario'\r\n result.check = false\r\n }\r\n }\r\n if (!isRegister && atr === 'email' && !formValues.editPassword) {\r\n break\r\n }\r\n }\r\n\r\n if (formValues.showSelectReason) {\r\n if (!values.reason || values.reason === '') {\r\n result.errorMessage = 'Seleccione un motivo de bloqueo'\r\n result.check = false\r\n copyCheckValues.reason = true\r\n }\r\n }\r\n\r\n setCheckValues(copyCheckValues)\r\n return result\r\n }\r\n // Ordenamos los centros, primero con los de la provincia del usuario y los restantest\r\n const orderCentres = idProvince => {\r\n let options = []\r\n optionsSelectProvinceCenter.filter(t => t.props.id === idProvince).forEach(v => options.push(v))\r\n optionsSelectProvinceCenter.filter(t => t.props.id !== idProvince).forEach(v => options.push(v))\r\n\r\n setOptionsSelectProvinceCenter(options)\r\n }\r\n // Acciones especiales para codigo postal y provincia, llama a la API\r\n const specialAccionOnHandleChange = (prop, value) => {\r\n let copyFormValues = Object.assign({}, formValues)\r\n let copyValues = Object.assign({}, values)\r\n let copyCheckValues = Object.assign({}, checkValues)\r\n switch (prop) {\r\n case 'cp':\r\n if (value.length === 5) {\r\n copyValues.cp = value\r\n copyValues.idProvince = ''\r\n copyValues.idPopulation = ''\r\n getListProvince(token, value)\r\n .then(v => {\r\n setListProvince(v)\r\n if (v.length === 1) {\r\n orderCentres(v[0].idProvince)\r\n copyValues.idProvince = v[0].idProvince\r\n copyCheckValues.idProvince = false\r\n } else if (v.length === 0) {\r\n copyCheckValues.cp = true\r\n copyFormValues.errorMessage = 'No se ha encontrado la provincia.'\r\n }\r\n getListPopulation(token, value)\r\n .then(v => {\r\n if (v.length === 1) {\r\n setListPopulation(v)\r\n copyValues.idPopulation = v[0].idPopulation\r\n copyCheckValues.idPopulation = false\r\n } else {\r\n if (v.length != 0) {\r\n setListPopulation(v)\r\n } else {\r\n setListPopulation([])\r\n }\r\n }\r\n setValues(copyValues)\r\n setCheckValues(copyCheckValues)\r\n setFormValues(copyFormValues)\r\n })\r\n .catch(e => console.log(e))\r\n })\r\n .catch(e => console.log(e))\r\n }\r\n break\r\n case 'idProvince':\r\n getListPopulation(token, '', value)\r\n .then(v => {\r\n copyValues.idProvince = value\r\n\r\n orderCentres(value)\r\n setListPopulation(v)\r\n if (v.length === 1) {\r\n copyValues.idPopulation = v[0].idPopulation\r\n }\r\n setValues(copyValues)\r\n setFormValues(copyFormValues)\r\n })\r\n .catch(e => console.log(e))\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n // #endregion\r\n\r\n useEffect(() => {\r\n if (values.cp && !isRegister) {\r\n getListProvince(token, values.cp).then(v => {\r\n setListProvince(v)\r\n })\r\n getListPopulation(token, values.cp).then(v => {\r\n setListPopulation(v)\r\n })\r\n }\r\n if (!isRegister && isFidelizacion) {\r\n getListReason(token).then(v => {\r\n setListReason(v)\r\n })\r\n }\r\n\r\n getListCenter(token).then(v => {\r\n let optionsSelect = []\r\n if (v) {\r\n v.listProvince.forEach(province => {\r\n optionsSelect.push(\r\n \r\n {province.name}\r\n \r\n )\r\n v.listCenter\r\n .filter(c => c.idProvince === province.id)\r\n .forEach(center => {\r\n optionsSelect.push(\r\n \r\n {center.name}\r\n \r\n )\r\n })\r\n })\r\n setOptionsSelectProvinceCenter(optionsSelect)\r\n }\r\n })\r\n }, [])\r\n\r\n // #region OnBlur\r\n const handleBlur = prop => event => {\r\n let check = checkSpecialCondition(prop, event.target.value)\r\n specialAccionOnHandleChange(prop, event.target.value)\r\n setValues({\r\n ...values,\r\n [prop]: event.target.value\r\n })\r\n setCheckValues({\r\n ...checkValues,\r\n [prop]: check.check\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: check.errorMessage\r\n })\r\n }\r\n\r\n const handleBlurDate = prop => event => {\r\n let check = checkSpecialCondition(prop, event.target.value)\r\n specialAccionOnHandleChange(prop, event.target.value)\r\n setCheckValues({\r\n ...checkValues,\r\n [prop]: check.check\r\n })\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: check.errorMessage\r\n })\r\n }\r\n // #endregion\r\n\r\n // #region HandleChange\r\n const handleChange = prop => event => {\r\n // let check = checkSpecialCondition(prop, event.target.value);\r\n specialAccionOnHandleChange(prop, event.target.value)\r\n setValues({\r\n ...values,\r\n [prop]: event.target.value\r\n })\r\n setCheckValues({\r\n ...checkValues,\r\n [prop]: false\r\n })\r\n // setFormValues({ ...formValues, errorMessage: check.errorMessage });\r\n }\r\n const handleDateChange = date => {\r\n setValues({ ...values, born: date })\r\n }\r\n const handleClickBoolean = prop => event => {\r\n setValues({\r\n ...values,\r\n [prop]: !values[prop]\r\n })\r\n setCheckValues({\r\n ...checkValues,\r\n [prop]: false\r\n })\r\n }\r\n const handleChangeFormValuesBoolean = prop => event => {\r\n setFormValues({\r\n ...formValues,\r\n [prop]: !formValues[prop]\r\n })\r\n }\r\n const handleMouseDownPassword = event => {\r\n event.preventDefault()\r\n }\r\n // #endregion\r\n\r\n // #region OnClicks\r\n const onClickShowRegister = () => {\r\n setFormValues({\r\n ...formValues,\r\n showFormUser: true\r\n })\r\n }\r\n // envia un objeto login, para identeificar el callback desde la app origen y cerrar el dialogo\r\n const onClickBackLogin = () => {\r\n setResponse({ login: true })\r\n }\r\n // Mostrar la privacidad\r\n const onClickGoToPrivacity = () => {\r\n setFormValues({\r\n ...formValues,\r\n showPrivacity: !formValues.showPrivacity\r\n })\r\n }\r\n // envia un objeto corfirmation, para identeificar el callback desde la app origen y cerrar el dialogo\r\n const onClickBack = e => {\r\n e.preventDefault()\r\n let copyFormValues = Object.assign({}, formValues)\r\n copyFormValues.errorMessage = ''\r\n if (formValues.editMail) {\r\n copyFormValues.editMail = false\r\n } else if (formValues.editPassword) {\r\n copyFormValues.editPassword = false\r\n } else {\r\n copyFormValues.edit = false\r\n setResponse({ close: true })\r\n }\r\n setFormValues(copyFormValues)\r\n }\r\n // Submit del registro o la modificacion del usuario\r\n const onClickRegisterAndModified = e => {\r\n e.preventDefault()\r\n setResponse({ loading: true })\r\n\r\n // ControlFields\r\n let allCheck = checkFieldIsEmptyOrNoneSelected()\r\n\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: allCheck.errorMessage\r\n })\r\n\r\n // Move camera top\r\n if (!allCheck.check) {\r\n const comp = document.querySelector('#root').offsetTop - 100\r\n window.scroll({\r\n behavior: 'smooth',\r\n top: comp\r\n })\r\n setResponse({ loading: false })\r\n }\r\n\r\n // Control all good\r\n if (allCheck.check) {\r\n if (isRegister) {\r\n register(token, values)\r\n .then(v => {\r\n if (isFidelizacion) {\r\n setFormValues({ ...formValues, showSnackBar: true, snackMessage: 'Registrado' })\r\n }\r\n setResponse({\r\n loading: false,\r\n registered: values.email\r\n })\r\n })\r\n .catch(error => {\r\n setResponse({\r\n loading: false\r\n })\r\n if (error) {\r\n switch (error.status) {\r\n case 409:\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Usuario ya registado'\r\n })\r\n break\r\n case 500:\r\n setValues({\r\n ...values,\r\n errorMessage: 'Error del servidor, intente más tarde'\r\n })\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n })\r\n } else {\r\n let userMod\r\n if (isFidelizacion && !isRegister) {\r\n userMod = { ...values, ...{ userId: dataUser.userId, centerUserId: dataUser.centerUserId, active: formValues.isActive } }\r\n } else {\r\n userMod = values\r\n }\r\n let doFunct = (userIdPin) =>\r\n changeUser(token, userId, { ...userMod, userId: userIdPin }, formValues.editPassword, formValues.editMail)\r\n .then(user => {\r\n let copyFormValues = Object.assign({}, formValues)\r\n if (copyFormValues.editMail) {\r\n setResponse({\r\n logout: values.email\r\n })\r\n copyFormValues.editMail = false\r\n }\r\n copyFormValues.editPassword = false\r\n copyFormValues.edit = false\r\n copyFormValues.errorMessage = ''\r\n copyFormValues.showSnackBar = true\r\n setFormValues(copyFormValues)\r\n setResponse({ modified: user })\r\n })\r\n .catch(error => {\r\n setResponse({ loading: false })\r\n if (error) {\r\n switch (error.status) {\r\n case 409:\r\n if (error.data === 'password') {\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Error en la contraseña actual'\r\n })\r\n }\r\n if (error.data === 'email') {\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Email ya registrado'\r\n })\r\n }\r\n break\r\n default:\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: 'Error del servidor, intente más tarde'\r\n })\r\n break\r\n }\r\n }\r\n })\r\n if (isFidelizacion && !isRegister) {\r\n setResponse({ pin: 'pinEnter', function: doFunct })\r\n } else {\r\n doFunct()\r\n }\r\n }\r\n }\r\n }\r\n // Adelante en el registro del mobil\r\n const onClickNextRegisterMobile = e => {\r\n e.preventDefault()\r\n if (formValues.step < 3) {\r\n setFormValues({\r\n ...formValues,\r\n step: formValues.step + 1\r\n })\r\n } else {\r\n onClickRegisterAndModified(e)\r\n }\r\n }\r\n // Atras en el registro desdel mobil\r\n const onClickBackRegisterMobile = () => {\r\n if (formValues.step > 0) {\r\n setFormValues({\r\n ...formValues,\r\n step: formValues.step - 1\r\n })\r\n } else {\r\n onClickBackLogin()\r\n }\r\n }\r\n // Bloquear usuario\r\n const onClickBlockUser = () => {\r\n let copyFormValues = Object.assign({}, formValues)\r\n copyFormValues.errorMessage = ''\r\n copyFormValues.showSelectReason = !copyFormValues.showSelectReason\r\n setFormValues(copyFormValues)\r\n if (!copyFormValues.showSelectReason) {\r\n setValues({ ...values, reason: '' })\r\n }\r\n }\r\n // Eliminar usuario envia un objeto corfirmation, para identeificar el callback desde la app origen\r\n const onClickRemoveUser = () => {\r\n setResponse({ confirmation: true })\r\n }\r\n // Enviar la tarjeta del usuario\r\n const onClickSendCard = e => {\r\n e.preventDefault()\r\n setResponse({\r\n loading: true\r\n })\r\n changeUser(token, userId).then(() => {\r\n setFormValues({ ...formValues, showSnackBar: true, snackMessage: 'Tarjeta enviada' })\r\n setResponse({\r\n loading: false\r\n })\r\n })\r\n }\r\n // #endregion\r\n\r\n // #region Displays\r\n // #region FormUser\r\n const display18years = () => {\r\n return \r\n \r\n \r\n \r\n \r\n

¿Tienes más de 18 años?

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Sí\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n }\r\n const displayTextFieldTitle = () => {\r\n return \r\n \r\n \r\n {isRegister\r\n ? isFidelizacion\r\n ? 'Registro de nuevo cliente'\r\n : 'Registro de nuevo usuario'\r\n : formValues.editPassword\r\n ? 'Editar contraseña'\r\n : formValues.editMail\r\n ? 'Editar email'\r\n : isFidelizacion\r\n ? 'Datos del cliente'\r\n : 'Datos del usuario'}\r\n \r\n \r\n \r\n }\r\n const displayTextFieldError = () => {\r\n return formValues.errorMessage.length > 0 ? (\r\n \r\n
\r\n {formValues.errorMessage}\r\n
\r\n
\r\n ) : null\r\n }\r\n const displayInputName = () => {\r\n return \r\n \r\n \r\n }\r\n const displayInputLastName = () => {\r\n return \r\n \r\n \r\n }\r\n const displayInputDni = () => {\r\n return \r\n \r\n \r\n }\r\n const displayDateBorn = () => {\r\n return \r\n \r\n \r\n }\r\n const displaySelectGender = () => {\r\n return \r\n \r\n \r\n Género\r\n \r\n \r\n \r\n Hombre\r\n Mujer\r\n \r\n \r\n \r\n }\r\n const displayInputCP = () => {\r\n return \r\n \r\n \r\n }\r\n const displaySelectProvince = () => {\r\n return \r\n \r\n \r\n Provincia\r\n \r\n \r\n {listProvince.map(province => (\r\n \r\n {province.province}\r\n \r\n ))}\r\n \r\n \r\n \r\n }\r\n const displaySelectPopulation = () => {\r\n return \r\n \r\n \r\n Población\r\n \r\n \r\n {listPopulation.map(population => (\r\n \r\n {population.population}\r\n \r\n ))}\r\n \r\n \r\n \r\n }\r\n const displaySelectCenter = () => {\r\n return \r\n \r\n \r\n Centro\r\n \r\n \r\n {optionsSelectProvinceCenter}\r\n \r\n \r\n \r\n }\r\n const displayInputMobile = () => {\r\n return \r\n \r\n \r\n }\r\n const displayInputMail = () => {\r\n return \r\n \r\n \r\n }\r\n const displayInputOldPassword = () => {\r\n return formValues.editPassword ? (\r\n \r\n \r\n \r\n Contraseña actual *\r\n \r\n \r\n \r\n {formValues.showPassword ? : }\r\n \r\n \r\n }\r\n labelWidth={155}\r\n />\r\n \r\n \r\n ) : null\r\n }\r\n const displayInputPassword = () => {\r\n return \r\n \r\n {formValues.editPassword ? 'Contraseña nueva * (min. 6)' : 'Contraseña * (min. 6)'}\r\n \r\n \r\n \r\n {formValues.showPassword ? : }\r\n \r\n \r\n }\r\n labelWidth={formValues.editPassword ? 160 : 160}\r\n />\r\n \r\n }\r\n const displayInputRePassword = () => {\r\n return \r\n \r\n Repetir contraseña *\r\n \r\n \r\n \r\n {formValues.showPassword ? : }\r\n \r\n \r\n }\r\n labelWidth={163}\r\n />\r\n \r\n }\r\n const displayCheckBoxPrivacity = () => {\r\n return \r\n }\r\n label={\r\n \r\n }\r\n />\r\n \r\n }\r\n const displayCheckBoxPublicity = () => {\r\n return \r\n }\r\n label={\r\n \r\n }\r\n />\r\n \r\n }\r\n // #endregion\r\n // #region Fidelizacion control\r\n const displayTextFieldFalta = () => {\r\n return isFidelizacion && !isRegister ? \r\n \r\n \r\n {'Fecha de alta: ' + formValues.fAlta}\r\n \r\n \r\n : null\r\n }\r\n const displayInputObservations = () => {\r\n return \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n }\r\n const displayButtonBlockAndRemove = () => {\r\n if (!isRegister) {\r\n return \r\n \r\n \r\n {!formValues.showSelectReason ? 'Bloquear' : 'Desbloquear'}\r\n \r\n \r\n \r\n \r\n {'Eliminar'}\r\n \r\n \r\n \r\n {displayCheckboxPublicityShort()}\r\n \r\n \r\n } else {\r\n return null\r\n }\r\n }\r\n const displaySelectReasonBlock = () => {\r\n return \r\n \r\n \r\n Motivo del bloqueo\r\n \r\n \r\n {listReason.map(reason => (\r\n \r\n {reason.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n }\r\n const displayCheckboxPublicityShort = () => {\r\n return }\r\n label={\r\n }\r\n />\r\n }\r\n // #endregion\r\n // #endregion\r\n\r\n return (\r\n
\r\n { setFormValues({ ...formValues, showPrivacity: v }) }}\r\n >\r\n \r\n \r\n { setFormValues({ ...formValues, showSnackBar: v }) }}\r\n message={formValues.snackMessage}\r\n />\r\n\r\n \r\n {display18years()}\r\n {/* FormUser */}\r\n \r\n \r\n {isMobile ? (\r\n \r\n
\r\n \r\n {displayTextFieldError()}\r\n \r\n {formValues.step === 0 ? (\r\n \r\n {displayInputName()}\r\n {displayInputLastName()}\r\n {displayInputDni()}\r\n {displayDateBorn()}\r\n {displaySelectGender()}\r\n \r\n ) : null}\r\n {formValues.step === 1 ? (\r\n \r\n {displayInputCP()}\r\n {displaySelectProvince()}\r\n {displaySelectPopulation()}\r\n {displaySelectCenter()}\r\n {displayInputMobile()}\r\n \r\n ) : null}\r\n {formValues.step === 2 ? (\r\n \r\n {displayInputMail()}\r\n \r\n {displayInputPassword()}\r\n \r\n \r\n {displayInputRePassword()}\r\n \r\n \r\n ) : null}\r\n {formValues.step === 3 ? (\r\n \r\n {displayCheckBoxPrivacity()}\r\n {displayCheckBoxPublicity()}\r\n \r\n ) : null}\r\n \r\n \r\n {formValues.step < 3 ? 'Siguiente' : 'Registrar'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : (\r\n \r\n {displayTextFieldTitle()}\r\n {displayTextFieldFalta()}\r\n
\r\n \r\n {displayTextFieldError()}\r\n {formValues.editMail || formValues.editPassword ? null : (\r\n \r\n {displayInputName()}\r\n {displayInputLastName()}\r\n {displayInputDni()}\r\n {displayDateBorn()}\r\n {displaySelectGender()}\r\n {displayInputCP()}\r\n {displaySelectProvince()}\r\n {displaySelectPopulation()}\r\n {displaySelectCenter()}\r\n {displayInputMobile()}\r\n \r\n )}\r\n {isRegister || formValues.editMail ? displayInputMail() : null}\r\n {/* Passwords */}\r\n {isRegister || formValues.editPassword ? (\r\n \r\n {displayInputOldPassword()}\r\n \r\n {displayInputPassword()}\r\n \r\n \r\n {displayInputRePassword()}\r\n \r\n \r\n ) : null}\r\n {/* Descriptions */}\r\n {isFidelizacion && !formValues.editMail && !formValues.editPassword ? (\r\n \r\n {displayInputObservations()}\r\n {displayButtonBlockAndRemove()}\r\n {formValues.showSelectReason ? displaySelectReasonBlock() : null}\r\n \r\n ) : null}\r\n {/* CheckBoxes */}\r\n {formValues.editMail || formValues.editPassword || (isFidelizacion && !isRegister) ? null : (\r\n \r\n {displayCheckBoxPrivacity()}\r\n {displayCheckBoxPublicity()}\r\n \r\n )}\r\n {/* Buttons */}\r\n \r\n {isRegister ? (\r\n \r\n ) : null}\r\n {!isRegister && !formValues.edit ? (\r\n \r\n ) : null}\r\n {formValues.edit ? (\r\n \r\n {formValues.editMail || formValues.editPassword ? null : (\r\n \r\n {isFidelizacion\r\n ? \r\n \r\n \r\n : \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : null}\r\n \r\n {isRegister ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nFormUser.propTypes = {\r\n dataUser: PropTypes.object.isRequired, // Objeto con los datos del cliente\r\n userProfile: PropTypes.object.isRequired, // Objeto con los datos del perfil del usuario, para saber que acciones puede hacer el usuarios\r\n setResponse: PropTypes.func.isRequired, // Funcion callback para devolver resultados a la web de origen.\r\n token: PropTypes.string, // Token para realizar las peticiones a la API, con el identificador del usuario\r\n options: PropTypes.object // Opciones para identificar que displays necesitamos [isMobile, isFidelizacion, isRegister] para diferentes aplicaciones\r\n}\r\n\r\n/*\r\nAplicaciones:\r\n-Web: [isMobile, isRegister] si isRegister===false y isFidelizacion===false significa que estamos en el perfil del cliente(en la web)\r\n [isMobile = true]\r\n estariamos desde un mobil donde mostraremos en pequeños modulos el registro del cliente\r\n [isRegister = false]\r\n estamos en el perfil del usuario, para poder modificarlo\r\n [default]\r\n estariamos en la web convencional\r\n-Fidelización:\r\n [isFidelizacion = true, isRegister = false]\r\n mostraremos displays para poder controlar el bloqueo del usuario, comentarios del usuario, eliminarlo, modificarlo,...\r\n [isFidelizacion = true, isRegister = true]\r\n podremos crear un nuevo usuario como si estuviesemos en la web\r\n*/\r\n","/*\r\nSpinner componente de carga, loading\r\n*/\r\n\r\nimport React from 'react'\r\n\r\n// #region CSS\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n position: 'fixed',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n left: 0,\r\n zIndex: 1050,\r\n background: 'center no-repeat rgba(16, 3, 75, 0.3)'\r\n },\r\n spinner: {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n margin: 'auto'\r\n }\r\n}))\r\n// #endregion\r\n\r\nexport default function Loading() {\r\n const classes = useStyles()\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n","/* \r\nPantalla de regalos compuesta por 2 componentes principales (FilterItem,GridCardItem)\r\n*/\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\n\r\nimport { GETTOKEN } from '../constants';\r\n\r\n//REDUX\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport {\r\n getListGiftAction\r\n} from \"../redux/actions/giftActions\";\r\n\r\n//MODULES\r\nimport { FilterItem, GridCardItem } from \"ilusiona-react-components\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n marginBottom: \"30px\",\r\n display: \"flex\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function ListGift(props) {\r\n const classes = useStyles();\r\n\r\n //Move camera top\r\n const comp = document.querySelector(\"#root\").offsetTop - 100;\r\n window.scroll({ behavior: \"smooth\", top: comp });\r\n\r\n //#region Values\r\n const user = useSelector(state => state.user.user);\r\n const isMobile = useMediaQuery(\"(max-width:500px)\");\r\n const [filter, setFilter] = useState({\r\n name: \"\",\r\n family: \"\",\r\n idCenter: user.idCenter,\r\n points: [user.points + 1, 100000]\r\n });\r\n const [pagination, setPagination] = useState({\r\n page: 0,\r\n rowsForPage: 24,\r\n listNumRows: [24, 36, 48, 60],\r\n order: 0\r\n });\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n //#endregion\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n const listGifts = useSelector(state => state.gift.listGift);\r\n const numOfGift = useSelector(state => state.gift.numOfGift);\r\n const getListGift = (filter, from, to, order) =>\r\n dispatch(getListGiftAction(filter, from, to, order));\r\n //#endregion\r\n\r\n //Estar pendientes en cambios en el filtro\r\n useEffect(() => {\r\n if (pagination.page === 0) {\r\n setLoading(true);\r\n getListGift(filter, 0, pagination.rowsForPage, pagination.order)\r\n .then(v => {\r\n setLoading(false);\r\n })\r\n .catch(error => {\r\n setLoading(false);\r\n setError(true);\r\n });\r\n } else {\r\n setPagination({ ...pagination, page: 0 });\r\n }\r\n // eslint-disable-next-line\r\n }, [filter]);\r\n\r\n //Estar pendientes de cambios en la paginación\r\n useEffect(() => {\r\n setLoading(true);\r\n\r\n getListGift(\r\n filter,\r\n pagination.page * pagination.rowsForPage,\r\n pagination.rowsForPage,\r\n pagination.order\r\n )\r\n .then(value => {\r\n setLoading(false);\r\n })\r\n .catch(error => {\r\n setLoading(false);\r\n setError(true);\r\n });\r\n // eslint-disable-next-line\r\n }, [pagination.page, pagination.rowsForPage, pagination.order]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Lista de regalos\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n console.log(\"click\")}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","//SERVICES\r\nimport ServiceGift from \"../../services/Gift\";\r\n\r\n//TYPES\r\nexport const START_LISTGIFT = \"START_LISTGIFT\";\r\nexport const IS_LISTGIFT = \" IS_LISTGIFT\";\r\nexport const IS_LISTGIFT_NUMGIFT = \" IS_LISTGIFT_NUMGIFT\";\r\nexport const ERROR_LISTGIFT = \" ERROR_LISTGIFT\";\r\nexport const START_LISTFAMILY = \"START_LISTFAMILY\";\r\nexport const IS_LISTFAMILY = \" IS_LISTFAMILY\";\r\nexport const ERROR_LISTFAMILY = \" ERROR_LISTFAMILY\";\r\n\r\n//const gift = useSelector(state => state.gift);\r\n\r\nexport function getListGiftAction(filter, from, to, order) {\r\n return async dispatch => {\r\n dispatch({ type: START_LISTGIFT });\r\n\r\n return new Promise((resolve, reject) => {\r\n ServiceGift.INSTANCE.getListGift(filter, from, to, order)\r\n .then(result => {\r\n dispatch({\r\n type: IS_LISTGIFT,\r\n payload: result.listGift\r\n });\r\n dispatch({\r\n type: IS_LISTGIFT_NUMGIFT,\r\n payload: result.numOfGift\r\n });\r\n resolve();\r\n })\r\n .catch(error => {\r\n dispatch({ type: ERROR_LISTGIFT });\r\n reject(error);\r\n });\r\n });\r\n };\r\n}","/* \r\nPatalla perfil compuesta por un componente de ilusiona-react-components, que se trata de un formulario con los \r\ndatos del usuario, con la posibilidad de modificarlos.\r\nResponse: es una varaible para comunicarse con FormUser.\r\n */\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport Cookies from \"js-cookie\";\r\n\r\nimport { GETTOKEN } from '../constants';\r\n\r\n//REDUX\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { loadingAction, logoutAction, setUserAction } from \"../redux/actions/userActions\";\r\n\r\n//MODULE\r\nimport { FormUser } from \"ilusiona-react-components\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function Profile({ history }) {\r\n const classes = useStyles();\r\n\r\n const user = useSelector(state => state.user.user);\r\n\r\n const [response, setResponse] = useState({});\r\n\r\n const dispatch = useDispatch();\r\n\r\n //Es un callback para poder comunicar con Ilusiona-react-component\r\n //Para saber si el usuario ha sido registado, mail modificado para poder desloguear, cargando o modificiador\r\n useEffect(() => {\r\n const loading = loading => dispatch(loadingAction(loading));\r\n if (\"loading\" in response) {\r\n loading(response.loading);\r\n }\r\n if (\"logout\" in response) {\r\n const logout = () => dispatch(logoutAction());\r\n logout().then(() => {\r\n history.push(\"/email-modificado/\" + response.logout);\r\n loading(false);\r\n });\r\n }\r\n if (\"registered\" in response) {\r\n history.push(\"/registrado/\" + response.registered);\r\n loading(false);\r\n }\r\n if (\"modified\" in response) {\r\n let userC = JSON.parse(Cookies.get(\"iluUser\"));\r\n userC = { ...userC, ...response.modified };\r\n Cookies.set(\"iluUser\", userC, { expires: 1 });\r\n const setUser = user => dispatch(setUserAction(user));\r\n setUser(userC);\r\n }\r\n }, [dispatch, history, response]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Perfil\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","/* \r\nPantalla completamente informativa, con cuadros de texto\r\n */\r\n\r\n\r\nimport React, { useEffect } from \"react\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\"\r\n },\r\n textJustifyXS: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n textAlign: \"justify\"\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n textAlign: \"start\"\r\n }\r\n },\r\n link: {\r\n color: \"#DF7D44\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function FrequentQuestion(props) {\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n //Move camera top\r\n const comp = document.querySelector(\"#root\").offsetTop - 100;\r\n window.scroll({ behavior: \"smooth\", top: comp });\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n Dudas\r\n \r\n \r\n \r\n \r\n \r\n \r\n 1.- ¿Cómo puedo darme de alta en el Ilusiona Club?\r\n \r\n \r\n

\r\n Es muy fácil, tan sólo tienes que darle de alta en nuestra\r\n web www.ilusiona.com/club-ilusiona/{\" \"}\r\n y realizar el proceso de alta. Recuerda que tienes que ser\r\n mayor de 18 años.\r\n

\r\n
\r\n
\r\n \r\n \r\n 2.- ¿Dónde puedo utilizar la tarjeta del Ilusiona Club?\r\n \r\n \r\n

\r\n Puedes usarla en todos los centros de Ilusiona, mira aquí{\" \"}\r\n \r\n www.ilusiona.com/#centros\r\n \r\n

\r\n
\r\n
\r\n \r\n \r\n 3.- ¿Cómo recibiré mis promociones?\r\n \r\n \r\n

\r\n Te llegarán directamente vía email o sms, y también las\r\n tendrás expuestas en nuestros centros Ilusiona.\r\n

\r\n
\r\n
\r\n \r\n \r\n 4.- ¿Puedo utilizar mis promociones en otro centro distinto?\r\n \r\n \r\n

\r\n Los cupones o promociones podrán ser utilizados en todos\r\n nuestros centros, salvo en caso que se especifique lo\r\n contrario en el cupón promocional.\r\n

\r\n
\r\n
\r\n \r\n \r\n 5.- ¿Y si quiero actualizar mis datos o cambiar mi email?\r\n \r\n \r\n

\r\n Muy fácil, puedes hacerlo tú mismo en el apartado de “Mis\r\n datos” una vez entres en la web del Ilusiona Club y te\r\n identifiques.\r\n

\r\n
\r\n
\r\n \r\n \r\n 6.- Si tengo alguna duda, ¿cómo puedo informarme?\r\n \r\n \r\n

\r\n Si estás en uno de nuestros centros pregunta directamente al\r\n personal de recepción. También te informaremos en{\" \"}\r\n \r\n ilusiona.club@ilusiona.com\r\n \r\n

\r\n
\r\n
\r\n \r\n \r\n 7.- ¿Pueden canjear otras personas mis promociones?\r\n \r\n \r\n

\r\n Tus promociones son tuyas y sólo tuyas!. Sólo las puedes\r\n canjear tú.\r\n

\r\n
\r\n
\r\n \r\n \r\n 8.- ¿Puedo utilizar mis promociones más de una vez?\r\n \r\n \r\n

\r\n Depende. Hay muchas promociones y muy distintas. Saldrás de\r\n dudas leyendo las condiciones de cada una.\r\n

\r\n
\r\n
\r\n \r\n \r\n 9.- ¿Se pueden utilizar varias promociones en una misma\r\n visita?\r\n \r\n \r\n

\r\n En general, hay que elegir una promoción por visita. Pero\r\n también hay promociones acumulables. Lo verás en las\r\n condiciones de uso de cada una.\r\n

\r\n
\r\n
\r\n \r\n \r\n 10.- ¿En qué servicios puedo utilizar la tarjeta?\r\n \r\n \r\n

\r\n En todos tus servicios tanto de bar, cumpleaños como bolera.\r\n Recuerda guardar los tickets de compra y mostrarlos en\r\n recepción con tú tarjeta para acumular más puntos que\r\n cambiar por regalos.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","/* \r\nPantalla registro compuesta con FormUser parametrizado para registrar.\r\nResponse: es una varaible para comunicarse con FormUser.\r\n */\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\n\r\nimport { GETTOKEN } from '../../constants';\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport { loadingAction, logoutAction } from \"../../redux/actions/userActions\";\r\n\r\n//MODULES\r\nimport { FormUser } from \"ilusiona-react-components\";\r\n\r\n//#region CSS\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"10px\",\r\n display: \"flex\"\r\n },\r\n border: {\r\n boxShadow: \"0px 0px 3px 1px #9abf3a\",\r\n paddingTop: \"20px\",\r\n paddingBottom: \"20px\",\r\n marginTop: \"60px\",\r\n marginBottom: \"50px\"\r\n },\r\n form: {\r\n width: \"90%\",\r\n marginTop: theme.spacing(3)\r\n },\r\n link: {\r\n color: \"blue\"\r\n },\r\n disabled: {},\r\n checkboxError: {\r\n borderStyle: \"solid\",\r\n borderWidth: \"1px\",\r\n borderColor: \"red\",\r\n marginTop: \"1px\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nfunction Register({ history }) {\r\n const classes = useStyles();\r\n\r\n const isMobile = useMediaQuery(\"(max-width:500px)\");\r\n const [response, setResponse] = useState({});\r\n\r\n const dispatch = useDispatch();\r\n\r\n //Es un callback para poder comunicar con Ilusiona-react-component\r\n //Para saber si el usuario ha sido registado, mail modificado para poder desloguear, cargando o logueado\r\n useEffect(() => {\r\n if (\"loading\" in response) {\r\n const loading = loading => dispatch(loadingAction(loading));\r\n loading(response.loading);\r\n }\r\n if (\"logout\" in response) {\r\n const logout = () => dispatch(logoutAction());\r\n logout().then(() => {\r\n history.push(\"/email-modificado/\" + response.logout);\r\n });\r\n }\r\n if (\"registered\" in response) {\r\n history.push(\"/registrado/\" + response.registered);\r\n }\r\n if (\"login\" in response) {\r\n history.push(\"/login\");\r\n }\r\n }, [dispatch, history, response]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default Register;\r\n","/* \r\nPantalla de confirmacion una vez registrado\r\n */\r\n\r\nimport React from \"react\";\r\n\r\n//COMPONENTS\r\nimport AlertDialog from \"../../components/AlertDialog\";\r\n\r\n//REDUX\r\n// import { useDispatch } from \"react-redux\";\r\n// import { resendConfirmationMailAction } from \"../../redux/actions/userActions\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"10px\",\r\n display: \"flex\"\r\n },\r\n border: {\r\n boxShadow: \"0px 0px 3px 1px #9abf3a\",\r\n paddingTop: \"40px\",\r\n paddingBottom: \"40px\",\r\n marginTop: \"60px\",\r\n marginBottom: \"50px\"\r\n },\r\n labelBig: {\r\n fontSize: \"1.25rem\",\r\n align: \"justify\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nfunction Registered({ history, match }) {\r\n const classes = useStyles();\r\n\r\n //#region Values\r\n const { mail } = match.params;\r\n const [showDialog, setShowdialog] = React.useState(false);\r\n // eslint-disable-next-line\r\n const [message, setMessage] = React.useState(\"\");\r\n //#endregion\r\n\r\n //#region DISPATCH & SELECTOR\r\n // const dispatch = useDispatch();\r\n // const resendConfirmationMail = mail => dispatch(resendConfirmationMailAction(mail));\r\n //#endregion\r\n\r\n //#region OnClick\r\n /*const onClickResendConfirmationMail = () => {\r\n resendConfirmationMail(mail)\r\n .then(v => {\r\n setShowdialog(true);\r\n setMessage(\"Hemos reenviado el email de confirmación.\");\r\n })\r\n .catch(e => {\r\n setShowdialog(true);\r\n setMessage(\"Ha habido un problema, vuelve a intentarlo.\");\r\n });\r\n };*/\r\n\r\n const onClickGotoClub = () => {\r\n history.push(\"/\" + mail);\r\n }; \r\n //#endregion\r\n\r\n return (\r\n
\r\n \r\n \r\n {message}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Bienvenido a Ilusiona Club\r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n Entrar al Club\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Registered;\r\n","import React from \"react\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\",\r\n textAlign: \"justify\"\r\n },\r\n table_td: {\r\n border: \"solid 1px\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function Example(props) {\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n POLÍTICA DE PRIVACIDAD\r\n \r\n \r\n \r\n \r\n
\r\n

\r\n ILUSIONA GESTIÓN DE NEGOCIOS, S.L. tiene como objetivo respetar la privacidad de sus usuarios y proteger los datos de carácter personal que éstos puedan facilitar a ILUSIONA GESTIÓN DE NEGOCIOS.\r\n

\r\n

\r\n En respeto a la Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales (en adelante, LOPDGDD) y el Reglamento General de Protección de Datos de la Unión Europea (en adelante, RGPD), esta labor de recopilación de los datos se regirá a partir de los términos descritos a continuación:\r\n

\r\n
\r\n

\r\n \r\n \r\n Información sobre el responsable del tratamiento, la recopilación, finalidad, legitimación y tiempo de conservación de los datos de carácter personal\r\n \r\n \r\n

\r\n

\r\n En la presente política de privacidad se encuentra toda la información sobre los tratamientos de datos de carácter personal que ILUSIONA GESTIÓN DE NEGOCIOS realiza sobre los datos del usuario. Como muestra de compromiso con la normativa de protección de datos, ILUSIONA GESTIÓN DE NEGOCIOS pone a disposición del usuario, de manera permanente, la información relativa a nuestra política de privacidad en la presente website.\r\n

\r\n

\r\n ILUSIONA GESTIÓN DE NEGOCIOS, S.L. (en adelante, ILUSIONA GESTIÓN DE NEGOCIOS)
\r\n NIF: B-62.370.408
\r\n Calle Modolell, 50, Bajos
\r\n Barcelona (08021 - Barcelona)\r\n

\r\n

\r\n Dependiendo de la utilización que el usuario realice de la presente website, ILUSIONA GESTIÓN DE NEGOCIOS necesitará tratar datos de carácter personal, que, en general, serán los siguientes:\r\n

\r\n

\r\n

  • \tDatos identificativos (por ejemplo, nombre, apellido, idioma, datos de contacto, etc.)
  • \r\n
  • \tInformación económica y transaccional (por ejemplo, datos de pago o de tarjeta, información acerca de tus compras, pedidos, devoluciones, etc.).
  • \r\n
  • \tDatos de conexión y navegación (en caso de que interactúes con nosotros desde el móvil, por ejemplo)
  • \r\n
  • \tInformación comercial (por ejemplo, si estás suscrito a nuestra newsletter)
  • \r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS recuerda que alguno de los datos personales solicitados para dar acceso a alguna de las funcionalidades o servicios de la presente website serán obligatorios, puesto que son imprescindibles para prestar el servicio, dar acceso a la funcionalidad en cuestión, o gestionar el motivo de su contacto y darle trámite a nivel administrativo.\r\n

    \r\n

    \r\n Dependiendo de cómo interactúe el usuario en la presente website, se tratarán los datos de carácter personal para las siguientes finalidades:\r\n

    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    FINALIDADINFORMACIÓN
    CLUB ILUSIONAEn caso de registro en el Club Ilusiona, se tratarán los datos para la identificación inequívoca en la plataforma y dar acceso a las diferentes funcionalidades, área privada, gestión de puntos acumulados, promociones, así como gestionar los datos de carácter personal de contacto. El usuario puede cancelar la cuenta contactando con ILUSIONA GESTIÓN DE NEGOCIOS a través de la dirección de correo electrónico{\" \"}\r\n \r\n clubilusiona@ilusiona.com\r\n . Por ser miembro del Club Ilusiona, el usuario podrá canjear los puntos acumulados en su cuenta en cualquier centro recreativo del GRUPO ILUSIONA. De la misma manera, el usuario podrá disfrutar de diferentes ventajas y promociones. La plataforma será gestionada por ILUSIONA GESTIÓN DE NEGOCIOS.
    DESARROLLO, CUMPLIMIENTO Y EJECUCIÓN DE LA RELACIÓN CONTRACTUAL ENTRE ILUSIONA GESTIÓN DE NEGOCIOS Y USUARIO\r\n Esta finalidad incluye el tratamiento de los datos para:\r\n
  • Contacto en relación a la gestión, ejecución y desarrollo de los servicios o productos contratados.
  • \r\n
  • Gestionar el pago de los servicios y/o productos contratados.
  • \r\n
  • Gestionar los trámites necesarios con fines de facturación, así como poner a disposición del usuario los tickets y facturas de los servicios y/o productos contratados.
  • \r\n
  • Cumplimiento de las obligaciones contables, fiscales y administrativas de las empresas pertenecientes al GRUPO ILUSIONA.
  • \r\n
    ATENCIÓN AL CLIENTEGestionar los datos de carácter personal estrictamente necesarios para gestionar o resolver la consulta, solicitud o petición realizada por el usuario.
    MARKETINGSe tratarán datos de carácter personal para:\r\n
  • Gestionar el envío de comunicaciones comerciales, promociones o Newsletter de todos aquellos usuarios que se hayan suscrito.
  • \r\n ILUSIONA GESTIÓN DE NEGOCIOS está presente en las principales redes sociales: Facebook, Instagram, LinkedIn y YouTube. Por este motivo asume el papel de Responsable del Tratamiento de los datos vertidos en sus perfiles derivado de amigos, likes, followers o seguidores, comments, pines, etc.\r\n
    ENCUESTAS DE CALIDADEnvío de encuestas de calidad sobre los productos o servicios prestados.
    \r\n
    \r\n

    \r\n El usuario responderá, en cualquier caso, de la veracidad de los datos facilitados. En caso contrario, ILUSIONA GESTIÓN DE NEGOCIOS podrá excluir al usuario de los servicios en los que haya facilitado datos falsos, sin perjuicio de las demás acciones que legalmente procedan.\r\n

    \r\n

    \r\n La base legal que permite el tratamiento de los datos de carácter personal facilitados por el usuario se regirá por lo establecido en la siguiente tabla:\r\n

    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    FINALIDADBASE LEGAL
    CLUB ILUSIONA\r\n La base legal para el tratamiento de los datos de carácter personal para el registro del usuario en la website del CLUB ILUSIONA es la ejecución de los términos y condiciones que regulan el uso de dicha plataforma. A fin de que el usuario se pueda registrar es necesario tratar datos de carácter personal. En caso contrario, no se podrá prestar este servicio.\r\n
    DESARROLLO, CUMPLIMIENTO Y EJECUCIÓN DE LA RELACIÓN CONTRACTUAL ENTRE USUARIO Y ILUSIONA GESTIÓN DE NEGOCIOS \r\n El tratamiento de los datos de carácter personal es necesario para la ejecución del contrato que rija la prestación de servicios o productos de ILUSIONA GESTIÓN DE NEGOCIOS.\r\n
    \r\n ILUSIONA GESTIÓN DE NEGOCIOS tiene un interés legítimo para realizar tantas comprobaciones considere oportunas para detectar y prevenir posibles fraudes durante la ejecución del contrato. Este tratamiento es necesario para supervisar el pago de un servicio o producto a fin de proteger de intentos de fraude.\r\n
    ATENCIÓN AL CLIENTE\r\n Cuando el usuario contacte a través de cualquier formulario habilitado a través de esta página web o a través de cualquier otro medio de contacto publicitado en la presente website la base legal del tratamiento es el consentimiento del usuario.\r\n
    \r\n A su vez, ILUSIONA GESTIÓN DE NEGOCIOS tiene un interés legítimo para atender a las solicitudes, consultas o dudas que plantee el usuario, ya sea a través de la presente website o a través de cualquier medio de contacto existente con la empresa, incluidas las redes sociales en las que ILUSIONA GESTIÓN DE NEGOCIOS esté presente.\r\n
    \r\n Si el contacto del usuario con ILUSIONA GESTIÓN DE NEGOCIOS se realiza en virtud del ejercicio de los derechos amparados por alguna disposición legal, incluidas las reclamaciones o consultas relacionadas con los servicios o productos de ILUSIONA GESTIÓN DE NEGOCIOS, la base legal que rige para dicho tratamiento es el cumplimiento de obligaciones legales oportunas.\r\n
    MARKETING\r\n La base legal para el tratamiento de datos de carácter personal con las finalidades descritas en la finalidad de marketing es el consentimiento del usuario.\r\n
    \r\n En caso de que exista una relación contractual previa con el usuario, siempre que ILUSIONA GESTIÓN DE NEGOCIOS hubiera obtenido de forma lícita los datos de contacto del destinatario y los empleara para el envío de comunicaciones comerciales referentes a productos o servicios de su propia empresa que sean similares a los que inicialmente fueron objeto de contratación con el cliente, la base legal del tratamiento se basará en el interés legítimo, con especial referencia a lo expuesto en el apartado segundo del artículo 21 de la Ley 34/2002, de 11 de julio, de servicios de la sociedad de la información y de comercio electrónico.\r\n
    ENCUESTAS DE CALIDAD\r\n ILUSIONA GESTIÓN DE NEGOCIOS tiene un interés legítimo para realizar encuestas de calidad a los usuarios, a fin de analizar la satisfacción del usuario con la presente website, la calidad de la atención al cliente o sobre los productos y/o servicios contratados.\r\n
    \r\n
    \r\n

    \r\n El plazo de conservación de los datos de carácter personal dependerá de las finalidades para las que hayan sido recabados:\r\n

    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    FINALIDADPLAZO DE CONSERVACIÓN
    CLUB ILUSIONA\r\n Los datos de carácter personal tratados serán conservados el tiempo que el usuario mantenga su condición de usuario registrado, esto es, hasta que el usuario nos comunique darse de baja.
    DESARROLLO, CUMPLIMIENTO Y EJECUCIÓN DE LA RELACIÓN CONTRACTUAL ENTRE USUARIO Y ILUSIONA GESTIÓN DE NEGOCIOS \r\n Los datos de carácter personal tratados para esta finalidad serán conservados durante el tiempo necesario para gestionar la relación contractual, incluyendo posibles devoluciones, quejas o reclamaciones asociadas a la compra del producto y/o servicio.\r\n
    ATENCIÓN AL CLIENTE\r\n Los datos de carácter personal tratados para esta finalidad serán conservados el tiempo que sea necesario para atender la consulta, solicitud o petición realizada por el usuario.
    MARKETING\r\n Los datos de carácter personal tratados para esta finalidad serán conservados hasta que el usuario decida retirar el consentimiento o hasta que ILUSIONA GESTIÓN DE NEGOCIOS ya no disponga de un interés legítimo para tratar los datos.\r\n
    \r\n En el caso de comunicaciones comerciales o Newsletter, ya sea porque el usuario a consentido el envío de las mismas o corresponda a un interés legítimo de ILUSIONA GESTIÓN DE NEGOCIOS, el usuario podrá darse de baja del servicio en cualquier momento pulsando el enlace que aparece al final del mensaje de actualización que recibe en su correo electrónico.\r\n
    ENCUESTAS DE CALIDAD\r\n Los datos de carácter personal tratados para esta finalidad serán conservados el tiempo necesario para realizar para llevar a cabo las acciones oportunas para mejorar nuestro servicio, la de nuestros productos o la usabilidad de la presente website, dependiendo el motivo de la encuesta, o hasta que ILUSIONA GESTIÓN DE NEGOCIOS anonimice los datos recabados.
    \r\n

    \r\n Se informa al usuario que ILUSIONA GESTIÓN DE NEGOCIOS tratará los datos de carácter personal durante el tiempo en que pudiera surgir responsabilidades civiles, mercantiles, administrativas, penales o fiscales, en cumplimiento con la normativa vigente en cada momento. Una vez pasados estos plazos, se suprimirán los datos de carácter personal.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS informa que para cumplir con las finalidades descritas con anterioridad es necesario ceder los datos personales facilitados por el usuario a empresas vinculadas con ILUSIONA GESTIÓN DE NEGOCIOS, así como a terceras empresas que nos prestan apoyo en los servicios que ofrecemos, tales como:\r\n

    \r\n
  • Entidades financieras
  • \r\n
  • Entidades de detección y prevención de fraude
  • \r\n
  • Proveedores de servicios tecnológicos
  • \r\n
  • Proveedores de servicios relacionados con atención al cliente
  • \r\n
  • Proveedores de servicios relacionados con la administración de ILUSIONA GESTIÓN DE NEGOCIOS
  • \r\n
  • Proveedores y colaboradores de servicios relacionados con marketing y publicidad
  • \r\n
  • Administraciones Públicas cuando así lo exija la normativa vigente
  • \r\n
  • Empresas del GRUPO ILUSIONA:
  • \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    DENOMINACIÓNN.I.F.
    ALBACETE OCIO 2015, S.L.B-66.614.652
    ALCOBENDAS ENTERTAINMENT, S.A.A-62.047.857
    BARNA OCIO 2015, S.L.\r\n B-66.566.183
    BOLERA GORBEA, S.L.\r\n B-95.119.004
    BOLERA XANADÚ 2010, S.L.B-65.071.219
    BOWLING D'ARO, S.L.B-17.713.173
    BOWLING GIRONES, S.L.B-55.149.926
    BOWLING STATION 2015, S.L.B-66.489.154
    BOWLING STATION, S.L.U.B-61.053.625
    FEC BILBAO 2020, S.L.B-88.568.019
    ILUSIONA CENTROS DE JUEGO, S.L.B-64.928.583
    ILUSIONA LA PLANA, S.L.B-88.095.088
    ILUSIONA LAS PALMAS, S.L.B-88.452.727
    MAGNETICS WORKS, S.L.B-66.921.412
    PAMPLONA BOWLING, S.L.B-62.753.124
    REC 2000, S.L.B-60.338.506
    WONDERFUL MAQUIMAT, S.L.B-67.137.414
    \r\n
    \r\n

    \r\n Se informa que ILUSIONA GESTIÓN DE NEGOCIOS contrata la gestión de algunas de las funciones necesarias para la prestación del servicio con encargados de tratamiento situados fuera de la UE y que, en todo caso, garantizan un nivel adecuado de protección de los datos personales. Para obtener más información, puede enviar una comunicación por escrito a la dirección de correo electrónico \r\n rgpd@ilusiona.com\r\n .\r\n

    \r\n
    \r\n

    \r\n \r\n \r\n Derechos de los usuarios\r\n \r\n \r\n

    \r\n

    \r\n Los usuarios que hayan facilitado datos de carácter personal para que ILUSIONA GESTIÓN DE NEGOCIOS los trate disponen de los siguientes derechos:\r\n

    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    DERECHO DE ACCESOEl usuario tiene derecho a obtener de ILUSIONA GESTIÓN DE NEGOCIOS confirmación de si se están tratando o no datos de carácter personal que le conciernen, así como a acceder a los datos personales que ILUSIONA GESTIÓN DE NEGOCIOS disponga.
    DERECHO DE RECTIFICACIÓNEl usuario tiene derecho a solicitar que ILUSIONA GESTIÓN DE NEGOCIOS rectifique los datos inexactos que le conciernen. También tendrá derecho a que se completen los datos personales que sean incompletos, inclusive mediante una declaración adicional.
    DERECHO DE SUPRESIÓN/DERECHO AL OLVIDOEl usuario tendrá derecho a que ILUSIONA GESTIÓN DE NEGOCIOS suprima los datos personales que le conciernen, siempre teniendo en cuenta los requisitos establecidos en la legislación vigente.
    DERECHO DE LIMITACIÓNEl usuario tendrá derecho a solicitar a ILUSIONA GESTIÓN DE NEGOCIOS la limitación del tratamiento de los datos personales, siempre teniendo en cuenta los requisitos establecidos en la legislación vigente.
    DERECHO DE PORTABILIDADEl usuario tendrá derecho a recibir de ILUSIONA GESTIÓN DE NEGOCIOS los datos personales que le incumban en un formato estructurado, de uso común y lectura mecánica, y a transmitirlos a otro responsable cuando el tratamiento se base en el consentimiento o en un contrato, y se efectúe por medios automatizados.
    DERECHO DE OPOSICIÓNEl usuario tiene derecho a oponerse a que ILUSIONA GESTIÓN DE NEGOCIOS trate los datos personales que le conciernen cuando estos sean objeto de un tratamiento basado en el interés público o legítimo. En tal caso, ILUSIONA GESTIÓN DE NEGOCIOS dejará de tratar los datos, salvo por motivos legítimos imperiosos o el ejercicio o defensa de posibles reclamaciones.
    DECISIONES INDIVIDUALES AUTOMATIZADASEl usuario tendrá derecho a no ser objeto de decisiones basadas únicamente en el tratamiento automatizado, incluida la elaboración de perfiles, que produzca efectos jurídicos en él o afecte significativamente de modo similar, siempre teniendo en cuenta los requisitos establecidos en la legislación vigente.
    DERECHO A PRESENTAR UNA RECLAMACIÓNEl usuario tiene derecho a presentar una reclamación ante la Agencia Española de Protección de Datos si considera que se vulneran los derechos anteriormente expuestos en la presente política de privacidad o si considera que el tratamiento de datos personales que le conciernen infringe el Reglamento (UE) 2016/679 del Parlamento Europeo y del Consejo, de 27 de abril de 2016 y la Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales.
    \r\n
    \r\n

    \r\n El usuario podrá ejercer los derechos descritos anteriormente dirigiendo una comunicación por escrito a la dirección: Calle General Díaz Porlier, 14, Bajos, de la localidad de Madrid (C.P. 28001 - Madrid); o bien a través de email \r\n clubilusiona@ilusiona.com\r\n incluyendo en ambos casos fotocopia de su DNI u otro documento identificativo similar y asunto “PROTECCIÓN DE DATOS – ILUSIONA GESTIÓN DE NEGOCIOS”.\r\n

    \r\n

    \r\n \r\n Menores de edad\r\n \r\n \r\n

    \r\n

    \r\n Los menores de 18 años no podrán usar los servicios disponibles en la presente website sin la previa autorización de sus padres, tutores o representantes legales, quienes serán los únicos responsables de todos los actos realizados a través de esta website por los menores a su cargo, incluyendo la cumplimentación de los formularios con los datos personales de dichos menores y la marcación, en su caso, de las casillas que los acompañan.\r\n

    \r\n

    \r\n En este sentido, y en la medida en que ILUSIONA GESTIÓN DE NEGOCIOS no tiene capacidad para controlar si los usuarios son o no menores de edad, deberán ser los padres, tutores o representantes legales quienes habiliten los mecanismos necesarios para evitar que los menores accedan a esta website y/o faciliten datos de carácter personal sin su supervisión, no admitiendo ILUSIONA GESTIÓN DE NEGOCIOS responsabilidad alguna al respecto.\r\n

    \r\n

    \r\n \r\n Seguridad aplicada a los datos de carácter personal\r\n \r\n \r\n

    \r\n

    \r\n Con el objeto de garantizar la seguridad e integridad de los datos facilitados que sean de carácter personal, ILUSIONA GESTIÓN DE NEGOCIOS ha adoptado las medidas técnicas y organizativas necesarias con el objetivo de evitar la pérdida de los datos, así como el tratamiento o el acceso no autorizado de terceros tal y como estipula la legislación vigente en la materia y habida cuenta del estado de la tecnología y la naturaleza de los datos almacenados.

    \r\n

    \r\n \r\n Cambios en la política de privacidad\r\n \r\n \r\n

    \r\n

    \r\n La presente Política de Privacidad podrá ser actualizada en cualquier momento en base a las necesidades propias de la website y futuros cambios legislativos en materia de privacidad, reservándose ILUSIONA GESTIÓN DE NEGOCIOS este derecho en exclusiva.\r\n

    \r\n

    \r\n En caso de realizarse dicha modificación, ILUSIONA GESTIÓN DE NEGOCIOS informará al usuario de los cambios en cuestión si son significativos para tu privacidad, de manera que se pueda revisar los cambios introducidos, a fin de valorar la oposición a los tratamientos de datos de carácter personal o darse de baja en algún servicio o funcionalidad. En cualquier caso, si se requiere el consentimiento para el tratamiento de datos de carácter personal para finalidades diferentes previstas en la presente política de privacidad, se solicitará el consentimiento del usuario según las previsiones de la normativa relativa a protección de datos vigente en cada momento.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n","/* \r\nPantalla para reconfimar mails y publicidad.\r\n*/\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport { changeUserAction } from \"../../redux/actions/userActions\";\r\n\r\n//COMPONENT\r\nimport AlertDialog from \"../../components/AlertDialog\";\r\n\r\n//PAGE\r\nimport PrivacityPolicy from \"../footer/PrivacyPolicy\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"10px\",\r\n display: \"flex\"\r\n },\r\n border: {\r\n boxShadow: \"0px 0px 3px 1px #9abf3a\",\r\n paddingTop: \"40px\",\r\n paddingBottom: \"40px\",\r\n marginTop: \"60px\",\r\n marginBottom: \"50px\"\r\n },\r\n link: {\r\n color: \"blue\",\r\n },\r\n labelBig: {\r\n fontSize: \"1.25rem\",\r\n align: \"justify\"\r\n },\r\n checkboxError: {\r\n borderStyle: \"solid\",\r\n borderRadius: \"5px\",\r\n borderWidth: \"1px\",\r\n borderColor: \"red\",\r\n marginTop: \"1px\",\r\n }\r\n}));\r\n//#endregion\r\n\r\nfunction EmailConfirmed({ history, match }) {\r\n const classes = useStyles();\r\n\r\n const { userId, reConfirm, mail } = match.params;\r\n\r\n const [values, setValues] = useState({\r\n isPrivacity: false,\r\n isPublicity: false,\r\n });\r\n const [checkValues, setCheckValues] = useState({\r\n isPrivacity: false,\r\n isPublicity: false,\r\n });\r\n const [formValues, setFormValues] = useState({\r\n showPrivacity: false\r\n });\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n\r\n //#endregion\r\n\r\n const handleClickBoolean = prop => event => {\r\n setValues({ ...values, [prop]: !values[prop] });\r\n setCheckValues({ ...checkValues, [prop]: false });\r\n };\r\n\r\n //#region OnClick\r\n const onClickGoToPrivacity = () => {\r\n setFormValues({ ...formValues, showPrivacity: !formValues.showPrivacity });\r\n };\r\n const onClickBackLogin = () => {\r\n if (reConfirm === \"True\") {\r\n if (!values.isPrivacity || !values.isPublicity) {\r\n setCheckValues({ ...checkValues, isPrivacity: !values.isPrivacity, isPublicity: !values.isPublicity });\r\n } else {\r\n const changeUser = (userId, user) => dispatch(changeUserAction(userId, user));\r\n const user = {\r\n isPublicity: true,\r\n isPrivacity: true,\r\n isConfirm: true\r\n }\r\n changeUser(userId, user).then(v => {\r\n history.push(\"/\" + mail);\r\n }).catch(e => {\r\n console.log(e);\r\n });\r\n }\r\n } else {\r\n history.push(\"/\" + mail);\r\n }\r\n };\r\n //#endregion\r\n\r\n useEffect(() => {\r\n if (reConfirm === \"True\") {\r\n\r\n } else {\r\n setValues({ ...values, isPrivacity: true, isPublicity: true });\r\n const changeUser = (userId) => dispatch(changeUserAction(userId));\r\n changeUser(userId);\r\n }\r\n // eslint-disable-next-line\r\n }, [dispatch, userId, reConfirm])\r\n\r\n return (\r\n
    \r\n {\r\n setFormValues({ ...formValues, showPrivacity: v });\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Email confirmado\r\n \r\n \r\n \r\n \r\n \r\n {reConfirm === \"True\" ?\r\n \r\n \r\n }\r\n label={\r\n \r\n }\r\n />\r\n \r\n \r\n }\r\n label={\r\n \r\n }\r\n />\r\n \r\n : null}\r\n
    \r\n \r\n Entrar al Club\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n );\r\n}\r\n\r\nexport default EmailConfirmed;\r\n","/* \r\nPantalla informativa de email confirmado.\r\n */\r\n\r\nimport React from \"react\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"10px\",\r\n display: \"flex\"\r\n },\r\n border: {\r\n boxShadow: \"0px 0px 3px 1px #9abf3a\",\r\n paddingTop: \"40px\",\r\n paddingBottom: \"40px\",\r\n marginTop: \"60px\",\r\n marginBottom: \"50px\"\r\n },\r\n labelBig: {\r\n fontSize: \"1.25rem\",\r\n align: \"justify\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nfunction EmailConfirmed({ history, match }) {\r\n const classes = useStyles();\r\n\r\n const { mail } = match.params;\r\n\r\n const onClickBackLogin = () => {\r\n history.push(\"/\");\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Email modificado\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n Entrar al Club\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n );\r\n}\r\n\r\nexport default EmailConfirmed;\r\n","/*\r\nPantalla para restaurar contraseña \r\n */\r\n\r\nimport React, { useState } from 'react';\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport { changeUserAction } from \"../../redux/actions/userActions\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Visibility from \"@material-ui/icons/Visibility\";\r\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"10px\",\r\n display: \"flex\"\r\n },\r\n border: {\r\n boxShadow: \"0px 0px 3px 1px #9abf3a\",\r\n paddingTop: \"20px\",\r\n paddingBottom: \"20px\",\r\n marginTop: \"30px\",\r\n marginBottom: \"50px\"\r\n },\r\n form: {\r\n width: \"90%\",\r\n marginTop: theme.spacing(3),\r\n paddingBottom: \"20px\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function RestorePassword({ history, match }) {\r\n const classes = useStyles();\r\n\r\n const { userId, oldPassword, mail } = match.params;\r\n\r\n //#region Values\r\n const [formValues, setFormValues] = useState({\r\n showSnackBar: false,\r\n snackMessage: \"Datos modificados\",\r\n showPassword: false,\r\n editPassword: false,\r\n editMail: false,\r\n errorMessage: \"\",\r\n showPrivacity: false,\r\n });\r\n const [values, setValues] = useState({\r\n oldPassword: oldPassword,\r\n password: \"\",\r\n repassword: \"\",\r\n });\r\n const [checkValues, setCheckValues] = useState({\r\n oldPassword: false,\r\n password: false,\r\n repassword: false,\r\n });\r\n //#endregion\r\n\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n\r\n //#endregion\r\n\r\n //#region Functions\r\n const checkSpecialCondition = (atribute, value) => {\r\n let result = {\r\n check: false,\r\n errorMessage: \"\",\r\n };\r\n switch (atribute) {\r\n case \"password\":\r\n if (!/^[a-z0-9@#$%&!*_-]{6,16}$/i.test(value)) {\r\n result.check = true;\r\n result.errorMessage = \"La contraseña debe tener al entre 6 y 16 caracteres.\";\r\n } else {\r\n result.check = false;\r\n result.errorMessage = \"\";\r\n }\r\n break;\r\n case \"repassword\":\r\n // First check if the format is valid\r\n if (!/^[a-z0-9@#$%&!*_-]{6,16}$/i.test(value)) {\r\n result.check = true;\r\n result.errorMessage = \"La contraseña debe tener al entre 6 y 16 caracteres.\";\r\n } \r\n // Then check if passwords match\r\n else if (values.password !== value) {\r\n result.check = true;\r\n result.errorMessage = \"Las contraseñas deberian coincidir.\";\r\n } else {\r\n result.check = false;\r\n result.errorMessage = \"\";\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return result;\r\n };\r\n //#endregion\r\n\r\n\r\n //#region OnBlur\r\n const handleBlur = prop => event => {\r\n let check = checkSpecialCondition(prop, event.target.value);\r\n setValues({\r\n ...values,\r\n [prop]: event.target.value,\r\n });\r\n setCheckValues({\r\n ...checkValues,\r\n [prop]: check.check,\r\n });\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: check.errorMessage,\r\n });\r\n };\r\n //#endregion\r\n\r\n //#region HandleChange\r\n const handleChange = prop => event => {\r\n setValues({\r\n ...values,\r\n [prop]: event.target.value,\r\n });\r\n setCheckValues({\r\n ...checkValues,\r\n [prop]: false,\r\n });\r\n };\r\n const handleChangeFormValuesBoolean = prop => event => {\r\n setFormValues({\r\n ...formValues,\r\n [prop]: !formValues[prop],\r\n });\r\n };\r\n const handleMouseDownPassword = event => {\r\n event.preventDefault();\r\n };\r\n //#endregion\r\n\r\n //#region OnClick\r\n const onClickBackLogin = () => {\r\n history.push(\"/\" + mail);\r\n };\r\n const onClickChangePassword = e => {\r\n e.preventDefault();\r\n let checkPassword = checkSpecialCondition(\"repassword\", values.repassword);\r\n setFormValues({ ...formValues, errorMessage: checkPassword.errorMessage });\r\n if (values.oldPassword === \"\" || !values.repassword === \"\" || !values.password === \"\"\r\n || checkSpecialCondition(\"password\", values.password).check || checkPassword.check) {\r\n setCheckValues({ ...checkValues, oldPassword: values.oldPassword === \"\" ? true : false, repassword: true, password: true });\r\n } else {\r\n const changeUser = (userId, user, isChangePassword) => dispatch(changeUserAction(userId, user, isChangePassword));\r\n changeUser(userId, values, true).then(v => {\r\n history.push(\"/\" + mail);\r\n }).catch(error => {\r\n if (error) {\r\n switch (error.status) {\r\n case 409:\r\n if (error.data === \"password\") {\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: \"Error en la contraseña actual\",\r\n });\r\n }\r\n if (error.data === \"email\") {\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: \"Email ya registrado\",\r\n });\r\n }\r\n break;\r\n default:\r\n setFormValues({\r\n ...formValues,\r\n errorMessage: \"Error del servidor, intente más tarde\",\r\n });\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n //#endregion\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n Restaurar contraseña\r\n \r\n \r\n \r\n {formValues.errorMessage.length > 0 ? (\r\n \r\n
    \r\n {formValues.errorMessage}\r\n
    \r\n
    \r\n ) : null}\r\n \r\n \r\n \r\n Contraseña actual *\r\n \r\n \r\n \r\n {formValues.showPassword ? : }\r\n \r\n \r\n }\r\n labelWidth={155}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {\"Contraseña nueva * (min. 6)\"}\r\n \r\n \r\n \r\n {formValues.showPassword ? : }\r\n \r\n \r\n }\r\n labelWidth={215}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n Repetir contraseña *\r\n \r\n \r\n \r\n {formValues.showPassword ? : }\r\n \r\n \r\n }\r\n labelWidth={163}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n onClickChangePassword(e)}\r\n >\r\n Cambiar contraseña\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n );\r\n}\r\n","import React from \"react\";\r\n\r\n//#region CSS\r\nimport { makeStyles, withStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nconst StyledTableCell = withStyles(theme => ({\r\n head: {\r\n backgroundColor: \"#aba3a3\",\r\n color: theme.palette.common.white,\r\n fontSize: \"1.10rem\"\r\n },\r\n body: {\r\n fontSize: 14\r\n }\r\n}))(TableCell);\r\nconst StyledTableRow = withStyles(theme => ({\r\n root: {\r\n \"&:nth-of-type(odd)\": {\r\n backgroundColor: theme.palette.background.default\r\n }\r\n }\r\n}))(TableRow);\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\",\r\n textAlign: \"justify\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function Example(props) {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n POLÍTICA DE COOKIES\r\n \r\n \r\n \r\n \r\n \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS, S.L. tiene como objetivo respetar la privacidad de sus usuarios y proteger los datos de carácter personal que éstos puedan facilitar a ILUSIONA GESTIÓN DE NEGOCIOS, S.L. y/o que las cookies puedan obtener.

    \r\n

    \r\n En el presente documento se encuentra toda la información sobre las cookies que utilizamos. Como muestra de compromiso con la normativa de protección de datos, ILUSIONA GESTIÓN DE NEGOCIOS, S.L. pone a disposición del usuario, de manera permanente, la información relativa a nuestra política de cookies.

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS, S.L. (en adelante, ILUSIONA GESTIÓN DE NEGOCIOS)
    \r\n NIF: B-62.370.408
    \r\n Calle Modolell, 50, Bajos
    \r\n Barcelona (08021 - Barcelona)\r\n

    \r\n
    \r\n \r\n

    \r\n \r\n \r\n ¿Qué son las cookies?\r\n \r\n \r\n

    \r\n

    \r\n Una cookie es un pequeño archivo que se almacena en el dispositivo del usuario con información sobre la navegación.\r\n

    \r\n

    \r\n Se informa al usuario que este sitio web utiliza cookies y/o tecnologías similares que almacenan y recuperan información cuando se navega. En general, estas tecnologías pueden servir para finalidades muy diversas, como, por ejemplo, reconocerte como usuario, obtener información sobre tus hábitos de navegación, personalizar la forma en que se muestra el contenido, el idioma de navegación del usuario, el país, el inicio de sesión, las características del navegador, o incluso información acerca de la fecha y hora de la última visita, parámetros de tráfico dentro de la website y el número de visitas.\r\n

    \r\n

    \r\n Los usos concretos que hacemos de estas tecnologías se describen en la tabla de cookies contenidas en la presente política.\r\n

    \r\n

    \r\n \r\n \r\n ¿Qué tipos de cookies se utilizan en esta página web?\r\n \r\n \r\n

    \r\n

    \r\n \r\n Según su finalidad:\r\n \r\n

    \r\n
      \r\n
    • De análisis: son aquellas que permiten cuantificar el número de usuarios para realizar la medición y análisis estadístico de la utilización que hacen los usuarios del servicio ofrecido. Para ello se analiza la navegación del usuario en la página web con el fin de mejorar la oferta de productos o servicios ofrecidos.
    • \r\n
    • Publicitarias comportamentales: son aquellas que permiten analizar los hábitos de navegación del usuario en Internet para mostrar publicidad relacionada con su perfil de navegación.
    • \r\n
    • Técnicas: Son aquellas necesarias para la navegación y el buen funcionamiento de la página web. Permiten, por ejemplo, controlar el tráfico y la comunicación de datos, acceder a partes de acceso restringido, realizar el proceso de compra de un pedido, utilizar elementos de seguridad, almacenar contenidos para poder difundir vídeos o compartir contenidos a través de redes sociales.
    • \r\n
    • Personalización: Son aquellas que permiten acceder al servicio con unas características predefinidas en función de una serie de criterios, como por ejemplo el idioma, el tipo de navegador a través del cual se accede al servicio, la configuración regional desde donde se accede al servicio, etc.
    • \r\n
    • Publicitarias: Estas cookies almacenan información del comportamiento de los usuarios obtenida a través de la observación continuada. Gracias a ellas, se puede conocer los hábitos de navegación en internet y mostrar publicidad relacionada con el perfil de navegación.
    • \r\n
    \r\n

    \r\n \r\n Según el plazo de tiempo en que permanezcan activas:\r\n \r\n

    \r\n
      \r\n
    • Cookies de sesión: Son cookies temporales que permanecen en el archivo de cookies del navegador hasta que se abandona la página web, por lo que ninguna queda registrada en la memoria del dispositivo. La información obtenida por medio de estas cookies sirve para analizar pautas de tráfico en la web. A la larga, permite proporcionar una mejor experiencia para mejorar el contenido y facilitar su uso. Podrá identificar las cookies de sesión en la tabla recogida en la presente política, bajo el título “Al finalizar la sesión de navegación”.
    • \r\n
    • Cookies persistentes: Son almacenadas en el dispositivo y la página web las lee cada vez que se realiza una nueva visita. Una cookie permanente posee una fecha de expiración determinada, pudiendo variar según la funcionalidad de para la que haya sido asignada. La cookie dejará de funcionar después de esa fecha. Podrá ver la información relativa a la duración de las cookies persistentes en la tabla recogida en la presente política.
    • \r\n
    \r\n

    \r\n \r\n Según quién las gestiona:\r\n \r\n

    \r\n
      \r\n
    • Cookies propias: Son aquellas cookies que se almacenan en el dispositivo del usuario por nuestros equipos o dominios y desde el cual se presta el servicio oportuno de la página web.
    • \r\n
    • Cookies de terceros: Son aquellas cookies que se almacenan en los dispositivos del usuario y que no son gestionados por ILUSIONA GESTIÓN DE NEGOCIOS, sino por un tercero colaborador. A modo de ejemplo, son aquellas cookies utilizadas por redes sociales, visionados de video o por la información facilitada por Google Maps para localizarnos.
    • \r\n
    \r\n

    \r\n \r\n \r\n ¿Quién utiliza la información almacenada en las Cookies?\r\n \r\n \r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS utiliza la información almacenada en las cookies de la presente website exclusivamente para nosotros, salvo aquellas cookies identificadas más adelante como gestionadas por “Terceros”, que son utilizadas y gestionadas por entidades externas para proporcionarnos servicios solicitados por nosotros, a fin de ayudarnos a mejorar nuestros servicios, así como la experiencia del usuario al utilizar nuestra website.

    \r\n

    \r\n \r\n ¿Para qué utilizamos las cookies?\r\n \r\n

    \r\n

    \r\n Las cookies pueden ser una parte esencial del funcionamiento de la presente website.

    \r\n

    \r\n Las cookies utilizadas en esta website sirven para mejorar la experiencia de navegación del usuario, ayudar a su personalización, o recordar sus preferencias mientras dure la navegación y/o en futuras visitas. Además, la utilización de cookies nos permite mejorar las prestaciones de la página web.\r\n

    \r\n

    \r\n \r\n ¿Cuánto tiempo conservamos la información recabada con las cookies?\r\n\r\n \r\n

    \r\n

    \r\n Los datos de carácter personal serán conservados hasta que permanezcan vigentes las autorizaciones otorgadas por el usuario o hasta que expire el tiempo de funcionalidad de la cookie, de acuerdo con la normativa de protección de datos y la Ley 34/2002, de 11 de julio, de servicios de la sociedad de la información y de comercio electrónico.

    \r\n

    \r\n \r\n ¿Cuál es la base jurídica de la gestión de las cookies?\r\n \r\n

    \r\n

    \r\n La base jurídica del tratamiento es el consentimiento, pudiéndose gestionar y/o revocar según las indicaciones contenidas en el presente documento.

    \r\n

    \r\n \r\n ¿Transferimos cookies a terceros países?\r\n\r\n \r\n

    \r\n

    \r\n Con carácter general, las cookies utilizadas no se transfieren a países ubicados fuera del Espacio Económico Europeo. En algunos casos, es posible que se realicen transferencias de datos por prestadores de servicios ubicados fuera del Espacio Económico Europeo, pero respetando las garantías adecuadas y siempre guardando la seguridad de tus datos, proporcionando un nivel de protección equiparable al de la Unión Europea.\r\n

    \r\n

    \r\n \r\n ¿Qué cookies en concreto utiliza esta website y para qué finalidades?\r\n\r\n \r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS, a través de la presente website, utiliza las siguientes cookies:\r\n

    \r\n
    \r\n \r\n \r\n \r\n \r\n Nombre\r\n Gestión\r\n Descripción\r\n Duración\r\n \r\n \r\n \r\n \r\n _ga\r\n Terceros\r\n \r\n Cookie utilizada para distinguir usuarios únicos asignando un número generado aleatoriamente como un identificador de cliente.\r\n \r\n Dos años\r\n \r\n \r\n _gat_gtag_UA_59807770_1\r\n Terceros\r\n \r\n Esta cookie de Google Analytics sirve para medir cómo los usuarios interactúan con la página web.\r\n \r\n Al finalizar la sesión de navegación\r\n \r\n \r\n \r\n _gid\r\n \r\n Terceros\r\n \r\n Cookie utilizada para almacenar y actualizar un valor único para cada página visitada.\r\n \r\n Un día\r\n \r\n \r\n \r\n ARRAffinity\r\n \r\n Terceros\r\n \r\n Cookie establecida por los sitios web que se ejecutan en la plataforma de Windows Azure. Se utiliza para controlar el balanceo de carga y asegurar que todas las peticiones del usuario sean dirigidas al mismo servidor en cualquier sesión de navegación.\r\n \r\n Al finalizar\r\n la sesión de\r\n navegación\r\n \r\n \r\n \r\n \r\n ARRAffinitySameSite\r\n \r\n Terceros\r\n \r\n Este atributo SameSite permite que los navegadores reduzcan el riesgo de fuga de información y, en consecuencia, mejorará la protección de ataques cross-site mediante peticiones falsas.\r\n \r\n Al finalizar\r\n la sesión de\r\n navegación\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n

    \r\n \r\n ¿Cómo desactivar las cookies?\r\n\r\n \r\n

    \r\n

    \r\n Al acceder a la website, el usuario verá un aviso de cookies en el que se le informará de la forma en la que puede consentir o rechazar la instalación de las mismas.\r\n

    \r\n

    \r\n Asimismo, el usuario, en todo momento, podrá deshabilitar o eliminar las cookies utilizadas en la presente website a través de la configuración del navegador que utilice en su dispositivo. A continuación, le proporcionamos información acerca de cómo activar y desactivar las cookies en los principales navegadores web:\r\n

    \r\n \r\n

    \r\n El usuario debe tener en cuenta que algunas de las características de los contenidos de la website sólo están disponibles si se permite la instalación de cookies, por lo que la ausencia, de estas, dependiendo de su finalidad, podría provocar que algunas de las características de la website no funcionen o puedan resultar más complicadas o lentas de acceder.\r\n

    \r\n

    \r\n Se informa al usuario que bloquear las cookies o limitar su instalación podría provocar que algunas de las características de la website no funcionen o puedan resultar más complicadas o lentas de acceder.\r\n

    \r\n

    \r\n \r\n Cambios en la política de cookies\r\n\r\n \r\n

    \r\n

    \r\n La presente política de cookies podrá ser actualizada en cualquier momento en base a las necesidades propias de la website y futuros cambios legislativos en materia de privacidad, reservándose ILUSIONA GESTIÓN DE NEGOCIOS este derecho en exclusiva.\r\n

    \r\n

    \r\n En caso de realizarse dicha modificación, ILUSIONA GESTIÓN DE NEGOCIOS informará al usuario de los cambios en cuestión si son significativos para su privacidad, de manera que se puedan revisar los cambios introducidos, a fin de valorar la el otorgamiento oportuno. En cualquier caso, si se requiere el consentimiento para la gestión de la cookie, se solicitará el consentimiento al usuario según las previsiones de la normativa relativa a protección de datos vigente en cada momento.\r\n

    \r\n

    \r\n Para más información, ILUSIONA GESTIÓN DE NEGOCIOS recomienda la lectura de la sección de ayuda del navegador.\r\n

    \r\n
    \r\n

    ¡Muchas gracias y disfruta de la navegación!

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n );\r\n}\r\n","import React from \"react\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\",\r\n textAlign: \"justify\"\r\n },\r\n table_td: {\r\n border: \"solid 1px\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function Example(props) {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n AVISO LEGAL\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n

    \r\n En virtud de lo estipulado por el artículo 10 de la Ley 34/2002, de 11 de Julio, de Servicios de la Sociedad de la Información y del Comercio Electrónico, se informa al usuario que el dominio {\" \"}\r\n \r\n clubilusiona.com\r\n {\" \"}\r\n pertenece, como titular a:\r\n

    \r\n
    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS, S.L. (en adelante, ILUSIONA GESTIÓN DE NEGOCIOS)\r\n
    \r\n CIF: B-62.370.408
    \r\n Calle Modolell, 50, Bajos\r\n
    \r\n Barcelona (08021, Barcelona)
    \r\n club.ilusiona.com\r\n
    \r\n

    \r\n
    \r\n
    \r\n

    \r\n Inscrita en el Registro Mercantil de Barcelona con número de Tomo 33.043, Folio 126, Hoja B-220.741, Inscripción 1ª\r\n

    \r\n
    \r\n\r\n
    \r\n

    \r\n CONDICIONES DE USO\r\n

    \r\n

    \r\n El uso de esta website se regirá por las presentes condiciones, incluyéndose los contenidos y servicios puestos a disposición de los usuarios. Es por ello que desde ILUSIONA GESTIÓN DE NEGOCIOS le rogamos que lea atentamente estas condiciones ya que contienen toda la información relativa a sus derechos y obligaciones.\r\n

    \r\n

    \r\n Esta página web está destinada a mayores de 18 años, por lo que cualquier acceso o uso de la misma por menores de edad está totalmente prohibida.\r\n

    \r\n

    \r\n Debe saber que con el mero acceso a la website ya se le considerará como “usuario” de la misma y con ello acepta expresamente, de forma automática y voluntaria, las condiciones vigentes en cada momento. En caso de que no desee aceptarlas se le recomienda no seguir haciendo uso de la website.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS se reserva el derecho, en exclusiva y en cualquier momento, a revisar las presentes condiciones para introducir modificaciones derivadas de cambios legislativos o por decisiones corporativas, comprometiéndose a publicar y con ello informar de las variaciones que pudieran afectar a los usuarios. Estas modificaciones se entenderán aceptadas cuando el usuario siga haciendo uso de la website.\r\n

    \r\n

    \r\n Así mismo, ILUSIONA GESTIÓN DE NEGOCIOS se reserva el derecho a modificar unilateralmente, en cualquier momento y sin previo aviso, la estructura y diseño de la website, así como los servicios o contenidos. Con estos mismos términos, durante las tareas de modificación, reparación, actualización o mejoras se podrá suspender el acceso a la website.\r\n

    \r\n

    \r\n Podría ocurrir que derivado de las modificaciones en la website descritas en el párrafo anterior se incluyeran nuevos contenidos o servicios que además de estar sujetos a estas Condiciones de Uso también lo estuvieran a Condiciones Particulares o Especiales que ampliaran o sustituyeran las presentes. En caso de que hubiera alguna discordancia entre las generales y las particulares, prevalecerá lo estipulado en estas últimas.\r\n

    \r\n
    \r\n

    \r\n \r\n Obligaciones y responsabilidades de los usuarios\r\n \r\n

    \r\n

    \r\n Durante el uso de la presente website, el usuario se compromete a no contravenir la legislación vigente, la buena fe, la costumbre y el orden público durante el uso de la presente website, quedando prohibido el uso con fines ilícitos, engañosos, malintencionados o lesivos para ILUSIONA GESTIÓN DE NEGOCIOS o terceros. Por tanto, el uso debe ser adecuado y correcto, absteniéndose el usuario a realizar conductas dañinas a la imagen, intereses y/o derechos de ILUSIONA GESTIÓN DE NEGOCIOS y/o terceros o dañe, inutilice o sobrecargue la website. Así mismo, deberá abstenerse de acceder, utilizar y/o manipular los datos de ILUSIONA GESTIÓN DE NEGOCIOS.\r\n

    \r\n

    \r\n El usuario se compromete a facilitar información veraz a través de las comunicaciones con ILUSIONA GESTIÓN DE NEGOCIOS, constituyéndose como único responsable de los daños o perjuicios que pudiera causar dicha información, por ser inexacta o falsa, tanto a ILUSIONA GESTIÓN DE NEGOCIOS como a terceros.\r\n

    \r\n

    \r\n El USUARIO es la única responsable de asegurarse de cumplir con los requisitos técnicos mínimos y de conexión a internet necesarios para el correcto uso de la website. En consecuencia, ILUSIONA GESTIÓN DE NEGOCIOS no asumirá responsabilidad alguna por la inadecuación de los requisitos técnicos de los equipos del USUARIO que impidan el correcto funcionamiento operativo.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS adopta las medidas de seguridad razonablemente adecuadas para detectar la existencia de virus, incluso en los archivos que se puedan descargar derivados del uso de la website. No obstante, se debe tener en cuenta que las medidas de seguridad de los sistemas informáticos no son enteramente fiables por lo que ILUSIONA GESTIÓN DE NEGOCIOS no puede garantizar la inexistencia de virus u otros elementos que pudieran incidir en los sistemas informáticos, documentos y/o ficheros del usuario. Rogamos a los usuarios que se abstengan de introducir o difundir en la red virus informáticos o sistemas físicos o lógicos que puedan provocar daños a ILUSIONA GESTIÓN DE NEGOCIOS o terceros.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS se reserva el derecho a emprender las acciones legales necesarias en defensa de sus intereses o suspender temporalmente, y sin previo aviso, la accesibilidad a la website con motivo de operaciones de mantenimiento, reparación, actualización o mejora.\r\n

    \r\n
    \r\n

    \r\n El USUARIO se compromete a utilizar la website respetando los siguientes puntos:\r\n

    \r\n
  • El USUARIO se compromete a no realizar ningún intento de violación de niveles de acceso, manipulación incorrecta de datos, duplicaciones y exportaciones de datos o informaciones protegidas por propiedad intelectual u otros derechos legales, intentar el acceso a áreas restringidas de los sistemas informáticos de ILUSIONA GESTIÓN DE NEGOCIOS, introducción de programas, virus o cualquier otro dispositivo que produzca o pueda producir modificaciones en el sistema informático de ILUSIONA GESTIÓN DE NEGOCIOS o de terceros.
  • \r\n
  • El USUARIO no podrá ceder ni transmitir a un tercero el nombre de usuario y contraseña de acceso quedando, en definitiva, prohibida la utilización de la WEBSITE para cualquier otro fin que no sea la exclusiva satisfacción de sus propias necesidades de uso, o que no sea el uso descrito en la propia WEBSITE.
  • \r\n
  • El USUARIO proveerá los medios necesarios para asegurar que las contraseñas y claves de acceso a la aplicación permanecerán bajo su control y no serán divulgadas, copiadas, reproducidas por parte de terceras personas no autorizadas, debiendo custodiar las mismas por medios físicos y lógicos. Debes notificarnos de inmediato cualquier uso no autorizado o falla de seguridad de tu cuenta o nuestros Servicios.
  • \r\n
  • Queda absolutamente prohibido al USUARIO, de forma enunciativa pero no limitativa, realizar ingeniería inversa, descompilar, desensamblar, reproducir, traducir, modificar, versionar, comercializar, duplicar, transformar ni transmitir a terceros, en todo o en parte la WEBSITE, así como eliminar, manipular o alterar de cualquier modo cualquier aviso o etiqueta física o lógica que incluya los derechos de propiedad de ILUSIONA GESTIÓN DE NEGOCIOS sobre la aplicación.
  • \r\n
  • La utilización de la WEBSITE no implica la aceptación, aprobación y/o conocimiento por parte del ILUSIONA GESTIÓN DE NEGOCIOS del uso indebido que se haga de la website, puesto que la LICENCIANTE sólo proporciona el USUARIO permisos para hacer un correcto uso de la misma, conforme al presente contrato. El USUARIO es la única responsable del correcto uso de la WEBSITE.
  • \r\n
  • Asimismo, en el caso da que el USUARIO no cumpliera las obligaciones aquí recogidas, ILUSIONA GESTIÓN DE NEGOCIOS podrá cesar la prestación de servicios, mediando notificación por escrito de los motivos de dicho cese, y sin perjuicio de la penalización que pudiera corresponder.
  • \r\n
  • Todos los derechos que no se hayan incluido expresamente en las presentes condiciones de uso, quedan reservados a ILUSIONA GESTIÓN DE NEGOCIOS.
  • \r\n\r\n
    \r\n

    \r\n \r\n \r\n Propiedad Intelectual e Industrial. Admisión de backlinks / hiperlinks\r\n \r\n \r\n

    \r\n

    \r\n \r\n Permiso para reproducir fotografías\r\n \r\n

    \r\n

    \r\n Los contenidos, las fotografías, videos, los diseños, textos, gráficos, logos, iconos, botones, software, nombres comerciales, marcas o cualquier otro signo que pueda ser susceptible de comercialización o uso industrial mostrados en la website son propiedad de ILUSIONA GESTIÓN DE NEGOCIOS, o de terceros titulares que hayan autorizado debidamente su inclusión en la website o en cualquier red social donde ILUSIONA GESTIÓN DE NEGOCIOS esté presente, salvo en aquellos casos en que exista una indicación expresa en contrario, y están protegidos, entre otras, por las normas nacionales e internacionales de propiedad intelectual e industrial.\r\n

    \r\n

    \r\n Queda prohibida la reproducción de la presente website, así como ninguno de sus contenidos, salvo autorización expresa y por escrito de ILUSIONA GESTIÓN DE NEGOCIOS. Sin perjuicio, el usuario tendrá el derecho a crear enlaces a la página de la website para el uso privado y no comercial sujeto a diferentes condiciones, reservándose ILUSIONA GESTIÓN DE NEGOCIOS el derecho a solicitar, en cualquier momento, la eliminación inmediata de cualquier enlace a la website. Las condiciones son:\r\n

    \r\n
      \r\n
    • Será un derecho revocable y no exclusivo.
    • \r\n
    • No podrá dar a entender que ILUSIONA GESTIÓN DE NEGOCIOS recomienda dicho sitio web, servicios o productos ni falsear su relación.
    • \r\n
    • No debe incluir contenidos considerados de mal gusto, obscenos, ofensivos controvertidos, incitadores a la violencia o discriminación por sexo, raza o religión, contrarios al orden público o ilícito.
    • \r\n
    • El enlace debe dirigir a la website, sin que se permita la reproducción como parte de su web o dentro de uno de sus frames o crear un browser sobre cualquiera de las páginas de la website.
    • \r\n
    \r\n
    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS no puede controlar la información, contenidos, productos o servicios facilitados por otros sitios web que tengan establecidos enlaces con destino a la website. Por este motivo, no se hace responsable de cualquier aspecto relativo a tales sitios web.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS ostenta la titularidad de los signos distintivos identificativos de su sociedad, por lo que prohíbe su reproducción, imitación, utilización o inserción de estos signos distintivos sin nuestra debida autorización.\r\n

    \r\n

    \r\n \r\n \r\n Responsabilidad de la empresa\r\n \r\n \r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS no se hace responsable de las deficiencias del servicio de su proveedor de servicios, ni de las redes de comunicación, ni de los problemas resultantes del mal funcionamiento o uso de versiones no optimizadas de cualquier tipo de navegador, así como de aquellas derivadas de interrupciones prolongadas del suministro eléctrico, líneas de telecomunicaciones, conflictos sociales, huelgas, explosiones, inundaciones, actos y omisiones del Gobierno, y en general todos los supuestos de fuerza mayor o de caso fortuito.\r\n

    \r\n

    \r\n Tanto el acceso a la website como el uso que pueda hacerse de la información contenida en la misma es de exclusiva responsabilidad de quien lo realiza. Por tanto, ILUSIONA GESTIÓN DE NEGOCIOS no se responsabiliza de las consecuencias que pudiera ocasionar dicho uso o acceso a la información y únicamente procederá a la eliminación, lo antes posible, de los contenidos que pudieran generar algún tipo de daño o perjuicio, siempre que así se notifique o tenga conocimiento efectivo.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS no responderá de los posibles errores de seguridad que se puedan producir ni de los posibles daños que se ocasionaren al sistema informático del usuario, ficheros o documentos almacenados en el mismo, cuando tengan origen en un virus proveniente del ordenador del usuario, mal funcionamiento del navegador o del uso de versiones no actualizadas del mismo, de averías telefónicas, interferencias, omisiones o desconexiones en el funcionamiento operativo del sistema electrónico motivados por causas ajenas a ILUSIONA GESTIÓN DE NEGOCIOS.\r\n

    \r\n

    \r\n ILUSIONA GESTIÓN DE NEGOCIOS podrá interrumpir el acceso de forma temporal por la realización de mejoras, introducción de medidas de seguridad, actualización o reestructuración de los recursos informáticos o instalación de nuevas usabilidades en la website. Las interrupciones se notificarán previamente siempre que fuera posible y se mantendrán el menor tiempo posible, aprovechando, preferiblemente, el horario nocturno.\r\n

    \r\n

    \r\n \r\n \r\n Normas de Uso de la pestaña Noticias\r\n \r\n \r\n

    \r\n

    \r\n En la sección Noticias informa sobre novedades, servicios ofrecidos, datos de interés y cualquier información general relacionada con el ILUSIONA GESTIÓN DE NEGOCIOS. La presente website no ofrece la posibilidad de participar a los usuarios con sus comentarios en las entradas publicadas por ILUSIONA GESTIÓN DE NEGOCIOS en la sección Noticias.\r\n

    \r\n

    \r\n \r\n \r\n Integridad y salvaguarda de las condiciones de uso \r\n \r\n

    \r\n

    \r\n Cada una de las estipulaciones de las presentes condiciones de uso se interpretarán separada e independientemente de las demás. En el caso de que cualquiera de las cláusulas resultare inválida o no ejecutable en virtud de cualquier norma jurídica o fuera declarada nula en virtud de algún Juzgado, norma jurídica o autoridad administrativa, la nulidad sólo afectará a dicha cláusula y no a la integridad y existencia del contrato, conservando plena validez el resto de los acuerdos.\r\n

    \r\n

    \r\n \r\n \r\n Resolución de conflictos. Ley aplicable y jurisdicción\r\n \r\n \r\n

    \r\n

    \r\n Las presentes Condiciones Generales de Uso se regirán por la legislación española y, en especial, a la legislación en materia de protección de datos de carácter personal (Ley Orgánica de Protección de Datos de Carácter Personal y su Reglamento de desarrollo, además del Reglamento General de Protección de Datos 2016/679 de la Unión Europea) y a la legislación en materia de servicios de la sociedad de la información (Ley 34/2002, de 11 de julio, de servicios de la sociedad de la información y de comercio electrónico). Cualquier controversia será resuelta ante los Tribunales de Madrid.

    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n","import React from \"react\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport Fade from \"@material-ui/core/Fade\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Box from \"@material-ui/core/Box\";\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n marginTop: \"30px\",\r\n display: \"flex\",\r\n textAlign: \"justify\"\r\n },\r\n table_td: {\r\n border: \"solid 1px\"\r\n }\r\n\r\n}));\r\n//#endregion\r\n\r\n//BASES LEGALES DEL CLUB ILUSIONA\r\nexport default function LegalClub(props) {\r\n const classes = useStyles();\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n BASES DEL CLUB ILUSIONA\r\n \r\n \r\n \r\n \r\n \r\n \r\n

    \r\n Las presentes Bases del Club ILUSIONA regularán, expresamente, las relaciones entre ILUSIONA GESTIÓN DE NEGOCIOS, S.L. (en adelante, ILUSIONA) y los usuarios de\r\n clubilusiona.com \r\n que se registren como miembros para disfrutar del sistema de fidelización de puntos canjeables en nuestros centros.

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 1. CLUB ILUSIONA: ILUSIONA dispone de un Club de fidelización de ILUSIONA (en adelante, CLUB ILUSIONA) para ofrecer a sus clientes diferentes servicios, ofertas, descuentos y otras ventajas (diferidos o inmediatos), para su consumo en los centros de ocio pertenecientes al grupo ILUSIONA según las bases aquí expuestas.\r\n
    \r\n Para el ejercicio de su condición de miembro del club ilusiona en el momento de la adquisición del producto o servicio en cualquiera de los canales de venta de ILUSIONA, deberá utilizar la tarjeta virtual que se le adjudica en el momento de su adhesión al club, o facilitar el nº de su DNI asociado a su tarjeta de fidelización.\r\n
    \r\n CLUB ILUSIONA pone a disposición del usuario un área privada a través de la cual podrá gestionar sus datos identificativos, además de consultar los puntos y promociones disponibles.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 2. ADHESIÓN AL CLUB ILUSIONA: El usuario puede solicitar el alta al CLUB ILUSIONA a través de los formularios que encontrará en la página web\r\n clubilusiona.com.\r\n
    \r\n CLUB ILUSIONA está exclusivamente destinado a clientes mayores de 18 años, por lo queda totalmente prohibida la adhesión al club de menores de edad.\r\n
    \r\n Cualquier persona física, mayor de edad, que no tenga limitada su capacidad y que, con independencia de su nacionalidad, tenga un domicilio de residencia en España podrá darse de alta en nuestro club.\r\n
    \r\n El usuario, al cumplimentar los formularios de alta, se compromete expresamente a facilitar datos veraces, exactos y actualizados; constituyéndose como único responsable de los daños o perjuicios que pudiera causar dicha información, por ser inexacta o falsa, tanto a ILUSIONA como a terceros.\r\n
    \r\n La condición de miembro del CLUB ILUSIONA tiene carácter personal. Por ello, no se podrá transmitir los derechos derivados de tal condición a persona distinta en ningún caso. ILUSIONA informa a sus socios que los campos en los que se deban insertar datos de carácter personal marcados con “(*)” son de cumplimentación obligatoria, y sin ellos no se podrá completar el alta al sistema de fidelización del CLUB ILUSIONA.\r\n
    \r\n La pérdida o robo de la contraseña para acceder al área privada del CLUB ILUSIONA deberá ser puesta en conocimiento a ILUSIONA a través del correo electrónico {\" \"}\r\n \r\n clubilusiona@ilusiona.com\r\n {\" \"}\r\n o en cualquiera de los centros de ocio familiar en los que se puede disfrutar de las ventajas de pertenecer al CLUB ILUSIONA.\r\n
    \r\n La adhesión al CLUB ILUSIONA no tiene asociado coste alguno para el usuario.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 3.OBTENCIÓN DE PUNTOS: \r\n El miembro del CLUB ILUSIONA podrá obtener puntos a través de los sistemas establecidos a continuación:\r\n
    \r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 3.1. Carga directa: \r\n Los puntos generados por el usuario a partir de tickets obtenidos por el juego en las máquinas REDEMPTION ubicados en los distintos centros de ILUSIONA.\r\n

    \r\n \r\n
    \r\n \r\n \r\n

    \r\n 3.2. Carga por conversión: \r\n Los puntos generados a través de los tickets de consumo en la bolera, bar, la organización de cumpleaños, parque infantil o cualquier otra actividad realizada en cualquiera de nuestros centros de ocio.\r\n
    \r\n En ambos supuestos los tickets obtenidos deberán facilitarse a los empleados de ILUSIONA de nuestros centros a fin de que puedan canjearlos por puntos y cargarlos en la plataforma de gestión del club ilusiona. La carga de puntos no es reembolsable.\r\n

    \r\n \r\n
    \r\n \r\n \r\n

    \r\n 3.3. Carga por promoción: \r\n Cada miembro que se dé de alta en el CLUB ILUSIONA se le obsequiará con un número de puntos que podrá variar en el tiempo según las distintas campañas de socios. Además, el miembro del CLUB ILUSIONA podrá acogerse a otras promociones donde se canjeen puntos.\r\n
    \r\n Los puntos obtenidos a través del CLUB ILUSIONA no son canjeables por dinero en efectivo. En el caso de que el importe de la compra sea inferior del valor de los puntos que se quieren descontar, no se devolverá el cambio en metálico ni se emitirá otro vale por la diferencia.\r\n

    \r\n \r\n
    \r\n \r\n \r\n

    \r\n 3.4. Tickets deteriorados o ilegibles: \r\n Los tickets deteriorados o ilegibles deberán entregarse en cualquiera de nuestros centros y se canjearán de forma automática en 48 horas siempre que se verifique su autenticidad y veracidad.\r\n

    \r\n \r\n
    \r\n \r\n \r\n

    \r\n 4. RECUPERACIÓN DE PUNTOS: \r\n Los puntos acumulados y gastados en los diferentes servicios que ofrece ILUSIONA, no podrán ser recuperados, siempre y cuando el servicio haya sido efectivamente realizado.

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 5. TRANSFERENCIA DE PUNTOS: \r\n No está permitida la transferencia de puntos entre miembros del CLUB ILUSIONA.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 6. COMPRA DE PRODUCTOS Y SERVICIOS CON CARGO DE PUNTOS:{\" \"}\r\n Para disfrutar de las ventajas de compra de productos y servicios con cargo a puntos, es imprescindible:\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n a) Ser socio del CLUB ILUSIONA.\r\n
    \r\n b) Comprar en los establecimientos adscritos a El Club.\r\n
    \r\n c) Presentar antes de pagar la compra cualquiera de los\r\n elementos acreditativos de la pertenencia a El Club o bien\r\n abonar las compras con las Tarjetas.\r\n

    \r\n \r\n
    \r\n \r\n \r\n

    \r\n Será posible adquirir productos o servicios, u obtener descuentos, con cargo a los puntos acumulados que aparezcan anotados en el área personal del CLUB ILUSIONA. Para proceder a la compra u obtener descuentos en los productos y servicios de ILUSIONA, el socio deberá identificarse, acreditando su identidad o bien mostrando el ticket virtual de puntos.\r\n
    \r\n Para la retirada de regalos por valor de más de 1000 puntos los empleados de ILUSIONA podrán solicitar la presentación del DNI o cualquier otro documento acreditativo oficial a fin de acreditar la identidad de la condición de socio.\r\n
    \r\n Los puntos, descuentos o promociones pertenecientes al CLUB ILUSIONA no son acumulables.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n Garantía de los productos
    \r\n Cuando el Producto o Productos adquiridos presentaren una falta de conformidad por no corresponderse con las características ofrecidas, presentaren defectos que impidan su normal utilización con arreglo a su naturaleza, o no ofrecieren las prestaciones descritas para el mismo, el Cliente tendrá derecho al saneamiento del bien adquirido en un plazo de dos años a partir de la compra, según lo estipulado en el artículo 123.1 del Texto Refundido de la Ley General para la Defensa de los Consumidores y Usuarios.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 7. CADUCIDAD DE LOS PUNTOS:{\" \"}\r\n Los puntos no consumidos por los usuarios del CLUB ILUSIONA no se les aplica caducidad, siempre y cuando se respeten los términos establecidos en el apartado “Pérdida de condición de miembro”.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 8. MODIFICACIÓN DE LAS CONDICIONES DEL CLUB IILUSIONA:{\" \"}\r\n ILUSIONA se reserva el derecho a modificar unilateralmente, en cualquier momento y sin previo aviso, las condiciones del programa de puntos del CLUB ILUSIONA.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 9. PÉRDIDA DE CONDICIÓN DE MIEMBRO:{\" \"}\r\n El usuario que pertenezca al CLUB ILUSIONA y que no realice ningún movimiento de puntos en la Tarjeta de Fidelización en el periodo de veinticuatro (24) meses, perderá la condición de socio y las promociones asociadas a dicha condición. Con un mes de antelación, el socio del CLUB ILUSIONA recibirá un email en el que le avisará que próximamente perderá la condición de miembro. En todo caso, dicha pérdida conllevará la retirada de los puntos acumulados y se procederá a la cancelación de los datos de carácter personal.\r\n
    \r\n Para volver a pertenecer al CLUB ILUSIONA, el usuario deberá de seguir el proceso de alta en el sistema, como si se tratara de un nuevo socio, que, en ningún caso, supondrá la recuperación de los puntos anteriormente acumulados.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 10. CANCELACIÓN DEL PROGRAMA:{\" \"} ILUSIONA se reserva el derecho a variar las presentes bases, mediando comunicación previa al usuario, a través de{\" \"}\r\n clubilusiona.com.\r\n
    \r\n En caso de finalización del sistema de fidelización del CLUB ILUSIONA, los socios registrados debidamente deberán consumir los puntos acumulados en un plazo máximo de un mes desde la notificación de dicha finalización. CLUB ILUSIONA quedará cancelado sin previo aviso ni responsabilidad alguna y no será de aplicación lo dispuesto anteriormente en este párrafo, si en algún momento ocurren circunstancias de fuerza mayor o imposiciones legales que impidieran su continuidad o desarrollo.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 11. BAJA DEL CLUB ILUSIONA:{\" \"}\r\n El socio podrá darse de baja del CLUB ILUSIONA en cualquier momento, comunicando su voluntad por escrito a través de ILUSIONA a través del correo electrónico{\" \"}\r\n \r\n clubilusiona@ilusiona.com\r\n .\r\n
    \r\n Asimismo, ILUSIONA se reserva el derecho de dar de baja al miembro del CLUB ILUSIONA cuando este realice un uso indebido o fraudulento de la tarjeta o llaveros o de las ofertas, descuentos o promociones vinculadas al CLUB ILUSIONA.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n 12. PROTECCIÓN DE DATOS:{\" \"}\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    RESPONSABLE DEL TRATAMIENTOILUSIONA GESTIÓN DE NEGOCIOS, S.L.NIF B-62.370.408
    FINALIDADEn caso de registro al Club Ilusiona, se tratarán los datos para la identificación inequívoca en la plataforma y dar acceso a las diferentes funcionalidades, área privada, gestión de puntos acumulados, promociones, así como gestionar los datos de carácter personal de contacto.Los datos de carácter personal tratados serán conservados el tiempo que el usuario mantenga su condición de usuario registrado, esto es, hasta que el usuario nos comunique darse de baja.
    BASE LEGAL DEL TRATAMIENTOLa base legal para el tratamiento de los datos de carácter personal para el registro del usuario en el CLUB ILUSIONA es la ejecución de los términos y condiciones que regulan su inscripción y ejecución. A fin de que el usuario se pueda registrar en la presente website es necesario tratar datos de carácter personal. En caso contrario, no se podrá prestar este servicio.ILUSIONA GESTIÓN DE NEGOCIOS tiene un interés legítimo para realizar tantas comprobaciones considere oportunas para detectar y prevenir posibles fraudes durante la ejecución del contrato. Este tratamiento es necesario para supervisar el pago de un servicio o producto a fin de proteger de intentos de fraude.
    DESTINATARIOS\r\n
  • Proveedores de servicios tecnológicos
  • \r\n
  • Proveedores de servicios relacionados con atención al cliente
  • \r\n
  • Proveedores de servicios relacionados con la administración de ILUSIONA GESTIÓN DE NEGOCIOS, S.L.
  • \r\n
  • Proveedores y colaboradores de servicios relacionados con marketing y publicidad
  • \r\n
  • Administraciones Públicas cuando así lo exija la normativa vigente.
  • \r\n
  • Empresas relacionadas del Grupo ILUSIONA.
  • \r\n
    + INFO
    DERECHOSAcceso, rectificación, supresión, portabilidad, limitación u oposiciónrgpd@ilusiona.com
    \r\n
    \r\n Se informa al usuario que ILUSIONA GESTIÓN DE NEGOCIOS tratará los datos de carácter personal durante el tiempo en que pudiera surgir responsabilidades civiles, mercantiles, administrativas, penales o fiscales, en cumplimiento con la normativa vigente en cada momento. Una vez pasados estos plazos, se suprimirán los datos de carácter personal.\r\n
    \r\n ILUSIONA informa a sus socios que los campos en los que se deban insertar datos de carácter personal marcados con “(*)” son de cumplimentación obligatoria, y sin ellos no se podrá completar el alta al sistema de fidelización del CLUB ILUSIONA.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n \r\n 13. RESOLUCIÓN DE CONFLICTOS. LEY APLICABLE Y JURISDICCIÓN:{\" \"}\r\n \r\n Las presentes Bases se regirán por la legislación española, por lo que cualquier litigio, controversia, discrepancia, cuestión o reclamación derivados de la ejecución o interpretación de las presentes Bases o relacionados con ellas, directa o indirectamente, serán resueltos por los Juzgados y Tribunales españoles. Si usted está contratando como consumidor, nada en la presente cláusula afectará a los derechos que como tal le reconoce la legislación vigente.\r\n

    \r\n
    \r\n
    \r\n \r\n \r\n

    \r\n \r\n 14. INFORMACIÓN SOBRE RESOLUCIÓN DE DISPUTAS EN LÍNEA/ARBITRAJE DE CONSUMIDORES:{\" \"}\r\n \r\n En virtud de lo dispuesto en el Reglamento (UE) 524/2013, de aplicación en toda la Unión Europea, la Comisión Europea proporciona una plataforma de resolución de disputas en línea y que «EMPRESA» pone a disposición de los usuarios de la presente website en el siguiente enlace:\r\n \r\n http://ec.europa.eu/consumers/odr\r\n \r\n
    \r\n Mediante dicho enlace, los usuarios del Sitio Web que podrán acceder a la Plataforma europea de Resolución de Conflictos en línea (ODR). En caso de que el usuario haya tenido un problema con una compra o la prestación de un servicio online, podrá hacer uso de este medio para presentar cualquier reclamación en relación con dicha compraventa o prestación de servicios, así como optar por la solución extrajudicial del conflicto suscitado.\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\n\r\n//REDUX\r\nimport { useSelector } from \"react-redux\";\r\n\r\nfunction PrivateRoute({ component: Component, ...rest }) {\r\n const user = useSelector(state => state.user);\r\n\r\n return (\r\n \r\n !user || user.isLogged ? : \r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default PrivateRoute;\r\n","import React from \"react\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\n\r\n//REDUX\r\nimport { useSelector } from \"react-redux\";\r\n\r\nfunction PublicRoute({ component: Component, ...rest }) {\r\n const user = useSelector(state => state.user);\r\n\r\n return (\r\n \r\n !user || !user.isLogged ? : \r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default PublicRoute;\r\n","import React from \"react\";\r\n\r\n//REDUX\r\nimport { useSelector } from \"react-redux\";\r\n\r\n//#region CSS\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n position: \"fixed\",\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n left: 0,\r\n zIndex: 1050,\r\n background: \"center no-repeat rgba(223, 125, 68, 0.3)\"\r\n },\r\n spinner: {\r\n position: \"absolute\",\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n margin: \"auto\"\r\n }\r\n}));\r\n//#endregion\r\n\r\nexport default function Loading() {\r\n const classes = useStyles();\r\n\r\n const loadingUser = useSelector(state => state.user.loading);\r\n\r\n const displayLoading = loadingUser ? (\r\n
    \r\n \r\n
    \r\n ) : null;\r\n\r\n return {displayLoading};\r\n}\r\n","/* \r\nEnrutado de la aplicación, path posibles\r\n*/\r\n\r\nimport React from \"react\";\r\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\r\n//import { MemoryRouter } from 'react-router';\r\n\r\n//REDUX\r\nimport { useDispatch } from \"react-redux\";\r\nimport { checkIsSessionAction } from \"./redux/actions/userActions\";\r\n\r\n//MODULES\r\nimport Header from \"./modules/Header\";\r\nimport Footer from \"./modules/Footer\";\r\n\r\n//PAGES\r\nimport Main from \"./pages/Main\";\r\nimport Home from \"./pages/Home\";\r\nimport ListMovements from \"./pages/ListMovements\";\r\nimport ListGift from \"./pages/ListGift\";\r\nimport Profile from \"./pages/Profile\";\r\nimport FrequentQuestion from \"./pages/FrequentQuestion\";\r\n//LoginAndRegister\r\n//import Login from \"./pages/loginAndRegister/Login\";\r\nimport Register from \"./pages/loginAndRegister/Register\";\r\nimport Registered from \"./pages/loginAndRegister/Registered\";\r\nimport EmailConfirmed from \"./pages/loginAndRegister/EmailConfirmed\";\r\nimport EmailModified from \"./pages/loginAndRegister/EmailModified\";\r\nimport RestorePassword from \"./pages/loginAndRegister/RestorePassword\";\r\n//Footer\r\nimport PrivacyPolicy from \"./pages/footer/PrivacyPolicy\";\r\nimport CookiesPolicy from \"./pages/footer/CookiesPolicy\";\r\nimport LegalWarning from \"./pages/footer/LegalWarning\";\r\nimport LegalClub from \"./pages/footer/LegalClub\";\r\n\r\n//import Example from \"./pages/Example\";\r\n\r\n//COMPONENTS\r\nimport PrivateRoute from \"./components/utils/PrivateRoute\";\r\nimport PublicRoute from \"./components/utils/PublicRoute\";\r\nimport Loading from \"./components/utils/Loading\";\r\n\r\nexport default function Routes() {\r\n //#region DISPATCH & SELECTOR\r\n const dispatch = useDispatch();\r\n const checkIsSession = () => dispatch(checkIsSessionAction());\r\n checkIsSession();\r\n //#endregion\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n {/* FOOTER */}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n {/* HOME */}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* */}\r\n \r\n