--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { DialogActions as MuiDialogActions } from '@material-ui/core/';
+import { StyleRulesCallback, withStyles } from '@material-ui/core';
+
+const styles: StyleRulesCallback<'root'> = theme => {
+ const margin = theme.spacing.unit * 3;
+ return {
+ root: {
+ marginRight: margin,
+ marginBottom: margin,
+ marginLeft: margin,
+ },
+ };
+};
+export const DialogActions = withStyles(styles)(MuiDialogActions);
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { dialogActions } from "~/store/dialog/dialog-actions";
+import { withDialog } from "~/store/dialog/with-dialog";
+
+export const SHARING_DIALOG_NAME = 'SHARING_DIALOG_NAME';
+
+export const openSharingDialog = (resourceUuid: string) =>
+ dialogActions.OPEN_DIALOG({ id: SHARING_DIALOG_NAME, data: resourceUuid });
+
+export const closeSharingDialog = () =>
+ dialogActions.CLOSE_DIALOG({ id: SHARING_DIALOG_NAME });
+
+export const connectSharingDialog = withDialog(SHARING_DIALOG_NAME);
import { ToggleTrashAction } from "~/views-components/context-menu/actions/trash-action";
import { toggleCollectionTrashed } from "~/store/trash/trash-actions";
import { detailsPanelActions } from '~/store/details-panel/details-panel-action';
+import { openSharingDialog } from '../../../store/sharing-dialog/sharing-dialog-actions';
export const collectionActionSet: ContextMenuActionSet = [[
{
{
icon: ShareIcon,
name: "Share",
- execute: (dispatch, resource) => {
- // add code
+ execute: (dispatch, { uuid }) => {
+ dispatch(openSharingDialog(uuid));
}
},
{
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from 'react';
+import { Dialog, DialogTitle, Button, Grid, DialogContent } from '@material-ui/core';
+import { DialogActions } from '~/components/dialog-actions/dialog-actions';
+
+
+export interface SharingDialogDataProps {
+ open: boolean;
+ saveEnabled: boolean;
+ children: React.ReactNode;
+}
+export interface SharingDialogActionProps {
+ onClose: () => void;
+ onSave: () => void;
+ onAdvanced: () => void;
+}
+export default (props: SharingDialogDataProps & SharingDialogActionProps) => {
+ const { children, open, saveEnabled, onAdvanced, onClose, onSave } = props;
+ return <Dialog
+ {...{ open, onClose }}
+ fullWidth
+ maxWidth='sm'>
+ <DialogTitle>
+ Sharing settings
+ </DialogTitle>
+ <DialogContent>
+ {children}
+ </DialogContent>
+ <DialogActions>
+ <Grid container spacing={8}>
+ <Grid item>
+ <Button
+ color='primary'
+ onClick={onAdvanced}>
+ Advanced
+ </Button>
+ </Grid>
+ <Grid item xs />
+ <Grid item>
+ <Button onClick={onClose}>
+ Close
+ </Button>
+ </Grid>
+ <Grid item>
+ <Button
+ variant='contained'
+ color='primary'
+ onClick={onSave}
+ disabled={!saveEnabled}>
+ Save
+ </Button>
+ </Grid>
+ </Grid>
+ </DialogActions>
+ </Dialog>;
+};
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { compose, Dispatch } from 'redux';
+import { connect } from 'react-redux';
+
+import { connectSharingDialog } from '~/store/sharing-dialog/sharing-dialog-actions';
+import { WithDialogProps } from '~/store/dialog/with-dialog';
+import { RootState } from '~/store/store';
+
+import SharingDialogComponent, { SharingDialogDataProps, SharingDialogActionProps } from './sharing-dialog-component';
+
+const mapStateToProps = (_: RootState, props: WithDialogProps<string>): SharingDialogDataProps => ({
+ ...props,
+ saveEnabled: false,
+ children: null,
+});
+
+const mapDispatchToProps = (_: Dispatch, props: WithDialogProps<string>): SharingDialogActionProps => ({
+ ...props,
+ onClose: props.closeDialog,
+ onSave: () => { console.log('save'); },
+ onAdvanced: () => { console.log('advanced'); },
+});
+
+export const SharingDialog = compose(
+ connectSharingDialog,
+ connect(mapStateToProps, mapDispatchToProps)
+)(SharingDialogComponent);
import { ProjectsTreePicker } from '~/views-components/projects-tree-picker/projects-tree-picker';
import { Chips } from '~/components/chips/chips';
import { ChipsInput } from '../../components/chips-input/chips-input';
+import { SharingDialog } from '~/views-components/sharing-dialog/sharing-dialog';
type CssRules = 'root' | 'container' | 'splitter' | 'asidePanel' | 'contentWrapper' | 'content';
<ProcessCommandDialog />
<RenameFileDialog />
<RichTextEditorDialog />
+ <SharingDialog />
<Snackbar />
<UpdateCollectionDialog />
<UpdateProcessDialog />