X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/3865bd152892a1ad5f85f23d085268837db8c9ee..394ebdfd13fe40a7096f484c46a353d2537f4c9a:/src/views/api-client-authorization-panel/api-client-authorization-panel-root.tsx diff --git a/src/views/api-client-authorization-panel/api-client-authorization-panel-root.tsx b/src/views/api-client-authorization-panel/api-client-authorization-panel-root.tsx index 52921b30..8f87cb26 100644 --- a/src/views/api-client-authorization-panel/api-client-authorization-panel-root.tsx +++ b/src/views/api-client-authorization-panel/api-client-authorization-panel-root.tsx @@ -2,103 +2,148 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from 'react'; -import { - StyleRulesCallback, WithStyles, withStyles, Card, CardContent, Grid, - Table, TableHead, TableRow, TableCell, TableBody, Tooltip, IconButton +import React from 'react'; +import { + StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; -import { ArvadosTheme } from '~/common/custom-theme'; -import { MoreOptionsIcon, HelpIcon } from '~/components/icon/icon'; -import { ApiClientAuthorization } from '~/models/api-client-authorization'; -import { formatDate } from '~/common/formatters'; +import { ArvadosTheme } from 'common/custom-theme'; +import { ShareMeIcon } from 'components/icon/icon'; +import { createTree } from 'models/tree'; +import { DataColumns } from 'components/data-table/data-table'; +import { SortDirection } from 'components/data-table/data-column'; +import { DataTableDefaultView } from 'components/data-table-default-view/data-table-default-view'; +import { API_CLIENT_AUTHORIZATION_PANEL_ID } from '../../store/api-client-authorizations/api-client-authorizations-actions'; +import { DataExplorer } from 'views-components/data-explorer/data-explorer'; +import { ResourcesState } from 'store/resources/resources'; +import { + CommonUuid, TokenApiClientId, TokenApiToken, TokenCreatedByIpAddress, TokenDefaultOwnerUuid, TokenExpiresAt, + TokenLastUsedAt, TokenLastUsedByIpAddress, TokenScopes, TokenUserId +} from 'views-components/data-explorer/renderers'; -type CssRules = 'root' | 'tableRow' | 'helpIconGrid' | 'tableGrid'; +type CssRules = 'root'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ root: { width: '100%', - overflow: 'auto' + } +}); + + +export enum ApiClientAuthorizationPanelColumnNames { + UUID = 'UUID', + API_CLIENT_ID = 'API Client ID', + API_TOKEN = 'API Token', + CREATED_BY_IP_ADDRESS = 'Created by IP address', + DEFAULT_OWNER_UUID = 'Default owner', + EXPIRES_AT = 'Expires at', + LAST_USED_AT = 'Last used at', + LAST_USED_BY_IP_ADDRESS = 'Last used by IP address', + SCOPES = 'Scopes', + USER_ID = 'User ID' +} + +export const apiClientAuthorizationPanelColumns: DataColumns = [ + { + name: ApiClientAuthorizationPanelColumnNames.UUID, + selected: true, + configurable: true, + sortDirection: SortDirection.NONE, + filters: createTree(), + render: uuid => + }, + { + name: ApiClientAuthorizationPanelColumnNames.API_CLIENT_ID, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => }, - helpIconGrid: { - textAlign: 'right' + { + name: ApiClientAuthorizationPanelColumnNames.API_TOKEN, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => }, - tableGrid: { - marginTop: theme.spacing.unit + { + name: ApiClientAuthorizationPanelColumnNames.CREATED_BY_IP_ADDRESS, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => }, - tableRow: { - '& td, th': { - whiteSpace: 'nowrap' - } + { + name: ApiClientAuthorizationPanelColumnNames.DEFAULT_OWNER_UUID, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => + }, + { + name: ApiClientAuthorizationPanelColumnNames.EXPIRES_AT, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => + }, + { + name: ApiClientAuthorizationPanelColumnNames.LAST_USED_AT, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => + }, + { + name: ApiClientAuthorizationPanelColumnNames.LAST_USED_BY_IP_ADDRESS, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => + }, + { + name: ApiClientAuthorizationPanelColumnNames.SCOPES, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => + }, + { + name: ApiClientAuthorizationPanelColumnNames.USER_ID, + selected: true, + configurable: true, + filters: createTree(), + render: uuid => } -}); +]; + +const DEFAULT_MESSAGE = 'Your api client authorization list is empty.'; export interface ApiClientAuthorizationPanelRootActionProps { - openRowOptions: (event: React.MouseEvent, keepService: ApiClientAuthorization) => void; - openHelpDialog: () => void; + onItemClick: (item: string) => void; + onContextMenu: (event: React.MouseEvent, item: string) => void; + onItemDoubleClick: (item: string) => void; } export interface ApiClientAuthorizationPanelRootDataProps { - apiClientAuthorizations: ApiClientAuthorization[]; - hasApiClientAuthorizations: boolean; + resources: ResourcesState; } -type ApiClientAuthorizationPanelRootProps = ApiClientAuthorizationPanelRootActionProps +type ApiClientAuthorizationPanelRootProps = ApiClientAuthorizationPanelRootActionProps & ApiClientAuthorizationPanelRootDataProps & WithStyles; export const ApiClientAuthorizationPanelRoot = withStyles(styles)( - ({ classes, hasApiClientAuthorizations, apiClientAuthorizations, openRowOptions, openHelpDialog }: ApiClientAuthorizationPanelRootProps) => - - - {hasApiClientAuthorizations && - - - - - - - - - - - - UUID - API Client ID - API Token - Created by IP address - Default owner - Expires at - Last used at - Last used by IP address - Scopes - User ID - - - - - {apiClientAuthorizations.map((apiClientAuthorizatio, index) => - - {apiClientAuthorizatio.uuid} - {apiClientAuthorizatio.apiClientId} - {apiClientAuthorizatio.apiToken} - {apiClientAuthorizatio.createdByIpAddress || '(none)'} - {apiClientAuthorizatio.defaultOwnerUuid || '(none)'} - {formatDate(apiClientAuthorizatio.expiresAt) || '(none)'} - {formatDate(apiClientAuthorizatio.lastUsedAt) || '(none)'} - {apiClientAuthorizatio.lastUsedByIpAddress || '(none)'} - {JSON.stringify(apiClientAuthorizatio.scopes)} - {apiClientAuthorizatio.userId} - - - openRowOptions(event, apiClientAuthorizatio)}> - - - - - )} - -
-
-
} -
-
+ ({ classes, onItemDoubleClick, onItemClick, onContextMenu }: ApiClientAuthorizationPanelRootProps) => +
+ } />
); \ No newline at end of file