git save current version as 0.03

This commit is contained in:
liaibo
2025-11-29 10:46:40 +08:00
parent e5ae2c173e
commit 58340d4080
3 changed files with 99 additions and 10 deletions
@@ -76,6 +76,23 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
const [lastSyncedAt, setLastSyncedAt] = useState<number | null>(null);
const persistSnapshotRef = useRef<((reason: "auto" | "close") => Promise<void>) | null>(null);
const lastPointerDownInGridRef = useRef(false);
const savingHintTimerRef = useRef<number | null>(null);
const [showSavingHint, setShowSavingHint] = useState(false);
const startSavingHint = useCallback(() => {
if (savingHintTimerRef.current !== null) return;
savingHintTimerRef.current = window.setTimeout(() => {
setShowSavingHint(true);
}, 700);
}, []);
const stopSavingHint = useCallback(() => {
if (savingHintTimerRef.current !== null) {
clearTimeout(savingHintTimerRef.current);
savingHintTimerRef.current = null;
}
setShowSavingHint(false);
}, []);
useEffect(() => {
if (typeof window !== "undefined") {
@@ -145,6 +162,7 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
if (!tableData || !window.luckysheet || typeof window.luckysheet.getluckysheetfile !== "function") {
return;
}
startSavingHint();
setIsSaving(true);
setSaveError(null);
try {
@@ -170,9 +188,10 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
console.error("保存 Luckysheet 数据失败", error);
setSaveError(reason === "close" ? "关闭前保存失败,请重试" : "自动保存失败");
} finally {
stopSavingHint();
setIsSaving(false);
}
}, [tableData, tableId]);
}, [startSavingHint, stopSavingHint, tableData, tableId]);
const debouncedPersist = useDebouncedCallback(() => {
void persistSnapshot("auto");
@@ -186,8 +205,9 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
return () => {
debouncedPersist.cancel();
void persistSnapshotRef.current?.("close");
stopSavingHint();
};
}, [debouncedPersist]);
}, [debouncedPersist, stopSavingHint]);
useEffect(() => {
if (!isLuckysheetReady) {
@@ -371,6 +391,7 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
if (target && !container.contains(target)) {
return;
}
containerRef.current?.focus();
requestAnimationFrame(() => {
const selection = window.luckysheet?.getluckysheet_select_save?.();
if (!selection) {
@@ -511,7 +532,7 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
const statusText = saveError
? saveError
: isSaving
: isSaving && showSavingHint
? "同步中..."
: hasPendingChanges
? "有未保存变更"
@@ -548,6 +569,8 @@ const FullScreenTableEditor: React.FC<FullScreenTableEditorProps> = ({ tableId,
id={LUCKY_SHEET_CONTAINER_ID}
ref={containerRef}
className="flex-grow w-full h-full"
tabIndex={-1}
aria-label="在线表格全屏编辑区域"
style={{ display: isLuckysheetReady && !isTableLoading && !tableError ? "block" : "none" }}
/>