feat: complete UI/UX refinement, email flow updates, and deep black theme
All checks were successful
Build and Deploy / build-and-push (push) Successful in 2m18s

- Updated all email templates to a clean light theme and changed button text to 'Finalizar Cadastro'.

- Enforced a strict 15-minute expiration on all auth/reset tokens.

- Created SetupAccount flow distinct from ResetPassword to capture user name during admin init.

- Refined dark mode to a premium True Black (Onyx) palette using Zinc.

- Fixed Dashboard KPI visibility and true period-over-period trend logic.

- Enhanced TeamManagement with global tenant filtering for Super Admins.

- Implemented secure User URL routing via slugs instead of raw UUIDs.

- Enforced strict Agent-level RBAC for viewing attendances.
This commit is contained in:
Cauê Faleiros
2026-03-05 15:33:03 -03:00
parent d5b57835a7
commit c4bd4d58a1
14 changed files with 369 additions and 70 deletions

View File

@@ -234,17 +234,19 @@ export const updateTeam = async (id: string, teamData: any): Promise<boolean> =>
}
};
export const createTenant = async (tenantData: any): Promise<boolean> => {
export const createTenant = async (tenantData: any): Promise<{ success: boolean; message?: string }> => {
try {
const response = await fetch(`${API_URL}/tenants`, {
method: 'POST',
headers: getHeaders(),
body: JSON.stringify(tenantData)
});
return response.ok;
} catch (error) {
const data = await response.json().catch(() => null);
if (!response.ok) throw new Error(data?.error || 'Erro ao criar organização');
return { success: true, message: data?.message || 'Organização criada!' };
} catch (error: any) {
console.error("API Error (createTenant):", error);
return false;
return { success: false, message: error.message };
}
};
@@ -352,11 +354,11 @@ export const forgotPassword = async (email: string): Promise<string> => {
return data.message;
};
export const resetPassword = async (password: string, token: string): Promise<string> => {
export const resetPassword = async (password: string, token: string, name?: string): Promise<string> => {
const response = await fetch(`${API_URL}/auth/reset-password`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ password, token })
body: JSON.stringify({ password, token, name })
});
const contentType = response.headers.get("content-type");