UNPKG

@shutootaki/gwm

Version:
50 lines 1.68 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { Notice } from './Notice.js'; import { ProgressSpinner } from './ProgressSpinner.js'; /** Normalize messages to array */ const normalizeMessages = (messages, ...extra) => { const result = []; if (messages) { result.push(...(Array.isArray(messages) ? messages : [messages])); } for (const e of extra) { if (e) { result.push(...(Array.isArray(e) ? e : [e])); } } return result.length > 0 ? result : undefined; }; /** * 操作結果の統一表示コンポーネント * * 使用例: * <OperationResult status="idle" /> * * <OperationResult status="loading" message="Processing..." /> * * <OperationResult * status="success" * title="Operation completed!" * messages={['File created', 'Changes applied']} * /> * * <OperationResult * status="error" * title="Failed to process" * message="Permission denied" * helpText="Check file permissions" * /> */ export const OperationResult = (props) => { switch (props.status) { case 'idle': return null; case 'loading': return (_jsx(ProgressSpinner, { label: props.message ?? 'Processing...', progress: props.progress, color: "cyan" })); case 'success': return (_jsx(Notice, { variant: "success", title: props.title ?? 'Success!', messages: normalizeMessages(props.messages) })); case 'error': return (_jsx(Notice, { variant: "error", title: props.title ?? 'Error', messages: normalizeMessages(props.message, props.helpText) })); } }; //# sourceMappingURL=OperationResult.js.map