UID Refactor 5/n Refactor index.tsx
Summary: This file was huge and was hard to understand what was going on. changes: 1. UIActions moved out to separate file 2. create UIstate moved out 3. All declared state (atoms or plain js objects) moved to the top of the function like a class 4. utilities moved out Reviewed By: lblasa Differential Revision: D47547844 fbshipit-source-id: e7fa705a14a23bff2415016a488147bed7ad9e91
This commit is contained in:
committed by
Facebook GitHub Bot
parent
957a336349
commit
efb23be4cf
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {Draft} from 'flipper-plugin';
|
||||
import {ClientNode, Id} from '../ClientTypes';
|
||||
import {UIState} from '../DesktopTypes';
|
||||
|
||||
export function collapseinActiveChildren(
|
||||
node: ClientNode,
|
||||
expandedNodes: Draft<Set<Id>>,
|
||||
) {
|
||||
if (node.activeChild) {
|
||||
expandedNodes.add(node.activeChild);
|
||||
for (const child of node.children) {
|
||||
if (child !== node.activeChild) {
|
||||
expandedNodes.delete(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function checkFocusedNodeStillActive(
|
||||
uiState: UIState,
|
||||
nodes: Map<Id, ClientNode>,
|
||||
) {
|
||||
const focusedNodeId = uiState.focusedNode.get();
|
||||
const focusedNode = focusedNodeId && nodes.get(focusedNodeId);
|
||||
if (!focusedNode || !isFocusedNodeAncestryAllActive(focusedNode, nodes)) {
|
||||
uiState.focusedNode.set(undefined);
|
||||
}
|
||||
}
|
||||
|
||||
function isFocusedNodeAncestryAllActive(
|
||||
focused: ClientNode,
|
||||
nodes: Map<Id, ClientNode>,
|
||||
): boolean {
|
||||
let node = focused;
|
||||
|
||||
while (node != null) {
|
||||
if (node.parent == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const parent = nodes.get(node.parent);
|
||||
|
||||
if (parent == null) {
|
||||
//should also never happen
|
||||
return false;
|
||||
}
|
||||
|
||||
if (parent.activeChild != null && parent.activeChild !== node.id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
node = parent;
|
||||
}
|
||||
//wont happen
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user