UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

1 lines 7.61 kB
{"version":3,"sources":["../src/components/BreadcrumbMenu/breadcrumbStore.ts"],"sourcesContent":["import { create } from 'zustand';\n\n/**\n * Interface para um item de breadcrumb\n */\nexport interface BreadcrumbItem {\n id: string;\n name: string;\n url: string;\n}\n\n/**\n * Interface para o estado do store de breadcrumbs\n */\ninterface BreadcrumbStore {\n // Múltiplas instâncias de breadcrumbs identificadas por namespace\n breadcrumbs: Record<string, BreadcrumbItem[]>;\n\n // Define todos os breadcrumbs de uma instância\n setBreadcrumbs: (namespace: string, items: BreadcrumbItem[]) => void;\n\n // Adiciona um breadcrumb ao final da lista\n addBreadcrumb: (namespace: string, item: BreadcrumbItem) => void;\n\n // Atualiza um breadcrumb existente\n updateBreadcrumb: (\n namespace: string,\n itemId: string,\n updates: Partial<BreadcrumbItem>\n ) => void;\n\n // Remove um breadcrumb e todos os seguintes\n removeBreadcrumbFrom: (namespace: string, itemId: string) => void;\n\n // Mantém apenas os breadcrumbs até o índice especificado\n sliceBreadcrumbs: (namespace: string, index: number) => void;\n\n // Limpa todos os breadcrumbs de uma instância\n clearBreadcrumbs: (namespace: string) => void;\n\n // Obtém os breadcrumbs de uma instância\n getBreadcrumbs: (namespace: string) => BreadcrumbItem[];\n}\n\n/**\n * Store Zustand para gerenciar breadcrumbs\n * Suporta múltiplas instâncias através de namespaces\n */\nexport const useBreadcrumbStore = create<BreadcrumbStore>((set, get) => ({\n breadcrumbs: {},\n\n setBreadcrumbs: (namespace: string, items: BreadcrumbItem[]) => {\n set((state) => ({\n breadcrumbs: {\n ...state.breadcrumbs,\n [namespace]: items,\n },\n }));\n },\n\n addBreadcrumb: (namespace: string, item: BreadcrumbItem) => {\n set((state) => {\n const current = state.breadcrumbs[namespace] || [];\n return {\n breadcrumbs: {\n ...state.breadcrumbs,\n [namespace]: [...current, item],\n },\n };\n });\n },\n\n updateBreadcrumb: (\n namespace: string,\n itemId: string,\n updates: Partial<BreadcrumbItem>\n ) => {\n set((state) => {\n const current = state.breadcrumbs[namespace] || [];\n return {\n breadcrumbs: {\n ...state.breadcrumbs,\n [namespace]: current.map((item) =>\n item.id === itemId ? { ...item, ...updates } : item\n ),\n },\n };\n });\n },\n\n removeBreadcrumbFrom: (namespace: string, itemId: string) => {\n set((state) => {\n const current = state.breadcrumbs[namespace] || [];\n const index = current.findIndex((item) => item.id === itemId);\n if (index === -1) return state;\n\n return {\n breadcrumbs: {\n ...state.breadcrumbs,\n [namespace]: current.slice(0, index),\n },\n };\n });\n },\n\n sliceBreadcrumbs: (namespace: string, index: number) => {\n set((state) => {\n const current = state.breadcrumbs[namespace] || [];\n return {\n breadcrumbs: {\n ...state.breadcrumbs,\n [namespace]: current.slice(0, index + 1),\n },\n };\n });\n },\n\n clearBreadcrumbs: (namespace: string) => {\n set((state) => {\n const { [namespace]: _, ...rest } = state.breadcrumbs;\n return {\n breadcrumbs: rest,\n };\n });\n },\n\n getBreadcrumbs: (namespace: string) => {\n return get().breadcrumbs[namespace] || [];\n },\n}));\n\n/**\n * Hook customizado para facilitar o uso de breadcrumbs\n *\n * @param namespace - Identificador único para esta instância de breadcrumbs\n * @returns Objeto com breadcrumbs e métodos para manipulá-los\n *\n * @example\n * ```tsx\n * const { breadcrumbs, setBreadcrumbs, addBreadcrumb } = useBreadcrumb('performance');\n *\n * // Definir breadcrumbs iniciais\n * setBreadcrumbs([\n * { id: 'home', name: 'Home', url: '/' },\n * { id: 'page', name: 'Page', url: '/page' }\n * ]);\n *\n * // Adicionar novo breadcrumb\n * addBreadcrumb({ id: 'detail', name: 'Detail', url: '/page/detail' });\n * ```\n */\nexport const useBreadcrumb = (namespace: string) => {\n const store = useBreadcrumbStore();\n const breadcrumbs = store.breadcrumbs[namespace] || [];\n\n return {\n breadcrumbs,\n\n /**\n * Define todos os breadcrumbs de uma vez\n */\n setBreadcrumbs: (items: BreadcrumbItem[]) => {\n store.setBreadcrumbs(namespace, items);\n },\n\n /**\n * Adiciona um novo breadcrumb ao final\n */\n addBreadcrumb: (item: BreadcrumbItem) => {\n store.addBreadcrumb(namespace, item);\n },\n\n /**\n * Atualiza um breadcrumb existente\n */\n updateBreadcrumb: (itemId: string, updates: Partial<BreadcrumbItem>) => {\n store.updateBreadcrumb(namespace, itemId, updates);\n },\n\n /**\n * Remove um breadcrumb e todos os seguintes\n */\n removeBreadcrumbFrom: (itemId: string) => {\n store.removeBreadcrumbFrom(namespace, itemId);\n },\n\n /**\n * Mantém apenas os breadcrumbs até o índice especificado (inclusivo)\n */\n sliceBreadcrumbs: (index: number) => {\n store.sliceBreadcrumbs(namespace, index);\n },\n\n /**\n * Limpa todos os breadcrumbs\n */\n clearBreadcrumbs: () => {\n store.clearBreadcrumbs(namespace);\n },\n };\n};\n"],"mappings":"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","names":[]}