diff --git a/src/actions/dataset.ts b/src/actions/dataset.ts index fdfc8ab50a3ed976d7eefbe09002e31c3be24aef..f771662be27409b662af693c7ecef0741e840fdd 100644 --- a/src/actions/dataset.ts +++ b/src/actions/dataset.ts @@ -14,7 +14,6 @@ import {log} from 'utilities/debug'; import { CREATE_DATASET, RECEIVE_DATASET, RECEIVE_DATASET_PAGE, ADD_CREATOR_TO_DATASET, REMOVE_CREATOR_FROM_DATASET, UPDATE_DATASET_CREATOR, ADD_LOCATION, RECEIVE_LOCATION, REMOVE_LOCATION } from 'constants/datasets'; import {addFilterCode} from 'actions/filterCode'; -import {cleanFilters} from 'utilities'; import steps from 'ui/pages/dataset/dataset-stepper/steps'; import { navigateTo } from 'actions/navigation'; import * as _ from 'lodash'; @@ -44,13 +43,14 @@ export const applyDatasetFilters = (filters?: any) => (dispatch) => { dispatch(listDatasetsRequest(undefined, undefined, undefined, filters)); }; -function listMyDatasets(page?, results?, sortBy?, filter?, order?) { +function listMyDatasets(page?, results?, sortBy?, filter?: string | IDatasetFilter, order?) { return (dispatch, getState) => { const token = getState().login.access_token; return DatasetService.listMyDatasets(token, page, results, sortBy, filter, order) .then((paged) => { - dispatch(receiveDatasetPage(paged, page, results, sortBy, filter, order)); + dispatch(receiveDatasetPage(paged, page, results, sortBy, paged.filter, order)); + return dispatch(addFilterCode(paged.filterCode, paged.filter)); }) .catch((error) => { log('Error', error); @@ -89,8 +89,7 @@ function listDatasetsByCodeRequest(page?, results?, sortBy?, filterCode?, order? return DatasetService.listDatasetsByCode(token, page, results, sortBy, filterCode, order) .then((paged) => { - const filter = cleanFilters(paged.filter, ['published']); - dispatch(receiveDatasetPage(paged, page, results, sortBy, filter as IDatasetFilter, order)); + dispatch(receiveDatasetPage(paged, page, results, sortBy, paged.filter, order)); return dispatch(addFilterCode(paged.filterCode, paged.filter)); }) .catch((error) => { diff --git a/src/actions/descriptorList.ts b/src/actions/descriptorList.ts index d2d7f2277f9290d7aa2eaf1eb62ed4606eb8cc5b..87d106c288e6c86fbc48bfd7b1e66f77717ea757 100644 --- a/src/actions/descriptorList.ts +++ b/src/actions/descriptorList.ts @@ -54,7 +54,7 @@ export const loadDescriptorList = (uuid: string, success?: (d) => any, fail?: (e }; // List current user's descriptor lists -export const listMyDescriptorLists = (page?, results?, sortBy?, filter?, order?) => (dispatch, getState) => { +export const listMyDescriptorLists = (page?, results?, sortBy?, filter?: string | IDescriptorListFilter, order?) => (dispatch, getState) => { log('Loading my descriptor lists'); const token = getState().login.access_token; @@ -63,7 +63,8 @@ export const listMyDescriptorLists = (page?, results?, sortBy?, filter?, order?) return DescriptorListService.listMyDescriptorLists(token, page, results, sortBy, filter, order) // receive the current descriptor list .then((descriptorLists) => { - return dispatch(receiveDescriptorLists(descriptorLists, page, results, sortBy, filter, order)); + dispatch(receiveDescriptorLists(descriptorLists, page, results, sortBy, descriptorLists.filter, order)); + return dispatch(addFilterCode(descriptorLists.filterCode, descriptorLists.filter)); }).catch((error) => { log(`Error loading my descriptor lists`, error); }); diff --git a/src/actions/descriptors.ts b/src/actions/descriptors.ts index fdf394bb1e78304cadec1bee3e3c6b97f4ac51aa..0a9820d2e3a659ce9765ec79012d60789fba2f8b 100644 --- a/src/actions/descriptors.ts +++ b/src/actions/descriptors.ts @@ -125,7 +125,7 @@ export const deleteDescriptor = (descriptor: Descriptor) => (dispatch, getState) }); }; -export function listMyDescriptors(page?, results?, sortBy?, filter?, order?) { +export function listMyDescriptors(page?, results?, sortBy?, filter?: string | IDescriptorFilter, order?) { return (dispatch, getState) => { const token = getState().login.access_token; @@ -134,7 +134,8 @@ export function listMyDescriptors(page?, results?, sortBy?, filter?, order?) { return DescriptorService.listMyDescriptors(token, page, results, sortBy, filter, order) .then((paged) => { dereferenceReferences(paged.content, 'owner', (o) => new Partner(o)); - return dispatch(receiveDescriptorPage(paged, page, results, sortBy, filter, order)); + dispatch(receiveDescriptorPage(paged, page, results, sortBy, paged.filter, order)); + return dispatch(addFilterCode(paged.filterCode, paged.filter)); }) .catch((error) => { log('Error', error); diff --git a/src/reducers/partner.ts b/src/reducers/partner.ts index 1e015688d1f952a4cb6501b3c272d790136758d9..b6f72b4c7c1742a8d4e9976f3d04eb99fd247f57 100644 --- a/src/reducers/partner.ts +++ b/src/reducers/partner.ts @@ -1,7 +1,6 @@ import * as update from 'immutability-helper'; import { IReducerAction } from 'model/common.model'; import { Partner } from 'model/partner.model'; -import {log} from 'utilities/debug'; import { CREATE_PARTNER, GET_PARTNER, RECEIVE_PARTNER, LIST_PARTNERS, RECEIVE_PARTNERS, @@ -48,7 +47,7 @@ export default function partner(state = INITIAL_STATE, action: IReducerAction = // set myPartners case RECEIVE_MY_PARTNERLIST: { - log('My partners', action.payload); + // log('My partners', action.payload); return update(state, { myPartners: { $set: action.payload }, }); @@ -56,7 +55,7 @@ export default function partner(state = INITIAL_STATE, action: IReducerAction = // set the paged to whatever came in case RECEIVE_PARTNERS: { - log('Marking loaded pagedQuery', action.payload); + // log('Marking loaded pagedQuery', action.payload); return update(state, { loading: { $set: null }, paged: { $set: action.payload.paged }, diff --git a/src/service/DatasetService.ts b/src/service/DatasetService.ts index eece979e95e34d1dbd9235a4400c520fb93f5c66..a32dedb20f1067f9a67d519a1fb5c82bfcc44e60 100644 --- a/src/service/DatasetService.ts +++ b/src/service/DatasetService.ts @@ -1,6 +1,7 @@ import authenticatedRequest from 'utilities/requestUtils'; import { dereferenceReferences } from 'utilities'; import {log} from 'utilities/debug'; +import { stringify } from 'query-string'; import { Page } from 'model/common.model'; import { Dataset, IDatasetFilter, AccessionIdentifier } from 'model/dataset.model'; @@ -14,12 +15,19 @@ import { export class DatasetService { // List my datasets - public static listMyDatasets(token: string, page: number = 0, results: number = 10, sortBy: string = 'title', filter: IDatasetFilter = {}, order: string = 'ASC'): Promise> { - + public static listMyDatasets(token: string, page: number = 0, results: number = 10, sortBy: string = 'title', filter: string | IDatasetFilter = {}, order: string = 'ASC'): Promise> { + const query = stringify({ + p: page, + l: results, + d: order, + s: sortBy, + f: typeof filter === 'string' ? filter : null, + }); return authenticatedRequest(token, { - url: `${MY_DATASETS_LIST_URL}?p=${page}&l=${results}${order ? '&d=' + order : ''}${sortBy ? '&s=' + sortBy : ''}`, + url: `${MY_DATASETS_LIST_URL}?${query}`, method: 'POST', - data: filter, + headers: {'Content-Type': 'application/json'}, + data: typeof filter === 'string' ? null : filter, }) .then(({ data }) => new Page(data, (d) => new Dataset(d))) .then((paged) => { @@ -46,6 +54,7 @@ export class DatasetService { } // List published datasets by filter code + // TODO Remove public static listDatasetsByCode(token: string, page: number = 0, results: number = 10, sortBy: string = 'title', filterCode: string, order: string = 'ASC'): Promise> { const code = filterCode ? `/${filterCode}` : ''; diff --git a/src/service/DescriptorListService.ts b/src/service/DescriptorListService.ts index 4b9f0765897f35a79e52bf0c2d679af8f63ac5ef..678dd517c99dd2cac7567a65b80aac45b093d933 100644 --- a/src/service/DescriptorListService.ts +++ b/src/service/DescriptorListService.ts @@ -1,6 +1,7 @@ import authenticatedRequest from 'utilities/requestUtils'; import { dereferenceReferences } from 'utilities'; import {log} from 'utilities/debug'; +import { stringify } from 'query-string'; import { MY_LIST_DESCRIPTORSLISTS_URL, GET_DESCRIPTORLIST_URL, REMOVE_DESCRIPTORLIST_URL, @@ -16,16 +17,22 @@ import { Page } from 'model/common.model'; export class DescriptorListService { // Lists my descriptor lists - public static listMyDescriptorLists(token: string, page: number = 0, results: number = 10, sortBy: string = 'lastModifiedDate', filter: IDescriptorListFilter = {}, order: string = 'ASC'): Promise> { - - const sortParam = sortBy ? `&s=${sortBy}` : ''; + public static listMyDescriptorLists(token: string, page: number = 0, results: number = 10, sortBy: string = 'lastModifiedDate', filter: string | IDescriptorListFilter = {}, order: string = 'ASC'): Promise> { + + const query = stringify({ + p: page, + l: results, + d: order, + s: sortBy, + f: typeof filter === 'string' ? filter : null, + }); + // console.log('Query', query); return authenticatedRequest(token, { - url: `${MY_LIST_DESCRIPTORSLISTS_URL}?p=${page}&l=${results}&d=${order}${sortParam}`, + url: `${MY_LIST_DESCRIPTORSLISTS_URL}?${query}`, method: 'POST', - data: { - ...filter, - }, + headers: {'Content-Type': 'application/json'}, + data: typeof filter === 'string' ? null : filter, }) .then(({ data }) => new Page(data, (dl) => new DescriptorList(dl))) .then((paged) => { @@ -54,6 +61,7 @@ export class DescriptorListService { } // Lists published descriptor lists by filter code + // TODO Remove public static listDescriptorListsByCode(token: string, page: number = 0, results: number = 10, sortBy: string = 'title', filterCode: string, order: string = 'ASC'): Promise> { const sortParam = sortBy ? `&s=${sortBy}` : ''; const code = filterCode ? `/${filterCode}` : ''; diff --git a/src/service/DescriptorService.ts b/src/service/DescriptorService.ts index e160c4989848983a7bc1845cf13ab357d9d45c17..b6858ef8ac066742ace03918f908fa6b62ca6be2 100644 --- a/src/service/DescriptorService.ts +++ b/src/service/DescriptorService.ts @@ -1,6 +1,7 @@ import { dereferenceReferences } from 'utilities'; import authenticatedRequest from 'utilities/requestUtils'; import { log } from 'utilities/debug'; +import { stringify } from 'query-string'; import { MY_DESCRIPTORS_LIST_URL, LIST_DESCRIPTORS_URL, GET_DESCRIPTOR_URL, CREATE_DESCRIPTOR_URL, COPY_DESCRIPTOR_URL, @@ -25,12 +26,21 @@ import { Page } from 'model/common.model'; export class DescriptorService { // Lists my descriptors - public static listMyDescriptors(token: string, page: number = 0, results: number = 10, sortBy?: string, filter: IDescriptorFilter = {}, order?: string): Promise> { - + public static listMyDescriptors(token: string, page: number = 0, results: number = 10, sortBy?: string, filter: string | IDescriptorFilter = {}, order?: string): Promise> { + + const query = stringify({ + p: page, + l: results, + d: order, + s: sortBy, + f: typeof filter === 'string' ? filter : null, + }); + // console.log('Query', query); return authenticatedRequest(token, { - url: `${MY_DESCRIPTORS_LIST_URL}?p=${page}&l=${results}${order ? '&d=' + order : ''}${sortBy ? '&s=' + sortBy : ''}`, + url: `${MY_DESCRIPTORS_LIST_URL}?${query}`, method: 'POST', - data: { + headers: {'Content-Type': 'application/json'}, + data: typeof filter === 'string' ? null : { ...filter, }, }) @@ -59,6 +69,7 @@ export class DescriptorService { } // Lists published descriptors by filter code + // TODO Remove public static listDescriptorsByCode(token: string, page: number = 0, results: number = 50, sortBy?: string, filterCode?: string, order?: string): Promise> { const code = filterCode ? `/${filterCode}` : ''; diff --git a/src/ui/App.tsx b/src/ui/App.tsx index b6745a246d0dccf970f82f3caded29947d765e16..95e823dcce594fd4e579d6b75d493acfd028e850 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import {connect} from 'react-redux'; import {bindActionCreators} from 'redux'; -import {log} from 'utilities/debug'; import {logoutRequest, loginAppRequest} from 'actions/login'; import {setAppMounted} from 'actions/appMounted'; @@ -52,7 +51,6 @@ class App extends React.Component { public render() { const { login, logoutRequest, loginAppRequest, route: { routes } } = this.props; - log('Rendering App view'); return (
diff --git a/src/ui/catalog/descriptor/Filters.tsx b/src/ui/catalog/descriptor/Filters.tsx index 55e06a661770c39b1d607a85274a55a5333f02fc..ba674ea11e8a5bf0741a7d0e416e7ed0623899be 100644 --- a/src/ui/catalog/descriptor/Filters.tsx +++ b/src/ui/catalog/descriptor/Filters.tsx @@ -11,6 +11,7 @@ import CropFilter from 'ui/catalog/crop/CropFilter'; import {DESCRIPTOR_FILTER_FORM} from 'constants/filter'; import {Descriptor} from 'model/descriptor.model'; import DescriptorListPicker from './DescriptorListPicker'; +import PartnerFilter from 'ui/catalog/partner/PartnerFilter'; // // @@ -25,6 +26,7 @@ import DescriptorListPicker from './DescriptorListPicker'; const DescriptorFilters = ({handleSubmit, initialize, ...other}) => ( + diff --git a/src/ui/catalog/partner/PartnerFilter.tsx b/src/ui/catalog/partner/PartnerFilter.tsx new file mode 100644 index 0000000000000000000000000000000000000000..0f13fefba3e99d15d74d1249b8a32c04d5dd1427 --- /dev/null +++ b/src/ui/catalog/partner/PartnerFilter.tsx @@ -0,0 +1,32 @@ +import * as React from 'react'; +import { Field } from 'redux-form'; + +import SelectPartner from './SelectPartner'; + +interface IPartnerFilter extends React.ClassAttributes { + name: string; + label: string; + className?: string; +} + +class PartnerFilter extends React.Component { + + public render() { + const { name , label, className, ...other } = this.props; + return ( +
+ +
+ ); + } +} + +export default PartnerFilter; diff --git a/src/ui/catalog/partner/SelectPartner.tsx b/src/ui/catalog/partner/SelectPartner.tsx index 2c424bfa074693ab4259181837fc6c0382d7be2d..44fdee496be475a946d9b4271ac8bfee1aa4089b 100644 --- a/src/ui/catalog/partner/SelectPartner.tsx +++ b/src/ui/catalog/partner/SelectPartner.tsx @@ -1,9 +1,12 @@ import * as React from 'react'; import {withStyles} from 'material-ui/styles'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; import {log} from 'utilities/debug'; import {Partner} from 'model/partner.model'; +import {loadPartners, loadMyPartners} from 'actions/partner'; import Input from 'material-ui/Input'; import FormControl from 'ui/common/forms/FormControl'; @@ -22,43 +25,77 @@ const styles = (theme) => ({ interface ISelectPartnerProps extends React.ClassAttributes { classes: any; input: any; - partners: Partner[]; label: string; editable?: boolean; required?: boolean; meta?: any; + loadPartners: any; + loadMyPartners: any; + partners: Partner[]; + onlyMine?: boolean; // list only my partners + useUuid?: boolean; // toggle this if input contains the UUID instead of Partner object + allowNull?: boolean; // add blank option (null) to selection + multiple?: boolean; // allow multiple } class SelectPartner extends React.Component { + public constructor(props: any) { + super(props); + } + + public componentWillMount() { + const { onlyMine, loadPartners, loadMyPartners, partners } = this.props; + // console.log(`SelectPartner`, onlyMine, partners); + if (! partners || partners.length === 0) { + onlyMine ? loadMyPartners() : loadPartners(); + } + } + public handleChange = ({target: {value}}) => { - const { editable, input, partners } = this.props; - log(`Partner selection editable=${editable}`, value); - const p = partners.find((p) => p.uuid === value); - if (editable === undefined || editable) { - input.onChange(p); + const { partners, editable, input, useUuid, multiple } = this.props; + value = value === '' ? null : value; + + log(`Partner selection editable=${editable} value=${value}`, value); + if (useUuid) { + if (multiple) { + input.onChange(value ? [ value ] : null); + } else { + input.onChange(value); + } + } else { + const p = partners.find((p) => p.uuid === value); + if (editable === undefined || editable) { + if (multiple) { + input.onChange(p ? [ p ] : null); + } else { + input.onChange(p); + } + } } } public render() { - const {classes, input, partners, label, editable, required, meta } = this.props; + const { partners, classes, input, label, editable, required, meta, useUuid, allowNull, multiple } = this.props; const allowsEdit = editable === undefined || editable; + const val = input && input.value ? + (multiple ? input.value[0] : input.value) : null; if (! allowsEdit) { return ( - + ); } - // console.log(`Partner req=${required}`, meta); - // + return ( - @@ -66,4 +103,16 @@ class SelectPartner extends React.Component { } } -export default withStyles(styles)(SelectPartner); + +const mapStateToProps = (state, ownProps) => ({ + partners: ownProps.onlyMine ? + state.partner.myPartners || null + : state.partner.paged && state.partner.paged.content || null, +}); + +const mapDispatchToProps = (dispatch) => bindActionCreators({ + loadPartners, + loadMyPartners, +}, dispatch); + +export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(SelectPartner)); diff --git a/src/ui/common/PagedLoader.tsx b/src/ui/common/PagedLoader.tsx index 2973f254335ba83eb28ef2cf44672640d0f0af32..6429251e36ceb4c86e2cc45ae283f5c1d73a7b49 100644 --- a/src/ui/common/PagedLoader.tsx +++ b/src/ui/common/PagedLoader.tsx @@ -31,7 +31,7 @@ export default class PagedLoader extends React.Component, any> { } public componentWillReceiveProps(nextProps) { - log('nextProps', nextProps); + // log('nextProps', nextProps); const { paged: { number: pageNumber, content: newContent } } = nextProps; if (newContent) { @@ -81,12 +81,12 @@ export default class PagedLoader extends React.Component, any> { if (! list || list.length === 0) { return null; } - log(`Rendering ${list.length} items`); + // log(`Rendering ${list.length} items`); const inTable = colSpan ? true : false; const visibilityOffset = (roughItemHeight && roughItemHeight || 50) * 10; const myLoadingIndicator = loadingIndicator || ; - log(`Visibility offset bottom: ${-visibilityOffset}`); + // log(`Visibility offset bottom: ${-visibilityOffset}`); const result = [ ...list.map((item: T, index) => itemRenderer(item, index)), @@ -102,7 +102,7 @@ export default class PagedLoader extends React.Component, any> {
), ]; - log('Done rendering'); + // log('Done rendering'); return result; } } diff --git a/src/ui/common/filter/FiltersBlock.tsx b/src/ui/common/filter/FiltersBlock.tsx index 4970f5fec2d95e7c21919575e7a85501d339ffe1..79f9d77ee48bb9f4c228922ee234e06dba2df3ee 100644 --- a/src/ui/common/filter/FiltersBlock.tsx +++ b/src/ui/common/filter/FiltersBlock.tsx @@ -34,9 +34,10 @@ const FiltersBlock = ({ title, children, handleSubmit, onSubmit, initialize, cla const processSubmit = handleSubmit((data) => { showSnackbar('Applying filters...'); - console.log('Submitting', data); + const clean = cleanFilters(data); + log('Submitting filters', clean); scrollToTop(); - return onSubmit(cleanFilters(data)); + return onSubmit(clean); }); return ( diff --git a/src/ui/common/forms/FormControl.tsx b/src/ui/common/forms/FormControl.tsx index f60c7cb69f5e7e5b9df0ee194207ae7f84b6e23b..61bc21629f6c99c4225c33cd02117da122f93bc7 100644 --- a/src/ui/common/forms/FormControl.tsx +++ b/src/ui/common/forms/FormControl.tsx @@ -14,7 +14,7 @@ interface IProps { } const styles = (theme) => { - console.log(theme); + // console.log(theme); return ({ helper: { paddingTop: '0.5rem', diff --git a/src/ui/common/markdown/MarkdownField.tsx b/src/ui/common/markdown/MarkdownField.tsx index 41d6124a9cbb18a6d0d7a6167c2412d4d3f13e48..e5831b9e68bcfe3a26deba9a90aef59de3ce234f 100644 --- a/src/ui/common/markdown/MarkdownField.tsx +++ b/src/ui/common/markdown/MarkdownField.tsx @@ -18,14 +18,14 @@ class MarkdownField extends React.Component { } public render() { - const {basicMarkdown, input, label, required, meta, meta: {touched, error}, ...custom} = this.props; + const {basicMarkdown, input, label, required, meta, meta: {touched, error}} = this.props; const basic: boolean = basicMarkdown === undefined || null ? false : basicMarkdown; return (
{ (basic || !this.state.previewMode) ? - +
{ ! basic && Preview Markdown } { basic ? 'Basic markdown supported: * **' : 'Full markdown supported' } diff --git a/src/ui/common/snackbar/Snackbar.tsx b/src/ui/common/snackbar/Snackbar.tsx index c5d1e3c9e7cdef18f801e057943df9bd94e368f7..87dc0422160ab054787026e377acb36df61839c8 100644 --- a/src/ui/common/snackbar/Snackbar.tsx +++ b/src/ui/common/snackbar/Snackbar.tsx @@ -22,13 +22,13 @@ class Snackbar extends React.Component { public componentWillMount() { const { snack } = this.props; - console.log('Snack willMount', snack); + // console.log('Snack willMount', snack); this.pushSnack(snack); } public componentWillReceiveProps(nextProps) { const { snack } = nextProps; - console.log('Snack willReceive', snack); + // console.log('Snack willReceive', snack); this.pushSnack(snack); } diff --git a/src/ui/pages/dataset/c/Filters.tsx b/src/ui/pages/dataset/c/Filters.tsx index d4aa4bba9e9ee5321910c0210b507b40e9cb4b10..e90d146f181fe911c1a6105401783320e339ffba 100644 --- a/src/ui/pages/dataset/c/Filters.tsx +++ b/src/ui/pages/dataset/c/Filters.tsx @@ -9,12 +9,14 @@ import StringFilter from 'ui/common/filter/StringFilter'; import StringArrFilter from 'ui/common/filter/StringArrFilter'; import TextFilter from 'ui/common/filter/TextFilter'; import CropFilter from 'ui/catalog/crop/CropFilter'; +import PartnerFilter from 'ui/catalog/partner/PartnerFilter'; // const DatasetFilters = ({handleSubmit, initialize, ...other}) => ( + diff --git a/src/ui/pages/dataset/dataset-stepper/steps/basic-info/BasicInfoForm.tsx b/src/ui/pages/dataset/dataset-stepper/steps/basic-info/BasicInfoForm.tsx index 01d919e9ed6f9e99312f17e7bcfde512ba7312c6..ac9287f9b7cf7e97f84a3649e11e6424ba1254f3 100644 --- a/src/ui/pages/dataset/dataset-stepper/steps/basic-info/BasicInfoForm.tsx +++ b/src/ui/pages/dataset/dataset-stepper/steps/basic-info/BasicInfoForm.tsx @@ -3,7 +3,6 @@ import {Field, reduxForm, FieldArray} from 'redux-form'; import {DATASET_BASIC_INFO_FORM} from 'constants/datasets'; import languages from 'data/Languages'; -import {Partner} from 'model/partner.model'; import {TextField} from 'ui/common/text-field'; import {MarkdownField} from 'ui/catalog/markdown'; @@ -21,23 +20,22 @@ interface ILoginContainerProps extends React.ClassAttributes { initialValues: any; classes: any; uuid: string; - partners: Partner[]; } class BasicInfoStep extends React.Component { public render() { - const {partners, initialValues, handleSubmit} = this.props; + const {initialValues, handleSubmit} = this.props; return (
diff --git a/src/ui/pages/dataset/dataset-stepper/steps/basic-info/index.tsx b/src/ui/pages/dataset/dataset-stepper/steps/basic-info/index.tsx index 47e50e161365d591ba57a8a4dfe8a36f602dfefe..37423eeebdd030a75da77e0fce4f2092d1b48b8d 100644 --- a/src/ui/pages/dataset/dataset-stepper/steps/basic-info/index.tsx +++ b/src/ui/pages/dataset/dataset-stepper/steps/basic-info/index.tsx @@ -67,7 +67,6 @@ class BasicInfoStep extends React.Component { } const mapStateToProps = (state, ownProps) => ({ - myPartners: state.partner.myPartners, dataset: state.datasets.currentDataset, stillLoading: ownProps.stillLoading, location: ownProps.location, diff --git a/src/ui/pages/descriptor/EditPage.tsx b/src/ui/pages/descriptor/EditPage.tsx index 301c8b1874e4dba4ce8268293784c3428c7a0887..9c19d8cd26f057aad1b66f4c79032e9bc9f641af 100644 --- a/src/ui/pages/descriptor/EditPage.tsx +++ b/src/ui/pages/descriptor/EditPage.tsx @@ -5,10 +5,8 @@ import {bindActionCreators} from 'redux'; import {log} from 'utilities/debug'; import {loadDescriptor, saveDescriptor, publishDescriptor} from 'actions/descriptors'; -import {loadMyPartners} from 'actions/partner'; import { Descriptor } from 'model/descriptor.model'; -import { Partner } from 'model/partner.model'; import DescriptorForm from './c/DescriptorForm'; import VocabularyCard from 'ui/pages/vocabulary/c/VocabularyCard'; @@ -20,9 +18,6 @@ interface IDescriptorEditPageProps extends React.ClassAttributes { classes: any; uuid?: string; - loadMyPartners: () => void; - myPartners: Partner[]; - loadDescriptor: (uuid: string) => void; saveDescriptor: (descriptor: Descriptor) => void; publishDescriptor: (descriptor: Descriptor) => void; @@ -33,15 +28,10 @@ class DescriptorEditPage extends React.Component protected static needs = [ ({ params: { uuid } }) => loadDescriptor(uuid), - loadMyPartners, ]; public componentDidMount() { - const {descriptor, myPartners, loadMyPartners, loadDescriptor, uuid} = this.props; - - if (!myPartners || myPartners.length === 0) { - loadMyPartners(); - } + const {descriptor, loadDescriptor, uuid} = this.props; if (uuid && (!descriptor || descriptor.uuid !== uuid)) { loadDescriptor(uuid); @@ -68,14 +58,11 @@ class DescriptorEditPage extends React.Component } public render() { - const {uuid, myPartners} = this.props; + const {uuid} = this.props; let {descriptor} = this.props; if (! descriptor && ! uuid) { descriptor = new Descriptor(); - if (myPartners && myPartners.length > 0) { - descriptor.owner = myPartners.length[0]; - } } if (! descriptor) { @@ -87,7 +74,7 @@ class DescriptorEditPage extends React.Component - + { descriptor.vocabulary && ( @@ -100,12 +87,10 @@ class DescriptorEditPage extends React.Component const mapStateToProps = (state, { match }) => ({ uuid: match.params.uuid, - myPartners: state.partner.myPartners, descriptor: state.descriptors.currentDescriptor, }); const mapDispatchToProps = (dispatch) => bindActionCreators({ - loadMyPartners, loadDescriptor, saveDescriptor, publishDescriptor, diff --git a/src/ui/pages/descriptor/c/DescriptorForm.tsx b/src/ui/pages/descriptor/c/DescriptorForm.tsx index 5cc1541ea54c9ac780d2b41d861adbe21559e021..d98fa36711fbc4575898289778954647732baebc 100644 --- a/src/ui/pages/descriptor/c/DescriptorForm.tsx +++ b/src/ui/pages/descriptor/c/DescriptorForm.tsx @@ -113,7 +113,7 @@ class DescriptorForm extends React.Component { } public render() { - const {error, handleSubmit, initialValues, pageTitle, onPublish, partners, invalid, submitting, anyTouched, currentOwner, currentVocabulary} = this.props; + const {error, handleSubmit, initialValues, pageTitle, onPublish, invalid, submitting, anyTouched, currentOwner, currentVocabulary} = this.props; if (! initialValues) { return null; @@ -136,7 +136,7 @@ class DescriptorForm extends React.Component { diff --git a/src/ui/pages/descriptorlist/c/Filters.tsx b/src/ui/pages/descriptorlist/c/Filters.tsx index 4651f186ac0f8839d02bd2eca830bbce15d59ed3..b7a93e87cdb8d6f933008066bbc9d0738e9ebc6f 100644 --- a/src/ui/pages/descriptorlist/c/Filters.tsx +++ b/src/ui/pages/descriptorlist/c/Filters.tsx @@ -9,11 +9,13 @@ import StringFilter from 'ui/common/filter/StringFilter'; import StringArrFilter from 'ui/common/filter/StringArrFilter'; import CropFilter from 'ui/catalog/crop/CropFilter'; import TextFilter from 'ui/common/filter/TextFilter'; +import PartnerFilter from 'ui/catalog/partner/PartnerFilter'; const DescriptorListFilters = ({handleSubmit, initialize, ...other}) => ( + diff --git a/src/ui/routes.tsx b/src/ui/routes.tsx index eb85208ab698d0a1fc9c577226bdd419ba0bbdfa..d2617fd52fa12df97befcf4f30bce811498817fb 100644 --- a/src/ui/routes.tsx +++ b/src/ui/routes.tsx @@ -367,7 +367,7 @@ const routes = [ auth: [ROLE_USER, ROLE_ADMINISTRATOR], routes: [ { - path: '/data-published/:tab', + path: '/data-published/:tab?', component: MyDataPage, exact: true, extraProps: { @@ -377,27 +377,7 @@ const routes = [ }, }, { - path: '/data-published', - component: MyDataPage, - exact: true, - extraProps: { - title: 'Published data', - basePath: '/dashboard/data-published', - filter: { published: true }, - }, - }, - { - path: '/data-in-preparation/:tab', - component: MyDataPage, - exact: true, - extraProps: { - title: 'Data in preparation', - basePath: '/dashboard/data-in-preparation', - filter: { published: false }, - }, - }, - { - path: '/data-in-preparation', + path: '/data-in-preparation/:tab?', component: MyDataPage, exact: true, extraProps: { @@ -407,15 +387,7 @@ const routes = [ }, }, { - path: '/:tab', - component: DashboardPage, - exact: true, - extraProps: { - title: 'My Dashboard', - }, - }, - { - path: '/', + path: '/:tab?', component: DashboardPage, exact: true, extraProps: { diff --git a/src/utilities/index.ts b/src/utilities/index.ts index 80832a65b0b3c0173590ce668944b9eb60dd082a..533431b651ba808f620573565de32e0c66abce1a 100644 --- a/src/utilities/index.ts +++ b/src/utilities/index.ts @@ -78,8 +78,11 @@ export function cleanFilters(filter, keysToSkip?): string { } const val = filter[k]; if (_.isObject(val)) { - if (_.isArray(val) && val.length > 0) { - result[k] = val.sort(); + if (_.isArray(val)) { + const notUndefined = val.filter((x) => x !== undefined).sort(); + if (notUndefined && notUndefined.length > 0) { + result[k] = notUndefined; + } } else { const sub = cleanFilters(val, keysToSkip); if (Object.keys(sub).length) {