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,14 +34,21 @@ 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
@@ -49,25 +57,33 @@ function Remodel(): React.JSX.Element {
4957
5058 useEffect ( ( ) => {
5159 if ( ! isLoading && ! isError && data ) {
52- setRemodels ( data ) ;
60+ if ( data . success ) {
61+ setHasRemodelPermissions ( true ) ;
62+ }
63+
64+ if ( data . data ?. allowlist ) {
65+ setRemodels ( data . data ?. allowlist ) ;
66+ }
67+
68+ if ( ! data . success ) {
69+ setPermissionsMessage (
70+ data . message || "There was a problem fetching remodels" ,
71+ ) ;
72+ }
73+
5374 setFilter ( searchParams . get ( "filter" ) || "" ) ;
5475 }
5576 } , [ isLoading , error , data , brandId , id ] ) ;
5677
5778 return (
5879 < >
5980 < 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- ) }
6581 { isLoading ? (
6682 < p >
6783 < Icon name = "spinner" className = "u-animation--spin" />
6884 Fetching remodels...
6985 </ p >
70- ) : (
86+ ) : hasRemodelPermissions ? (
7187 < >
7288 < Row >
7389 < Col size = { 6 } >
@@ -90,6 +106,8 @@ function Remodel(): React.JSX.Element {
90106 < RemodelTable />
91107 </ div >
92108 </ >
109+ ) : (
110+ < Notification severity = "caution" > { permissionsMessage } </ Notification >
93111 ) }
94112 </ div >
95113
0 commit comments