({ layoutModel }: { layoutModel: LayoutModel })
| 137 | export const TileLayout = memo(TileLayoutComponent) as typeof TileLayoutComponent; |
| 138 | |
| 139 | function NodeBackdrops({ layoutModel }: { layoutModel: LayoutModel }) { |
| 140 | const [blockBlurAtom] = useState(() => getSettingsKeyAtom("window:magnifiedblockblursecondarypx")); |
| 141 | const blockBlur = useAtomValue(blockBlurAtom); |
| 142 | const ephemeralNode = useAtomValue(layoutModel.ephemeralNode); |
| 143 | const magnifiedNodeId = useAtomValue(layoutModel.magnifiedNodeIdAtom); |
| 144 | |
| 145 | const [showMagnifiedBackdrop, setShowMagnifiedBackdrop] = useState(!!ephemeralNode); |
| 146 | const [showEphemeralBackdrop, setShowEphemeralBackdrop] = useState(!!magnifiedNodeId); |
| 147 | |
| 148 | const debouncedSetMagnifyBackdrop = useCallback( |
| 149 | debounce(100, () => setShowMagnifiedBackdrop(true)), |
| 150 | [] |
| 151 | ); |
| 152 | |
| 153 | useEffect(() => { |
| 154 | if (magnifiedNodeId && !showMagnifiedBackdrop) { |
| 155 | debouncedSetMagnifyBackdrop(); |
| 156 | } |
| 157 | if (!magnifiedNodeId) { |
| 158 | setShowMagnifiedBackdrop(false); |
| 159 | } |
| 160 | if (ephemeralNode && !showEphemeralBackdrop) { |
| 161 | setShowEphemeralBackdrop(true); |
| 162 | } |
| 163 | if (!ephemeralNode) { |
| 164 | setShowEphemeralBackdrop(false); |
| 165 | } |
| 166 | }, [ephemeralNode, magnifiedNodeId]); |
| 167 | |
| 168 | const blockBlurStr = `${blockBlur}px`; |
| 169 | |
| 170 | return ( |
| 171 | <> |
| 172 | {showMagnifiedBackdrop && ( |
| 173 | <div |
| 174 | className="magnified-node-backdrop" |
| 175 | onClick={() => { |
| 176 | layoutModel.magnifyNodeToggle(magnifiedNodeId); |
| 177 | }} |
| 178 | style={{ "--block-blur": blockBlurStr } as CSSProperties} |
| 179 | /> |
| 180 | )} |
| 181 | {showEphemeralBackdrop && ( |
| 182 | <div |
| 183 | className="ephemeral-node-backdrop" |
| 184 | onClick={() => { |
| 185 | layoutModel.closeNode(ephemeralNode?.id); |
| 186 | }} |
| 187 | style={{ "--block-blur": blockBlurStr } as CSSProperties} |
| 188 | /> |
| 189 | )} |
| 190 | </> |
| 191 | ); |
| 192 | } |
| 193 | |
| 194 | interface DisplayNodesWrapperProps { |
| 195 | /** |
nothing calls this directly
no test coverage detected