Skip to content

Commit 26d72a4

Browse files
committed
refactor: standardize organisationId type and improve error handling
1 parent 172a32a commit 26d72a4

File tree

7 files changed

+102
-55
lines changed

7 files changed

+102
-55
lines changed

frontend/web/components/pages/project-settings/index.tsx

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { CustomFieldsTab } from './tabs/CustomFieldsTab'
1717
import { ImportTab } from './tabs/ImportTab'
1818

1919
const ProjectSettingsPage = () => {
20-
const { environmentId, organisationId, projectId } = useRouteContext()
20+
const { environmentId, projectId } = useRouteContext()
2121
const { data: project, isLoading } = useGetProjectQuery(
2222
{ id: String(projectId) },
2323
{ skip: !projectId },
@@ -30,7 +30,10 @@ const ProjectSettingsPage = () => {
3030
const hasEnvironments = !!project?.environments?.length
3131
const hasFeatureHealth = Utils.getFlagsmithHasFeature('feature_health')
3232

33-
if (isLoading || !project || !projectId) {
33+
// Derive organisationId from project data
34+
const organisationId = project?.organisation
35+
36+
if (isLoading || !project || !projectId || !organisationId) {
3437
return (
3538
<div className='app-container container'>
3639
<PageTitle title='Project Settings' />
@@ -50,7 +53,6 @@ const ProjectSettingsPage = () => {
5053
project={project}
5154
projectId={projectId}
5255
environmentId={environmentId}
53-
organisationId={organisationId}
5456
/>
5557
</TabItem>
5658

@@ -59,7 +61,6 @@ const ProjectSettingsPage = () => {
5961
project={project}
6062
projectId={projectId}
6163
environmentId={environmentId}
62-
organisationId={organisationId}
6364
/>
6465
</TabItem>
6566

@@ -85,26 +86,17 @@ const ProjectSettingsPage = () => {
8586
<TabItem tabLabel='Permissions'>
8687
<PermissionsTab
8788
projectId={projectId}
88-
environmentId={environmentId}
8989
organisationId={organisationId}
9090
/>
9191
</TabItem>
9292

9393
<TabItem tabLabel='Custom Fields'>
94-
<CustomFieldsTab
95-
projectId={projectId}
96-
environmentId={environmentId}
97-
organisationId={organisationId}
98-
/>
94+
<CustomFieldsTab organisationId={organisationId} />
9995
</TabItem>
10096

10197
{hasEnvironments && (
10298
<TabItem data-test='js-import-page' tabLabel='Import'>
103-
<ImportTab
104-
projectId={projectId}
105-
environmentId={environmentId}
106-
organisationId={organisationId}
107-
/>
99+
<ImportTab projectId={projectId} environmentId={environmentId} />
108100
</TabItem>
109101
)}
110102

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export type ProjectSettingsTabProps = {
22
projectId: number
33
environmentId?: string
4-
organisationId?: number
4+
organisationId: number
55
}
Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,39 @@
1+
import InfoMessage from 'components/InfoMessage'
12
import WarningMessage from 'components/WarningMessage'
23
import React from 'react'
3-
import { ProjectSettingsTabProps } from 'components/pages/project-settings/shared/types'
44

5-
export const CustomFieldsTab = ({
6-
organisationId,
7-
}: ProjectSettingsTabProps) => (
8-
<div className='mt-4'>
9-
<h5>Custom Fields</h5>
5+
type CustomFieldsTabProps = {
6+
organisationId: number
7+
}
108

11-
<WarningMessage
12-
warningMessage={
13-
<span>
14-
Custom fields have been moved to{' '}
15-
<a
16-
href={`/organisation/${organisationId}/settings?tab=custom-fields`}
17-
rel='noreferrer'
18-
>
19-
Organisation Settings
20-
</a>
21-
.
22-
</span>
23-
}
24-
/>
25-
</div>
26-
)
9+
export const CustomFieldsTab = ({ organisationId }: CustomFieldsTabProps) => {
10+
// Runtime safety check
11+
if (!organisationId) {
12+
return (
13+
<div className='mt-4'>
14+
<InfoMessage>Unable to load organisation settings</InfoMessage>
15+
</div>
16+
)
17+
}
18+
19+
return (
20+
<div className='mt-4'>
21+
<h5>Custom Fields</h5>
22+
23+
<WarningMessage
24+
warningMessage={
25+
<span>
26+
Custom fields have been moved to{' '}
27+
<a
28+
href={`/organisation/${organisationId}/settings?tab=custom-fields`}
29+
rel='noreferrer'
30+
>
31+
Organisation Settings
32+
</a>
33+
.
34+
</span>
35+
}
36+
/>
37+
</div>
38+
)
39+
}

frontend/web/components/pages/project-settings/tabs/GeneralTab/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ type GeneralTabProps = {
1515
project: Project
1616
projectId: number
1717
environmentId?: string
18-
organisationId?: number
1918
}
2019

2120
export const GeneralTab = ({ project, projectId }: GeneralTabProps) => {

frontend/web/components/pages/project-settings/tabs/ImportTab.tsx

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,34 @@
11
import ImportPage from 'components/import-export/ImportPage'
2+
import InfoMessage from 'components/InfoMessage'
23
import React from 'react'
34
import { useGetProjectQuery } from 'common/services/useProject'
4-
import { ProjectSettingsTabProps } from 'components/pages/project-settings/shared/types'
55

6-
export const ImportTab = ({
7-
environmentId,
8-
projectId,
9-
}: ProjectSettingsTabProps) => {
10-
const { data: project } = useGetProjectQuery({ id: String(projectId) })
6+
type ImportTabProps = {
7+
projectId: number
8+
environmentId?: string
9+
}
10+
11+
export const ImportTab = ({ environmentId, projectId }: ImportTabProps) => {
12+
const { data: project, isLoading } = useGetProjectQuery({
13+
id: String(projectId),
14+
})
15+
16+
if (isLoading) {
17+
return (
18+
<div className='text-center mt-4'>
19+
<Loader />
20+
</div>
21+
)
22+
}
1123

1224
if (!environmentId) {
13-
return null
25+
return (
26+
<div className='mt-4'>
27+
<InfoMessage>
28+
Please select an environment to import features
29+
</InfoMessage>
30+
</div>
31+
)
1432
}
1533

1634
return (

frontend/web/components/pages/project-settings/tabs/PermissionsTab.tsx

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,51 @@
11
import EditPermissions from 'components/EditPermissions'
2+
import InfoMessage from 'components/InfoMessage'
23
import React from 'react'
34
import { useGetRolesQuery } from 'common/services/useRole'
45
import { useGetProjectPermissionsQuery } from 'common/services/useProject'
5-
import { ProjectSettingsTabProps } from 'components/pages/project-settings/shared/types'
6+
7+
type PermissionsTabProps = {
8+
projectId: number
9+
organisationId: number
10+
}
611

712
export const PermissionsTab = ({
813
organisationId,
914
projectId,
10-
}: ProjectSettingsTabProps) => {
11-
const { data: rolesData } = useGetRolesQuery(
12-
{ organisation_id: organisationId || 0 },
13-
{ skip: !organisationId },
14-
)
15+
}: PermissionsTabProps) => {
16+
const {
17+
data: rolesData,
18+
error: rolesError,
19+
isLoading: rolesLoading,
20+
} = useGetRolesQuery({ organisation_id: organisationId })
1521

16-
const { data: permissionsData, refetch: refetchPermissions } =
17-
useGetProjectPermissionsQuery({ projectId: String(projectId) })
22+
const {
23+
data: permissionsData,
24+
error: permissionsError,
25+
isLoading: permissionsLoading,
26+
refetch: refetchPermissions,
27+
} = useGetProjectPermissionsQuery({ projectId: String(projectId) })
1828

1929
const handleSaveUser = () => {
2030
refetchPermissions()
2131
}
2232

33+
if (rolesLoading || permissionsLoading) {
34+
return (
35+
<div className='text-center'>
36+
<Loader />
37+
</div>
38+
)
39+
}
40+
41+
if (rolesError || permissionsError) {
42+
return (
43+
<div className='mt-4'>
44+
<InfoMessage>Error loading permissions data</InfoMessage>
45+
</div>
46+
)
47+
}
48+
2349
return (
2450
<EditPermissions
2551
tabClassName='flat-panel'

frontend/web/components/pages/project-settings/tabs/SDKSettingsTab.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ type SDKSettingsTabProps = {
88
project: Project
99
projectId: number
1010
environmentId?: string
11-
organisationId?: number
1211
}
1312

1413
export const SDKSettingsTab = ({ project, projectId }: SDKSettingsTabProps) => {

0 commit comments

Comments
 (0)