StencilJS State Management Tips

description: Advanced State management without Redux, Mobs, or Stencil State Tunnel.


Example with Stencil.js v0.16.x .

Root Component

import { Component } from '@stencil/core';export interface User {
  name: string;
}
@Component({
  tag: 'app-root'
})
export class AppRoot {
  postService: PostService;
  @State() user: User;
  constructor(){
    this.postService = new PostService();
  }
  signOut = () => {
      this.user = null;
    }
  signIn = () => {
      this.user = { name: "Pablo" }
    }
  render() {
    return (
      <div>
        <header>
          <h1>Stencil App Starter</h1>
        </header>
        { this.user && <span> Your are connected {this.user.name}. </span> }
        <main>
          <stencil-router>
            <stencil-route-switch scrollTopOffset={0}>
              <stencil-route url='/' component='app-home' exact={true} />
              <stencil-route url='/profile' component='app-profile' componentsProps={{user: this.user, signIn : this.signIn, signOut : this.signout }}/>
            </stencil-route-switch>
          </stencil-router>
        </main>
      </div>
    );
  }
}

Profile Page


import { Component, Prop } from '@stencil/core';
@Component({
  tag: 'app-profile'
})
export class AppProfile {
  @Prop() user: User;
  @Prop() signIn: Function;
  @Prop() signOut: Function;
  render() {
      return (
        <div class="app-profile">
          <p>
            Hello! My name is {this.user && this.user.name}. My name was passed in
            through a @Prop!
          </p>
          <button onClick={this.signIn}>Sign In</button>
          <button onClick={this.signOut}>Sign Out</button>
        </div>
      );
  }
}

Resources :

Real world example application built with Stencil.js :

https://github.com/hcavalieri/stencil-realworld-app

Firebase Auth onAuthStateChanged avec Stenciljs

description : Attendre que la callback enregistrer dans onAuthStateChanged soit appelé avant

d’initialiser l’application. Permet d’éviter le déclenchement trop tôt d’une
routeGuard redirection si User non connecté.


Date publication : 28/10/2019

Version : Stencil.js v1.X

Solution pour éviter qu’au rechargement de la page que l’utilisateur soit rediriger vers la page de connexion. Alors que l’utilisateur est encore connecté. On attends juste que la callback soit au moins appelé une fois pour vérifier que l’utilisateur est bien à null ou présent.

Exemple d’implémentation avec Stenciljs. La documentation de Stencil suggère de retourner une Promise dans la méthode componentWillLoad() afin d’être sur que les données soit chargées avant le rendu du composant.

app-root.tsx

import { Component, State, h, Prop, } from '@stencil/core';import { User } from '../models/user';
import { PrivateRoute } from '../commons/utils';
declare var firebase: firebase.app.App
@Component({
  tag: 'app-root'
})
export class AppRoot {
  @State() user: User;
  componentWillLoad() {
    return new Promise((resolve) => {
      firebase.auth().onAuthStateChanged((user) => {
        this.injectUser(user);
        resolve();
      });
    })
  }
  injectUser = (user) => {
    if (user) {
      this.defaultProps = Object.assign({}, { user: user })
    } else {
      this.defaultProps =Object.assign({ user: undefined });
    }
  }
  render() {
    return (
      [
          <stencil-route-switch >
            <stencil-route componentProps={{user: this.user}} url='/' component='app-home' exact={true} />
            <stencil-route componentProps={{user: this.user}} url='/sign-in' component='app-sign-in' />
            <stencil-route componentProps={{user: this.user}} url='/sign-up' component='app-sign-up' />
            <PrivateRoute url='/profile' componentProps={{user: this.user}} component='app-profile' />
          </stencil-route-switch>
        </stencil-router>
      ]
    );
  }
}

utils.tsx

import { h } from "@stencil/core";
/**
 * <https://github.com/ionic-team/stencil-router/wiki/Enforce-authentication-for-some-routes>
*/
export const PrivateRoute = ({ component, ...props}: { [key: string]: any}) => {
    const Component = component;
    const redirectUrl = props.failureRedirect || '/sign-in';
    return (
      <stencil-route {...props} routeRender={
        (props: { [key: string]: any}) => {
          if (props.user) {
            return <Component {...props} {...props.componentProps}></Component>;
          }
          return <stencil-router-redirect url={redirectUrl}></stencil-router-redirect>
        }
      }/>
    );
  }

SEO Tools rendertron + ngrok – Analyse SEO d’une application SPA Angular en local

