Pular para o conteúdo principal

Gerenciar Tela Inicial

Última atualização: 16 de julho de 2026

Visão Geral

Diferente da maioria das sub-telas da tab Loja, "Gerenciar Tela Inicial" é real de ponta a ponta: permite ligar ou desligar seções específicas da Home, e essa preferência é persistida em MMKV e reflete de fato no que a Home renderiza. É consumida em Home / Indicadores e Engajamento.

Arquivos-chave

ArquivoResponsabilidade
features/store/subscreens/home-management/store-home-management.controller.tsLista de seções e regras de bloqueio
storage/home-management/home-management.storage.tsPersistência em MMKV e pub/sub
features/home/home-controller.tsxConsome useHomeManagementPreferences() pra decidir o que exibir

Oito seções, cada uma com um switch

A tela lista oito seções da Home (performance, engagement, quick-actions, communication-wall, dashboard-reports, ranking, version-news, rating), cada uma com um switch pra ligar/desligar.

Persistência real, com pub/sub

A preferência é gravada de fato em MMKV, sob a chave home-management:preferences, e qualquer mudança notifica listeners inscritos, permitindo que a Home reaja em tempo real sem precisar recarregar a tela:

// storage/home-management/home-management.storage.ts
const HOME_MANAGEMENT_STORAGE_KEY = "home-management:preferences";

export function setHomeManagementPreference(
itemId: HomeManagementItemId,
enabled: boolean,
): void {
storage.set(
HOME_MANAGEMENT_STORAGE_KEY,
JSON.stringify({ ...getHomeManagementPreferences(), [itemId]: enabled }),
);
notifyListeners();
}

Dupla trava: flag de configuração e preferência do usuário

Uma seção só pode ser habilitada pelo vendedor se a flag de configuração correspondente também estiver ativa. Se a flag estiver desligada, o item aparece bloqueado (locked: true) e o toque no switch é ignorado:

// store-home-management.controller.ts
const isItemAllowed =
(item.id === "performance" && isPerformanceEnabled) ||
(item.id === "engagement" && isEngagementEnabled) ||
item.id === "quick-actions" ||
(item.id === "communication-wall" && isCommunicationWallEnabled) ||
(item.id === "dashboard-reports" && isDashboardReportsEnabled) ||
(item.id === "ranking" && isPerformanceEnabled) ||
(item.id === "version-news" && isVersionNewsEnabled) ||
(item.id === "rating" && isForceRatingEnabled);
SeçãoFlag necessária
Performancecfg-ativarperformance
Rankingcfg-ativarperformance (reaproveita a mesma flag de Performance)
Engajamentocfg-ativarengajamento
Mural de comunicaçãocfg-ativarmuraldecomunicacoes
Relatórios (dashboard)cfg-ativarperformance OU cfg-ativarengajamento
Novidades da Versãocfg-ativarnovidadesdaversao
Avaliaçãocfg-ativaravaliacaoforce
Ações RápidasSempre liberada, sem flag
const handleToggleItem = useCallback(
(itemId: HomeManagementItemId, value: boolean) => {
const targetItem = items.find((item) => item.id === itemId);
if (!targetItem || targetItem.locked) return;
setHomeManagementPreference(itemId, value);
},
[items],
);

O ícone de arrastar é só decoração

Cada item mostra um ícone de "arrastar" (drag-horizontal-variant), sugerindo que a ordem das seções seria reordenável. Não existe, porém, nenhum handler de drag/reorder implementado, a ordem exibida é sempre a ordem fixa do array INITIAL_ITEMS no controller, e o ícone não responde a gestos.

Armadilhas conhecidas

Ao investigar por que uma seção não aparece na Home mesmo com o switch ligado nesta tela, verifique primeiro se a flag de configuração correspondente está de fato ativa: a UI aqui permite ligar o switch de exibição, mas isso não sobrepõe a flag, ela só é respeitada quando a flag também está ligada. E não espere conseguir reordenar as seções da Home por aqui, apesar do ícone sugerir isso.