go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/milo/ui/src/bisection/layouts/base.tsx (about) 1 // Copyright 2023 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 import { Outlet, useParams } from 'react-router-dom'; 16 17 import { RecoverableErrorBoundary } from '@/common/components/error_handling'; 18 import { PageMeta } from '@/common/components/page_meta'; 19 import { UiPage } from '@/common/constants/view'; 20 21 export const BisectionLayout = () => { 22 const { project } = useParams(); 23 24 if (!project) { 25 throw new Error('invariant violated: project should be set'); 26 } 27 return ( 28 <> 29 <PageMeta 30 project={project} 31 title="Bisection" 32 selectedPage={UiPage.Bisection} 33 /> 34 <Outlet /> 35 </> 36 ); 37 }; 38 39 export const element = ( 40 // See the documentation for `<LoginPage />` for why we handle error this way. 41 <RecoverableErrorBoundary key="bisection"> 42 <BisectionLayout /> 43 </RecoverableErrorBoundary> 44 );