Analyse SEO d’une application SPA Angular en local

Faire une analyse SEO de son application SPA Angular/Ionic en local.

Lancer le serveur local Angular/Ionic

ionic serve
serveur local [http://localhost:8100](http://localhost:8100/)

Installer & lancer rendertron avec NPM

# Installer rendertron
npm install -g rendertron
# lancer le serveur
rendertron
# le serveur rendertron se lance sur le port 3000, http://localhost:3000

Utilisation

  • http://localhost:3000/render/<url-to-render>,

url-to-render est a remplacer par l’URL de votre application en local.

En suivant cette URL rendertron devrait rendre le site local Angular sérialisé avec un code source exploitable pour l’indexation.

Exemple avec mon application Angular qui tourne sur l’URL http://localhost:8100

http://localhost:3000/render/http://localhost:8100/

Installer & lancer ngrok

(Windows) dézipper l’archive, copier le fichier ngrok.exe dans C:\Program Files\ngrok Ajouter C:\Program Files\ngrok à votre PATH.

Obtenir une URL ngrok qui va exposer votre serveur local sur internet

ngrok http 3000
# ngrok génère alors une URL mappé sur le port 3000 de votre localhost

http://<id-ngrok>.ngrok.io/render/<http://localhost:8100/<path-a-analyser/>>

Analyser la page avec un outil SEO en ligne

  • Par exemple : dareboost.com taper l’URL dans l’outil : http://<ID ngrok>.ngrok.io/render/http://localhost:8100/

Analyser les micro data avec l’outil de test des

données structurées

Dans l’onglet “explorer l’url” taper votre address ngrok. Exemple : http://<id-ngrok>.ngrok.io/render/http://localhost:8100/annuaire/entreprise-1

Utiliser l’outil de prévisualisation

Dans l’outil de test des données structurées. Cliquer sur les items détectés puis sur prévisualiser. On peut alors voir comment la page s’affichera dans le SERP.

Hack – Xiaomi Yi Action Camera External Mic Jack

image - Hack - Xiaomi Yi Action Camera External Mic Jack

Remplacement du microphone par une prise jack sur la caméra d’action Xiaomi Yi Action Camera. Afin de brancher un micro externe.

image - Hack - Xiaomi Yi Action Camera External Mic Jack
Microphone supprimé et remplacé par une prise jack, pour permettre de brancher un microphone externe. Résultat final.
image 1 - Hack - Xiaomi Yi Action Camera External Mic Jack
image 2 - Hack - Xiaomi Yi Action Camera External Mic Jack
Découper le fil en trop
image 3 - Hack - Xiaomi Yi Action Camera External Mic Jack
10 pcs pcb panel mount media audios broches 3.Smm femelle stereo jack socket. Can be found on Ebay.
image 4 - Hack - Xiaomi Yi Action Camera External Mic Jack
Suppression du plastique servant à maintenir le microphone

image 5 - Hack - Xiaomi Yi Action Camera External Mic Jack
Retirer un maximum de plastique afin de loger la prise jack
image 6 - Hack - Xiaomi Yi Action Camera External Mic Jack
Extérieur prise jack
image 7 - Hack - Xiaomi Yi Action Camera External Mic Jack
Effectuer quelques tests avant de tout réassembler
image 8 - Hack - Xiaomi Yi Action Camera External Mic Jack
image 9 - Hack - Xiaomi Yi Action Camera External Mic Jack
Faire passer les fils, bruler légèrement la gaine pour garder la forme de l’angle
image 10 - Hack - Xiaomi Yi Action Camera External Mic Jack
Recollage de ce qu’il reste de l’isolant
image 11 - Hack - Xiaomi Yi Action Camera External Mic Jack
Constater l’état de la prise jack femelle, après l’avoir chauffé afin de retirer le maximum de volume
image 12 - Hack - Xiaomi Yi Action Camera External Mic Jack
Visser les vis de fixation
image 13 - Hack - Xiaomi Yi Action Camera External Mic Jack
Tient maintenant sur 3 vis
image 14 - Hack - Xiaomi Yi Action Camera External Mic Jack
Test avant fermeture définitive
image 15 - Hack - Xiaomi Yi Action Camera External Mic Jack
Retirer le scotch de protection, et nettoyage de la lentille

Le microphone d’origine peut être utiliser pour tester la nouvelle configuration.

image 16 - Hack - Xiaomi Yi Action Camera External Mic Jack
Cable jack + prise jack + microphone d’origine relié avec deux cables