40 lines
991 B
TypeScript
40 lines
991 B
TypeScript
/**
|
|
* Internal dependencies
|
|
*/
|
|
import { CoreProfilerStateMachineContext } from '..';
|
|
|
|
export type ComponentMeta = {
|
|
/** React component that is rendered when state matches the location this meta key is defined */
|
|
component: ( arg0: ComponentProps ) => JSX.Element;
|
|
/** number between 0 - 100 */
|
|
progress: number;
|
|
};
|
|
|
|
export type ComponentProps = {
|
|
navigationProgress: number | undefined;
|
|
sendEvent: unknown;
|
|
context: CoreProfilerStateMachineContext;
|
|
};
|
|
|
|
/**
|
|
* Does a depth-first search of a meta object to find the first instance of a component.
|
|
*/
|
|
export function findComponentMeta(
|
|
obj: Record< string, unknown >
|
|
): ComponentMeta | undefined {
|
|
for ( const key in obj ) {
|
|
if ( key === 'component' ) {
|
|
return obj as ComponentMeta;
|
|
} else if ( typeof obj[ key ] === 'object' && obj[ key ] !== null ) {
|
|
const found = findComponentMeta(
|
|
obj[ key ] as Record< string, unknown >
|
|
);
|
|
if ( found !== undefined ) {
|
|
return found;
|
|
}
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|