(view: T, criterion: string | { new () })
| 108 | * Returns an instance of a view (if found), otherwise undefined. |
| 109 | */ |
| 110 | export function getAncestor<T extends ViewBase = ViewBase>(view: T, criterion: string | { new () }): T { |
| 111 | let matcher: (view: ViewBase) => view is T; |
| 112 | |
| 113 | if (typeof criterion === 'string') { |
| 114 | matcher = (view: ViewBase): view is T => view.typeName === criterion; |
| 115 | } else { |
| 116 | matcher = (view: ViewBase): view is T => view instanceof criterion; |
| 117 | } |
| 118 | |
| 119 | for (let parent = view.parent; parent != null; parent = parent.parent) { |
| 120 | if (matcher(parent)) { |
| 121 | return parent; |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | return null; |
| 126 | } |
| 127 | |
| 128 | /** |
| 129 | * Gets a child view by id. |
no test coverage detected