analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
555 lines (507 loc) • 32.6 kB
JavaScript
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
var _chunkFRDMGH3Fjs = require('./chunk-FRDMGH3F.js');
var _chunk7JXDCLY6js = require('./chunk-7JXDCLY6.js');
var _chunkSZD7L65Qjs = require('./chunk-SZD7L65Q.js');
var _chunkQOF47WYZjs = require('./chunk-QOF47WYZ.js');
var _chunkMPQZUD42js = require('./chunk-MPQZUD42.js');
var _chunkHGWU3GUNjs = require('./chunk-HGWU3GUN.js');
var _chunkNEDUOGWUjs = require('./chunk-NEDUOGWU.js');
var _chunkLGPTKTMPjs = require('./chunk-LGPTKTMP.js');
var _chunkBJMKBBN3js = require('./chunk-BJMKBBN3.js');
var _chunkI3SR6N3Ljs = require('./chunk-I3SR6N3L.js');
var _chunk34ST3MKOjs = require('./chunk-34ST3MKO.js');
var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js');
// src/components/Support/Support.tsx
var _react = require('react');
var _reacthookform = require('react-hook-form');
var _zod = require('@hookform/resolvers/zod');
var _react3 = require('@phosphor-icons/react');
var _dayjs = require('dayjs'); var _dayjs2 = _interopRequireDefault(_dayjs);
// src/components/Support/schema/index.ts
var _zod3 = require('zod');
var supportSchema = _zod3.z.object({
// Tipo de problema selecionado
problemType: _zod3.z.enum(["tecnico", "acesso", "outros"], {
error: () => "Campo obrigat\xF3rio! Por favor, preencha este campo para continuar."
}),
// Título do problema
title: _zod3.z.string().min(1, "Campo obrigat\xF3rio! Por favor, preencha este campo para continuar.").min(5, "T\xEDtulo deve ter pelo menos 5 caracteres").max(100, "T\xEDtulo deve ter no m\xE1ximo 100 caracteres").trim(),
// Descrição do problema
description: _zod3.z.string().min(1, "Campo obrigat\xF3rio! Por favor, preencha este campo para continuar.").min(10, "Descri\xE7\xE3o deve ter pelo menos 10 caracteres").max(1e3, "Descri\xE7\xE3o deve ter no m\xE1ximo 1000 caracteres").trim()
});
// src/assets/img/suporthistory.png
var suporthistory_default = "data:image/png;base64,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";
// src/components/Support/Support.tsx
var _jsxruntime = require('react/jsx-runtime');
var TicketCard = ({
ticket,
onTicketClick
}) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
"button",
{
type: "button",
className: "flex items-center justify-between p-4 bg-background rounded-xl cursor-pointer w-full text-left hover:bg-background-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
onClick: () => onTicketClick(ticket),
children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "xs", weight: "bold", className: "text-text-900", children: ticket.title }) }),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkBJMKBBN3js.Badge_default,
{
variant: "solid",
className: "flex items-center gap-1",
action: _chunk7JXDCLY6js.getStatusBadgeAction.call(void 0, ticket.status),
children: _chunk7JXDCLY6js.getStatusText.call(void 0, ticket.status)
}
),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBJMKBBN3js.Badge_default, { variant: "solid", className: "flex items-center gap-1", action: "muted", children: [
_chunkFRDMGH3Fjs.getCategoryIcon.call(void 0, ticket.category, 18),
_chunk7JXDCLY6js.getCategoryText.call(void 0, ticket.category)
] }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.CaretRightIcon, { size: 24, className: "text-text-800" })
] })
]
},
ticket.id
);
var TicketGroup = ({
date,
tickets,
onTicketClick
}) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "bold", className: "text-text-900", children: _dayjs2.default.call(void 0, date).format("DD MMM YYYY") }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-3", children: tickets.map((ticket) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
TicketCard,
{
ticket,
onTicketClick
},
ticket.id
)) })
] }, date);
var EmptyState = ({ imageSrc }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-row justify-center items-center mt-48", children: [
imageSrc && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "img", { src: imageSrc, alt: "Imagem de suporte" }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "3xl", weight: "semibold", children: "Nenhum pedido encontrado." })
] });
var TicketSkeleton = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-6", children: [0, 1].map((groupIndex) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEDUOGWUjs.SkeletonText, { width: "150px", height: 20 }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-3", children: [0, 1].map((ticketIndex) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkNEDUOGWUjs.SkeletonRounded,
{
width: "100%",
height: 72,
className: "p-4"
},
ticketIndex
)) })
] }, groupIndex)) });
var Support = ({
apiClient,
userId,
emptyStateImage,
title = "Suporte",
onTicketCreated,
onTicketClosed
}) => {
const [activeTab, setActiveTab] = _react.useState.call(void 0, "criar-pedido");
const [selectedProblem, setSelectedProblem] = _react.useState.call(void 0, null);
const [statusFilter, setStatusFilter] = _react.useState.call(void 0, "todos");
const [categoryFilter, setCategoryFilter] = _react.useState.call(void 0, "todos");
const [selectedTicket, setSelectedTicket] = _react.useState.call(void 0,
null
);
const [isModalOpen, setIsModalOpen] = _react.useState.call(void 0, false);
const [submitError, setSubmitError] = _react.useState.call(void 0, null);
const [showSuccessToast, setShowSuccessToast] = _react.useState.call(void 0, false);
const [showCloseSuccessToast, setShowCloseSuccessToast] = _react.useState.call(void 0, false);
const [showCloseErrorToast, setShowCloseErrorToast] = _react.useState.call(void 0, false);
const [allTickets, setAllTickets] = _react.useState.call(void 0, []);
const [loadingTickets, setLoadingTickets] = _react.useState.call(void 0, false);
const [currentPage, setCurrentPage] = _react.useState.call(void 0, 1);
const ITEMS_PER_PAGE = 10;
const handlePrevPage = () => {
if (currentPage > 1) {
setCurrentPage(currentPage - 1);
}
};
const handleNextPage = () => {
const totalPages2 = Math.ceil(filteredTickets.length / ITEMS_PER_PAGE);
if (currentPage < totalPages2) {
setCurrentPage(currentPage + 1);
}
};
_react.useEffect.call(void 0, () => {
if (activeTab === "historico") {
fetchTickets(statusFilter);
setCurrentPage(1);
}
}, [activeTab, statusFilter]);
_react.useEffect.call(void 0, () => {
setCurrentPage(1);
}, [categoryFilter]);
const convertApiTicketToComponent = (apiTicket) => {
return {
id: apiTicket.id,
title: apiTicket.subject,
status: _chunk7JXDCLY6js.mapApiStatusToInternal.call(void 0, apiTicket.status),
createdAt: apiTicket.createdAt,
category: apiTicket.type,
description: apiTicket.description
};
};
const filteredTickets = allTickets.map(convertApiTicketToComponent).filter((ticket) => {
const categoryMatch = categoryFilter === "todos" || ticket.category === categoryFilter;
return categoryMatch;
}).sort(
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
);
const totalPages = Math.ceil(filteredTickets.length / ITEMS_PER_PAGE);
const startIndex = (currentPage - 1) * ITEMS_PER_PAGE;
const endIndex = startIndex + ITEMS_PER_PAGE;
const paginatedTickets = filteredTickets.slice(startIndex, endIndex);
const groupedTickets = paginatedTickets.reduce(
(groups, ticket) => {
const date = _dayjs2.default.call(void 0, ticket.createdAt).format("YYYY-MM-DD");
if (!groups[date]) {
groups[date] = [];
}
groups[date].push(ticket);
return groups;
},
{}
);
const {
register,
handleSubmit,
setValue,
reset,
formState: { errors, isSubmitting }
} = _reacthookform.useForm.call(void 0, {
resolver: _zod.zodResolver.call(void 0, supportSchema),
defaultValues: {
problemType: void 0,
title: "",
description: ""
}
});
const fetchTickets = async (status) => {
setLoadingTickets(true);
try {
const params = new URLSearchParams({
page: "1",
limit: "100"
// Buscar o máximo permitido pela API
});
if (status && status !== "todos") {
const apiStatus = _chunk7JXDCLY6js.mapInternalStatusToApi.call(void 0, status);
params.append("status", apiStatus);
}
const response = await apiClient.get(
`/support?${params.toString()}`
);
setAllTickets(response.data.data.support);
} catch (error) {
console.error("Erro ao buscar tickets:", error);
setAllTickets([]);
} finally {
setLoadingTickets(false);
}
};
const handleProblemSelection = (type) => {
setSelectedProblem(type);
if (type) {
setValue("problemType", type, { shouldValidate: true });
}
};
const onSubmit = async (data) => {
setSubmitError(null);
try {
const requestData = {
subject: data.title,
description: data.description,
type: data.problemType
};
await apiClient.post(
"/support",
requestData
);
setShowSuccessToast(true);
setTimeout(() => setShowSuccessToast(false), 4e3);
setSelectedProblem(null);
reset();
setActiveTab("historico");
fetchTickets(statusFilter);
_optionalChain([onTicketCreated, 'optionalCall', _ => _()]);
} catch (error) {
console.error("Erro ao criar ticket de suporte:", error);
setSubmitError("Erro ao criar ticket. Tente novamente.");
}
};
const handleTicketClick = (ticket) => {
setSelectedTicket(ticket);
setIsModalOpen(true);
};
const handleModalClose = () => {
setIsModalOpen(false);
setSelectedTicket(null);
};
const handleTicketClose = async (ticketId) => {
try {
await apiClient.patch(`/support/${ticketId}`, {
status: _chunk7JXDCLY6js.mapInternalStatusToApi.call(void 0, "encerrado" /* ENCERRADO */)
});
setShowCloseSuccessToast(true);
setTimeout(() => setShowCloseSuccessToast(false), 4e3);
if (activeTab === "historico") {
fetchTickets(statusFilter);
}
_optionalChain([onTicketClosed, 'optionalCall', _2 => _2()]);
} catch (error) {
console.error("Erro ao encerrar ticket:", error);
setShowCloseErrorToast(true);
setTimeout(() => setShowCloseErrorToast(false), 4e3);
}
};
const problemTypes = [
{
id: "tecnico" /* TECNICO */,
title: "T\xE9cnico",
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.BugIcon, { size: 24 })
},
{
id: "acesso" /* ACESSO */,
title: "Acesso",
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.KeyIcon, { size: 24 })
},
{
id: "outros" /* OUTROS */,
title: "Outros",
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.InfoIcon, { size: 24 })
}
];
const emptyImage = emptyStateImage || suporthistory_default;
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col w-full h-full overflow-y-auto", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col w-full h-full", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-4", children: [
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full mb-4 flex-row items-center justify-between not-lg:gap-4 lg:gap-6", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "font-bold leading-[28px] tracking-[0.2px] text-text-950 text-xl mt-4 sm:text-2xl sm:flex-1 sm:self-end sm:mt-0", children: title }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "sm:flex-shrink-0 sm:self-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkMPQZUD42js.Menu_default,
{
value: activeTab,
defaultValue: "criar-pedido",
variant: "menu2",
onValueChange: (value) => setActiveTab(value),
className: "bg-transparent shadow-none px-0",
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkMPQZUD42js.MenuContent, { variant: "menu2", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkMPQZUD42js.MenuItem,
{
variant: "menu2",
value: "criar-pedido",
className: "whitespace-nowrap px-17 not-sm:px-5",
children: "Criar Pedido"
}
),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkMPQZUD42js.MenuItem,
{
variant: "menu2",
value: "historico",
className: "whitespace-nowrap px-17 not-sm:px-5",
children: "Hist\xF3rico"
}
)
] })
}
) })
] }),
activeTab === "criar-pedido" && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { as: "h2", size: "md", weight: "bold", className: "text-text-900", children: "Selecione o tipo de problema" }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col sm:flex-row gap-2 sm:gap-4", children: problemTypes.map((type) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkI3SR6N3Ljs.SelectionButton_default,
{
icon: type.icon,
label: type.title,
selected: selectedProblem === type.id,
onClick: () => handleProblemSelection(type.id),
className: "w-full p-4"
},
type.id
)) }),
errors.problemType && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-red-500 mt-1", children: errors.problemType.message })
] }),
selectedProblem && activeTab === "criar-pedido" && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "form", { onSubmit: handleSubmit(onSubmit), className: "space-y-4", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkLGPTKTMPjs.Input_default,
{
size: "large",
variant: "rounded",
label: "T\xEDtulo",
placeholder: "Digite o t\xEDtulo",
...register("title"),
errorMessage: _optionalChain([errors, 'access', _3 => _3.title, 'optionalAccess', _4 => _4.message])
}
) }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkSZD7L65Qjs.TextArea_default,
{
size: "large",
label: "Descri\xE7\xE3o",
placeholder: "Descreva o problema aqui",
...register("description"),
errorMessage: _optionalChain([errors, 'access', _5 => _5.description, 'optionalAccess', _6 => _6.message])
}
) }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunk34ST3MKOjs.Button_default,
{
size: "large",
className: "float-end mt-10",
type: "submit",
disabled: isSubmitting,
children: isSubmitting ? "Enviando..." : "Enviar Pedido"
}
),
submitError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mt-4 p-4 bg-red-100 border border-red-400 text-red-700 rounded", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-red-700", children: submitError }) })
] }),
activeTab === "historico" && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-6", children: [
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-4", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col flex-1/2 space-y-1", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
_chunkHGWU3GUNjs.Select_default,
{
label: "Status",
size: "large",
value: statusFilter,
onValueChange: setStatusFilter,
children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectTrigger, { variant: "rounded", className: "", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectValue, { placeholder: "Todos" }) }),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHGWU3GUNjs.SelectContent, { children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "todos", children: "Todos" }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "aberto" /* ABERTO */, children: "Aberto" }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "respondido" /* RESPONDIDO */, children: "Respondido" }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "encerrado" /* ENCERRADO */, children: "Encerrado" })
] })
]
}
) }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col flex-1/2 space-y-1", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
_chunkHGWU3GUNjs.Select_default,
{
label: "Tipo",
size: "large",
value: categoryFilter,
onValueChange: setCategoryFilter,
children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectTrigger, { variant: "rounded", className: "", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectValue, { placeholder: "Todos" }) }),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHGWU3GUNjs.SelectContent, { children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "todos", children: "Todos" }),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "tecnico" /* TECNICO */, children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.BugIcon, { size: 16 }),
" T\xE9cnico"
] }),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "acesso" /* ACESSO */, children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.KeyIcon, { size: 16 }),
" Acesso"
] }),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHGWU3GUNjs.SelectItem, { value: "outros" /* OUTROS */, children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react3.InfoIcon, { size: 16 }),
" Outros"
] })
] })
]
}
) })
] }),
(() => {
if (loadingTickets) {
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketSkeleton, {});
}
if (Object.keys(groupedTickets).length === 0) {
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EmptyState, { imageSrc: emptyImage });
}
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "space-y-6", children: Object.entries(groupedTickets).sort(
([a], [b]) => new Date(b).getTime() - new Date(a).getTime()
).map(([date, tickets]) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
TicketGroup,
{
date,
tickets,
onTicketClick: handleTicketClick
},
date
)) });
})(),
!loadingTickets && totalPages > 1 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-center items-center gap-4 mt-6", children: [
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunk34ST3MKOjs.Button_default,
{
variant: "outline",
size: "small",
onClick: handlePrevPage,
disabled: currentPage === 1,
children: "Anterior"
}
),
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-600", children: [
"P\xE1gina ",
currentPage,
" de ",
totalPages
] }),
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunk34ST3MKOjs.Button_default,
{
variant: "outline",
size: "small",
onClick: handleNextPage,
disabled: currentPage === totalPages,
children: "Pr\xF3xima"
}
)
] })
] })
] }) }),
selectedTicket && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkFRDMGH3Fjs.TicketModal,
{
ticket: selectedTicket,
isOpen: isModalOpen,
onClose: handleModalClose,
onTicketClose: handleTicketClose,
apiClient,
userId
}
),
showSuccessToast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "fixed top-4 left-1/2 transform -translate-x-1/2 z-50", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkQOF47WYZjs.Toast_default,
{
title: "Pedido enviado!",
description: "Agora voc\xEA pode acompanhar o andamento do seu pedido.",
variant: "solid",
onClose: () => setShowSuccessToast(false)
}
) }),
showCloseSuccessToast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "fixed top-4 left-1/2 transform -translate-x-1/2 z-50", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkQOF47WYZjs.Toast_default,
{
title: "Pedido encerrado!",
description: "",
variant: "solid",
onClose: () => setShowCloseSuccessToast(false)
}
) }),
showCloseErrorToast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "fixed top-4 left-1/2 transform -translate-x-1/2 z-50", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
_chunkQOF47WYZjs.Toast_default,
{
title: "Erro ao encerrar pedido",
description: "N\xE3o foi poss\xEDvel encerrar o pedido. Tente novamente.",
variant: "solid",
action: "warning",
onClose: () => setShowCloseErrorToast(false)
}
) })
] });
};
var Support_default = Support;
exports.supportSchema = supportSchema; exports.Support_default = Support_default;
//# sourceMappingURL=chunk-WWCHVRKS.js.map