rl-core-front 0.16.7 → 0.16.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
breadcrumbTrail,
|
|
10
10
|
} from "#core/_utils/breadcrumb-trail";
|
|
11
11
|
import { useI18n } from "#core/contexts";
|
|
12
|
+
import { useDocumentTitle } from "#core/hooks/use-document-title";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Rótulo das telas do próprio core — o projeto não precisa cadastrá-las.
|
|
@@ -36,6 +37,11 @@ export function Breadcrumbs({ navItems }: BreadcrumbsProps): JSX.Element {
|
|
|
36
37
|
|
|
37
38
|
const trail = breadcrumbTrail(pathname, navItems, SEGMENT_LABELS);
|
|
38
39
|
|
|
40
|
+
// A aba do navegador acompanha a migalha: o último degrau é a tela, e é o
|
|
41
|
+
// mesmo nome nos dois lugares — inclusive nas telas do próprio core.
|
|
42
|
+
const ultimo = trail[trail.length - 1];
|
|
43
|
+
useDocumentTitle(ultimo ? t(ultimo.label) : null);
|
|
44
|
+
|
|
39
45
|
return (
|
|
40
46
|
<nav className="mb-4 flex items-center gap-1.5 text-sm text-muted-foreground">
|
|
41
47
|
<button
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* O título com que a página carregou — o que o `metadata` do projeto mandou.
|
|
7
|
+
*
|
|
8
|
+
* Lido uma vez por carregamento e nunca reescrito: é o sufixo de todos os
|
|
9
|
+
* títulos daqui em diante, e o projeto não precisa dizer duas vezes como se
|
|
10
|
+
* chama (o prefixo "Dev - " que ele põe no `metadata` vem junto de graça).
|
|
11
|
+
*/
|
|
12
|
+
let baseTitle: string | null = null;
|
|
13
|
+
|
|
14
|
+
/** O que fica entre o nome da tela e o do sistema. */
|
|
15
|
+
const SEPARATOR = " · ";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A aba do navegador diz em que tela se está.
|
|
19
|
+
*
|
|
20
|
+
* Com cinco abas do sistema abertas, todas se chamavam só pelo nome dele — e
|
|
21
|
+
* achar a do financeiro era clicar uma a uma. A tela vem **antes** do nome do
|
|
22
|
+
* sistema, e não depois: a aba trunca pelo fim, e "ControlX - Controle
|
|
23
|
+
* fina…" vira "ControlX" em todas.
|
|
24
|
+
*
|
|
25
|
+
* `null` devolve o título de origem — é o que a tela sem migalha faz.
|
|
26
|
+
*/
|
|
27
|
+
export const useDocumentTitle = (title: string | null): void => {
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (baseTitle === null) {
|
|
30
|
+
baseTitle = document.title;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (!title) {
|
|
34
|
+
document.title = baseTitle;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
document.title = baseTitle ? `${title}${SEPARATOR}${baseTitle}` : title;
|
|
39
|
+
}, [title]);
|
|
40
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -82,6 +82,7 @@ export type {
|
|
|
82
82
|
UseConfirmResult,
|
|
83
83
|
} from "#core/hooks/use-confirm";
|
|
84
84
|
export { useConfirm } from "#core/hooks/use-confirm";
|
|
85
|
+
export { useDocumentTitle } from "#core/hooks/use-document-title";
|
|
85
86
|
export type { ExportQuery, UseExportResult } from "#core/hooks/use-export";
|
|
86
87
|
export { useExport } from "#core/hooks/use-export";
|
|
87
88
|
export type { UseFilterSchemaResult } from "#core/hooks/use-filter-schema";
|