Pular para o conteúdo

Referência de Hooks

Rebase fornece hooks React para acessar a funcionalidade do framework a partir de qualquer componente dentro da árvore de provedores <Rebase>.

O hook principal — acesse tudo:

import { useRebaseContext } from "@rebasepro/core";
function MyComponent() {
const context = useRebaseContext();
context.dataSource // Operações de dados
context.storageSource // Operações de arquivo
context.authController // Estado de autenticação
context.navigation // Estado de navegação
context.sideEntityController // Controle de painel lateral
context.snackbarController // Notificações toast
}

Acesse o estado de autenticação:

import { useAuthController } from "@rebasepro/core";
function UserMenu() {
const auth = useAuthController();
auth.user // Usuário atual (ou null)
auth.initialLoading // Carregando sessão inicial
auth.signOut() // Sair
auth.getAuthToken() // Obter JWT para chamadas de API
auth.extra // Dados adicionais do usuário (funções, etc.)
}

Abra entidades programaticamente em um painel lateral:

import { useSideEntityController } from "@rebasepro/core";
function OpenProductButton({ productId }) {
const sideEntityController = useSideEntityController();
return (
<button onClick={() => {
sideEntityController.open({
path: "products",
entityId: productId,
collection: productsCollection
});
}}>
Abrir Produto
</button>
);
}

Métodos:

MétodoDescrição
open({ path, entityId, collection })Abrir uma entidade em um painel lateral
close()Fechar o painel lateral atual
replace({ path, entityId, collection })Substituir o conteúdo do painel lateral atual

Mostrar notificações toast:

import { useSnackbarController } from "@rebasepro/core";
function SaveButton() {
const snackbar = useSnackbarController();
const handleSave = async () => {
try {
await saveData();
snackbar.open({ type: "success", message: "Salvo com sucesso!" });
} catch (error) {
snackbar.open({ type: "error", message: "Falha ao salvar" });
}
};
}

Acessar operações de armazenamento de arquivos:

import { useStorageSource } from "@rebasepro/core";
function FileUploader() {
const storage = useStorageSource();
const upload = async (file: File) => {
const result = await storage.uploadFile({
file,
fileName: file.name,
path: "documents"
});
const url = await storage.getDownloadURL(result.path);
return url;
};
}

Controlar tema claro/escuro:

import { useModeController } from "@rebasepro/core";
function ThemeToggle() {
const mode = useModeController();
return (
<button onClick={mode.toggleMode}>
Atual: {mode.mode} {/* "light" | "dark" */}
</button>
);
}

Abra um diálogo lateral para selecionar entidades de uma coleção. Este é o mesmo hook usado internamente quando uma propriedade de relação é renderizada:

import { useEntitySelectionDialog } from "@rebasepro/core";
function SelectProduct() {
const selectionDialog = useEntitySelectionDialog({
path: "products",
collection: productsCollection,
onSingleEntitySelected: (entity) => {
console.log("Selected:", entity);
}
});
return <button onClick={selectionDialog.open}>Selecionar Produto</button>;
}

Acessar estado de navegação e coleções resolvidas:

import { useNavigationController } from "@rebasepro/core";
function MyComponent() {
const navigation = useNavigationController();
navigation.collections // Todas as coleções registradas
navigation.views // Vistas personalizadas
navigation.adminViews // Vistas em modo administrador
navigation.getCollection(path) // Obter coleção para um caminho
}