import { ContainerRequestState } from '~/models/container-request';
import { MountKind } from '~/models/mount-types';
import { receiveTreePickerData, loadUserProject } from '~/store/tree-picker/tree-picker-actions';
-import { loadProject, loadCollection, initUserProject } from './store/tree-picker/tree-picker-actions';
+import { loadProject, loadCollection, initUserProject, initSharedProject } from './store/tree-picker/tree-picker-actions';
import { ResourceKind } from '~/models/resource';
const getBuildNumber = () => "BN-" + (process.env.REACT_APP_BUILD_NUMBER || "dev");
store.dispatch(initUserProject('testPicker1'));
store.dispatch(initUserProject('testPicker2'));
store.dispatch(initUserProject('testPicker3'));
+ store.dispatch(initSharedProject('testPicker4'));
+ store.dispatch(initSharedProject('testPicker5'));
+ store.dispatch(initSharedProject('testPicker6'));
// await store.dispatch(loadCollection(
// 'c97qk-4zz18-9sn8ygaf62chkkd',
// 'testPicker',
filters?: string;
recursive?: boolean;
includeTrash?: boolean;
+ excludeHomeProject?: boolean;
}
export interface SharedArguments extends ListArguments {
order: order ? order : undefined
};
+ const pathUrl = uuid ? `${uuid}/contents` : 'contents';
const response = await CommonResourceService.defaultResponse(
this.serverApi
- .get(this.resourceType + `${uuid}/contents`, {
+ .get(this.resourceType + pathUrl, {
params: CommonResourceService.mapKeys(_.snakeCase)(params)
}),
- this.actions,
+ this.actions,
false
);
+
const { items, ...res } = response;
const mappedItems = items.map((item: GroupContentsResource) => {
const mappedItem = TrashableResourceService.mapKeys(_.camelCase)(item);
}));
dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerId }));
};
-export const loadProject = (id: string, pickerId: string, includeCollections = false, includeFiles = false) =>
+
+interface LoadProjectParams {
+ id: string;
+ pickerId: string;
+ includeCollections?: boolean;
+ includeFiles?: boolean;
+ loadShared?: boolean;
+}
+export const loadProject = (params: LoadProjectParams) =>
async (dispatch: Dispatch, _: () => RootState, services: ServiceRepository) => {
+ const { id, pickerId, includeCollections = false, includeFiles = false, loadShared = false } = params;
dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerId }));
const filters = pipe(
- (fb: FilterBuilder) => fb.addEqual('ownerUuid', id),
- fb => includeCollections
+ (fb: FilterBuilder) => includeCollections
? fb.addIsA('uuid', [ResourceKind.PROJECT, ResourceKind.COLLECTION])
: fb.addIsA('uuid', [ResourceKind.PROJECT]),
fb => fb.getFilters(),
)(new FilterBuilder());
- const { items } = await services.groupsService.contents(id, { filters });
+ const { items } = await services.groupsService.contents(loadShared ? '' : id, { filters, excludeHomeProject: loadShared || undefined });
dispatch<any>(receiveTreePickerData<GroupContentsResource>({
id,
async (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
const uuid = services.authService.getUuid();
if (uuid) {
- dispatch(loadProject(uuid, pickerId, includeCollections, includeFiles));
+ dispatch(loadProject({id: uuid, pickerId, includeCollections, includeFiles}));
}
};
pickerId,
});
-const mapDispatchToProps = (dispatch: Dispatch, props: ProjectsTreePickerProps): PickedTreePickerProps => ({
+const mapDispatchToProps = (dispatch: Dispatch, { loadRootItem, includeCollections, includeFiles }: ProjectsTreePickerProps): PickedTreePickerProps => ({
onContextMenu: () => { return; },
toggleItemActive: (_, { id }, pickerId) => {
dispatch(treePickerActions.ACTIVATE_TREE_PICKER_NODE({ id, pickerId }));
dispatch<any>(
data.kind === ResourceKind.COLLECTION
? loadCollection(id, pickerId)
- : loadProject(id, pickerId, props.includeCollections, props.includeFiles)
+ : loadProject({ id, pickerId, includeCollections, includeFiles })
);
- } else if (!('type' in data) && props.loadRootItem) {
- props.loadRootItem(item as TreeItem<ProjectsTreePickerRootItem>, pickerId, props.includeCollections, props.includeFiles);
+ } else if (!('type' in data) && loadRootItem) {
+ loadRootItem(item as TreeItem<ProjectsTreePickerRootItem>, pickerId, includeCollections, includeFiles);
}
} else if (status === TreeItemStatus.LOADED) {
dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerId }));
import { connect } from 'react-redux';
import { ProjectsTreePicker, ProjectsTreePickerProps } from '~/views-components/projects-tree-picker/projects-tree-picker';
import { Dispatch } from 'redux';
-import { loadUserProject } from '~/store/tree-picker/tree-picker-actions';
-import { ShareIcon } from '~/components/icon/icon';
+import { ShareMeIcon } from '~/components/icon/icon';
+import { loadProject } from '../../store/tree-picker/tree-picker-actions';
-export const UserProjectsTreePicker = connect(() => ({
- rootItemIcon: ShareIcon,
+export const SharedProjectsTreePicker = connect(() => ({
+ rootItemIcon: ShareMeIcon,
}), (dispatch: Dispatch): Pick<ProjectsTreePickerProps, 'loadRootItem'> => ({
loadRootItem: (_, pickerId, includeCollections, includeFiles) => {
- dispatch<any>(loadUserProject(pickerId, includeCollections, includeFiles));
+ dispatch<any>(loadProject({ id: 'Shared with me', pickerId, includeCollections, includeFiles, loadShared: true }));
},
}))(ProjectsTreePicker);
\ No newline at end of file
import { GroupContentsResource } from '~/services/groups-service/groups-service';
import { ProjectsTreePicker } from '~/views-components/projects-tree-picker/projects-tree-picker';
import { UserProjectsTreePicker } from '~/views-components/projects-tree-picker/user-projects-tree-picker';
+import { SharedProjectsTreePicker } from '~/views-components/projects-tree-picker/shared-projects-tree-picker';
type CssRules = 'root' | 'container' | 'splitter' | 'asidePanel' | 'contentWrapper' | 'content';
<UserProjectsTreePicker pickerId='testPicker1'/>
<UserProjectsTreePicker pickerId='testPicker2' includeCollections/>
<UserProjectsTreePicker pickerId='testPicker3' includeCollections includeFiles/>
+ <SharedProjectsTreePicker pickerId='testPicker4'/>
+ <SharedProjectsTreePicker pickerId='testPicker5' includeCollections/>
+ <SharedProjectsTreePicker pickerId='testPicker6' includeCollections includeFiles/>
<Switch>
<Route path={Routes.PROJECTS} component={ProjectPanel} />
<Route path={Routes.COLLECTIONS} component={CollectionPanel} />