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
| Arquivo | Responsabilidade |
|---|---|
features/store/subscreens/home-management/store-home-management.controller.ts | Lista de seções e regras de bloqueio |
storage/home-management/home-management.storage.ts | Persistência em MMKV e pub/sub |
features/home/home-controller.tsx | Consome 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ção | Flag necessária |
|---|---|
| Performance | cfg-ativarperformance |
| Ranking | cfg-ativarperformance (reaproveita a mesma flag de Performance) |
| Engajamento | cfg-ativarengajamento |
| Mural de comunicação | cfg-ativarmuraldecomunicacoes |
| Relatórios (dashboard) | cfg-ativarperformance OU cfg-ativarengajamento |
| Novidades da Versão | cfg-ativarnovidadesdaversao |
| Avaliação | cfg-ativaravaliacaoforce |
| Ações Rápidas | Sempre 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.