Skip to content

Commit 6b2cd8a

Browse files
author
Tim Roes
committed
🪟🐛 Use organization info endpoint in settings (#9847)
1 parent db0474d commit 6b2cd8a

File tree

8 files changed

+27
-126
lines changed

8 files changed

+27
-126
lines changed

airbyte-webapp/src/area/workspace/components/UpdateWorkspaceNameForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Form, FormControl } from "components/forms";
55
import { FormSubmissionButtons } from "components/forms/FormSubmissionButtons";
66

77
import { useCurrentWorkspace, useUpdateWorkspaceName } from "core/api";
8-
import { useIntent } from "core/utils/rbac/intent";
8+
import { useIntent } from "core/utils/rbac";
99
import { useAppMonitoringService } from "hooks/services/AppMonitoringService";
1010
import { useNotificationService } from "hooks/services/Notification";
1111

airbyte-webapp/src/core/api/hooks/organizations.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const organizationKeys = {
1717
all: [SCOPE_USER, "organizations"] as const,
1818
lists: () => [...organizationKeys.all, "list"] as const,
1919
list: (filters: string[]) => [...organizationKeys.lists(), filters] as const,
20+
info: (organizationId = "<none>") => [...organizationKeys.all, "info", organizationId] as const,
2021
detail: (organizationId = "<none>") => [...organizationKeys.all, "details", organizationId] as const,
2122
allListUsers: [SCOPE_ORGANIZATION, "users", "list"] as const,
2223
listUsers: (organizationId: string) => [SCOPE_ORGANIZATION, "users", "list", organizationId] as const,
@@ -29,7 +30,7 @@ export const organizationKeys = {
2930
export const useCurrentOrganizationInfo = () => {
3031
const requestOptions = useRequestOptions();
3132
const workspace = useCurrentWorkspace();
32-
return useSuspenseQuery(organizationKeys.detail(workspace.organizationId), () => {
33+
return useSuspenseQuery(organizationKeys.info(workspace.organizationId), () => {
3334
// TODO: Once all workspaces are in an organization this can be removed, but for now
3435
// we guard against calling the endpoint if the workspace isn't in an organization
3536
// to not cause too many 404 in the getOrganizationInfo endpoint.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from "./rbac";
2+
export { useIntent } from "./intent";
Lines changed: 19 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import React, { useMemo } from "react";
22
import { FormattedMessage } from "react-intl";
33

4-
import { useCurrentWorkspace, useOrganization } from "core/api";
4+
import { useCurrentOrganizationInfo } from "core/api";
55
import { FeatureItem, useFeature } from "core/services/features";
66
import { isOsanoActive, showOsanoDrawer } from "core/utils/dataPrivacy";
7+
import { useIntent } from "core/utils/rbac";
78
import { DbtCloudSettingsView } from "packages/cloud/views/settings/integrations/DbtCloudSettingsView";
89
import { AccountSettingsView } from "packages/cloud/views/users/AccountSettingsView";
910
import { UsersSettingsView } from "packages/cloud/views/users/UsersSettingsView";
@@ -21,103 +22,10 @@ import { PageConfig, SettingsPageBase } from "pages/SettingsPage/SettingsPageBas
2122

2223
import { CloudSettingsRoutePaths } from "./routePaths";
2324

24-
export const CloudSettingsPageContent: React.FC = () => {
25-
const supportsCloudDbtIntegration = useFeature(FeatureItem.AllowDBTCloudIntegration);
26-
const supportsDataResidency = useFeature(FeatureItem.AllowChangeDataGeographies);
27-
28-
const basePageConfig = useMemo<PageConfig>(
29-
() => ({
30-
menuConfig: [
31-
{
32-
category: <FormattedMessage id="settings.userSettings" />,
33-
routes: [
34-
{
35-
path: CloudSettingsRoutePaths.Account,
36-
name: <FormattedMessage id="settings.account" />,
37-
component: AccountSettingsView,
38-
},
39-
...(isOsanoActive()
40-
? [
41-
{
42-
name: <FormattedMessage id="settings.cookiePreferences" />,
43-
path: "__COOKIE_PREFERENCES__", // Special path with no meaning, since the onClick will be triggered
44-
onClick: () => showOsanoDrawer(),
45-
},
46-
]
47-
: []),
48-
],
49-
},
50-
51-
{
52-
category: <FormattedMessage id="settings.workspaceSettings" />,
53-
routes: [
54-
{
55-
path: CloudSettingsRoutePaths.Workspace,
56-
name: <FormattedMessage id="settings.generalSettings" />,
57-
component: WorkspaceSettingsView,
58-
id: "workspaceSettings.generalSettings",
59-
},
60-
...(supportsDataResidency
61-
? [
62-
{
63-
path: CloudSettingsRoutePaths.DataResidency,
64-
name: <FormattedMessage id="settings.dataResidency" />,
65-
component: DataResidencyView,
66-
},
67-
]
68-
: []),
69-
{
70-
path: CloudSettingsRoutePaths.Source,
71-
name: <FormattedMessage id="tables.sources" />,
72-
// indicatorCount: countNewSourceVersion,
73-
component: SettingsSourcesPage,
74-
},
75-
{
76-
path: CloudSettingsRoutePaths.Destination,
77-
name: <FormattedMessage id="tables.destinations" />,
78-
// indicatorCount: countNewDestinationVersion,
79-
component: SettingsDestinationPage,
80-
},
81-
{
82-
path: CloudSettingsRoutePaths.AccessManagement,
83-
name: <FormattedMessage id="settings.accessManagementSettings" />,
84-
component: UsersSettingsView,
85-
id: "workspaceSettings.accessManagementSettings",
86-
},
87-
{
88-
path: CloudSettingsRoutePaths.Notifications,
89-
name: <FormattedMessage id="settings.notifications" />,
90-
component: NotificationPage,
91-
},
92-
],
93-
},
94-
95-
...(supportsCloudDbtIntegration
96-
? [
97-
{
98-
category: <FormattedMessage id="settings.integrationSettings" />,
99-
routes: [
100-
{
101-
path: CloudSettingsRoutePaths.DbtCloud,
102-
name: <FormattedMessage id="settings.integrationSettings.dbtCloudSettings" />,
103-
component: DbtCloudSettingsView,
104-
id: "integrationSettings.dbtCloudSettings",
105-
},
106-
],
107-
},
108-
]
109-
: []),
110-
],
111-
}),
112-
[supportsCloudDbtIntegration, supportsDataResidency]
113-
);
114-
115-
return <SettingsPageBase pageConfig={basePageConfig} />;
116-
};
117-
118-
const CloudSettingsPageContentWithOrg: React.FC<{ organizationId: string }> = ({ organizationId }) => {
119-
const organization = useOrganization(organizationId);
120-
const hasSsoOrg = organization.ssoRealm !== null;
25+
const CloudSettingsPage: React.FC = () => {
26+
const organization = useCurrentOrganizationInfo();
27+
const isSsoEnabled = organization?.sso;
28+
const canViewOrgSettings = useIntent("ViewOrganizationSettings", { organizationId: organization?.organizationId });
12129
const supportsCloudDbtIntegration = useFeature(FeatureItem.AllowDBTCloudIntegration);
12230
const supportsDataResidency = useFeature(FeatureItem.AllowChangeDataGeographies);
12331

@@ -173,7 +81,7 @@ const CloudSettingsPageContentWithOrg: React.FC<{ organizationId: string }> = ({
17381
// indicatorCount: countNewDestinationVersion,
17482
component: SettingsDestinationPage,
17583
},
176-
...(hasSsoOrg
84+
...(isSsoEnabled
17785
? [
17886
{
17987
path: `${CloudSettingsRoutePaths.Workspace}/${CloudSettingsRoutePaths.AccessManagement}`,
@@ -197,8 +105,7 @@ const CloudSettingsPageContentWithOrg: React.FC<{ organizationId: string }> = ({
197105
},
198106
],
199107
},
200-
201-
...(hasSsoOrg
108+
...(canViewOrgSettings
202109
? [
203110
{
204111
category: <FormattedMessage id="settings.organizationSettings" />,
@@ -208,12 +115,16 @@ const CloudSettingsPageContentWithOrg: React.FC<{ organizationId: string }> = ({
208115
name: <FormattedMessage id="settings.generalSettings" />,
209116
component: GeneralOrganizationSettingsPage,
210117
},
211-
{
212-
path: `${CloudSettingsRoutePaths.Organization}/${CloudSettingsRoutePaths.AccessManagement}`,
213-
name: <FormattedMessage id="settings.accessManagementSettings" />,
214-
component: OrganizationAccessManagementPage,
215-
id: "organizationSettings.accessManagementSettings",
216-
},
118+
...(isSsoEnabled
119+
? [
120+
{
121+
path: `${CloudSettingsRoutePaths.Organization}/${CloudSettingsRoutePaths.AccessManagement}`,
122+
name: <FormattedMessage id="settings.accessManagementSettings" />,
123+
component: OrganizationAccessManagementPage,
124+
id: "organizationSettings.accessManagementSettings",
125+
},
126+
]
127+
: []),
217128
],
218129
},
219130
]
@@ -235,22 +146,10 @@ const CloudSettingsPageContentWithOrg: React.FC<{ organizationId: string }> = ({
235146
: []),
236147
],
237148
}),
238-
[hasSsoOrg, supportsCloudDbtIntegration, supportsDataResidency]
149+
[canViewOrgSettings, isSsoEnabled, supportsCloudDbtIntegration, supportsDataResidency]
239150
);
240151

241-
if (!organization.ssoRealm) {
242-
return <CloudSettingsPageContent />;
243-
}
244-
245152
return <SettingsPageBase pageConfig={ssoPageConfig} />;
246153
};
247154

248-
export const CloudSettingsPage: React.FC = () => {
249-
const { organizationId } = useCurrentWorkspace();
250-
251-
if (organizationId) {
252-
return <CloudSettingsPageContentWithOrg organizationId={organizationId} />;
253-
}
254-
return <CloudSettingsPageContent />;
255-
};
256155
export default CloudSettingsPage;

airbyte-webapp/src/pages/SettingsPage/GeneralOrganizationSettingsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Card } from "components/ui/Card";
1111
import { useCurrentWorkspace, useUpdateOrganization } from "core/api";
1212
import { useOrganization } from "core/api";
1313
import { OrganizationUpdateRequestBody } from "core/request/AirbyteClient";
14-
import { useIntent } from "core/utils/rbac/intent";
14+
import { useIntent } from "core/utils/rbac";
1515
import { useNotificationService } from "hooks/services/Notification";
1616

1717
const ORGANIZATION_UPDATE_NOTIFICATION_ID = "organization-update-notification";

airbyte-webapp/src/pages/SettingsPage/GeneralWorkspaceSettingsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { FlexContainer } from "components/ui/Flex";
66

77
import { UpdateWorkspaceNameForm } from "area/workspace/components/UpdateWorkspaceNameForm";
88
import { useCurrentWorkspace } from "core/api";
9-
import { useIntent } from "core/utils/rbac/intent";
9+
import { useIntent } from "core/utils/rbac";
1010

1111
import { DeleteWorkspace } from "./components/DeleteWorkspace";
1212

airbyte-webapp/src/pages/SettingsPage/SettingsPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FormattedMessage } from "react-intl";
33

44
import { useCurrentWorkspace } from "core/api";
55
import { FeatureItem, useFeature } from "core/services/features";
6-
import { useIntent } from "core/utils/rbac/intent";
6+
import { useIntent } from "core/utils/rbac";
77
import { useGetConnectorsOutOfDate } from "hooks/services/useConnector";
88
import { SettingsRoutePaths } from "pages/routePaths";
99
import { NotificationPage } from "pages/SettingsPage/pages/NotificationPage";

airbyte-webapp/src/pages/SettingsPage/pages/AccessManagementPage/components/RoleManagementControl.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Text } from "components/ui/Text";
1111
import { useDeletePermissions, useUpdatePermissions } from "core/api";
1212
import { PermissionRead, PermissionType, PermissionUpdate } from "core/request/AirbyteClient";
1313
import { useCurrentUser } from "core/services/auth";
14-
import { useIntent } from "core/utils/rbac/intent";
14+
import { useIntent } from "core/utils/rbac";
1515
import { useConfirmationModalService } from "hooks/services/ConfirmationModal";
1616

1717
import styles from "./RoleManagementControl.module.scss";

0 commit comments

Comments
 (0)