UNPKG

@seplan/diti-ds

Version:

Reusable UI component library developed by DITI (Technology and Innovation Directorate of SEPLAN PI) based on Mantine and Tailwind CSS

1 lines 6.83 kB
{"version":3,"file":"utils.cjs","sources":["../src/utils/api/django.ts","../src/utils/index.ts","../src/utils/api/params.ts","../src/utils/ui/filters.ts"],"sourcesContent":["// Removido para evitar dependências de autenticação na biblioteca\r\n// import { ApiError } from '@/lib/api/errors'\r\n\r\n// Definindo um tipo básico para ApiError\r\nexport interface ApiError {\r\n message: string\r\n body?: unknown\r\n getErrorMessage(): string\r\n}\r\n\r\nexport type DjangoError =\r\n | string[]\r\n | string\r\n | (Record<string, string | string[]> & {})\r\n\r\nexport function buildDjangoErrorMessage(error: DjangoError): string {\r\n if (typeof error === 'string') {\r\n return error\r\n }\r\n\r\n if (Array.isArray(error)) {\r\n return error.join('\\n')\r\n }\r\n const commonKeys = ['non_field_errors', 'detail', 'error', 'message']\r\n const messages: string[] = []\r\n Object.entries(error).forEach(([key, value]) => {\r\n const errorMessages = Array.isArray(value) ? value : [value]\r\n if (commonKeys.includes(key)) {\r\n messages.push(errorMessages.join(', '))\r\n } else {\r\n messages.push(`${key}: ${errorMessages.join(', ')}`)\r\n }\r\n })\r\n\r\n return messages.length > 0 ? messages.join('\\n') : 'Unexpected error occurred'\r\n}\r\n\r\nexport function getDjangoErrorMessage(error: ApiError): string {\r\n const genericMessage = error.getErrorMessage()\r\n\r\n if (genericMessage === error.message && error.body) {\r\n try {\r\n return buildDjangoErrorMessage(error.body as DjangoError)\r\n } catch {\r\n return genericMessage\r\n }\r\n }\r\n\r\n return genericMessage\r\n}\r\n\r\nexport function isDjangoValidationError(error: unknown): error is DjangoError {\r\n if (!error || typeof error !== 'object') return false\r\n\r\n if (Array.isArray(error)) return true\r\n if (typeof error === 'string') return true\r\n\r\n return Object.values(error as Record<string, unknown>).every(\r\n (value) => typeof value === 'string' || Array.isArray(value)\r\n )\r\n}\r\n\r\n/**\r\n * Formats Django validation errors into user-friendly messages\r\n * Legacy function - prefer getDjangoErrorMessage for new code\r\n */\r\nexport function formatDjangoErrors(errors: DjangoError): string {\r\n return buildDjangoErrorMessage(errors)\r\n}\r\n\r\n/**\r\n * Legacy alias for formatDjangoErrors\r\n * @deprecated Use formatDjangoErrors or getDjangoErrorMessage instead\r\n */\r\nexport const buildErrorMessage = formatDjangoErrors\r\n","// Core utilities\r\nexport { cn } from './core/cn'\r\nexport { formatCurrency } from './core/currency'\r\nexport { calculateExpiryTime } from './core/time'\r\n\r\nexport { formatCPF, isValidCPF } from './validation/cpf'\r\n\r\nimport { formatCPF, isValidCPF } from './validation/cpf'\r\nexport const CPF = {\r\n format: formatCPF,\r\n isValid: isValidCPF\r\n}\r\n\r\nexport { formatDate, formatDateTime } from './formatting/date'\r\nexport { removeAccents, normalizeForSearch } from './formatting/text'\r\n\r\nexport { filterOptions } from './ui/filters'\r\n\r\nexport { buildEventScopedParams } from './api/params'\r\n\r\n// Removido para evitar dependências de autenticação na biblioteca\r\n// export { buildParams, type ParamsRecord } from '@/lib/api/params'\r\n\r\nexport {\r\n buildDjangoErrorMessage,\r\n getDjangoErrorMessage,\r\n isDjangoValidationError,\r\n formatDjangoErrors,\r\n buildErrorMessage,\r\n type DjangoError\r\n} from './api/django'\r\n","// Removido para evitar dependências de autenticação na biblioteca\r\n// import { buildParams, type ParamsRecord } from '@/lib/api/params'\r\n\r\n// Definindo tipos básicos\r\nexport type ParamsRecord = Record<string, string | number | boolean | null | undefined>\r\n\r\n/**\r\n * Build parameters with automatic event scoping\r\n * Handles the common pattern of adding evento_id when not null or 'global'\r\n */\r\nexport function buildEventScopedParams({\r\n evento_id,\r\n ...params\r\n}: ParamsRecord & { evento_id: string | null }) {\r\n const baseParams = new URLSearchParams()\r\n \r\n // Add params to URLSearchParams\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== null && value !== undefined) {\r\n baseParams.set(key, String(value))\r\n }\r\n })\r\n\r\n if (evento_id && evento_id !== 'global') {\r\n baseParams.set('evento_id', evento_id)\r\n }\r\n\r\n return baseParams\r\n}\r\n","import { OptionsFilter, ComboboxItem } from '@mantine/core'\r\nimport { removeAccents } from '../formatting/text'\r\n\r\n/**\r\n * Função de filtro para o componente Select do Mantine que ignora acentos.\r\n *\r\n * @example\r\n * <Select\r\n * searchable\r\n * data={options}\r\n * filter={filterOptions}\r\n * />\r\n */\r\nexport const filterOptions: OptionsFilter = ({ options, search }) => {\r\n if (!search) {\r\n return options\r\n }\r\n\r\n const normalizedSearch = removeAccents(search.toLowerCase())\r\n\r\n return (options as ComboboxItem[]).filter((option) => {\r\n const normalizedLabel = removeAccents(option.label.toLowerCase())\r\n return normalizedLabel.includes(normalizedSearch)\r\n })\r\n}\r\n"],"names":["buildDjangoErrorMessage","error","Array","isArray","join","commonKeys","messages","Object","entries","forEach","key","value","errorMessages","includes","push","length","formatDjangoErrors","errors","buildErrorMessage","CPF","format","formatCPF","isValid","isValidCPF","evento_id","params","baseParams","URLSearchParams","set","String","options","search","normalizedSearch","removeAccents","toLowerCase","filter","option","label","genericMessage","getErrorMessage","message","body","values","every"],"mappings":"sHAeO,SAASA,EAAwBC,GACtC,GAAqB,iBAAVA,EACT,OAAOA,EAGT,GAAIC,MAAMC,QAAQF,GAChB,OAAOA,EAAMG,KAAK,MAEpB,MAAMC,EAAa,CAAC,mBAAoB,SAAU,QAAS,WACrDC,EAAqB,GAU3B,OATAC,OAAOC,QAAQP,GAAOQ,QAAQ,EAAEC,EAAKC,MACnC,MAAMC,EAAgBV,MAAMC,QAAQQ,GAASA,EAAQ,CAACA,GAClDN,EAAWQ,SAASH,GACtBJ,EAASQ,KAAKF,EAAcR,KAAK,OAEjCE,EAASQ,KAAK,GAAGJ,MAAQE,EAAcR,KAAK,WAIzCE,EAASS,OAAS,EAAIT,EAASF,KAAK,MAAQ,2BACrD,CA+BO,SAASY,EAAmBC,GACjC,OAAOjB,EAAwBiB,EACjC,CAMO,MAAMC,EAAoBF,EClEpBG,EAAM,CACjBC,OAAQC,EAAAA,UACRC,QAASC,EAAAA,6bCAJ,UAAgCC,UACrCA,KACGC,IAEH,MAAMC,EAAa,IAAIC,gBAavB,OAVApB,OAAOC,QAAQiB,GAAQhB,QAAQ,EAAEC,EAAKC,MAChCA,SACFe,EAAWE,IAAIlB,EAAKmB,OAAOlB,MAI3Ba,GAA2B,WAAdA,GACfE,EAAWE,IAAI,YAAaJ,GAGvBE,CACT,wBCf4C,EAAGI,UAASC,aACtD,IAAKA,EACH,OAAOD,EAGT,MAAME,EAAmBC,EAAAA,cAAcF,EAAOG,eAE9C,OAAQJ,EAA2BK,OAAQC,GACjBH,EAAAA,cAAcG,EAAOC,MAAMH,eAC5BrB,SAASmB,gEHe7B,SAA+B/B,GACpC,MAAMqC,EAAiBrC,EAAMsC,kBAE7B,GAAID,IAAmBrC,EAAMuC,SAAWvC,EAAMwC,KAC5C,IACE,OAAOzC,EAAwBC,EAAMwC,KACvC,CAAA,MACE,OAAOH,CACT,CAGF,OAAOA,CACT,kCAEO,SAAiCrC,GACtC,SAAKA,GAA0B,iBAAVA,OAEjBC,MAAMC,QAAQF,KACG,iBAAVA,GAEJM,OAAOmC,OAAOzC,GAAkC0C,MACpDhC,GAA2B,iBAAVA,GAAsBT,MAAMC,QAAQQ,KAE1D"}