@designbasekorea/figma-ui 0.1.74 → 0.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -269,6 +269,8 @@ interface ProgressModalProps {
269
269
  completeIcon?: React.ReactNode;
270
270
  className?: string;
271
271
  t?: TFunctionLite;
272
+ autoComplete?: boolean;
273
+ autoCloseOnComplete?: boolean;
272
274
  }
273
275
  declare const ProgressModal: React.FC<ProgressModalProps>;
274
276
 
package/dist/index.esm.js CHANGED
@@ -738,24 +738,33 @@ const PaymentStatusSection = ({ status, usageCount, activationLimit, activationU
738
738
  };
739
739
  PaymentStatusSection.displayName = 'PaymentStatusSection';
740
740
 
741
- const ProgressModal = ({ isOpen, onClose, progress, title = { key: 'progress.working' }, completedMessage = { key: 'progress.completed' }, processingMessage = { key: 'progress.processing' }, stopButtonText = { key: 'progress.stop' }, confirmButtonText = { key: 'progress.confirm' }, helpText, onStop, onComplete, loadingIcon, completeIcon, className, t }) => {
741
+ const ProgressModal = ({ isOpen, onClose, progress, title = { key: 'progress.working' }, completedMessage = { key: 'progress.completed' }, processingMessage = { key: 'progress.processing' }, stopButtonText = { key: 'progress.stop' }, confirmButtonText = { key: 'progress.confirm' }, helpText, onStop, onComplete, loadingIcon, completeIcon, className, t, autoComplete = true, autoCloseOnComplete = false }) => {
742
742
  const [isCompleted, setIsCompleted] = useState(false);
743
+ const completeFiredRef = useRef(false);
743
744
  const { processedNodes, totalNodes } = progress;
744
- const progressPercentage = totalNodes > 0 ? (processedNodes / totalNodes) * 100 : 0;
745
+ const progressPercentage = totalNodes > 0 ? Math.min(100, (processedNodes / totalNodes) * 100) : 0;
745
746
  useEffect(() => {
746
- if (processedNodes === totalNodes && totalNodes > 0) {
747
- setIsCompleted(true);
748
- if (onComplete)
749
- onComplete();
747
+ const done = totalNodes > 0 && processedNodes >= totalNodes;
748
+ setIsCompleted(done);
749
+ if (done && autoComplete && !completeFiredRef.current) {
750
+ completeFiredRef.current = true;
751
+ onComplete?.();
752
+ if (autoCloseOnComplete) {
753
+ onClose();
754
+ }
750
755
  }
751
- }, [processedNodes, totalNodes, onComplete]);
756
+ }, [processedNodes, totalNodes, autoComplete, autoCloseOnComplete, onComplete, onClose]);
752
757
  useEffect(() => {
753
- if (isOpen)
758
+ if (isOpen) {
754
759
  setIsCompleted(false);
760
+ completeFiredRef.current = false;
761
+ }
755
762
  }, [isOpen]);
756
763
  const handleStop = () => {
757
- if (onStop)
758
- onStop();
764
+ onStop?.();
765
+ onClose();
766
+ };
767
+ const handleConfirm = () => {
759
768
  onClose();
760
769
  };
761
770
  const modalClasses = clsx('designbase-figma-progress-modal', className);
@@ -773,7 +782,7 @@ const ProgressModal = ({ isOpen, onClose, progress, title = { key: 'progress.wor
773
782
  React.createElement("div", { className: "designbase-figma-progress-modal__status" }, `${processedNodes} / ${totalNodes} (${progressPercentage.toFixed(1)}%)`),
774
783
  React.createElement(Progressbar, { value: progressPercentage, size: "m", variant: isCompleted ? 'success' : 'primary', style: "animated", fullWidth: true }),
775
784
  displayHelpText && !isCompleted && (React.createElement("p", { className: "designbase-figma-progress-modal__help-text" }, displayHelpText)),
776
- React.createElement("div", { className: "designbase-figma-progress-modal__actions" }, isCompleted ? (React.createElement(Button, { onPress: onClose, variant: "primary", size: "m", fullWidth: true }, displayConfirmText)) : (React.createElement(Button, { onPress: handleStop, variant: "secondary", size: "m", fullWidth: true }, displayStopText))))));
785
+ React.createElement("div", { className: "designbase-figma-progress-modal__actions" }, isCompleted ? (React.createElement(Button, { onPress: handleConfirm, variant: "primary", size: "m", fullWidth: true }, displayConfirmText)) : (React.createElement(Button, { onPress: handleStop, variant: "secondary", size: "m", fullWidth: true }, displayStopText))))));
777
786
  };
778
787
  ProgressModal.displayName = 'ProgressModal';
779
788