Tópicos
- Criando uma Section
- Propriedades de uma Section
- Tematizando a Section com DaisyUI
Criando uma Section
A Section é um componente Preact que é configurável no Admin. Para que a Section seja visĩvel no Admin, é preciso criar esse componente na pasta sections/ ou em algum de seus sub-diretórios.
Comece criando uma Section para, em seguida, explorar diferentes tipos de propriedades e especializações de propriedades no admin.
Abra a pasta do seu site em uma IDE e execute as seguintes ações:
- Crie um arquivo - .tsxna pasta- sections/em seu Site com o nome desejado para Section (e.g:- LatestPosts.tsx).
- Exporte um componente Preact usando - export defaultcomo o exemplo abaixo:- sections/LatestPosts.tsx- export interface Props { title: string; } export default function LatestPosts({ title }: Props) { return ( <div> <h1 class="font-bold">{title}</h1> <p>This is an example section</p> </div> ); } 
 
Pronto! A Section foi criada localmente no seu projeto.
Caso o projeto esteja rodando localmente (deno task start) e caso o seletor de ambientes esteja apontando para localhost:8000, será possível visualizar a nova Section na biblioteca de sections (Sections).
Propriedades de uma Section
Uma Section pode ter como propriedade qualquer elemento que seja serializável, e interpretável no formulário de propriedades no admin da deco. Isto inclue:
- stringse- numbers
- Tipos simples de objetos serializáveis
- Tipos gerados de união, extensão, PickouOmit
- Sections(- import { Section } from "deco/blocks/section.ts")
- ImageWidget(- import type { ImageWidget } from "apps/admin/widgets.ts";) e outros components do admin
- Arrays dos tipos indicados acima
Além dos tipos acima, é possível anotar algumas propriedades para que o formulário do admin altere o mecanismo de inserção ou para determinar alguns aspectos do comportamento da propriedade.
Como exemplo, vamos adicionar três novas propriedades ao nosso componente LatestPosts, uma para imagem (photo), outro para o corpo da postagem (post) e um para a hora da postagem.
import type { Image as DecoImage } from "deco-sites/std/components/types.ts";
import Image from "deco-sites/std/components/Image.tsx";
export interface Props {
   /**
    * @title Post image.
    */
   photo?: DecoImage;
   /**
   * @title Post body.
   */
   post: string;
   /**
   * @title Publish date.
   * @format datetime
   */
   datetime: string;
   /**
   * @title Post title.
   */
   title: string;
}
export default function LatestPosts({ title, photo }: Props) {
   return (
      <div>
      {photo && <Image
         src={photo}
         alt={`${title} image`}
         height={500}
         width={500}
         class="rounded"
      />}
      <h1 class="font-bold">{title}</h1>
      <p>This is an example section</p>
      </div>
   );
}Ao salvar e carregar o admin no ambiente local (com o deno em execução), é possível ver que o admin prepara componentes próprios de formulário para a colocação de imagens, data, bem como sinaliza o que é cada campo a partir do title indicado em código.
Tematizando a Section com DaisyUI
No projeto base deco, é possível acessar uma Section especial, a Theme.tsx. Esta section define tokens e nomes especiais de classes que podem ser utilizadas por outras Sections seguindo a estrutura da ferramenta DaisyUI. Dentro do Theme.tsx é possível observar alguns tokens como o de cores principais:
export interface MainColors {
  /**
   * @format color
   * @title Base
   * @default #FFFFFF
   */
  "base-100": string;
  /**
   * @format color
   * @title Primary
   * @default #003232
   */
  "primary": string;
  /**
   * @format color
   * @title Scondary
   * @default #8C3D3D
   */
  "secondary": string;
  /**
   * @format color
   * @title Tertiary
   * @default #00FF7F
   */
  "tertiary": string;
}Adapte a classe de postagens para fazer uso de alguns tokens. Por exemplo, o título principal da postagem agora segue a cor primária do site.
import type { Image as DecoImage } from "deco-sites/std/components/types.ts";
import Image from "deco-sites/std/components/Image.tsx";
export interface Props {
   /**
    * @title Post image.
    */
   photo?: DecoImage;
   /**
   * @title Post body.
   */
   post: string;
   /**
   * @title Publish date.
   * @format datetime
   */
   datetime: string;
   /**
   * @title Post title.
   */
   title: string;
}
export default function LatestPosts({ title, photo }: Props) {
   return (
      <div>
      {photo && <Image
         src={photo}
         alt={`${title} image`}
         height={500}
         width={500}
         class="rounded"
      />}
      <h1 class="font-bold text-primary">{title}</h1>
      <p>This is an example section</p>
      </div>
   );
}O cõdigo fonte do Theme.tsx apresenta diferentes usos dos tokens. Agora, caso um componente de Theme esteja na mesma página do LatestPosts, este último podera ser estilizado a partir do componente de tema.