GithubHelp home page GithubHelp logo

frontend_te's Introduction

Advertencia:

No entiendo como integrar los estilos de tu plantilla con un componente normal que yo haya hecho, asi que para las pruebas he creado componentes simples sin ningun estilo

Native y web

el web se corre de modo distinto que el native a pesar de que ambos ejecutan el mismo codigo, hay que seguir los pasos de la pagina nativebase

para app

es mejor crear una carpeta e instalar ahi expo y luego crear un proyecto adentro, asi se mantiene limpia la version principal de la computadora, podrian hacer problemas de dependencias asi que mejor mantener la carpeta interna hay que instalar android studio y ubicarlo en al carpeta del suario en ubuntu, instalar el ndk, el sdk y la libreria del modelo de celular a testear por medio del settings de android studio despues de eso permitira compilar la app y usar expo

basta con instalar los sig paquetes(quiza distinta version) con yarn:

    "expo": "~37.0.3",
    "expo-font": "^8.1.1",
    "native-base": "^2.13.12",
    "react": "^16.13.1",
    "react-dom": "~16.9.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz",
    "react-native-web": "~0.11.7",
    "react-router": "^5.2.0",
    "react-router-dom": "^5.2.0"

y ejecutar el proyecto, ubicarse dentro de la carpeta /native/frontend_TE/ y ejecutar yarn expo start

para web

hay que instalar las dependencias y la configuracion de la apgina de native base

despues simplemente ejecutar con yarn start

no lo usaremos desde el mismo proyecto por que en web requiere reenlazar las librerias de react y eso produce problemas apra ejecutarlo en app apra celulares, entonces mejor mantener dos proyectos con el mismo codigo :v

Frontend para testing

Necesito ir probando como manejar la API para que sea sencilla de manejar en django REST Framework se usan muchas URLs con el pk interno de la bd, eso es eficiente pero dificil de manejar por los usuarios, entonces es necesario crear algo similar a los slugs para acceder a estos o en su defecto metodos de busqueda a partir de los pk para ello es necesario manejarlo desde front end, por eso cree esta carpeta, para iniciar a consumir el REST desde React con Axios o con fetch

Setup del ambiente

yarn add create-react-app
yarn create-react-app frontend
cd frontend/
yarn start
yarn add axios

si hay errores instalando, crear el watchdog de node:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

https://blog.usejournal.com/serving-react-and-django-together-2089645046e4

todos los siguientes codigos ejemplifican elementos, solo sustituyelos en el app.js

ejemplos de como consumir con la API (no llevan token):

GET

import React  from 'react';

import axios from 'axios';

export default class PersonList extends React.Component {
  state = {
    persons: []
  }
  componentDidMount() {
    // axios.defaults.headers.post['Content-Type'] ='application/x-www-form-urlencoded';
    axios.get(`http://127.0.0.1:8000/v0/media/GET/video/`)
      .then(res => {
        const persons = res.data;
        this.setState({ persons })
         }).catch(err=>{
      console.log(err);
      })
  }

  render() {
    return (
      <ul>
        { this.state.persons.map(
          person => 
          <li>{person.title}</li> 
          )
        }
      </ul>
    )
  }
}

POST

import React from 'react';
import axios from 'axios';
 
export default class ListaPersonas extends React.Component {
  state = {
    name: '',
  }
 
  handleChange = event => {
    this.setState({
      // name: event.target.value,
      code: event.target.value, 
   });
  }
 
  handleSubmit = event => {
    event.preventDefault();
 
    const cod = {
      // name: this.state.name,
      code:  this.state.code,
      validity_begins: "2019-12-26" ,
      validity_expires:"2019-12-26", 
      license: 1 
    };
 
    axios.post(`http://127.0.0.1:8000/v0/user/POST/code/`,  cod )
      .then(res => {
        console.log(res);
        console.log(res.data);
      })
  }
 
