Small updates to Layout Extension code (committing to keep separate from larger changes)

Summary: Changed AXVisible checking, added AX specific hover

Reviewed By: danielbuechele

Differential Revision: D8795383

fbshipit-source-id: bb10b9e860629cfd385d97e79587c76460b516bc
This commit is contained in:
Sara Valderrama
2018-07-12 09:23:27 -07:00
committed by Facebook Github Bot
parent fcd1b1e773
commit 9e673a07a8
2 changed files with 43 additions and 30 deletions

View File

@@ -23,3 +23,5 @@ export class AXElementsInspector extends Component<{
return null; return null;
} }
} }
export const AXToggleButtonEnabled: boolean = false;

View File

@@ -25,7 +25,10 @@ import {
VerticalRule, VerticalRule,
} from 'sonar'; } from 'sonar';
import {AXElementsInspector} from '../../fb-stubs/AXLayoutExtender.js'; import {
AXElementsInspector,
AXToggleButtonEnabled,
} from '../../fb-stubs/AXLayoutExtender.js';
// $FlowFixMe // $FlowFixMe
import debounce from 'lodash.debounce'; import debounce from 'lodash.debounce';
@@ -252,7 +255,6 @@ export default class Layout extends SonarPlugin<InspectorState> {
...element, ...element,
}; };
} }
return {AXelements: updatedElements}; return {AXelements: updatedElements};
}, },
@@ -399,6 +401,7 @@ export default class Layout extends SonarPlugin<InspectorState> {
}); });
}); });
if (AXToggleButtonEnabled) {
this.client.call('getRoot').then((element: Element) => { this.client.call('getRoot').then((element: Element) => {
this.dispatchAction({elements: [element], type: 'UpdateAXElements'}); this.dispatchAction({elements: [element], type: 'UpdateAXElements'});
this.dispatchAction({root: element.id, type: 'SetAXRoot'}); this.dispatchAction({root: element.id, type: 'SetAXRoot'});
@@ -406,15 +409,19 @@ export default class Layout extends SonarPlugin<InspectorState> {
this.setState({AXinitialised: true}); this.setState({AXinitialised: true});
}); });
}); });
}
this.client.subscribe( this.client.subscribe(
'invalidate', 'invalidate',
({nodes}: {nodes: Array<{id: ElementID}>}) => { ({nodes}: {nodes: Array<{id: ElementID}>}) => {
this.invalidate(nodes.map(node => node.id)).then( this.invalidate(nodes.map(node => node.id)).then(
(elements: Array<Element>) => { (elements: Array<Element>) => {
this.dispatchAction({elements, type: 'UpdateElements'}); if (this.state.inAXMode) {
// to be removed once trees are separate - will have own invalidate // to be removed once trees are separate - will have own invalidate
this.dispatchAction({elements, type: 'UpdateAXElements'}); this.dispatchAction({elements, type: 'UpdateAXElements'});
} else {
this.dispatchAction({elements, type: 'UpdateElements'});
}
}, },
); );
}, },
@@ -445,10 +452,13 @@ export default class Layout extends SonarPlugin<InspectorState> {
return Promise.resolve([]); return Promise.resolve([]);
} }
return this.getNodes(ids, true, false).then((elements: Array<Element>) => { const ax = this.state.inAXMode;
return this.getNodes(ids, true, ax).then((elements: Array<Element>) => {
const children = elements const children = elements
.filter(element => { .filter(element => {
const prev = this.state.elements[element.id]; const prev = (ax ? this.state.AXelements : this.state.elements)[
element.id
];
return prev && prev.expanded; return prev && prev.expanded;
}) })
.map(element => element.children) .map(element => element.children)
@@ -462,7 +472,7 @@ export default class Layout extends SonarPlugin<InspectorState> {
getNodesAndDirectChildren( getNodesAndDirectChildren(
ids: Array<ElementID>, ids: Array<ElementID>,
ax: boolean, ax: boolean, // always false at the moment bc only used for select
): Promise<Array<Element>> { ): Promise<Array<Element>> {
return this.getNodes(ids, false, ax).then((elements: Array<Element>) => { return this.getNodes(ids, false, ax).then((elements: Array<Element>) => {
const children = elements const children = elements
@@ -630,6 +640,10 @@ export default class Layout extends SonarPlugin<InspectorState> {
this.client.send('setHighlighted', {id: key}); this.client.send('setHighlighted', {id: key});
}); });
onAXElementHovered = debounce((key: ?ElementID) => {
this.client.send('setHighlighted', {id: key});
});
onDataValueChanged = (path: Array<string>, value: any) => { onDataValueChanged = (path: Array<string>, value: any) => {
const selected = this.state.inAXMode const selected = this.state.inAXMode
? this.state.AXselected ? this.state.AXselected
@@ -683,20 +697,6 @@ export default class Layout extends SonarPlugin<InspectorState> {
outstandingSearchQuery, outstandingSearchQuery,
} = this.state; } = this.state;
const AXInspector = (
<AXElementsInspector
onElementSelected={this.onAXElementSelected}
onElementHovered={this.onElementHovered}
onElementExpanded={this.onAXElementExpanded}
onValueChanged={this.onDataValueChanged}
selected={AXselected}
searchResults={this.state.searchResults}
root={AXroot}
elements={AXelements}
/>
);
const AXButtonVisible = AXInspector !== null;
return ( return (
<FlexColumn fill={true}> <FlexColumn fill={true}>
<Toolbar> <Toolbar>
@@ -715,7 +715,7 @@ export default class Layout extends SonarPlugin<InspectorState> {
} }
/> />
</SearchIconContainer> </SearchIconContainer>
{AXButtonVisible ? ( {AXToggleButtonEnabled ? (
<SearchIconContainer <SearchIconContainer
onClick={this.onToggleAccessibility} onClick={this.onToggleAccessibility}
role="button" role="button"
@@ -760,7 +760,18 @@ export default class Layout extends SonarPlugin<InspectorState> {
</Center> </Center>
)} )}
{AXinitialised && inAXMode ? <VerticalRule /> : null} {AXinitialised && inAXMode ? <VerticalRule /> : null}
{AXinitialised && inAXMode ? AXInspector : null} {AXinitialised && inAXMode ? (
<AXElementsInspector
onElementSelected={this.onAXElementSelected}
onElementHovered={this.onAXElementHovered}
onElementExpanded={this.onAXElementExpanded}
onValueChanged={this.onDataValueChanged}
selected={AXselected}
searchResults={null}
root={AXroot}
elements={AXelements}
/>
) : null}
</FlexRow> </FlexRow>
<SonarSidebar>{this.renderSidebar()}</SonarSidebar> <SonarSidebar>{this.renderSidebar()}</SonarSidebar>
</FlexColumn> </FlexColumn>