UNPKG

zentrixui

Version:

ZentrixUI - A modern, highly customizable and accessible React file upload component library with multiple variants, JSON-based configuration, and excellent developer experience.

102 lines (101 loc) 3.21 kB
import { jsx, jsxs } from "react/jsx-runtime"; import { useCallback } from "react"; import { useFileUpload } from "../file-upload-context.js"; import { ErrorDisplay } from "../error-display.js"; import { AccessibilityAnnouncer } from "../accessibility-announcer.js"; import { cn } from "../../../utils/theme.js"; const ErrorFeedback = ({ className, compact = false, showTechnicalDetails = false, maxErrors = 5, groupByType = false, showAccessibilityAnnouncer = true }) => { const { processedErrors, actions, config } = useFileUpload(); const handleErrorAction = useCallback((action, error) => { switch (action.type) { case "retry": if (error.context.fileName) { const fileToRetry = actions.state?.files.find((f) => f.name === error.context.fileName); if (fileToRetry) { actions.retryUpload(fileToRetry.id); } } else { actions.retryFailedUploads(); } actions.dismissError(error.id); break; case "remove": if (error.context.fileName) { const fileToRemove = actions.state?.files.find((f) => f.name === error.context.fileName); if (fileToRemove) { actions.removeFile(fileToRemove.id); } } actions.dismissError(error.id); break; case "clear": actions.clearFailedUploads(); actions.dismissAllErrors(); break; case "refresh": window.location.reload(); break; case "contact": console.log("Contact support for error:", error.id); break; default: if (action.handler) { action.handler(); } break; } }, [actions]); const handleDismissError = useCallback((errorId) => { actions.dismissError(errorId); }, [actions]); const handleDismissAllErrors = useCallback(() => { actions.dismissAllErrors(); }, [actions]); if (processedErrors.length === 0) { return showAccessibilityAnnouncer ? /* @__PURE__ */ jsx( AccessibilityAnnouncer, { errors: processedErrors, announceErrors: config.accessibility.announceErrors, announceProgress: config.accessibility.announceProgress, announceFileSelection: config.accessibility.announceFileSelection } ) : null; } return /* @__PURE__ */ jsxs("div", { className: cn("error-feedback-container", className), children: [ showAccessibilityAnnouncer && /* @__PURE__ */ jsx( AccessibilityAnnouncer, { errors: processedErrors, announceErrors: config.accessibility.announceErrors, announceProgress: config.accessibility.announceProgress, announceFileSelection: config.accessibility.announceFileSelection } ), /* @__PURE__ */ jsx( ErrorDisplay, { errors: processedErrors, onAction: handleErrorAction, onDismiss: handleDismissError, onDismissAll: handleDismissAllErrors, compact, showTechnicalDetails, maxErrors, groupByType } ) ] }); }; ErrorFeedback.displayName = "ErrorFeedback"; export { ErrorFeedback }; //# sourceMappingURL=error-feedback.js.map