  render() {
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <label>
            Codigo:
            <input type="text" name="code" onChange={this.handleChange} />
          </label>
          <br/>
          <button type="submit">Agregar Codigo</button>
        </form>
      </div>
    )
  }
}

URL notify:

En sandbox y desde frontends administrados desde backend es posible mandar facilmente las señales de IPN para la administracion de facturas desde nuestro back, estos generalmente se basan en la creacion de input hide para el paso de parametros. para frontend es posible manejarlo desde la pagina de paypal, con la cuenta que recibira los pagos accedemos a https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-ipn-notify para indicar que cada que se realice una operacion envie la señal de IPN a la URL del servidor indicada aqui en este caso sera www.miservidorenawsdeTeamEditionOnDemand.com/paypal Casi no hay documentacion de IPN con react o JS, https://medium.com/@danielsternlicht/handling-paypal-ipn-messages-with-nodejs-5ccd97870c4

Usare este componente como boton de React: https://github.com/Luehang/react-paypal-button-v2#large_blue_diamond-usage-example

Componente paypal:

instalar:

yarn add react-paypal-button-v2

y sustituir:

import React from 'react';
import { PayPalButton } from "react-paypal-button-v2";

export default class ExampleComponent extends React.Component  {
  render() {
    return (
      <PayPalButton
        amount="0.01"//este valor debe venir d eun formaulario anterior
        // shippingPreference="NO_SHIPPING" // default is "GET_FROM_FILE"
        onSuccess={(details, data) => {
          alert("Transaction completed by " + details.payer.name.given_name);

          // OPTIONAL: Call your server to save the transaction
          return fetch("/paypal-transaction-complete", {
            method: "post",
            body: JSON.stringify({
              orderID: data.orderID
            })
          });
        }}
      />
    );
  }
}

en las funciones es donde se indica que comportamiento debe tener, si se usara routes o algo mas(ahi si estpy bien piedra, en los ejemplos en lugar de redirigir simplemente lanza un mensaje con JS)

el codigo posterior a los eventos se maneja en onSucess,onError,on Approve para que funcione en produccion al elemento del boton se le debe de agregar el ID del vendedor:

import { PayPalButton } from "react-paypal-button-v2";

export default class Example Component {
  render() {
    return (
      <PayPalButton 
        ...
        onSuccess={(details, data) => {
          ...
        }}
        options={{
          clientId: "PRODUCTION_CLIENT_ID"
        }}
      />
    );
  }
}

este lo obtienes creando una app para paypal con los pasos que estan en la siguiente URL y copiando el ID de la app creada, para que asi cargue los datos del vendedor en automatico al iniciar la venta

https://developer.paypal.com/docs/integration/admin/manage-apps/

a este componente se le debe de pasar la informacion de la compra desde otro formulario, el cual creara la orden por medio de la API y pasara esos parametros a este boton para efectuar la venta

instalar yarn en ubuntu 20

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -

echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install yarn

Native Base:

libreria de componentes para react web, y react native

seguir la instalacion de : https://docs.nativebase.io/docs/GetStarted.html

yarn add native-base expo
# y linkear
yarn react-native link
# podrian faltar las fuentes 

para instalar en web

npm install -g create-react-app
npx create-react-app nativebase-app
cd nativebase-app

npm i native-base react-art react-native-web --save
npm i react-app-rewired customize-cra @babel/plugin-proposal-class-properties --dev --save

o hacerlo con yarn

yarn native-base react-art react-native-web react-app-rewired customize-cra @babel/plugin-proposal-class-properties 

reescribir el package.json

"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
}

crear en la carpeta principal un archivo config-overrides.js:

const path = require('path');
const {
  override,
  addWebpackAlias,
  babelInclude,
  addBabelPlugins
} = require('customize-cra');

