git save current version as 0.03
This commit is contained in:
@@ -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" }}
|
||||
/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user