11import { useEffect , useState } from "react" ;
2- import { useAtomValue , useSetAtom } from "jotai" ;
2+ import { useAtomValue , useSetAtom , useAtom } from "jotai" ;
33import {
44 useParams ,
55 useSearchParams ,
@@ -10,6 +10,7 @@ import { Notification, Icon, Row, Col } from "@canonical/react-components";
1010
1111import { useRemodels } from "../../hooks" ;
1212import {
13+ remodelPermissionsState ,
1314 remodelsListFilterState ,
1415 remodelsListState ,
1516} from "../../state/remodelsState" ;
@@ -22,7 +23,7 @@ import RemodelTable from "./RemodelTable";
2223import ConfigureRemodelForm from "./ConfigureRemodelForm" ;
2324
2425import type { UseQueryResult } from "react-query" ;
25- import type { Remodel } from "../../types/shared" ;
26+ import type { ApiResponse , Remodel , RemodelResponse } from "../../types/shared" ;
2627
2728function Remodel ( ) : React . JSX . Element {
2829 const { id, modelId } = useParams ( ) ;
@@ -33,41 +34,58 @@ function Remodel(): React.JSX.Element {
3334 error,
3435 data,
3536 refetch,
36- } : UseQueryResult < Remodel [ ] , Error > = useRemodels ( brandId , modelId ) ;
37+ } : UseQueryResult < ApiResponse < RemodelResponse > , Error > = useRemodels (
38+ brandId ,
39+ modelId ,
40+ ) ;
3741 const setRemodels = useSetAtom ( remodelsListState ) ;
3842 const setFilter = useSetAtom ( remodelsListFilterState ) ;
3943 const [ showNotification , setShowNotification ] = useState ( false ) ;
4044 const [ showErrorNotification , setShowErrorNotification ] = useState ( false ) ;
4145 const [ errorMessage , setErrorMessage ] = useState ( "" ) ;
4246 const brandStore = useAtomValue ( brandStoreState ( id ) ) ;
4347 const [ searchParams ] = useSearchParams ( ) ;
48+ const [ hasRemodelPermissions , setHasRemodelPermissions ] = useAtom (
49+ remodelPermissionsState ,
50+ ) ;
51+ const [ permissionsMessage , setPermissionsMessage ] = useState ( "" ) ;
4452 const navigate = useNavigate ( ) ;
4553
4654 brandStore
4755 ? setPageTitle ( `Remodels in ${ brandStore . name } ` )
4856 : setPageTitle ( "Remodels" ) ;
4957
5058 useEffect ( ( ) => {
59+ setHasRemodelPermissions ( false ) ;
60+
5161 if ( ! isLoading && ! isError && data ) {
52- setRemodels ( data ) ;
62+ if ( data . success ) {
63+ setHasRemodelPermissions ( true ) ;
64+ }
65+
66+ if ( data . data ?. allowlist ) {
67+ setRemodels ( data . data ?. allowlist ) ;
68+ }
69+
70+ if ( ! data . success ) {
71+ setPermissionsMessage (
72+ data . message || "There was a problem fetching remodels" ,
73+ ) ;
74+ }
75+
5376 setFilter ( searchParams . get ( "filter" ) || "" ) ;
5477 }
5578 } , [ isLoading , error , data , brandId , id ] ) ;
5679
5780 return (
5881 < >
5982 < div className = "u-fixed-width u-flex-column u-flex-grow" >
60- { isError && error && (
61- < Notification severity = "negative" >
62- Error: { error . message }
63- </ Notification >
64- ) }
6583 { isLoading ? (
6684 < p >
6785 < Icon name = "spinner" className = "u-animation--spin" />
6886 Fetching remodels...
6987 </ p >
70- ) : (
88+ ) : hasRemodelPermissions ? (
7189 < >
7290 < Row >
7391 < Col size = { 6 } >
@@ -90,6 +108,8 @@ function Remodel(): React.JSX.Element {
90108 < RemodelTable />
91109 </ div >
92110 </ >
111+ ) : (
112+ < Notification severity = "caution" > { permissionsMessage } </ Notification >
93113 ) }
94114 </ div >
95115
0 commit comments