module.exports = override(
  addWebpackAlias({
    "react-native/Libraries/Renderer/shims/ReactNativePropRegistry": "react-native-web/dist/modules/ReactNativePropRegistry",
    "react-native": "react-native-web"
  }),
  babelInclude([
    path.resolve('src'),
    path.resolve('node_modules/native-base-shoutem-theme'),
    path.resolve('node_modules/react-navigation'),
    path.resolve('node_modules/react-native-easy-grid'),
    path.resolve('node_modules/react-native-drawer'),
    path.resolve('node_modules/react-native-safe-area-view'),
    path.resolve('node_modules/react-native-vector-icons'),
    path.resolve('node_modules/react-native-keyboard-aware-scroll-view'),
    path.resolve('node_modules/react-native-web'),
    path.resolve('node_modules/react-native-tab-view'),
    path.resolve('node_modules/static-container'),
  ]),
  addBabelPlugins(
    "@babel/plugin-proposal-class-properties"
  ),
);

agregar al App.css:

@font-face {
  font-family: "Entypo";
  src: url("~react-native-vector-icons/Fonts/Entypo.ttf") format("truetype");
}

@font-face {
  font-family: "EvilIcons";
  src: url("~react-native-vector-icons/Fonts/EvilIcons.ttf") format("truetype");
}

@font-face {
  font-family: "FontAwesome";
  src: url("~react-native-vector-icons/Fonts/FontAwesome.ttf")
    format("truetype");
}

@font-face {
  font-family: "fontcustom";
  src: url("~react-native-vector-icons/Fonts/Foundation.ttf") format("truetype");
}

@font-face {
  font-family: "Ionicons";
  src: url("~react-native-vector-icons/Fonts/Ionicons.ttf") format("truetype");
}

@font-face {
  /*font-family: 'MaterialCommunityIcons';*/
  font-family: "Material Design Icons";
  src: url("~react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf")
    format("truetype");
}

@font-face {
  font-family: "MaterialIcons";
  src: url("~react-native-vector-icons/Fonts/MaterialIcons.ttf")
    format("truetype");
}

@font-face {
  font-family: "Octicons";
  src: url("~react-native-vector-icons/Fonts/Octicons.ttf") format("truetype");
}

@font-face {
  font-family: "simple-line-icons";
  src: url("~react-native-vector-icons/Fonts/SimpleLineIcons.ttf")
    format("truetype");
}

@font-face {
  font-family: "Zocial";
  src: url("~react-native-vector-icons/Fonts/Zocial.ttf") format("truetype");
}

para agregar fuentes personalizadas hay que agregar al app.js:

import * as Font from 'expo-font';
...
class App extends Component {
  async componentDidMount() {
    await Font.loadAsync({
      Roboto: require('native-base/Fonts/Roboto.ttf'),
      Roboto_medium: require('native-base/Fonts/Roboto_medium.ttf'),
      // ...Ionicons.font,
    });
    this.setState({ isReady: true });
  }
  ...
}

hay que linkear las dependencias

yarn react-native link

iconos: hay un error ya que al instalar el paquete de native abse una dependencia es react-native-vector-icons entonces si lo instalas explicitamente hay errores, no hay que instalarlo y para importar los iconos hay que agregarlo al App.js:

async componentDidMount() {
    await Font.loadAsync({
      ...
      Ionicons: require("@expo/vector-icons/build/vendor/react-native-vector-icons/Fonts/Ionicons.ttf")
    });
    this.setState({ isReady: true });
  }

Menu swith links:

  render() {
    return (  
                  <BrowserRouter>
        <div className="App">
                   <Header />
          <Navigation />
            <Switch>

             <Route path="/" component={Home} exact/>
             <Route path="/about" component={About}/>
             <Route path="/contact" component={Contact}/>
             <Route path="/get_videos" component={Get_demo}/>
            <Route component={Error}/>
           </Switch>

        </div> 
      </BrowserRouter>
       );
  }

frontend_te's People

Contributors

bardiaalavi-2020 avatar okadath avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.