quinta-feira, 18 de março de 2021

PostgreSQL - XML Pretty Function

PostgreSQL - XML Pretty Function


create extension if not exists xml2;

drop function if exists fnc_xml_pretty(pXML xml) cascade;

create or replace function fnc_xml_pretty(pXML xml) returns xml as
$body$
declare
  vRetorno xml;
begin

  vRetorno := xslt_process(pXML::text, '
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:strip-space elements="*" />
      <xsl:output method="xml" indent="yes" />
      <xsl:template match="node() | @*">
        <xsl:copy>
          <xsl:apply-templates select="node() | @*" />   
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    ');

  return vRetorno;

end;
$body$
language 'plpgsql' immutable strict;

--select fnc_xml_pretty('<root><a><b>some text</b></a></root>');

--Reference: https://postgres.cz/wiki/PostgreSQL_SQL_Tricks#Pretty_xml_formating

sábado, 9 de janeiro de 2021

React Hooks personalizado para formulário com múltiplos inputs


  • Utilizando o hook useState (tradicional)

Arquivo: form.js

import React, { useState } from 'react';

const Form = () => {
  const [nomesetNome] = useState('');
  const [sobrenomesetSobreome] = useState('');

  const submitHandler = e => {
    e.preventDefault();
    alert(`Nome completo: ${nome} ${sobrenome}`);
setNome('');
setSobreome('');
  };

  return (
    <div>
      <form onSubmit={submitHandler}>
        <div>
          <label>Nome:</label>
          <input value={nome} onChange={e => setNome(e.target.value)} />
        </div>
        <div>
          <label>Sobrenome:</label>
          <input value={sobrenome} onChange={e => setSobreome(e.target.value)} />
        </div>
        <button type="submit">Submit</button>
      </form>
    </div>
  );
};

export default Form;

  • Utilizando o hook useForm (personalizado/custom)