@schemavaults/auth-ui 0.13.9 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ApiServersCard/api_servers_card.d.ts +15 -0
- package/dist/components/ApiServersCard/api_servers_card.js +33 -3
- package/dist/components/ApiServersCard/api_servers_card.js.map +1 -1
- package/dist/components/ApiServersTable/ApiServerRowActions.js +20 -6
- package/dist/components/ApiServersTable/ApiServerRowActions.js.map +1 -1
- package/dist/components/ApiServersTable/ApiServersTable.d.ts +12 -1
- package/dist/components/ApiServersTable/ApiServersTable.js +14 -15
- package/dist/components/ApiServersTable/ApiServersTable.js.map +1 -1
- package/dist/components/ApiServersTable/ApiServersTableConfigContext.d.ts +6 -0
- package/dist/components/ApiServersTable/ApiServersTableConfigContext.js +1 -0
- package/dist/components/ApiServersTable/ApiServersTableConfigContext.js.map +1 -1
- package/dist/components/ApiServersTable/columns.js +3 -1
- package/dist/components/ApiServersTable/columns.js.map +1 -1
- package/dist/components/ApiServersTable/useApiServersList.d.ts +6 -0
- package/dist/components/AppsCard/apps_card.d.ts +15 -0
- package/dist/components/AppsCard/apps_card.js +36 -5
- package/dist/components/AppsCard/apps_card.js.map +1 -1
- package/dist/components/AppsTable/AppsTable.d.ts +12 -1
- package/dist/components/AppsTable/AppsTable.js +14 -8
- package/dist/components/AppsTable/AppsTable.js.map +1 -1
- package/dist/components/AppsTable/columns.d.ts +1 -1
- package/dist/components/AppsTable/columns.js +5 -3
- package/dist/components/AppsTable/columns.js.map +1 -1
- package/dist/components/AppsTable/frontend_app_actions.d.ts +2 -1
- package/dist/components/AppsTable/frontend_app_actions.js +19 -3
- package/dist/components/AppsTable/frontend_app_actions.js.map +1 -1
- package/dist/components/CreateApiServerDialog/CreateApiServerDialog.d.ts +7 -2
- package/dist/components/CreateApiServerDialog/CreateApiServerDialog.js +2 -4
- package/dist/components/CreateApiServerDialog/CreateApiServerDialog.js.map +1 -1
- package/dist/components/CreateApiServerDialog/CreateApiServerForm.d.ts +7 -3
- package/dist/components/CreateApiServerDialog/CreateApiServerForm.js +8 -4
- package/dist/components/CreateApiServerDialog/CreateApiServerForm.js.map +1 -1
- package/dist/components/CreateAppDialog/CreateAppDialog.d.ts +7 -2
- package/dist/components/CreateAppDialog/CreateAppDialog.js +2 -4
- package/dist/components/CreateAppDialog/CreateAppDialog.js.map +1 -1
- package/dist/components/CreateAppDialog/CreateAppForm.d.ts +7 -3
- package/dist/components/CreateAppDialog/CreateAppForm.js +8 -11
- package/dist/components/CreateAppDialog/CreateAppForm.js.map +1 -1
- package/dist/components/CreateAppDialog/requested-ownership-fields.d.ts +9 -0
- package/dist/components/CreateAppDialog/requested-ownership-fields.js +26 -0
- package/dist/components/CreateAppDialog/requested-ownership-fields.js.map +1 -0
- package/dist/components/OwnerTypeFilter/OwnerTypeFilter.d.ts +39 -0
- package/dist/components/OwnerTypeFilter/OwnerTypeFilter.js +65 -0
- package/dist/components/OwnerTypeFilter/OwnerTypeFilter.js.map +1 -0
- package/dist/components/OwnerTypeFilter/index.d.ts +2 -0
- package/dist/components/OwnerTypeFilter/index.js +2 -0
- package/dist/components/OwnerTypeFilter/index.js.map +1 -0
- package/dist/components/ResourceOwnerLabel/ResourceOwnerLabel.d.ts +20 -0
- package/dist/components/ResourceOwnerLabel/ResourceOwnerLabel.js +52 -0
- package/dist/components/ResourceOwnerLabel/ResourceOwnerLabel.js.map +1 -0
- package/dist/components/ResourceOwnerLabel/index.d.ts +4 -0
- package/dist/components/ResourceOwnerLabel/index.js +3 -0
- package/dist/components/ResourceOwnerLabel/index.js.map +1 -0
- package/dist/components/ResourceOwnerLabel/useCanManageListedResource.d.ts +32 -0
- package/dist/components/ResourceOwnerLabel/useCanManageListedResource.js +44 -0
- package/dist/components/ResourceOwnerLabel/useCanManageListedResource.js.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
2
|
import type { ListApiServersQueryType } from "@schemavaults/app-definitions";
|
|
3
|
+
import type { OwnerTypeFilterValue } from "../OwnerTypeFilter";
|
|
3
4
|
import { type PreloadedApiServersTableDataWithDomainRefs } from "../ApiServersTable";
|
|
4
5
|
export interface ApiServersCardProps {
|
|
5
6
|
cardTitle?: string;
|
|
@@ -11,6 +12,20 @@ export interface ApiServersCardProps {
|
|
|
11
12
|
uuid: () => string;
|
|
12
13
|
showConnectAppToApi?: boolean;
|
|
13
14
|
isOrgOwner?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* For the "accessible" query: ids of the organizations in which the
|
|
17
|
+
* viewer is an owner/admin (decides which rows expose management
|
|
18
|
+
* actions).
|
|
19
|
+
*/
|
|
20
|
+
managedOrganizationIds?: readonly string[];
|
|
21
|
+
/** Client-side filter on each row's resolved owner type. */
|
|
22
|
+
ownerTypeFilter?: OwnerTypeFilterValue;
|
|
23
|
+
/**
|
|
24
|
+
* Whether the card offers API server creation at all (default true).
|
|
25
|
+
* Pages set this to false when the `allow_user_owned_resource_creation`
|
|
26
|
+
* server setting is disabled for a non-admin viewer.
|
|
27
|
+
*/
|
|
28
|
+
canCreate?: boolean;
|
|
14
29
|
}
|
|
15
30
|
export declare function ApiServersCard(props: ApiServersCardProps): ReactElement;
|
|
16
31
|
export default ApiServersCard;
|
|
@@ -2,13 +2,43 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cn, } from "@schemavaults/ui";
|
|
5
|
+
import { useCurrentUser } from "@schemavaults/auth-react-provider";
|
|
5
6
|
import { ApiServersTable, clearUseApiServersCache, } from "../ApiServersTable";
|
|
6
7
|
import CreateApiServerDialog, { CreateApiServerDialogOpenDispatchContext, } from "../CreateApiServerDialog";
|
|
7
8
|
import CreateApiServerDomainDialog, { CreateApiServerDomainDialogOpenContext, CreateApiServerDomainDialogOpenDispatchContext, } from "../CreateApiServerDomainDialog";
|
|
8
9
|
import { useAuthUiOwnerOrganizationId } from "../OwnerOrganizationProvider";
|
|
9
10
|
import ConnectAppToApiDialog, { ConnectAppToApiDialogOpenDispatchContext, } from "../ConnectAppToApiDialog";
|
|
11
|
+
/**
|
|
12
|
+
* @description Who an API server created from a card of the given query
|
|
13
|
+
* type belongs to: platform-owned from the admin "all" list,
|
|
14
|
+
* organization-owned from an organization page, user-owned from the
|
|
15
|
+
* "owned" (your API servers) card. Returns null when the card cannot
|
|
16
|
+
* create API servers.
|
|
17
|
+
*/
|
|
18
|
+
function resolveCreateOwnershipForCard(queryType, organization_id, platformOrganizationId, currentUserUid) {
|
|
19
|
+
switch (queryType) {
|
|
20
|
+
case "all":
|
|
21
|
+
return { owner_type: "platform" };
|
|
22
|
+
case "org":
|
|
23
|
+
return organization_id && organization_id !== platformOrganizationId
|
|
24
|
+
? { owner_type: "organization", owner_organization_id: organization_id }
|
|
25
|
+
: { owner_type: "platform" };
|
|
26
|
+
case "owned":
|
|
27
|
+
case "accessible":
|
|
28
|
+
// The "accessible" page creates personal API servers;
|
|
29
|
+
// organization-owned ones are created from the organization's page
|
|
30
|
+
// and platform-owned ones from the admin console.
|
|
31
|
+
return currentUserUid
|
|
32
|
+
? { owner_type: "user", owner_uid: currentUserUid }
|
|
33
|
+
: null;
|
|
34
|
+
default:
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
10
38
|
export function ApiServersCard(props) {
|
|
11
39
|
const ownerOrganizationId = useAuthUiOwnerOrganizationId();
|
|
40
|
+
const currentUser = useCurrentUser();
|
|
41
|
+
const createOwnership = resolveCreateOwnershipForCard(props.queryType, props.organization_id, ownerOrganizationId, currentUser?.uid);
|
|
12
42
|
const cardTitle = props.cardTitle ?? "API Servers";
|
|
13
43
|
const cardDescription = props.cardDescription ??
|
|
14
44
|
"View and manage backend API servers accessible from client applications.";
|
|
@@ -16,9 +46,9 @@ export function ApiServersCard(props) {
|
|
|
16
46
|
const [createApiServerDialogOpen, setCreateApiServerDialogOpen] = useState(false);
|
|
17
47
|
const [connectAppToApiDialogOpen, setConnectAppToApiDialogOpen] = useState(false);
|
|
18
48
|
const [isAddApiServerDomainDialogOpen, setAddApiServerDomainDialogOpen] = useState(false);
|
|
19
|
-
return (_jsx(CreateApiServerDialogOpenDispatchContext.Provider, { value: setCreateApiServerDialogOpen, children: _jsx(ConnectAppToApiDialogOpenDispatchContext.Provider, { value: setConnectAppToApiDialogOpen, children: _jsx(CreateApiServerDomainDialogOpenDispatchContext.Provider, { value: setAddApiServerDomainDialogOpen, children: _jsxs(CreateApiServerDomainDialogOpenContext.Provider, { value: isAddApiServerDomainDialogOpen, children: [_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: cardTitle }), _jsx(CardDescription, { children: cardDescription })] }), _jsx(CardContent, { children: _jsx(ApiServersTable, { queryType: props.queryType, organization_id: props.organization_id, preloaded: props.preloaded, showConnectAppToApi: props.showConnectAppToApi, isOrgOwner: props.isOrgOwner }) }), _jsx(CardFooter, { children: _jsx("div", { className: "flex flex-row items-start justify-start gap-2" }) })] }), _jsx(CreateApiServerDialog, { clearApiServersCache: clearUseApiServersCache,
|
|
20
|
-
|
|
21
|
-
|
|
49
|
+
return (_jsx(CreateApiServerDialogOpenDispatchContext.Provider, { value: setCreateApiServerDialogOpen, children: _jsx(ConnectAppToApiDialogOpenDispatchContext.Provider, { value: setConnectAppToApiDialogOpen, children: _jsx(CreateApiServerDomainDialogOpenDispatchContext.Provider, { value: setAddApiServerDomainDialogOpen, children: _jsxs(CreateApiServerDomainDialogOpenContext.Provider, { value: isAddApiServerDomainDialogOpen, children: [_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: cardTitle }), _jsx(CardDescription, { children: cardDescription })] }), _jsx(CardContent, { children: _jsx(ApiServersTable, { queryType: props.queryType, organization_id: props.organization_id, preloaded: props.preloaded, showConnectAppToApi: props.showConnectAppToApi, isOrgOwner: props.isOrgOwner, managedOrganizationIds: props.managedOrganizationIds, ownerTypeFilter: props.ownerTypeFilter, canCreate: props.canCreate ?? true }) }), _jsx(CardFooter, { children: _jsx("div", { className: "flex flex-row items-start justify-start gap-2" }) })] }), (props.canCreate ?? true) && createOwnership && (_jsx(CreateApiServerDialog, { clearApiServersCache: clearUseApiServersCache, ownership: createOwnership, open: createApiServerDialogOpen, onOpenChange: setCreateApiServerDialogOpen, uuid: props.uuid })), (props.queryType === "all" || props.showConnectAppToApi) && (_jsx(ConnectAppToApiDialog, { open: connectAppToApiDialogOpen, onOpenChange: setConnectAppToApiDialogOpen })), (props.queryType === "all" ||
|
|
50
|
+
props.queryType === "owned" ||
|
|
51
|
+
props.queryType === "accessible" ||
|
|
22
52
|
(props.queryType === "org" && props.isOrgOwner)) && (_jsx(CreateApiServerDomainDialog, { open: typeof isAddApiServerDomainDialogOpen === "string", onOpenChange: (val) => {
|
|
23
53
|
if (!val) {
|
|
24
54
|
setAddApiServerDomainDialogOpen(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_servers_card.js","sourceRoot":"","sources":["../../../src/components/ApiServersCard/api_servers_card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAqB,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,EACT,EAAE,GACH,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"api_servers_card.js","sourceRoot":"","sources":["../../../src/components/ApiServersCard/api_servers_card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { ConnectAppToApiDialog } from "../ConnectAppToApiDialog";
|
|
|
11
11
|
import { DeleteApiServerDialog } from "../DeleteApiServerDialog";
|
|
12
12
|
import { CreateApiServerDomainDialogOpenDispatchContext } from "../CreateApiServerDomainDialog";
|
|
13
13
|
import { ApiServersTableConfigContext } from "./ApiServersTableConfigContext";
|
|
14
|
+
import { useCanManageListedResource } from "../ResourceOwnerLabel/useCanManageListedResource";
|
|
14
15
|
const menuItemClassname = cn("flex flex-row flex-nowrap gap-2 items-center justify-start");
|
|
15
16
|
const menuItemIconClassname = cn("h-4 w-4");
|
|
16
17
|
export function ApiServerRowActions({ api, }) {
|
|
@@ -19,16 +20,29 @@ export function ApiServerRowActions({ api, }) {
|
|
|
19
20
|
const admin = useAdmin();
|
|
20
21
|
const [connectDialogOpen, setConnectDialogOpen] = useState(false);
|
|
21
22
|
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
|
22
|
-
const { showConnectAppToApi, isOrgOwner, queryType } = useContext(ApiServersTableConfigContext);
|
|
23
|
+
const { showConnectAppToApi, isOrgOwner, queryType, managedOrganizationIds } = useContext(ApiServersTableConfigContext);
|
|
23
24
|
const openAddApiServerDomainDialog = useContext(CreateApiServerDomainDialogOpenDispatchContext);
|
|
24
25
|
// The row's own 'hardcoded' flag identifies the auth server's built-in API
|
|
25
26
|
// definition; comparing ids against a client-bundled constant would be
|
|
26
27
|
// blind to the env-var-driven app id in white-label deployments.
|
|
27
|
-
|
|
28
|
+
// Whether the viewer may manage this particular API server: global
|
|
29
|
+
// admins, an organization owner/admin on an org page, the owning user of
|
|
30
|
+
// a user-owned API server, or (on the "accessible" list) an owner/admin
|
|
31
|
+
// of the owning organization. The server enforces every action.
|
|
32
|
+
const canManageApi = useCanManageListedResource({
|
|
33
|
+
resource: api,
|
|
34
|
+
queryType,
|
|
35
|
+
isOrgOwner,
|
|
36
|
+
managedOrganizationIds,
|
|
37
|
+
});
|
|
38
|
+
const isDeleteDisabled = api.hardcoded || !canManageApi;
|
|
28
39
|
// Hardcoded API servers have no database row for a domain to reference;
|
|
29
40
|
// their domains come from the server's environment configuration.
|
|
30
|
-
const showAddDomain = !api.hardcoded &&
|
|
31
|
-
|
|
41
|
+
const showAddDomain = !api.hardcoded && canManageApi;
|
|
42
|
+
// Connecting an app requires owning the API server too, so only offer it
|
|
43
|
+
// on rows the viewer manages (or wherever the card asked for it, e.g. the
|
|
44
|
+
// admin list).
|
|
45
|
+
const showConnectForRow = showConnectAppToApi && (admin || canManageApi);
|
|
32
46
|
return (_jsxs(_Fragment, { children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", className: "h-8 w-8 p-0", "data-testid": "api-server-actions-button", children: [_jsx("span", { className: "sr-only", children: "Open menu" }), _jsx(MoreHorizontal, { className: "h-4 w-4" })] }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsx(DropdownMenuLabel, { children: "Actions" }), _jsx(DropdownMenuItem, { asChild: true, className: menuItemClassname, children: _jsxs(Link, { href: `/apis/${api_server_id}`, children: [_jsx(Eye, { className: menuItemIconClassname }), " View API details"] }) }), _jsxs(DropdownMenuItem, { onClick: async (e) => {
|
|
33
47
|
e.preventDefault();
|
|
34
48
|
try {
|
|
@@ -52,7 +66,7 @@ export function ApiServerRowActions({ api, }) {
|
|
|
52
66
|
description: `You can now paste: '${api_server_id}'`,
|
|
53
67
|
});
|
|
54
68
|
return;
|
|
55
|
-
}, className: menuItemClassname, children: [_jsx(ClipboardCopy, { className: menuItemIconClassname }), " Copy API Server ID"] }), !api.hardcoded && (_jsx(Link, { href: `/apis/${api_server_id}/jwks-access-keys`, className: "hover:cursor-pointer", children: _jsxs(DropdownMenuItem, { className: menuItemClassname, children: [_jsx(Key, { className: menuItemIconClassname }), " Manage Access Keys"] }) })),
|
|
69
|
+
}, className: menuItemClassname, children: [_jsx(ClipboardCopy, { className: menuItemIconClassname }), " Copy API Server ID"] }), !api.hardcoded && (_jsx(Link, { href: `/apis/${api_server_id}/jwks-access-keys`, className: "hover:cursor-pointer", children: _jsxs(DropdownMenuItem, { className: menuItemClassname, children: [_jsx(Key, { className: menuItemIconClassname }), " Manage Access Keys"] }) })), showConnectForRow && (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: (e) => {
|
|
56
70
|
e.preventDefault();
|
|
57
71
|
setConnectDialogOpen(true);
|
|
58
72
|
}, className: menuItemClassname, children: [_jsx(PlugZap, { className: menuItemIconClassname }), " Connect App to this API"] })] })), showAddDomain && (_jsxs(DropdownMenuItem, { onClick: () => {
|
|
@@ -61,6 +75,6 @@ export function ApiServerRowActions({ api, }) {
|
|
|
61
75
|
}, className: menuItemClassname, children: [_jsx(EarthLock, { className: menuItemIconClassname }), " Add domain"] })), !isDeleteDisabled && (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: (e) => {
|
|
62
76
|
e.preventDefault();
|
|
63
77
|
setDeleteDialogOpen(true);
|
|
64
|
-
}, className: cn(menuItemClassname, "text-destructive"), children: [_jsx(Trash, { className: menuItemIconClassname }), " Delete API Server"] })] }))] })] }),
|
|
78
|
+
}, className: cn(menuItemClassname, "text-destructive"), children: [_jsx(Trash, { className: menuItemIconClassname }), " Delete API Server"] })] }))] })] }), showConnectForRow && (_jsx(ConnectAppToApiDialog, { open: connectDialogOpen, onOpenChange: setConnectDialogOpen, preselectedApiServerId: api_server_id })), !isDeleteDisabled && (_jsx(DeleteApiServerDialog, { api_server_id: api_server_id, api_server_name: api.api_server_name, open: deleteDialogOpen, onOpenChange: setDeleteDialogOpen }))] }));
|
|
65
79
|
}
|
|
66
80
|
//# sourceMappingURL=ApiServerRowActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiServerRowActions.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/ApiServerRowActions.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EACL,aAAa,EACb,SAAS,EACT,GAAG,EACH,GAAG,EACH,cAAc,EACd,OAAO,EACP,KAAK,GACN,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,8CAA8C,EAAE,MAAM,0CAA0C,CAAC;AAC1G,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiServerRowActions.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/ApiServerRowActions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
2
|
import type { ListApiServersQueryType } from "@schemavaults/app-definitions";
|
|
3
3
|
import type { PreloadedApiServersTableDataWithDomainRefs } from "./preloaded_api_servers_table_data";
|
|
4
|
+
import { type OwnerTypeFilterValue } from "../OwnerTypeFilter";
|
|
4
5
|
export interface ApiServersDatatableProps {
|
|
5
6
|
queryType: ListApiServersQueryType;
|
|
6
7
|
organization_id?: string;
|
|
7
8
|
preloaded?: PreloadedApiServersTableDataWithDomainRefs | undefined;
|
|
8
9
|
showConnectAppToApi?: boolean;
|
|
9
10
|
isOrgOwner?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* For the "accessible" query: ids of the organizations in which the
|
|
13
|
+
* viewer is an owner/admin, used to decide which rows expose management
|
|
14
|
+
* actions.
|
|
15
|
+
*/
|
|
16
|
+
managedOrganizationIds?: readonly string[];
|
|
17
|
+
/** Client-side filter on each row's resolved owner type. */
|
|
18
|
+
ownerTypeFilter?: OwnerTypeFilterValue;
|
|
19
|
+
/** Whether the "Create API" button is offered (default true). */
|
|
20
|
+
canCreate?: boolean;
|
|
10
21
|
}
|
|
11
|
-
export declare function ApiServersTable({ queryType, organization_id, preloaded, showConnectAppToApi, isOrgOwner, }: ApiServersDatatableProps): ReactElement;
|
|
22
|
+
export declare function ApiServersTable({ queryType, organization_id, preloaded, showConnectAppToApi, isOrgOwner, managedOrganizationIds, ownerTypeFilter, canCreate, }: ApiServersDatatableProps): ReactElement;
|
|
12
23
|
export default ApiServersTable;
|
|
@@ -9,12 +9,17 @@ import { useAuth } from "@schemavaults/auth-react-provider";
|
|
|
9
9
|
import { CreateApiServerDialogOpenDispatchContext, CreateApiServerDialogTrigger, } from "../CreateApiServerDialog";
|
|
10
10
|
import { ConnectAppToApiDialogOpenDispatchContext, ConnectAppToApiDialogTrigger, } from "../ConnectAppToApiDialog";
|
|
11
11
|
import { ApiServersTableConfigContext } from "./ApiServersTableConfigContext";
|
|
12
|
-
|
|
12
|
+
import { useOwnerTypeFilteredResources, } from "../OwnerTypeFilter";
|
|
13
|
+
function ApiServersTableHeaderButtons({ queryType, showConnectAppToApi, isOrgOwner, canCreate, }) {
|
|
13
14
|
const onOpenChangeCreateApi = useContext(CreateApiServerDialogOpenDispatchContext);
|
|
14
15
|
const onOpenChangeConnectAppToApi = useContext(ConnectAppToApiDialogOpenDispatchContext);
|
|
15
|
-
return (_jsxs(_Fragment, { children: [
|
|
16
|
+
return (_jsxs(_Fragment, { children: [canCreate &&
|
|
17
|
+
(queryType === "all" ||
|
|
18
|
+
queryType === "owned" ||
|
|
19
|
+
queryType === "accessible" ||
|
|
20
|
+
(queryType === "org" && isOrgOwner)) && (_jsx(CreateApiServerDialogTrigger, { onOpenChange: onOpenChangeCreateApi })), (queryType === "all" || showConnectAppToApi) && (_jsx(ConnectAppToApiDialogTrigger, { onOpenChange: onOpenChangeConnectAppToApi }))] }));
|
|
16
21
|
}
|
|
17
|
-
export function ApiServersTable({ queryType, organization_id, preloaded, showConnectAppToApi, isOrgOwner, }) {
|
|
22
|
+
export function ApiServersTable({ queryType, organization_id, preloaded, showConnectAppToApi, isOrgOwner, managedOrganizationIds, ownerTypeFilter, canCreate = true, }) {
|
|
18
23
|
const auth = useAuth();
|
|
19
24
|
const authClient = auth.ready ? auth.client.current : undefined;
|
|
20
25
|
const apis = useApiServersList({
|
|
@@ -23,28 +28,22 @@ export function ApiServersTable({ queryType, organization_id, preloaded, showCon
|
|
|
23
28
|
organization_id,
|
|
24
29
|
authClient,
|
|
25
30
|
});
|
|
26
|
-
const { isLoading
|
|
31
|
+
const { isLoading } = apis;
|
|
32
|
+
const data = useOwnerTypeFilteredResources(apis.data, ownerTypeFilter);
|
|
27
33
|
const columns = useMemo(() => {
|
|
28
34
|
return getApiServersTableColumns(preloaded);
|
|
29
35
|
}, [preloaded]);
|
|
30
36
|
const HeaderButtons = useMemo(() => {
|
|
31
37
|
return function ApiServersTableHeaderButtonsWithQueryType() {
|
|
32
|
-
return _jsx(ApiServersTableHeaderButtons, { queryType: queryType, showConnectAppToApi: showConnectAppToApi, isOrgOwner: isOrgOwner });
|
|
38
|
+
return (_jsx(ApiServersTableHeaderButtons, { queryType: queryType, showConnectAppToApi: showConnectAppToApi, isOrgOwner: isOrgOwner, canCreate: canCreate }));
|
|
33
39
|
};
|
|
34
|
-
}, [queryType, showConnectAppToApi, isOrgOwner]);
|
|
35
|
-
// Assert that 'owner_organization_id' field is present from server
|
|
36
|
-
useMemo(() => {
|
|
37
|
-
if (apis.data && Array.isArray(apis.data)) {
|
|
38
|
-
if (!apis.data.every((api_server_definition) => api_server_definition.owner_organization_id)) {
|
|
39
|
-
throw new TypeError("Received API server definition that is missing 'owner_organization_id' field!");
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}, [apis.data]);
|
|
40
|
+
}, [queryType, showConnectAppToApi, isOrgOwner, canCreate]);
|
|
43
41
|
const contextValue = useMemo(() => ({
|
|
44
42
|
showConnectAppToApi: showConnectAppToApi ?? false,
|
|
45
43
|
isOrgOwner: isOrgOwner ?? false,
|
|
46
44
|
queryType,
|
|
47
|
-
|
|
45
|
+
managedOrganizationIds,
|
|
46
|
+
}), [showConnectAppToApi, isOrgOwner, queryType, managedOrganizationIds]);
|
|
48
47
|
if (!data && isLoading) {
|
|
49
48
|
return (_jsx("div", { className: "min-h-48 w-full flex items-center justify-center", children: _jsx(Loader2, { className: "h-12 w-12 animate-spin" }) }));
|
|
50
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiServersTable.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/ApiServersTable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAW,UAAU,EAAE,OAAO,EAAqB,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAKtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EACL,wCAAwC,EACxC,4BAA4B,GAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,wCAAwC,EACxC,4BAA4B,GAC7B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiServersTable.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/ApiServersTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,11 @@ export interface ApiServersTableConfig {
|
|
|
3
3
|
showConnectAppToApi: boolean;
|
|
4
4
|
isOrgOwner: boolean;
|
|
5
5
|
queryType?: ListApiServersQueryType;
|
|
6
|
+
/**
|
|
7
|
+
* For the "accessible" query: ids of the organizations in which the
|
|
8
|
+
* viewer is an owner/admin (decides which rows expose management
|
|
9
|
+
* actions).
|
|
10
|
+
*/
|
|
11
|
+
managedOrganizationIds?: readonly string[];
|
|
6
12
|
}
|
|
7
13
|
export declare const ApiServersTableConfigContext: import("react").Context<ApiServersTableConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiServersTableConfigContext.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/ApiServersTableConfigContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiServersTableConfigContext.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/ApiServersTableConfigContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AActC,MAAM,CAAC,MAAM,4BAA4B,GACvC,aAAa,CAAwB;IACnC,mBAAmB,EAAE,KAAK;IAC1B,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,SAAS;IACpB,sBAAsB,EAAE,SAAS;CAClC,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import Link from "next/link";
|
|
|
4
4
|
import { Checkbox } from "@schemavaults/ui";
|
|
5
5
|
import { ApiServerRowActions } from "./ApiServerRowActions";
|
|
6
6
|
import ApiServerDomainsList from "./ApiServerDomainsList";
|
|
7
|
+
import { ResourceOwnerLabel } from "../ResourceOwnerLabel";
|
|
7
8
|
export function getApiServersTableColumns(preloaded) {
|
|
8
9
|
const columns = [
|
|
9
10
|
{
|
|
@@ -40,7 +41,8 @@ export function getApiServersTableColumns(preloaded) {
|
|
|
40
41
|
{
|
|
41
42
|
id: "owner_organization_id",
|
|
42
43
|
accessorKey: "owner_organization_id",
|
|
43
|
-
header: "Owner
|
|
44
|
+
header: "Owner",
|
|
45
|
+
cell: ({ row }) => (_jsx(ResourceOwnerLabel, { resource: row.original })),
|
|
44
46
|
},
|
|
45
47
|
{
|
|
46
48
|
id: "domains",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/columns.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/components/ApiServersTable/columns.tsx"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,10 @@ export declare function useApiServersList({ queryType, initialData, organization
|
|
|
16
16
|
created_at: number;
|
|
17
17
|
public: boolean;
|
|
18
18
|
hardcoded: boolean;
|
|
19
|
+
owner_type?: "platform" | "organization" | "user" | undefined;
|
|
19
20
|
owner_organization_id?: string | null | undefined;
|
|
21
|
+
owner_uid?: string | null | undefined;
|
|
22
|
+
created_by?: string | null | undefined;
|
|
20
23
|
}[], any, {
|
|
21
24
|
fallbackData: {
|
|
22
25
|
api_server_id: string;
|
|
@@ -25,7 +28,10 @@ export declare function useApiServersList({ queryType, initialData, organization
|
|
|
25
28
|
created_at: number;
|
|
26
29
|
public: boolean;
|
|
27
30
|
hardcoded: boolean;
|
|
31
|
+
owner_type?: "platform" | "organization" | "user" | undefined;
|
|
28
32
|
owner_organization_id?: string | null | undefined;
|
|
33
|
+
owner_uid?: string | null | undefined;
|
|
34
|
+
created_by?: string | null | undefined;
|
|
29
35
|
}[] | undefined;
|
|
30
36
|
}>;
|
|
31
37
|
export default useApiServersList;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
2
|
import { type PreloadedAppsTableDataWithDomainRefs } from "../AppsTable";
|
|
3
3
|
import type { ListAppsQueryType } from "@schemavaults/app-definitions";
|
|
4
|
+
import type { OwnerTypeFilterValue } from "../OwnerTypeFilter";
|
|
4
5
|
export interface AppsCardProps {
|
|
5
6
|
cardTitle?: string;
|
|
6
7
|
cardDescription?: string;
|
|
@@ -10,6 +11,20 @@ export interface AppsCardProps {
|
|
|
10
11
|
organization_id?: string;
|
|
11
12
|
uuid: () => string;
|
|
12
13
|
isOrgOwner?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* For the "accessible" query: ids of the organizations in which the
|
|
16
|
+
* viewer is an owner/admin (decides which rows expose management
|
|
17
|
+
* actions).
|
|
18
|
+
*/
|
|
19
|
+
managedOrganizationIds?: readonly string[];
|
|
20
|
+
/** Client-side filter on each row's resolved owner type. */
|
|
21
|
+
ownerTypeFilter?: OwnerTypeFilterValue;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the card offers app creation at all (default true). Pages set
|
|
24
|
+
* this to false when the `allow_user_owned_resource_creation` server
|
|
25
|
+
* setting is disabled for a non-admin viewer.
|
|
26
|
+
*/
|
|
27
|
+
canCreate?: boolean;
|
|
13
28
|
}
|
|
14
29
|
export declare function AppsCard(props: AppsCardProps): ReactElement;
|
|
15
30
|
export default AppsCard;
|
|
@@ -3,14 +3,49 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cn, } from "@schemavaults/ui";
|
|
5
5
|
import { AppsTable, clearUseAppsListCache, } from "../AppsTable";
|
|
6
|
+
import { useCurrentUser } from "@schemavaults/auth-react-provider";
|
|
6
7
|
import CreateAppDialog, { CreateAppDialogOpenDispatchContext, } from "../CreateAppDialog";
|
|
7
8
|
import CreateAppDomainDialog, { CreateAppDomainDialogOpenContext, CreateAppDomainDialogOpenDispatchContext, } from "../CreateAppDomainDialog";
|
|
8
9
|
import AuthorizeClientApplicationDialog, { AuthorizeClientApplicationDialogOpenDispatchContext, } from "../AuthorizeClientApplicationDialog";
|
|
9
10
|
import { useAuthUiFriendlyName } from "../FriendlyNameProvider";
|
|
10
11
|
import { useAuthUiOwnerOrganizationId } from "../OwnerOrganizationProvider";
|
|
12
|
+
/**
|
|
13
|
+
* @description Who an app created from a card of the given query type
|
|
14
|
+
* belongs to: platform-owned from the admin "all" list, organization-owned
|
|
15
|
+
* from an organization page, user-owned from the "owned" (your
|
|
16
|
+
* applications) card. Returns null when the card cannot create apps.
|
|
17
|
+
*/
|
|
18
|
+
function resolveCreateOwnershipForCard(queryType, organization_id, platformOrganizationId, currentUserUid) {
|
|
19
|
+
switch (queryType) {
|
|
20
|
+
case "all":
|
|
21
|
+
return { owner_type: "platform" };
|
|
22
|
+
case "org":
|
|
23
|
+
return organization_id && organization_id !== platformOrganizationId
|
|
24
|
+
? { owner_type: "organization", owner_organization_id: organization_id }
|
|
25
|
+
: { owner_type: "platform" };
|
|
26
|
+
case "owned":
|
|
27
|
+
case "accessible":
|
|
28
|
+
// The "accessible" page creates personal apps; organization-owned
|
|
29
|
+
// apps are created from the organization's page and platform-owned
|
|
30
|
+
// ones from the admin console.
|
|
31
|
+
return currentUserUid
|
|
32
|
+
? { owner_type: "user", owner_uid: currentUserUid }
|
|
33
|
+
: null;
|
|
34
|
+
default:
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
11
38
|
export function AppsCard(props) {
|
|
12
39
|
const friendlyName = useAuthUiFriendlyName();
|
|
13
40
|
const ownerOrganizationId = useAuthUiOwnerOrganizationId();
|
|
41
|
+
const currentUser = useCurrentUser();
|
|
42
|
+
const createOwnership = resolveCreateOwnershipForCard(props.queryType, props.organization_id, ownerOrganizationId, currentUser?.uid);
|
|
43
|
+
const canCreateApps = (props.canCreate ?? true) &&
|
|
44
|
+
!!createOwnership &&
|
|
45
|
+
(props.queryType === "all" ||
|
|
46
|
+
props.queryType === "owned" ||
|
|
47
|
+
props.queryType === "accessible" ||
|
|
48
|
+
(props.queryType === "org" && !!props.isOrgOwner));
|
|
14
49
|
const cardTitle = props.cardTitle ?? "Applications";
|
|
15
50
|
const cardDescription = props.cardDescription ??
|
|
16
51
|
`View and manage which applications are allowed to access ${friendlyName} APIs on your behalf.`;
|
|
@@ -18,11 +53,7 @@ export function AppsCard(props) {
|
|
|
18
53
|
const [createAppDialogOpen, setCreateAppDialogOpen] = useState(false);
|
|
19
54
|
const [isAddAppDomainDialogOpen, setAddAppDomainDialogOpen] = useState(false);
|
|
20
55
|
const [authorizeAppDialogOpen, setAuthorizeAppDialogOpen] = useState(false);
|
|
21
|
-
return (_jsx(CreateAppDialogOpenDispatchContext.Provider, { value: setCreateAppDialogOpen, children: _jsx(AuthorizeClientApplicationDialogOpenDispatchContext.Provider, { value: setAuthorizeAppDialogOpen, children: _jsx(CreateAppDomainDialogOpenDispatchContext.Provider, { value: setAddAppDomainDialogOpen, children: _jsxs(CreateAppDomainDialogOpenContext.Provider, { value: isAddAppDomainDialogOpen, children: [_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: cardTitle }), _jsx(CardDescription, { children: cardDescription })] }), _jsx(CardContent, { children: _jsx(AppsTable, { queryType: props.queryType, preloaded: props.preloaded, organization_id: props.organization_id, isOrgOwner: props.isOrgOwner }) }), _jsx(CardFooter, { children: _jsx("div", { className: "flex flex-row items-start justify-start gap-2" }) })] }), _jsxs(_Fragment, { children: [(props.queryType === "
|
|
22
|
-
(props.queryType === "org" && props.isOrgOwner)) && (_jsx(CreateAppDialog, { clearFrontendAppsCache: clearUseAppsListCache, owner_organization_id: props.queryType === "all"
|
|
23
|
-
? ownerOrganizationId
|
|
24
|
-
: props.organization_id, open: createAppDialogOpen, onOpenChange: setCreateAppDialogOpen, uuid: props.uuid })), props.queryType === "authorized" && (_jsx(AuthorizeClientApplicationDialog, { open: authorizeAppDialogOpen, onOpenChange: setAuthorizeAppDialogOpen })), (props.queryType === "all" ||
|
|
25
|
-
(props.queryType === "org" && props.isOrgOwner)) && (_jsx(CreateAppDomainDialog, { open: typeof isAddAppDomainDialogOpen === "string", onOpenChange: (val) => {
|
|
56
|
+
return (_jsx(CreateAppDialogOpenDispatchContext.Provider, { value: setCreateAppDialogOpen, children: _jsx(AuthorizeClientApplicationDialogOpenDispatchContext.Provider, { value: setAuthorizeAppDialogOpen, children: _jsx(CreateAppDomainDialogOpenDispatchContext.Provider, { value: setAddAppDomainDialogOpen, children: _jsxs(CreateAppDomainDialogOpenContext.Provider, { value: isAddAppDomainDialogOpen, children: [_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: cardTitle }), _jsx(CardDescription, { children: cardDescription })] }), _jsx(CardContent, { children: _jsx(AppsTable, { queryType: props.queryType, preloaded: props.preloaded, organization_id: props.organization_id, isOrgOwner: props.isOrgOwner, managedOrganizationIds: props.managedOrganizationIds, ownerTypeFilter: props.ownerTypeFilter, canCreate: props.canCreate ?? true }) }), _jsx(CardFooter, { children: _jsx("div", { className: "flex flex-row items-start justify-start gap-2" }) })] }), _jsxs(_Fragment, { children: [canCreateApps && createOwnership && (_jsx(CreateAppDialog, { clearFrontendAppsCache: clearUseAppsListCache, ownership: createOwnership, open: createAppDialogOpen, onOpenChange: setCreateAppDialogOpen, uuid: props.uuid })), props.queryType === "authorized" && (_jsx(AuthorizeClientApplicationDialog, { open: authorizeAppDialogOpen, onOpenChange: setAuthorizeAppDialogOpen })), canCreateApps && (_jsx(CreateAppDomainDialog, { open: typeof isAddAppDomainDialogOpen === "string", onOpenChange: (val) => {
|
|
26
57
|
if (!val) {
|
|
27
58
|
setAddAppDomainDialogOpen(false);
|
|
28
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps_card.js","sourceRoot":"","sources":["../../../src/components/AppsCard/apps_card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAqB,MAAM,OAAO,CAAC;AACpD,OAAO,EACL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,EACT,EAAE,GACH,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"apps_card.js","sourceRoot":"","sources":["../../../src/components/AppsCard/apps_card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
2
|
import type { ListAppsQueryType } from "@schemavaults/app-definitions";
|
|
3
3
|
import type { PreloadedAppsTableDataWithDomainRefs } from "./preloaded_apps_table_data";
|
|
4
|
+
import { type OwnerTypeFilterValue } from "../OwnerTypeFilter";
|
|
4
5
|
export interface AppsDatatableProps {
|
|
5
6
|
queryType: ListAppsQueryType;
|
|
6
7
|
preloaded?: PreloadedAppsTableDataWithDomainRefs | undefined;
|
|
7
8
|
organization_id?: string;
|
|
8
9
|
isOrgOwner?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* For the "accessible" query: ids of the organizations in which the
|
|
12
|
+
* viewer is an owner/admin, used to decide which rows expose management
|
|
13
|
+
* actions.
|
|
14
|
+
*/
|
|
15
|
+
managedOrganizationIds?: readonly string[];
|
|
16
|
+
/** Client-side filter on each row's resolved owner type. */
|
|
17
|
+
ownerTypeFilter?: OwnerTypeFilterValue;
|
|
18
|
+
/** Whether the "Create app" button is offered (default true). */
|
|
19
|
+
canCreate?: boolean;
|
|
9
20
|
}
|
|
10
|
-
export declare function AppsTable({ queryType, preloaded, organization_id, isOrgOwner, }: AppsDatatableProps): ReactElement;
|
|
21
|
+
export declare function AppsTable({ queryType, preloaded, organization_id, isOrgOwner, managedOrganizationIds, ownerTypeFilter, canCreate, }: AppsDatatableProps): ReactElement;
|
|
11
22
|
export default AppsTable;
|
|
@@ -8,11 +8,16 @@ import { CreateAppDialogTrigger } from "../CreateAppDialog";
|
|
|
8
8
|
import { AuthorizeClientApplicationDialogTrigger } from "../AuthorizeClientApplicationDialog";
|
|
9
9
|
import { Loader2 } from "lucide-react";
|
|
10
10
|
import { useAuth } from "@schemavaults/auth-react-provider";
|
|
11
|
-
|
|
11
|
+
import { useOwnerTypeFilteredResources, } from "../OwnerTypeFilter";
|
|
12
|
+
function AppsTableHeaderButtons({ queryType, isOrgOwner, canCreate, }) {
|
|
12
13
|
return (_jsxs(_Fragment, { children: [queryType === "authorized" && ( // From a user's list of authorized apps, allow them to add more authorized apps
|
|
13
|
-
_jsx(AuthorizeClientApplicationDialogTrigger, {})),
|
|
14
|
+
_jsx(AuthorizeClientApplicationDialogTrigger, {})), canCreate &&
|
|
15
|
+
(queryType === "all" ||
|
|
16
|
+
queryType === "owned" ||
|
|
17
|
+
queryType === "accessible" ||
|
|
18
|
+
(queryType === "org" && isOrgOwner)) && _jsx(CreateAppDialogTrigger, {})] }));
|
|
14
19
|
}
|
|
15
|
-
export function AppsTable({ queryType, preloaded, organization_id, isOrgOwner, }) {
|
|
20
|
+
export function AppsTable({ queryType, preloaded, organization_id, isOrgOwner, managedOrganizationIds, ownerTypeFilter, canCreate = true, }) {
|
|
16
21
|
const auth = useAuth();
|
|
17
22
|
const authClient = auth.ready ? auth.client.current : undefined;
|
|
18
23
|
const apps = useAppsList({
|
|
@@ -21,15 +26,16 @@ export function AppsTable({ queryType, preloaded, organization_id, isOrgOwner, }
|
|
|
21
26
|
organization_id,
|
|
22
27
|
authClient,
|
|
23
28
|
});
|
|
24
|
-
const { isLoading
|
|
29
|
+
const { isLoading } = apps;
|
|
30
|
+
const data = useOwnerTypeFilteredResources(apps.data, ownerTypeFilter);
|
|
25
31
|
const columns = useMemo(() => {
|
|
26
|
-
return getAppsTableColumns(queryType, preloaded, isOrgOwner);
|
|
27
|
-
}, [queryType, preloaded, isOrgOwner]);
|
|
32
|
+
return getAppsTableColumns(queryType, preloaded, isOrgOwner, managedOrganizationIds);
|
|
33
|
+
}, [queryType, preloaded, isOrgOwner, managedOrganizationIds]);
|
|
28
34
|
const HeaderButtons = useMemo(() => {
|
|
29
35
|
return function AppsTableHeaderButtonsWithQueryType() {
|
|
30
|
-
return (_jsx(AppsTableHeaderButtons, { queryType: queryType, isOrgOwner: isOrgOwner }));
|
|
36
|
+
return (_jsx(AppsTableHeaderButtons, { queryType: queryType, isOrgOwner: isOrgOwner, canCreate: canCreate }));
|
|
31
37
|
};
|
|
32
|
-
}, [queryType, isOrgOwner]);
|
|
38
|
+
}, [queryType, isOrgOwner, canCreate]);
|
|
33
39
|
if (!data && isLoading) {
|
|
34
40
|
return (_jsx("div", { className: "min-h-48 w-full flex items-center justify-center", children: _jsx(Loader2, { className: "h-12 w-12 animate-spin" }) }));
|
|
35
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppsTable.js","sourceRoot":"","sources":["../../../src/components/AppsTable/AppsTable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,EAA8B,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"AppsTable.js","sourceRoot":"","sources":["../../../src/components/AppsTable/AppsTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ColumnDef } from "@schemavaults/ui";
|
|
2
2
|
import type { ListAppsQueryType, SchemaVaultsApp } from "@schemavaults/app-definitions";
|
|
3
3
|
import type { PreloadedAppsTableDataWithDomainRefs } from "./preloaded_apps_table_data";
|
|
4
|
-
export declare function getAppsTableColumns(queryType: ListAppsQueryType, preloaded?: PreloadedAppsTableDataWithDomainRefs, isOrgOwner?: boolean): ColumnDef<SchemaVaultsApp>[];
|
|
4
|
+
export declare function getAppsTableColumns(queryType: ListAppsQueryType, preloaded?: PreloadedAppsTableDataWithDomainRefs, isOrgOwner?: boolean, managedOrganizationIds?: readonly string[]): ColumnDef<SchemaVaultsApp>[];
|