From 8db46113f42912bfef5e17d165767f6eab2f1804 Mon Sep 17 00:00:00 2001 From: Dmitry Popov Date: Sun, 16 Mar 2025 13:32:39 +0100 Subject: [PATCH] fix(Core): fixed lazy delete timeouts --- .../SystemSignatures/SystemSignatures.tsx | 52 ++++++--- .../widgets/SystemSignatures/constants.ts | 8 ++ .../helpers/contentHelpers.ts | 50 ++++++--- .../widgets/SystemSignatures/hooks/types.ts | 14 ++- .../hooks/usePendingAdditions.ts | 70 ------------ .../hooks/usePendingDeletions.ts | 57 +++++----- .../hooks/useSignatureFetching.ts | 26 +---- .../hooks/useSystemSignaturesData.ts | 102 ++++-------------- assets/js/hooks/Mapper/types/signatures.ts | 1 + assets/yarn.lock | 9 +- 10 files changed, 155 insertions(+), 234 deletions(-) delete mode 100644 assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingAdditions.ts diff --git a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/SystemSignatures.tsx b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/SystemSignatures.tsx index fa7f2068..83fd8f93 100644 --- a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/SystemSignatures.tsx +++ b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/SystemSignatures.tsx @@ -1,8 +1,8 @@ -import { useCallback, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { Widget } from '@/hooks/Mapper/components/mapInterface/components'; import { SystemSignaturesContent } from './SystemSignaturesContent'; import { SystemSignatureSettingsDialog } from './SystemSignatureSettingsDialog'; -import { SystemSignature } from '@/hooks/Mapper/types'; +import { ExtendedSystemSignature, SystemSignature } from '@/hooks/Mapper/types'; import { useMapRootState } from '@/hooks/Mapper/mapRootProvider'; import { useHotkey } from '@/hooks/Mapper/hooks'; import { SystemSignaturesHeader } from './SystemSignatureHeader'; @@ -10,15 +10,19 @@ import useLocalStorageState from 'use-local-storage-state'; import { SETTINGS_KEYS, SETTINGS_VALUES, + SIGNATURE_DELETION_TIMEOUTS, SIGNATURE_SETTING_STORE_KEY, SIGNATURE_WINDOW_ID, + SIGNATURES_DELETION_TIMING, SignatureSettingsType, } from '@/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/constants.ts'; +import { calculateTimeRemaining } from './helpers'; export const SystemSignatures = () => { const [visible, setVisible] = useState(false); const [sigCount, setSigCount] = useState(0); const [pendingSigs, setPendingSigs] = useState([]); + const [pendingTimeRemaining, setPendingTimeRemaining] = useState(); const undoPendingFnRef = useRef<() => void>(() => {}); const { @@ -51,27 +55,45 @@ export const SystemSignatures = () => { event.stopPropagation(); undoPendingFnRef.current(); setPendingSigs([]); + setPendingTimeRemaining(undefined); } }); const handleUndoClick = useCallback(() => { undoPendingFnRef.current(); setPendingSigs([]); + setPendingTimeRemaining(undefined); }, []); const handleSettingsButtonClick = useCallback(() => { setVisible(true); }, []); - const handlePendingChange = useCallback((newPending: SystemSignature[], newUndo: () => void) => { - setPendingSigs(prev => { - if (newPending.length === prev.length && newPending.every(np => prev.some(pp => pp.eve_id === np.eve_id))) { - return prev; - } - return newPending; - }); - undoPendingFnRef.current = newUndo; - }, []); + const handlePendingChange = useCallback( + (pending: React.MutableRefObject>, newUndo: () => void) => { + setPendingSigs(() => { + return Object.values(pending.current).filter(sig => sig.pendingDeletion); + }); + undoPendingFnRef.current = newUndo; + }, + [], + ); + + // Calculate the minimum time remaining for any pending signature + useEffect(() => { + if (pendingSigs.length === 0) { + setPendingTimeRemaining(undefined); + return; + } + + const calculate = () => { + setPendingTimeRemaining(() => calculateTimeRemaining(pendingSigs)); + }; + + calculate(); + const interval = setInterval(calculate, 1000); + return () => clearInterval(interval); + }, [pendingSigs]); return ( { { >, serverSigs: ExtendedSystemSignature[], - localSigs: ExtendedSystemSignature[], ): ExtendedSystemSignature[] { const now = Date.now(); - const pendingAdditions = localSigs.filter(sig => sig.pendingAddition && sig.pendingUntil && sig.pendingUntil > now); + const pendingDeletions = Object.values(pendingMapRef.current).filter( + sig => sig.pendingDeletion && sig.pendingUntil && sig.pendingUntil > now, + ); const mergedMap = new Map(); serverSigs.forEach(sig => mergedMap.set(sig.eve_id, sig)); - pendingAdditions.forEach(sig => { - if (!mergedMap.has(sig.eve_id)) { + + pendingDeletions.forEach(sig => { + if (mergedMap.has(sig.eve_id)) { mergedMap.set(sig.eve_id, sig); } }); return Array.from(mergedMap.values()); } -export function scheduleLazyDeletionTimers( - toRemove: ExtendedSystemSignature[], - setPendingMap: React.Dispatch>>, - finalizeRemoval: (sig: ExtendedSystemSignature) => Promise, +export function scheduleLazyTimers( + signatures: ExtendedSystemSignature[], + pendingMapRef: React.MutableRefObject>, + finalizeFn: (sig: ExtendedSystemSignature) => Promise, finalDuration = FINAL_DURATION_MS, ) { - const now = Date.now(); - toRemove.forEach(sig => { + signatures.forEach(sig => { const finalTimeoutId = window.setTimeout(async () => { - await finalizeRemoval(sig); + await finalizeFn(sig); }, finalDuration); - setPendingMap(prev => ({ - ...prev, + pendingMapRef.current = { + ...pendingMapRef.current, [sig.eve_id]: { - finalUntil: now + finalDuration, + ...sig, finalTimeoutId, }, - })); + }; }); } + +export const calculateTimeRemaining = (pendingSigs: SystemSignature[]) => { + const now = Date.now(); + let minTime: number | undefined = undefined; + + pendingSigs.forEach(sig => { + const extendedSig = sig as unknown as { pendingUntil?: number }; + if (extendedSig.pendingUntil && (minTime === undefined || extendedSig.pendingUntil - now < minTime)) { + minTime = extendedSig.pendingUntil - now; + } + }); + + return minTime && minTime > 0 ? minTime : undefined; +}; diff --git a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/types.ts b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/types.ts index 36b9ba5b..447bf7d6 100644 --- a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/types.ts +++ b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/types.ts @@ -6,7 +6,10 @@ export interface UseSystemSignaturesDataProps { settings: SignatureSettingsType; hideLinkedSignatures?: boolean; onCountChange?: (count: number) => void; - onPendingChange?: (pending: ExtendedSystemSignature[], undo: () => void) => void; + onPendingChange?: ( + pending: React.MutableRefObject>, + undo: () => void, + ) => void; onLazyDeleteChange?: (value: boolean) => void; deletionTiming?: number; } @@ -15,16 +18,21 @@ export interface UseFetchingParams { systemId: string; signaturesRef: React.MutableRefObject; setSignatures: React.Dispatch>; - localPendingDeletions: ExtendedSystemSignature[]; + pendingDeletionMapRef: React.MutableRefObject>; } export interface UsePendingDeletionParams { systemId: string; - setSignatures: React.Dispatch>; deletionTiming?: number; + setSignatures: React.Dispatch>; + onPendingChange?: ( + pending: React.MutableRefObject>, + undo: () => void, + ) => void; } export interface UsePendingAdditionParams { + systemId: string; setSignatures: React.Dispatch>; deletionTiming?: number; } diff --git a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingAdditions.ts b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingAdditions.ts deleted file mode 100644 index 1b09107c..00000000 --- a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingAdditions.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { useCallback, useRef, useState } from 'react'; -import { UsePendingAdditionParams } from './types'; -import { FINAL_DURATION_MS } from '../constants'; -import { ExtendedSystemSignature } from '@/hooks/Mapper/types'; -import { schedulePendingAdditionForSig } from '../helpers/contentHelpers'; - -export const usePendingAdditions = ({ setSignatures, deletionTiming }: UsePendingAdditionParams) => { - const [pendingUndoAdditions, setPendingUndoAdditions] = useState([]); - const pendingAdditionMapRef = useRef>({}); - - // Use the provided deletion timing or fall back to the default - const finalDuration = deletionTiming !== undefined ? deletionTiming : FINAL_DURATION_MS; - - const processAddedSignatures = useCallback( - (added: ExtendedSystemSignature[]) => { - if (!added.length) return; - - // If duration is 0, don't show pending state - if (finalDuration === 0) { - setSignatures(prev => [ - ...prev, - ...added.map(sig => ({ - ...sig, - pendingAddition: false, - })), - ]); - return; - } - - const now = Date.now(); - setSignatures(prev => [ - ...prev, - ...added.map(sig => ({ - ...sig, - pendingAddition: true, - pendingUntil: now + finalDuration, - })), - ]); - added.forEach(sig => { - schedulePendingAdditionForSig( - sig, - finalDuration, - setSignatures, - pendingAdditionMapRef, - setPendingUndoAdditions, - ); - }); - }, - [setSignatures, finalDuration], - ); - - const clearPendingAdditions = useCallback(() => { - Object.values(pendingAdditionMapRef.current).forEach(({ finalTimeoutId }) => { - clearTimeout(finalTimeoutId); - }); - pendingAdditionMapRef.current = {}; - setSignatures(prev => - prev.map(x => (x.pendingAddition ? { ...x, pendingAddition: false, pendingUntil: undefined } : x)), - ); - setPendingUndoAdditions([]); - }, [setSignatures]); - - return { - pendingUndoAdditions, - setPendingUndoAdditions, - pendingAdditionMapRef, - processAddedSignatures, - clearPendingAdditions, - }; -}; diff --git a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingDeletions.ts b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingDeletions.ts index beb145a5..2591e084 100644 --- a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingDeletions.ts +++ b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/usePendingDeletions.ts @@ -1,17 +1,19 @@ -import { useState, useCallback } from 'react'; +import { useCallback, useRef, useEffect } from 'react'; import { OutCommand } from '@/hooks/Mapper/types/mapHandlers'; -import { prepareUpdatePayload, scheduleLazyDeletionTimers } from '../helpers'; +import { prepareUpdatePayload, scheduleLazyTimers } from '../helpers'; import { UsePendingDeletionParams } from './types'; import { FINAL_DURATION_MS } from '../constants'; import { useMapRootState } from '@/hooks/Mapper/mapRootProvider'; import { ExtendedSystemSignature } from '@/hooks/Mapper/types'; -export function usePendingDeletions({ systemId, setSignatures, deletionTiming }: UsePendingDeletionParams) { +export function usePendingDeletions({ + systemId, + setSignatures, + deletionTiming, + onPendingChange, +}: UsePendingDeletionParams) { const { outCommand } = useMapRootState(); - const [localPendingDeletions, setLocalPendingDeletions] = useState([]); - const [pendingDeletionMap, setPendingDeletionMap] = useState< - Record - >({}); + const pendingDeletionMapRef = useRef>({}); // Use the provided deletion timing or fall back to the default const finalDuration = deletionTiming !== undefined ? deletionTiming : FINAL_DURATION_MS; @@ -37,15 +39,17 @@ export function usePendingDeletions({ systemId, setSignatures, deletionTiming }: const processedRemoved = removed.map(r => ({ ...r, pendingDeletion: true, - pendingAddition: false, pendingUntil: now + finalDuration, })); - setLocalPendingDeletions(prev => [...prev, ...processedRemoved]); + pendingDeletionMapRef.current = { + ...pendingDeletionMapRef.current, + ...processedRemoved.reduce((acc: any, sig) => { + acc[sig.eve_id] = sig; + return acc; + }, {}), + }; - outCommand({ - type: OutCommand.updateSignatures, - data: prepareUpdatePayload(systemId, added, updated, []), - }); + onPendingChange?.(pendingDeletionMapRef, clearPendingDeletions); setSignatures(prev => prev.map(sig => { @@ -56,37 +60,34 @@ export function usePendingDeletions({ systemId, setSignatures, deletionTiming }: }), ); - scheduleLazyDeletionTimers( + scheduleLazyTimers( processedRemoved, - setPendingDeletionMap, + pendingDeletionMapRef, async sig => { await outCommand({ type: OutCommand.updateSignatures, data: prepareUpdatePayload(systemId, [], [], [sig]), }); - setLocalPendingDeletions(prev => prev.filter(x => x.eve_id !== sig.eve_id)); + delete pendingDeletionMapRef.current[sig.eve_id]; setSignatures(prev => prev.filter(x => x.eve_id !== sig.eve_id)); }, finalDuration, ); }, - [systemId, outCommand, setSignatures, finalDuration], + [systemId, outCommand, finalDuration], ); const clearPendingDeletions = useCallback(() => { - Object.values(pendingDeletionMap).forEach(({ finalTimeoutId }) => clearTimeout(finalTimeoutId)); - setPendingDeletionMap({}); - setSignatures(prev => - prev.map(x => (x.pendingDeletion ? { ...x, pendingDeletion: false, pendingUntil: undefined } : x)), - ); - setLocalPendingDeletions([]); - }, [pendingDeletionMap, setSignatures]); + Object.values(pendingDeletionMapRef.current).forEach(({ finalTimeoutId }) => { + clearTimeout(finalTimeoutId); + }); + pendingDeletionMapRef.current = {}; + setSignatures(prev => prev.map(x => (x.pendingDeletion ? { ...x, pendingDeletion: false } : x))); + onPendingChange?.(pendingDeletionMapRef, clearPendingDeletions); + }, []); return { - localPendingDeletions, - setLocalPendingDeletions, - pendingDeletionMap, - setPendingDeletionMap, + pendingDeletionMapRef, processRemovedSignatures, clearPendingDeletions, }; diff --git a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSignatureFetching.ts b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSignatureFetching.ts index 8e557ffe..1fe3e5a8 100644 --- a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSignatureFetching.ts +++ b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSignatureFetching.ts @@ -1,16 +1,15 @@ import { useCallback } from 'react'; import { ExtendedSystemSignature, SystemSignature } from '@/hooks/Mapper/types'; import { OutCommand } from '@/hooks/Mapper/types/mapHandlers'; -import { prepareUpdatePayload, getActualSigs, mergeLocalPendingAdditions } from '../helpers'; +import { prepareUpdatePayload, getActualSigs, mergeLocalPending } from '../helpers'; import { UseFetchingParams } from './types'; -import { FINAL_DURATION_MS } from '../constants'; import { useMapRootState } from '@/hooks/Mapper/mapRootProvider'; export const useSignatureFetching = ({ systemId, signaturesRef, setSignatures, - localPendingDeletions, + pendingDeletionMapRef, }: UseFetchingParams) => { const { data: { characters }, @@ -22,9 +21,6 @@ export const useSignatureFetching = ({ setSignatures([]); return; } - if (localPendingDeletions.length) { - return; - } const resp = await outCommand({ type: OutCommand.getSignatures, data: { system_id: systemId }, @@ -36,8 +32,8 @@ export const useSignatureFetching = ({ character_name: characters.find(c => c.eve_id === s.character_eve_id)?.name, })) as ExtendedSystemSignature[]; - setSignatures(prev => mergeLocalPendingAdditions(extended, prev)); - }, [characters, systemId, localPendingDeletions, outCommand, setSignatures]); + setSignatures(() => mergeLocalPending(pendingDeletionMapRef, extended)); + }, [characters, systemId, outCommand]); const handleUpdateSignatures = useCallback( async (newList: ExtendedSystemSignature[], updateOnly: boolean, skipUpdateUntouched?: boolean) => { @@ -48,24 +44,12 @@ export const useSignatureFetching = ({ skipUpdateUntouched, ); - if (added.length > 0) { - const now = Date.now(); - setSignatures(prev => [ - ...prev, - ...added.map(a => ({ - ...a, - pendingAddition: true, - pendingUntil: now + FINAL_DURATION_MS, - })), - ]); - } - await outCommand({ type: OutCommand.updateSignatures, data: prepareUpdatePayload(systemId, added, updated, removed), }); }, - [systemId, outCommand, signaturesRef, setSignatures], + [systemId, outCommand, signaturesRef], ); return { diff --git a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSystemSignaturesData.ts b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSystemSignaturesData.ts index 48f75c9d..951a82c1 100644 --- a/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSystemSignaturesData.ts +++ b/assets/js/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/hooks/useSystemSignaturesData.ts @@ -1,13 +1,12 @@ import { useCallback, useEffect, useState } from 'react'; import useRefState from 'react-usestateref'; import { useMapEventListener } from '@/hooks/Mapper/events'; -import { Commands, ExtendedSystemSignature, SignatureKind, SystemSignature } from '@/hooks/Mapper/types'; +import { Commands, ExtendedSystemSignature, SignatureKind } from '@/hooks/Mapper/types'; import { OutCommand } from '@/hooks/Mapper/types/mapHandlers'; import { parseSignatures } from '@/hooks/Mapper/helpers'; -import { getActualSigs, mergeLocalPendingAdditions } from '../helpers'; +import { getActualSigs } from '../helpers'; import { useSignatureFetching } from './useSignatureFetching'; -import { usePendingAdditions } from './usePendingAdditions'; import { usePendingDeletions } from './usePendingDeletions'; import { UseSystemSignaturesDataProps } from './types'; import { useMapRootState } from '@/hooks/Mapper/mapRootProvider'; @@ -25,24 +24,18 @@ export const useSystemSignaturesData = ({ const [signatures, setSignatures, signaturesRef] = useRefState([]); const [selectedSignatures, setSelectedSignatures] = useState([]); - const { localPendingDeletions, setLocalPendingDeletions, processRemovedSignatures, clearPendingDeletions } = - usePendingDeletions({ - systemId, - setSignatures, - deletionTiming, - }); - - const { pendingUndoAdditions, setPendingUndoAdditions, processAddedSignatures, clearPendingAdditions } = - usePendingAdditions({ - setSignatures, - deletionTiming, - }); + const { pendingDeletionMapRef, processRemovedSignatures, clearPendingDeletions } = usePendingDeletions({ + systemId, + setSignatures, + deletionTiming, + onPendingChange, + }); const { handleGetSignatures, handleUpdateSignatures } = useSignatureFetching({ systemId, signaturesRef, setSignatures, - localPendingDeletions, + pendingDeletionMapRef, }); const handlePaste = useCallback( @@ -56,18 +49,16 @@ export const useSystemSignaturesData = ({ const currentNonPending = lazyDeleteValue ? signaturesRef.current.filter(sig => !sig.pendingDeletion) - : signaturesRef.current.filter(sig => !sig.pendingDeletion && !sig.pendingAddition); + : signaturesRef.current.filter(sig => !sig.pendingDeletion || !sig.pendingAddition); const { added, updated, removed } = getActualSigs(currentNonPending, incomingSignatures, !lazyDeleteValue, true); - if (added.length > 0) { - processAddedSignatures(added); - } - if (removed.length > 0) { await processRemovedSignatures(removed, added, updated); - } else { - const resp = await outCommand({ + } + + if (updated.length !== 0 || added.length !== 0) { + await outCommand({ type: OutCommand.updateSignatures, data: { system_id: systemId, @@ -76,16 +67,6 @@ export const useSystemSignaturesData = ({ removed: [], }, }); - - if (resp) { - const finalSigs = (resp.signatures ?? []) as SystemSignature[]; - setSignatures(prev => - mergeLocalPendingAdditions( - finalSigs.map(x => ({ ...x })), - prev, - ), - ); - } } const keepLazy = settings[SETTINGS_KEYS.KEEP_LAZY_DELETE] as boolean; @@ -93,16 +74,7 @@ export const useSystemSignaturesData = ({ onLazyDeleteChange?.(false); } }, - [ - settings, - signaturesRef, - processAddedSignatures, - processRemovedSignatures, - outCommand, - systemId, - setSignatures, - onLazyDeleteChange, - ], + [settings, signaturesRef, processRemovedSignatures, outCommand, systemId, onLazyDeleteChange], ); const handleDeleteSelected = useCallback(async () => { @@ -112,7 +84,7 @@ export const useSystemSignaturesData = ({ await handleUpdateSignatures(finalList, false, true); setSelectedSignatures([]); - }, [selectedSignatures, signatures, handleUpdateSignatures]); + }, [selectedSignatures, signatures]); const handleSelectAll = useCallback(() => { setSelectedSignatures(signatures); @@ -120,42 +92,7 @@ export const useSystemSignaturesData = ({ const undoPending = useCallback(() => { clearPendingDeletions(); - clearPendingAdditions(); - setSignatures(prev => - prev.map(x => (x.pendingDeletion ? { ...x, pendingDeletion: false, pendingUntil: undefined } : x)), - ); - - if (pendingUndoAdditions.length) { - pendingUndoAdditions.forEach(async sig => { - await outCommand({ - type: OutCommand.updateSignatures, - data: { - system_id: systemId, - added: [], - updated: [], - removed: [sig], - }, - }); - }); - setSignatures(prev => prev.filter(x => !pendingUndoAdditions.some(u => u.eve_id === x.eve_id))); - setPendingUndoAdditions([]); - } - setLocalPendingDeletions([]); - }, [ - clearPendingDeletions, - clearPendingAdditions, - pendingUndoAdditions, - setPendingUndoAdditions, - setLocalPendingDeletions, - setSignatures, - outCommand, - systemId, - ]); - - useEffect(() => { - const combined = [...localPendingDeletions, ...pendingUndoAdditions]; - onPendingChange?.(combined, undoPending); - }, [localPendingDeletions, pendingUndoAdditions, onPendingChange, undoPending]); + }, [clearPendingDeletions]); useMapEventListener(event => { if (event.name === Commands.signaturesUpdated && String(event.data) === String(systemId)) { @@ -167,14 +104,15 @@ export const useSystemSignaturesData = ({ useEffect(() => { if (!systemId) { setSignatures([]); + undoPending(); return; } handleGetSignatures(); - }, [systemId, handleGetSignatures, setSignatures]); + }, [systemId]); useEffect(() => { onCountChange?.(signatures.length); - }, [signatures, onCountChange]); + }, [signatures]); return { signatures, diff --git a/assets/js/hooks/Mapper/types/signatures.ts b/assets/js/hooks/Mapper/types/signatures.ts index 85c42ea6..0b8fe38c 100644 --- a/assets/js/hooks/Mapper/types/signatures.ts +++ b/assets/js/hooks/Mapper/types/signatures.ts @@ -52,6 +52,7 @@ export interface ExtendedSystemSignature extends SystemSignature { pendingDeletion?: boolean; pendingAddition?: boolean; pendingUntil?: number; + finalTimeoutId?: number; } export enum SignatureKindENG { diff --git a/assets/yarn.lock b/assets/yarn.lock index f3e7102f..9e78afc2 100644 --- a/assets/yarn.lock +++ b/assets/yarn.lock @@ -3850,6 +3850,11 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +morphdom@2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.7.4.tgz#c61d511e935cc25ca588dfaa752461f27865865e" + integrity sha512-ATTbWMgGa+FaMU3FhnFYB6WgulCqwf6opOll4CBzmVDTLvPMmUPrEv8CudmLPK0MESa64+6B89fWOxP3+YIlxQ== + ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -4061,7 +4066,9 @@ path-type@^5.0.0: version "4.2.1" "phoenix_live_view@file:../deps/phoenix_live_view": - version "0.20.17" + version "1.0.5" + dependencies: + morphdom "2.7.4" picocolors@^1, picocolors@^1.0.0: version "1.0.0"