// SPDX-License-Identifier: AGPL-3.0
import { bindDataExplorerActions } from "~/store/data-explorer/data-explorer-action";
+import { dialogActions } from '~/store/dialog/dialog-actions';
export const GROUPS_PANEL_ID = "groupsPanel";
+export const CREATE_GROUP_DIALOG = "createGroupDialog";
+export const CREATE_GROUP_FORM = "createGroupForm";
+
export const GroupsPanelActions = bindDataExplorerActions(GROUPS_PANEL_ID);
export const loadGroupsPanel = () => GroupsPanelActions.REQUEST_ITEMS();
+
+export const openCreateGroupDialog = () =>
+ dialogActions.OPEN_DIALOG({ id: CREATE_GROUP_DIALOG, data: {} });
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from 'react';
+import { compose } from "redux";
+import { reduxForm, InjectedFormProps } from 'redux-form';
+import { withDialog, WithDialogProps } from "~/store/dialog/with-dialog";
+import { FormDialog } from '~/components/form-dialog/form-dialog';
+import { CREATE_GROUP_DIALOG, CREATE_GROUP_FORM } from '~/store/groups-panel/groups-panel-actions';
+
+export const CreateGroupDialog = compose(
+ withDialog(CREATE_GROUP_DIALOG),
+ reduxForm<{}>({
+ form: CREATE_GROUP_FORM,
+ onSubmit: (data, dispatch) => { return; }
+ })
+)(
+ (props: CreateGroupDialogComponentProps) =>
+ <FormDialog
+ dialogTitle='Create a group'
+ formFields={CreateGroupFormFields}
+ submitLabel='Create'
+ {...props}
+ />
+);
+
+type CreateGroupDialogComponentProps = WithDialogProps<{}> & InjectedFormProps<{}>;
+
+const CreateGroupFormFields = (props: CreateGroupDialogComponentProps) => <span>
+ CreateGroupFormFields
+</span>;
// SPDX-License-Identifier: AGPL-3.0
import * as React from 'react';
+import { connect } from 'react-redux';
import { Grid, Button } from "@material-ui/core";
import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
import { AddIcon } from '~/components/icon/icon';
import { ResourceName } from '~/views-components/data-explorer/renderers';
import { createTree } from '~/models/tree';
-import { GROUPS_PANEL_ID } from '~/store/groups-panel/groups-panel-actions';
+import { GROUPS_PANEL_ID, openCreateGroupDialog } from '~/store/groups-panel/groups-panel-actions';
import { noop } from 'lodash/fp';
export enum GroupsPanelColumnNames {
onNewGroup: () => void;
}
-export class GroupsPanel extends React.Component<GroupsPanelProps> {
+export const GroupsPanel = connect(
+ null,
+ {
+ onNewGroup: openCreateGroupDialog
+ }
+)(
+ class GroupsPanel extends React.Component<GroupsPanelProps> {
- render() {
- return (
- <DataExplorer
- id={GROUPS_PANEL_ID}
- onRowClick={noop}
- onRowDoubleClick={noop}
- onContextMenu={noop}
- contextMenuColumn={true}
- hideColumnSelector
- actions={
- <Grid container justify='flex-end'>
- <Button
- variant="contained"
- color="primary"
- onClick={this.props.onNewGroup}>
- <AddIcon /> New group
+ render() {
+ return (
+ <DataExplorer
+ id={GROUPS_PANEL_ID}
+ onRowClick={noop}
+ onRowDoubleClick={noop}
+ onContextMenu={noop}
+ contextMenuColumn={true}
+ hideColumnSelector
+ actions={
+ <Grid container justify='flex-end'>
+ <Button
+ variant="contained"
+ color="primary"
+ onClick={this.props.onNewGroup}>
+ <AddIcon /> New group
</Button>
- </Grid>
- } />
- );
- }
-}
+ </Grid>
+ } />
+ );
+ }
+ });
import { CreateUserDialog } from '~/views-components/dialog-forms/create-user-dialog';
import { HelpApiClientAuthorizationDialog } from '~/views-components/api-client-authorizations-dialog/help-dialog';
import { GroupsPanel } from '~/views/groups-panel/groups-panel';
+import { CreateGroupDialog } from '~/views-components/dialog-forms/create-group-dialog';
type CssRules = 'root' | 'container' | 'splitter' | 'asidePanel' | 'contentWrapper' | 'content';
<CopyCollectionDialog />
<CopyProcessDialog />
<CreateCollectionDialog />
+ <CreateGroupDialog />
<CreateProjectDialog />
<CreateRepositoryDialog />
<CreateSshKeyDialog />