GoalPreviewPanel.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. 'use client';
  2. import type { FormState } from '../types';
  3. type Props = {
  4. form: FormState;
  5. };
  6. export default function GoalPreviewPanel({ form }: Props) {
  7. const percent = form.targetAmount > 0 ? Math.min((form.startAmount / form.targetAmount) * 100, 100) : 0;
  8. return (
  9. <aside className="goal-config__preview-panel">
  10. <div className="goal-config__widget">
  11. <div className="goal-config__widget-label">미리보기</div>
  12. <div className="goal-config__widget-body">
  13. <div className="goal-preview">
  14. <div
  15. className="goal-preview__title"
  16. style={{ fontFamily: form.titleFontFamily || 'inherit', fontSize: `${form.titleFontSizePx}px`, color: form.titleFontColor }}
  17. >
  18. {form.title || '후원 목표'}
  19. </div>
  20. <div className="goal-preview__bar-wrap" style={{ minHeight: `${form.barHeightPx}px`, height: `${form.barHeightPx}px`, background: form.barBackgroundColor }}>
  21. <div
  22. className="goal-preview__bar-fill"
  23. style={{
  24. width: `${percent}%`,
  25. background: form.barColor,
  26. height: '100%'
  27. }}
  28. />
  29. <div
  30. className="goal-preview__amount"
  31. style={{ fontFamily: form.amountFontFamily || 'inherit', fontSize: `${form.amountFontSizePx}px`, color: form.amountFontColor }}
  32. >
  33. {form.startAmount.toLocaleString()}원 / {form.targetAmount.toLocaleString()}원
  34. {form.isShowPercent && (
  35. <span className="goal-preview__percent">
  36. {' '}({Math.round(percent)}%)
  37. </span>
  38. )}
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </aside>
  45. );
  46. }