Conn2Flow
Navegação das docs

SDD

req-053: Ajustes e Melhorias na Disponibilidade Dinâmica de Menus Condicionais

Este lote de trabalho (BATCH-053) visa refinar a funcionalidade de múltiplos menus dinâmicos com visibilidade condicional implementada no BATCH-052. As melhorias envolvem a…

Este lote de trabalho (BATCH-053) visa refinar a funcionalidade de múltiplos menus dinâmicos com visibilidade condicional implementada no BATCH-052. As melhorias envolvem a sincronização automática de blocos HTML no CodeMirror ao criar novas condições, a sincronização do Live Preview (hep-preview) com a aba de condição ativa, e a evolução da condição "Perfil de Usuário" para suportar a seleção de múltiplos perfis por meio de um autocomplete baseado na tabela usuarios_perfis.


1. Modificações na Interface Administrativa (CRUD de Menus)

1.1 Autocomplete de Múltiplos Perfis para a Condição "Perfil de Usuário"

Modificar o formulário de cadastro de condições em gestor/modulos/menus/menus.js e as páginas do CRUD administrativo:

  • Quando o tipo de condição selecionado for perfil_usuario:

    • Exibir um campo input de Autocomplete abaixo do tipo e slug.

    • O autocomplete deve buscar dinamicamente na tabela usuarios_perfis (com status ativo status="A") através de uma chamada AJAX.

    • O usuário pode selecionar múltiplos perfis.

    • Cada perfil selecionado deve ser renderizado logo abaixo do input como um "tag" (ou caixinha) contendo um botão x para remoção do perfil selecionado.

    • Persistir a lista de IDs de perfis selecionados (ex: [1, 5, 8]) dentro do objeto da condição correspondente no schema JSON de fields_schema.conditions.

1.2 Geração Automática de Blocos de Comentário HTML no CodeMirror

  • No JS (menus.js), ao confirmar a criação de uma nova condição com o slug SLUG:

    • Obter o conteúdo HTML atual da aba "Editor HTML" (instância CodeMirror correspondente).

    • Verificar se o marcador de comentário daquela condição (<!-- menu-conditional-SLUG < -->) já existe no código.

    • Caso não exista:

    • Extrair a marcação delimitada pelo bloco padrão <!-- menu-visible < -->...<!-- menu-visible > -->.

    • Duplicar este bloco de HTML, substituindo o comentário de controle para a nova condição:

      <!-- menu-conditional-SLUG < -->
      ... HTML CÓPIA DO VISIBLE ...
      <!-- menu-conditional-SLUG > -->
    • Concatenar este novo bloco ao final do código HTML no editor CodeMirror.

    • Sincronizar o editor e marcar o estado da página como alterado.

    • Assim, garante-se que cada condição nova criada crie automaticamente seu bloco HTML no editor, eliminando a necessidade de reescrever manualmente os arquivos físicos de modelos.

1.3 Endpoint AJAX para Busca de Perfis

Modificar gestor/modulos/menus/menus.php:

  • Implementar um endpoint AJAX no switch de opções (opcao === 'adicionar' || opcao === 'editar') para responder à busca de perfis de usuários (ex: profiles-search).

  • A consulta deve retornar o ID (id_usuarios_perfis) e o Nome (nome / id textual) dos registros ativos na tabela usuarios_perfis, retornando uma lista JSON formatada para o componente de dropdown/autocomplete do Fomantic-UI.


2. Sincronização do Live Preview com a Aba Ativa (hep-preview)

Modificar a integração do pré-visualizador (live widget-preview) no JS e PHP:

  • Ao alternar abas no construtor de menu:

    • Detectar a aba selecionada.

    • Se a disponibilidade for todos, o preview renderiza o menu padrão (visible_to_all).

    • Se a disponibilidade for condicional, ao selecionar a aba da condição com o slug SLUG, disparar a atualização do preview passando um parâmetro extra na chamada AJAX (ex: preview_slug=SLUG).

  • No renderizador do widget para preview (menus.widget.php ou AJAX de preview):

    • Se o parâmetro preview_slug for fornecido na requisição de preview:

    • Forçar o renderizador do widget a renderizar exclusivamente os itens daquela chave de menu (menus[preview_slug]) e utilizar o bloco de HTML delimitado por <!-- menu-conditional-[preview_slug] < --> daquele template, simulando de forma fiel a exibição do menu da condição ativa na tela do usuário.


3. Renderização Dinâmica e Resolução de Múltiplos Perfis no Widget Público

Modificar gestor/modulos/menus/menus.widget.php:

  • No processamento do widget público, ao avaliar a lista de condições cadastradas:

    • Se a condição for perfil_usuario:

    • Validar se o usuário ativo (retornado por gestor_usuario()) está logado.

    • Se estiver logado, comparar o id_usuarios_perfis do usuário ativo contra a lista de IDs de perfis cadastrados/permitidos naquela condição específica (obtidos do schema JSON).

    • Se o ID do perfil do usuário coincidir com qualquer um dos perfis selecionados na condição, a condição é avaliada como verdadeira.

    • Renderizar e retornar o respectivo bloco condicional HTML (<!-- menu-conditional-[SLUG] < -->).


4. Validação e Testes Unitários

  1. Testes PHPUnit:

    • Atualizar a suíte de testes em tests/Unit/PHP/MenusWidgetConditionalVisibilityTest.php para validar:

      • Usuário com perfil ID X acessando um menu com a condição perfil_usuario contendo múltiplos perfis ([X, Y, Z]) -> deve renderizar com sucesso.

      • Usuário com perfil ID W (não contido em [X, Y, Z]) acessando o mesmo menu -> não deve satisfazer a condição (e deve cair no fallback adequado).

      • Testar a passagem do parâmetro preview_slug no widget renderizado em simulação e validar se o bloco e itens corretos são retornados.

  2. Testes Estáticos / Sintaxe:

    • Garantir que todos os arquivos alterados passem na verificação de sintaxe básica:

      • php -l gestor/modulos/menus/menus.php

      • php -l gestor/modulos/menus/menus.widget.php

      • node --check gestor/modulos/menus/menus.js

O Futuro é Híbrido: Humano + IA.

O Conn2Flow é a ferramenta. Se você precisa do Arquiteto para desenhar a estratégia da sua empresa usando essa tecnologia...

Contrate Consultoria Especializada