{"version":3,"sources":["../src/components/AlertManagerView/AlertsManagerView.tsx"],"sourcesContent":["import Modal from '../Modal/Modal';\nimport Text from '../Text/Text';\nimport Divider from '../Divider/Divider';\nimport Table, {\n  TableHeader,\n  TableBody,\n  TableRow,\n  TableHead,\n  TableCell,\n} from '../Table/Table';\nimport Button from '../Button/Button';\nimport Badge from '../Badge/Badge';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { UserIcon } from '@phosphor-icons/react/dist/csr/User';\nimport type { AlertData } from '../AlertManager/types';\n\n// Interface para os dados de visualização do alerta\nexport interface AlertViewData extends Omit<AlertData, 'image'> {\n  image?: string; // No view, a imagem sempre é uma URL (string)\n  sentAt: string | Date; // Data de envio formatada\n  recipients: RecipientStatus[];\n}\n\n// Interface para o status de cada destinatário\nexport interface RecipientStatus {\n  id: string;\n  name: string;\n  status: 'viewed' | 'pending';\n}\n\ninterface AlertsManagerViewProps {\n  alertData: AlertViewData;\n  isOpen?: boolean;\n  onClose?: () => void;\n  /** URL da imagem após upload (prioritária - será exibida primeiro) */\n  imageLink?: string | null;\n  /** Imagem padrão a ser exibida quando não há imagem no alertData (URL string) */\n  defaultImage?: string | null;\n  // Controle de paginação\n  currentPage?: number;\n  totalPages?: number;\n  onPageChange?: (page: number) => void;\n  itemsPerPage?: number;\n}\n\nexport const AlertsManagerView = ({\n  alertData,\n  isOpen = false,\n  onClose,\n  imageLink,\n  defaultImage,\n  currentPage = 1,\n  totalPages: externalTotalPages,\n  onPageChange,\n  itemsPerPage = 10,\n}: AlertsManagerViewProps) => {\n  // Calcular paginação (usar props externas se fornecidas, senão calcular)\n  const totalPages =\n    externalTotalPages ?? Math.ceil(alertData.recipients.length / itemsPerPage);\n\n  // Clamp currentPage to valid range\n  const effectiveCurrentPage = Math.min(totalPages, Math.max(1, currentPage));\n\n  // Slice recipients based on effective page\n  const startIndex = (effectiveCurrentPage - 1) * itemsPerPage;\n  const endIndex = startIndex + itemsPerPage;\n  const paginatedRecipients = alertData.recipients.slice(startIndex, endIndex);\n\n  const handleClose = () => {\n    onClose?.();\n  };\n\n  const formatDate = (dateInput: string | Date) => {\n    const date = dateInput instanceof Date ? dateInput : new Date(dateInput);\n    if (Number.isNaN(date.getTime())) return String(dateInput);\n    return date.toLocaleDateString('pt-BR', {\n      day: '2-digit',\n      month: '2-digit',\n      year: 'numeric',\n    });\n  };\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onClose={handleClose}\n      title={alertData.title}\n      size=\"md\"\n      contentClassName=\"p-0\"\n    >\n      <div className=\"flex flex-col h-[calc(100vh-8rem)] max-h-[700px]\">\n        {/* Área de conteúdo com scroll */}\n        <div className=\"flex-1 overflow-y-auto px-6 py-4\">\n          {/* Preview do alerta */}\n          <div className=\"bg-background-50 px-5 py-6 flex flex-col items-center gap-4 rounded-xl mb-4\">\n            {/* Prioridade: imageLink > alertData.image > defaultImage */}\n            {(imageLink || alertData.image || defaultImage) && (\n              <img\n                src={imageLink || alertData.image || defaultImage || undefined}\n                alt={alertData.title || 'Imagem do alerta'}\n              />\n            )}\n            <div className=\"flex flex-col items-center text-center gap-3\">\n              <Text size=\"lg\" weight=\"semibold\">\n                {alertData.title || 'Sem Título'}\n              </Text>\n              <Text size=\"sm\" weight=\"normal\" className=\"text-text-500\">\n                {alertData.message || 'Sem mensagem'}\n              </Text>\n            </div>\n          </div>\n\n          {/* Divider */}\n          <Divider className=\"my-4\" />\n\n          {/* Data de envio */}\n          <div className=\"flex justify-between items-center mb-4 px-2\">\n            <Text size=\"sm\" weight=\"bold\" className=\"text-text-700\">\n              Enviado em\n            </Text>\n            <Text size=\"sm\" weight=\"medium\" className=\"text-text-900\">\n              {formatDate(alertData.sentAt)}\n            </Text>\n          </div>\n\n          <Divider className=\"my-4\" />\n\n          {/* Tabela de destinatários */}\n          <div className=\"mb-4\">\n            <Table variant=\"borderless\" className=\"table-fixed\">\n              <TableHeader>\n                <TableRow variant=\"borderless\">\n                  <TableHead className=\"py-2 px-3.5 text-start\">\n                    Destinatário\n                  </TableHead>\n                  <TableHead className=\"py-2 px-3.5 w-[120px] text-start\">\n                    Status\n                  </TableHead>\n                </TableRow>\n              </TableHeader>\n              <TableBody variant=\"borderless\">\n                {paginatedRecipients.map((recipient) => (\n                  <TableRow key={recipient.id}>\n                    <TableCell className=\"py-2 px-3.5 flex flex-row gap-2 text-start truncate\">\n                      <div className=\"rounded-full size-6 bg-primary-100 flex items-center justify-center\">\n                        <UserIcon className=\"text-primary-950\" size={18} />\n                      </div>\n                      {recipient.name}\n                    </TableCell>\n                    <TableCell className=\"py-2 px-3.5 text-center\">\n                      <div className=\"flex justify-center items-center gap-1\">\n                        {recipient.status === 'viewed' ? (\n                          <Badge variant=\"solid\" action=\"success\">\n                            Visualizado\n                          </Badge>\n                        ) : (\n                          <Badge variant=\"solid\" action=\"error\">\n                            Pendente\n                          </Badge>\n                        )}\n                      </div>\n                    </TableCell>\n                  </TableRow>\n                ))}\n              </TableBody>\n            </Table>\n          </div>\n\n          {/* Paginação */}\n          {totalPages > 1 && (\n            <div className=\"flex justify-end items-center gap-2 bg-background-50 border border-border-200 py-3.5 px-2 rounded-b-2xl\">\n              <Text size=\"sm\" className=\"text-text-600\">\n                Página {effectiveCurrentPage} de {totalPages}\n              </Text>\n              <div className=\"flex gap-2\">\n                {onPageChange ? (\n                  <>\n                    <Button\n                      variant=\"link\"\n                      size=\"extra-small\"\n                      onClick={() =>\n                        onPageChange(Math.max(1, effectiveCurrentPage - 1))\n                      }\n                      disabled={effectiveCurrentPage === 1}\n                      iconLeft={<CaretLeftIcon />}\n                    >\n                      Anterior\n                    </Button>\n                    <Button\n                      variant=\"link\"\n                      size=\"extra-small\"\n                      onClick={() =>\n                        onPageChange(\n                          Math.min(totalPages, effectiveCurrentPage + 1)\n                        )\n                      }\n                      disabled={effectiveCurrentPage === totalPages}\n                      iconRight={<CaretRightIcon />}\n                    >\n                      Próximo\n                    </Button>\n                  </>\n                ) : (\n                  <>\n                    <Button\n                      variant=\"link\"\n                      size=\"extra-small\"\n                      disabled={effectiveCurrentPage === 1}\n                      iconLeft={<CaretLeftIcon />}\n                    >\n                      Anterior\n                    </Button>\n                    <Button\n                      variant=\"link\"\n                      size=\"extra-small\"\n                      disabled={effectiveCurrentPage === totalPages}\n                      iconRight={<CaretRightIcon />}\n                    >\n                      Próximo\n                    </Button>\n                  </>\n                )}\n              </div>\n            </div>\n          )}\n        </div>\n      </div>\n    </Modal>\n  );\n};\n"],"mappings":"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","names":[]}