import React, { Component } from "react"
import "./pages/general/App.css"
import { BrowserRouter as Router, Route, } from "react-router-dom"
import axios from 'axios';
import HeaderPage from "./pages/general/header.page"
import PreviewPage from "./pages/previewPage/preview.page"
import SidebarPage from "./pages/sidebarPage/sidebar.page"
import 'bootstrap/dist/css/bootstrap.min.css'
import { ModalReferred } from "./componentes/Components";
class App extends Component {
constructor(props) {
super(props);
this.updateWindowDimensions = this.updateWindowDimensions.bind(this);
this.state = {
username: '',
isOpenModalRegisterTarjeta: false,
formValidate: {
isvalidate: false,
input: ""
},
viewMenu: true,
primaryColor: '#ff0350',
secundaryColor: '#606060',
checkedSecundaryColor: true,
checkedTextColor: true,
width: 0,
height: 0,
// sectionSidebar: { id: 'portada', name: 'Portada', img: 'img/icons/portada_1.png' },
sectionSidebar: '',
showRemoveButton: ['none','none','none'],
//CheckMark
arrCheck: [
{ title: 'portada', checkMark: true },
{ title: 'diseno', checkMark: true },
{ title: 'introduccion', checkMark: false },
{ title: 'promo', checkMark: false },
{ title: 'datos_contacto', checkMark: false },
{ title: 'contacto', checkMark: false },
{ title: 'carrete', checkMark: false },
{ title: 'documentos', checkMark: false },
{ title: 'opiniones', checkMark: false },
// { title: 'galeria', checkMark: false},
{ title: 'ubicacion', checkMark: false },
{ title: 'redes', checkMark: false},
{ title: 'traductor', checkMark: false },
],
//Values from section
arrDatos: {
diseno: {
checked: true,
coverPage: 1,
perfil: 'img/icons/profile-demo2.png',
portada : '',
logo: ''
},
descripcion: {
checked: true,
nombre: '',
cargo: '',
empresa: '',
slogan: '',
},
promo: {
checked: true,
titulo: '',
descripcion: '',
video: '',
},
addContact: {
checked: true,
titulo: '¡Agrégame a tus contactos!',
N: "",
TEL: "",
URL: "",
EMAIL: "",
ADR_intl: "",
ADR_work: "",
ADR_postal: "",
ADR_parcel: ""
},
email: {
checked: true,
email: [],
icon: "mail",
titulo: "¡Escríbeme un correo!",
},
telefono: {
checked: true,
telefono: [],
icon: "mail",
titulo: "¡Llámame!",
},
whatsapp: {
checked: true,
whatsapp: [],
icon: "mail",
titulo: "¡Mándame un whats!",
},
ubicacion: {
checked: true,
direccion: '',
ciudad: '',
codigoPostal: '',
estado: ''
},
facebook: {
checked: false,
icon: 'facebook',
url: '',
img: ''
},
instagram: {
checked: false,
icon: 'instagram',
url: '',
img: ''
},
linkedin: {
checked: false,
icon: 'linkedin',
url: '',
img: ''
},
youtube: {
checked: false,
icon: 'youtube',
url: '',
img: ''
},
twitter: {
checked: false,
icon: 'twitter',
url: '',
img: ''
},
site: {
checked: false,
icon: 'site',
url: '',
img: ''
},
arrCarousel: {
title: '',
checked: true,
arrImages: [
],
},
arrDocumentos: {
title: 'Mi nube de documentos',
checked: true,
arrFiles: [
],
},
arrCarouselOp: {
title: "",
checked: true,
arrOpiniones: [
]
},
zoom: {
view: false,
checked: false,
icon: 'zoom',
url: '',
img: ''
},
behance: {
view: false,
checked: false,
icon: 'behance',
url: '',
img: ''
},
blog: {
view: false,
checked: false,
icon: 'blog',
url: '',
img: ''
},
deviantart: {
view: false,
checked: false,
icon: 'deviantart',
url: '',
img: ''
},
discord: {
view: false,
checked: false,
icon: 'discord',
url: '',
img: ''
},
dribble: {
view: false,
checked: false,
icon: 'dribble',
url: '',
img: ''
},
drive: {
view: false,
checked: false,
icon: 'drive',
url: '',
img: ''
},
dropbox: {
view: false,
checked: false,
icon: 'dropbox',
url: '',
img: ''
},
feed: {
view: false,
checked: false,
icon: 'feed',
url: '',
img: ''
},
flickr: {
view: false,
checked: false,
icon: 'flickr',
url: '',
img: ''
},
foursquare: {
view: false,
checked: false,
icon: 'foursquare',
url: '',
img: ''
},
github: {
view: false,
checked: false,
icon: 'github',
url: '',
img: ''
},
hangout: {
view: false,
checked: false,
icon: 'hangout',
url: '',
img: ''
},
tarjetaid: {
view: false,
checked: false,
icon: 'tarjetaid',
url: '',
img: ''
},
kickstart: {
view: false,
checked: false,
icon: 'kickstart',
url: '',
img: ''
},
messenger: {
view: false,
checked: false,
icon: 'messenger',
url: '',
img: ''
},
photos: {
view: false,
checked: false,
icon: 'photos',
url: '',
img: ''
},
pinterest: {
view: false,
checked: false,
icon: 'pinterest',
url: '',
img: ''
},
reddit: {
view: false,
checked: false,
icon: 'reddit',
url: '',
img: ''
},
snapchat: {
view: false,
checked: false,
icon: 'snapchat',
url: '',
img: ''
},
soundcloud: {
view: false,
checked: false,
icon: 'soundcloud',
url: '',
img: ''
},
spotify: {
view: false,
checked: false,
icon: 'spotify',
url: '',
img: ''
},
tiktok: {
view: false,
checked: false,
icon: 'tiktok',
url: '',
img: ''
},
tumblr: {
view: false,
checked: false,
icon: 'tumblr',
url: '',
img: ''
},
twitch: {
view: false,
checked: false,
icon: 'twitch',
url: '',
img: ''
},
vimeo: {
view: false,
checked: false,
icon: 'vimeo',
url: '',
img: ''
},
},
textUpload: '',
updateTarjeta: false,
app_id_s: '',
refSection : '',
id_tarjeta_principal: '',
id_pretarjeta: '',
id_lead: '',
showSocialNetworks: false,
arrRedesSociales:[],
iconVersion: 'v1',
translate: false,
}
}
componentDidMount() {
this.updateWindowDimensions();
window.addEventListener('resize', this.updateWindowDimensions);
let param = window.location.search;
if( param.indexOf('?app_id_s=') !== -1 ) {
let app_id_s = param.split('?app_id_s=')
app_id_s = app_id_s[1]
const regex = /#/gi
app_id_s = app_id_s.replaceAll(regex, '')
fetch(`https://tarjeta.id/editor_plus/REST/controllers/ControllerTarjeta?opt=getConstructorEditorPlus`, {
method: "POST",
mode: "cors",
body: JSON.stringify( { app_id_s }),
}).then(res => res.json()).then((res) => {
this.setState({ app_id_s, })
if(res.state) {
if(res.status === 0) {
window.location = `https://tarjeta.id/payments.php?nombre=${res.nombre}&telefono=${res.telefono}&correo=${res.correo}&modalidad=plus&id=${app_id_s}`
} else {
//Construyendo tarjeta
this.__construnctorTarjeta(res, app_id_s)
}
} else {
let { arrDatos } = this.state
arrDatos.descripcion.nombre = res.nombre
this.setState({ app_id_s, arrDatos, })
}
})
}
if(this._GET('id_tarjeta_principal')!=''){
const id_tarjeta_principal = this._GET('id_tarjeta_principal');
this.setState({id_tarjeta_principal})
}
if(this._GET('id_pretarjeta')!=''){
const id_pretarjeta = this._GET('id_pretarjeta');
this.setState({id_pretarjeta})
}
if(this._GET('id_lead')!=''){
const id_lead = this._GET('id_lead');
this.setState({id_lead})
}
}
_GET(variable) {
let query = window.location.search.substring(1);
let vars = query.split('&');
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
return '';
}
componentWillUnmount() {
window.removeEventListener('resize', this.updateWindowDimensions);
}
updateWindowDimensions() {
this.setState({ width: window.innerWidth, height: window.innerHeight });
}
updateState(obj){
this.setState(obj)
}
render() {
return (
{/* Header */}
this.setState(param) } />
{/* Sections */}
{ this.addTarjeta() }}
initState={ this.state } initsetState={ (param) => this.setState(param)}
/>
{ this.addTarjeta() }}
updateTarjeta={() => { this.updateTarjeta() }}
initState={ this.state } initsetState={ (param) => this.setState(param)}
/>
{/* Tabs */}
{/* this.setState(param) } />*/}
);
}
__construnctorTarjeta(data, app_id_s) {
let { app_id, state } = data
//Ocultamos el modal de registro
state.updateTarjeta = true
state.textUpload = ''
state.isOpenModalRegisterTarjeta = false
delete state.height
delete state.app_id_s
delete state.width
//Agregamos las rutas de imagen
state.arrDatos.diseno.portada = state.arrDatos.diseno.portada !== '' ? `https://tarjeta.id/imports/${app_id}/imgs/IMG-PORTADA-ORIGINAL.png?v=asf` : ''
state.arrDatos.diseno.logo = state.arrDatos.diseno.logo !== '' ? `https://tarjeta.id/imports/${app_id}/imgs/IMG-LOGO-ORIGINAL.png?v=asf` : ''
state.arrDatos.diseno.perfil = state.arrDatos.diseno.perfil !== '' ? `https://tarjeta.id/imports/${app_id}/imgs/IMG-PERFIL-ORIGINAL.png?v=asf` : 'img/icons/profile-demo2.png'
let { arrDocumentos } = state.arrDatos
if(!arrDocumentos) {
arrDocumentos = {
arrFiles: [],
checked: false,
title: "Mi nube de documentos",
}
state.arrDatos.arrDocumentos = arrDocumentos
}
this.setState({...state})
}
addTarjeta() {
const { arrDatos, } = this.state
const { email,descripcion,telefono } = arrDatos
const regex = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
const nombre = descripcion.nombre.trim();
if(nombre.length<1){
alert("Debes ingresar un nombre a tu tarjeta.id")
this.setState({
formValidate:{
isValidate: true,
input: "nombre"
},
sectionSidebar:{
id: 'introduccion',
name: 'Introducción',
img: 'img/icons/descripciขn.png'
},
isOpenModalRegisterTarjeta: false
});
return false
}else{
this.setState({
formValidate:{
isValidate: false,
input: ""
},
})
}
if(telefono.telefono.length==0){
alert("Ingresa un número de teléfono");
this.setState({
formValidate:{
isValidate: true,
input: "telefono"
},
sectionSidebar:{
id: 'datos_contacto',
name: 'Datos de contacto',
img: 'img/icons/m-user.png'
},
isOpenModalRegisterTarjeta: false
});
return false;
}else{
this.setState({
formValidate:{
isValidate: false,
input: ""
},
})
}
if(email.email.length==0){
alert("Ingresa un correo electrónico");
this.setState({
formValidate:{
isValidate: true,
input: "email"
},
sectionSidebar:{
id: 'datos_contacto',
name: 'Datos de contacto',
img: 'img/icons/m-user.png'
},
isOpenModalRegisterTarjeta: false
});
return false;
}else{
this.setState({
formValidate:{
isValidate: false,
input: ""
},
})
}
if(!regex.test(email.email[0].email)){
alert("Debes agregar un correo electrónico valido");
this.setState({
formValidate:{
isValidate: true,
input: "email"
},
sectionSidebar:{
id: 'datos_contacto',
name: 'Datos de contacto',
img: 'img/icons/m-user.png'
},
isOpenModalRegisterTarjeta: false
});
return false;
}else{
this.setState({
formValidate:{
isValidate: false,
input: ""
},
})
}
if (/[^a-z0-9]/g.test(this.state.username)) {
alert('Error, por favor ingresa un nombre de usuario sin caracteres especiales.')
return false
}
fetch(`https://tarjeta.id/editor_plus/REST/controllers/ControllerTarjeta?opt=existTarjeta`, {
method: "POST",
mode: "cors",
body: JSON.stringify( this.state ),
})
.then(res => res.json())
.then((res) => {
if(res.exist === 1) {
if (res.existUser != 0) {
alert("El nombre de la tarjeta no se encuentra disponible, intenta con otro.")
}
if (res.existEmail != 0) {
alert("El correo que proporcionaste ya fue utilizado, intenta con otro.")
}
} else if (res.exist === 0) {
fetch(`https://tarjeta.id/editor_plus/REST/controllers/ControllerTarjeta?opt=addTarjeta`, {
method: "POST",
mode: "cors",
body: JSON.stringify( this.state ),
})
.then(res0 => res0.json())
.then((res0) => {
//Redireccionar
const { app_id_secret, } = res0
// const app_id_secret = 'oUfbo8qpd-kzx09w5zQ-5NiV5Gz8mu-EQJ9DY'
this.setState({ textUpload: 'Subiendo fotografía de perfil...', })
this.promiseUploadProfiles('perfil', arrDatos.diseno.files_perfil, app_id_secret).then((a) => {
this.setState({ textUpload: 'Subiendo logo...', })
this.promiseUploadProfiles('logo', arrDatos.diseno.files_logo, app_id_secret).then((b) => {
this.setState({ textUpload: 'Subiendo portada...', })
this.promiseUploadProfiles('portada', arrDatos.diseno.files_portada, app_id_secret).then((c) => {
this.setState({ textUpload: `Subiendo carrusel de imágenes...`, })
this.promiseUploadSlider(app_id_secret).then((d) => {
this.promiseUploadTestimoniales(app_id_secret).then((d) => {
this.setState({ textUpload: '', })
alert('¡Tarjeta registrada con éxito!')
this.setState({ isOpenModalRegisterTarjeta: false, })
console.log('tarjeta registrada')
// window.location = `https://tarjeta.id/payments.php?nombre=${res0.user}&telefono=${res0.phone}&correo=${res0.email}&modalidad=plus&id=${app_id_secret}`
// window.location = `https://tarjeta.id/${this.state.username}`
})
})
})
})
})
})
}
})
}
updateTarjeta() {
const { arrDatos, app_id_s } = this.state
fetch(`https://tarjeta.id/editor_plus/REST/controllers/ControllerTarjeta?opt=updateTarjeta`, {
method: "POST",
mode: "cors",
body: JSON.stringify( {
...this.state,
} ),
})
.then(res0 => res0.json())
.then((res0) => {
//Redireccionar
this.setState({ textUpload: 'Subiendo fotografía de perfil...', })
this.promiseUploadProfiles('perfil', arrDatos.diseno.files_perfil, app_id_s).then((a) => {
this.setState({ textUpload: 'Subiendo logo...', })
this.promiseUploadProfiles('logo', arrDatos.diseno.files_logo, app_id_s).then((b) => {
this.setState({ textUpload: 'Subiendo portada...', })
this.promiseUploadProfiles('portada', arrDatos.diseno.files_portada, app_id_s).then((c) => {
this.setState({ textUpload: `Subiendo carrusel de imágenes...`, })
this.promiseUploadSlider(app_id_s).then((d) => {
this.promiseUploadTestimoniales(app_id_s).then((d) => {
this.setState({ textUpload: '', })
alert('¡Tarjeta actualizada con éxito!')
this.setState({ isOpenModalRegisterTarjeta: false, })
window.location = `https://tarjeta.id/${this.state.username}`
})
})
})
})
})
})
}
promiseUploadProfiles(opt, file, app_id_secret) {
let { arrDatos, } = this.state
return new Promise((resolve, reject) => {
if(file) {
let formData = new FormData()
formData.append('file', file)
formData.append('post', opt)
axios.post(`https://tarjeta.id/editor_plus/REST/controllers/ControllerUploads?opt=uploadImgPortada&tipo=${opt}&app_id_secret=${app_id_secret}`, formData, {})
.then(res => {
if(opt === 'perfil')
arrDatos.diseno.files_perfil = null
else if(opt === 'portada')
arrDatos.diseno.files_portada = null
else if(opt === 'logo')
arrDatos.diseno.files_logo = null
this.setState({ arrDatos })
resolve('ok')
})
} else {
resolve('ok')
}
})
}
promiseUploadSlider(app_id_secret) {
return new Promise((resolve, reject) => {
const { arrDatos, } = this.state
const { arrCarousel } = arrDatos
const { arrImages } = arrCarousel
let formData = new FormData()
let flagUpload = false
if(arrImages.length === 0) {
resolve('ok')
}
for(var a in arrImages) {
if(arrImages[a].files!='') {
flagUpload = true
formData.append('files[]', arrImages[a].files)
formData.append('post[]', a)
}
if(a == (arrImages.length - 1)) {
if(flagUpload) {
axios.post(`https://tarjeta.id/editor_plus/REST/controllers/ControllerUploads?opt=uploadImgCarouselIDPlus&app_id_secret=${app_id_secret}`, formData, {})
.then(res => {
for(var a in arrImages) {
if(arrImages[a].files) {
arrImages[a].files = null
}
if(a == (arrImages.length - 1)) {
this.setState({ arrDatos })
resolve('ok')
}
}
})
} else {
resolve('ok')
}
}
}
})
}
promiseUploadTestimoniales(app_id_secret) {
return new Promise((resolve, reject) => {
const { arrDatos, } = this.state
const { arrCarouselOp } = arrDatos
const { arrOpiniones } = arrCarouselOp
let formData = new FormData()
let flagUpload = false
if(arrOpiniones.length === 0) {
resolve('ok')
}
for(var a in arrOpiniones) {
if(arrOpiniones[a].files!='') {
flagUpload = true
formData.append('files[]', arrOpiniones[a].files)
formData.append('post[]', a)
}
if(a == (arrOpiniones.length - 1)) {
if(flagUpload) {
axios.post(`https://tarjeta.id/editor_plus/REST/controllers/ControllerUploads?opt=uploadImgCarouselOpinionesIDPlus&app_id_secret=${app_id_secret}`, formData, {})
.then(res => {
for(var a in arrOpiniones) {
if(arrOpiniones[a].files) {
arrOpiniones[a].files = null
}
if(a == (arrOpiniones.length - 1)) {
this.setState({ arrDatos })
resolve('ok')
}
}
})
} else {
resolve('ok')
}
}
}
})
}
}
export default App;