@shutootaki/gwm
Version:
git worktree manager CLI
50 lines • 1.68 kB
JavaScript
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