From 8e8a2d91ab5c8ec41ab6faeaf58771bc92bc21d6 Mon Sep 17 00:00:00 2001 From: "v.pavlov" Date: Thu, 30 Aug 2018 16:35:56 +0300 Subject: [PATCH] Fix: Data in the table is not updated. - Logic moved from actions to reducers --- src/actions/dashboard.ts | 47 ++++++------------- src/actions/dataset.ts | 30 +++++++----- src/actions/descriptorList.ts | 23 ++++++--- src/actions/descriptors.ts | 20 ++++++-- src/constants/dashboard.ts | 3 ++ src/constants/datasets.ts | 1 + src/constants/descriptors.ts | 2 + src/reducers/dashboard.ts | 43 ++++++++++++++++- src/reducers/datasets.ts | 38 +++++++++++++-- src/reducers/descriptorList.ts | 40 ++++++++++++++-- src/reducers/descriptors.ts | 42 ++++++++++++++--- src/ui/common/time/PrettyDate.tsx | 2 +- src/ui/pages/dashboard/DashboardPage.tsx | 2 +- .../dashboard/c/DashboardActionsArea.tsx | 6 +-- src/ui/pages/dataset/c/DatasetDisplay.tsx | 5 +- 15 files changed, 225 insertions(+), 79 deletions(-) diff --git a/src/actions/dashboard.ts b/src/actions/dashboard.ts index c4cc1b4..66c309f 100644 --- a/src/actions/dashboard.ts +++ b/src/actions/dashboard.ts @@ -1,11 +1,9 @@ -import * as _ from 'lodash'; - // utilities import {dereferenceReferences} from 'utilities'; import {log} from 'utilities/debug'; // constants -import {ADD_TO_EDIT_LIST, RECEIVE_EDIT_LIST, RECEIVE_STATIC_PAGE, REMOVE_FROM_EDIT_LIST, RECEIVE_IS_EDIT_MODE} from 'constants/dashboard'; +import {ADD_TO_EDIT_LIST, RECEIVE_EDIT_LIST, RECEIVE_STATIC_PAGE, REMOVE_FROM_EDIT_LIST, RECEIVE_IS_EDIT_MODE, REMOVE_ITEM, REFRESH_ITEM} from 'constants/dashboard'; // Models import {Dataset, IDatasetFilter} from 'model/dataset.model'; @@ -27,6 +25,16 @@ export const setEditMode = (payload: boolean) => (dispatch) => { dispatch({type: RECEIVE_IS_EDIT_MODE, payload}); }; +export const refreshStaticPageItem = (item: any) => ({ + type: REFRESH_ITEM, + payload: item, +}); + +export const removeStaticPageItem = (item: any) => ({ + type: REMOVE_ITEM, + payload: item, +}); + const receivePaged = (paged: Page | Page | Page) => (dispatch) => { dispatch({type: RECEIVE_STATIC_PAGE, payload: !paged ? paged : {...paged}}); }; @@ -49,36 +57,11 @@ export const onPageChange = () => (dispatch) => { dispatch(receivePaged(null)); }; -const receiveNewStaticPage = (paged: any) => (dispatch) => { - dispatch(receivePaged(paged)); -}; - const receiveAndPushStaticPage = (paged: any) => (dispatch, getState) => { const oldContent = getState().dashboard.staticPaged && getState().dashboard.staticPaged.content || []; dispatch(receivePaged({...paged, content: [...oldContent, ...paged.content]})); }; -const refreshPageItem = (item: any) => (dispatch, getState) => { - const staticPage = getState().dashboard.staticPaged; - const toUpdateIndex = _.findIndex(staticPage.content, (contentItem) => contentItem.uuid === item.uuid); - - if (toUpdateIndex !== -1) { - staticPage.content[toUpdateIndex] = _.merge(staticPage.content[toUpdateIndex], item); - } - - return dispatch(receiveNewStaticPage(staticPage)); -}; - -const removePageItem = (item: any) => (dispatch, getState) => { - const staticPage = getState().dashboard.staticPaged; - - _.remove(staticPage.content, (contentItem) => contentItem.uuid === item.uuid); - staticPage.numberOfElements = staticPage.numberOfElements - 1; - staticPage.totalElements = staticPage.totalElements - 1; - - return dispatch(receiveNewStaticPage(staticPage)); -}; - export const addToEditList = (item: Dataset | Descriptor | DescriptorList) => (dispatch, getState) => { const list = getState().dashboard.toEditList; if (!list.includes(item)) { @@ -101,7 +84,7 @@ export const publishAll = (publishOne) => (dispatch, getState) => { dispatch(publishOne(item)) .then((published) => { dispatch(removeFromList(published)); - dispatch(refreshPageItem(published)); + dispatch(refreshStaticPageItem(published)); }); } else { dispatch(removeFromList(item)); @@ -118,7 +101,7 @@ export const approveAll = (approveOne) => (dispatch, getState) => { dispatch(approveOne(item)) .then((approved) => { dispatch(removeFromList(approved)); - dispatch(refreshPageItem(approved)); + dispatch(refreshStaticPageItem(approved)); }); } else { dispatch(removeFromList(item)); @@ -135,7 +118,7 @@ export const unpublishAll = (publishOne) => (dispatch, getState) => { dispatch(publishOne(item)) .then((unpublished) => { dispatch(removeFromList(unpublished)); - dispatch(refreshPageItem(unpublished)); + dispatch(refreshStaticPageItem(unpublished)); }); } else { dispatch(removeFromList(item)); @@ -151,7 +134,7 @@ export const deleteAll = (deleteOne) => (dispatch, getState) => { dispatch(deleteOne(item)) .then((deleted) => { dispatch(removeFromList(deleted)); - dispatch(removePageItem(deleted)); + dispatch(removeStaticPageItem(deleted)); }); }); dispatch(clearEditList()); diff --git a/src/actions/dataset.ts b/src/actions/dataset.ts index 3d24aeb..fec72a1 100644 --- a/src/actions/dataset.ts +++ b/src/actions/dataset.ts @@ -11,14 +11,18 @@ import { LocationService } from 'service/LocationService'; import { RepositoryFileService } from 'service/RepositoryFileService'; 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 {CREATE_DATASET, RECEIVE_DATASET, RECEIVE_DATASET_PAGE, ADD_CREATOR_TO_DATASET, REMOVE_CREATOR_FROM_DATASET, UPDATE_DATASET_CREATOR, ADD_LOCATION, RECEIVE_LOCATION, REMOVE_LOCATION, REMOVE_DATASET} from 'constants/datasets'; import {addFilterCode} from 'actions/filterCode'; import steps from 'ui/pages/dataset/dataset-stepper/steps'; import { navigateTo } from 'actions/navigation'; import * as _ from 'lodash'; const receiveDataset = (dataset: Dataset) => ({ - type: RECEIVE_DATASET, payload: dataset, + type: RECEIVE_DATASET, payload: dataset, +}); + +const removeDataset = (dataset: Dataset) => ({ + type: REMOVE_DATASET, payload: dataset, }); const receiveDatasetPage = (paged: Page, page, results, sortBy, filter: IDatasetFilter, order) => ({ @@ -235,14 +239,18 @@ function approveDatasetPromise(dataset: Dataset) { } function deleteDatasetPromise(dataset: Dataset) { - return (dispatch, getState) => { - const token = getState().login.access_token; + return (dispatch, getState) => { + const token = getState().login.access_token; - return DatasetService.deleteDataset(token, dataset) - .catch((error) => { - log('Delete error', error); - }); - }; + return DatasetService.deleteDataset(token, dataset) + .then((deleted) => { + dispatch(removeDataset(deleted)); + return deleted; + }) + .catch((error) => { + log('Delete error', error); + }); + }; } function deleteDataset(dataset: Dataset) { @@ -250,8 +258,8 @@ function deleteDataset(dataset: Dataset) { const token = getState().login.access_token; return DatasetService.deleteDataset(token, dataset) - .then((saved) => { - dispatch(receiveDataset(saved)); + .then((deleted) => { + dispatch(removeDataset(deleted)); // dispatch(showDataset(saved.uuid)); }).catch((error) => { log('Delete error', error); diff --git a/src/actions/descriptorList.ts b/src/actions/descriptorList.ts index e956d2e..2e2f827 100644 --- a/src/actions/descriptorList.ts +++ b/src/actions/descriptorList.ts @@ -10,16 +10,21 @@ import {cleanFilters} from 'utilities'; import * as _ from 'lodash'; import { - GET_DESCRIPTORLIST, RECEIVE_DESCRIPTORLIST, - CREATE_DESCRIPTORLIST, - LIST_DESCRIPTORLISTS, RECEIVE_DESCRIPTORLISTS, + GET_DESCRIPTORLIST, RECEIVE_DESCRIPTORLIST, + CREATE_DESCRIPTORLIST, + LIST_DESCRIPTORLISTS, RECEIVE_DESCRIPTORLISTS, REMOVE_DESCRIPTORLIST, } from 'constants/descriptors'; import {navigateTo} from './navigation'; import steps from 'ui/pages/descriptorlist/descriptorlist-stepper/steps'; const receiveDescriptorList = (descriptorList: DescriptorList) => ({ - type: RECEIVE_DESCRIPTORLIST, - payload: descriptorList, + type: RECEIVE_DESCRIPTORLIST, + payload: descriptorList, +}); + +const removeDescriptorList = (descriptorList: DescriptorList) => ({ + type: REMOVE_DESCRIPTORLIST, + payload: descriptorList, }); const receiveDescriptorLists = (paged: Page, page, results, sortBy, filter: IDescriptorListFilter, order) => ({ @@ -206,7 +211,11 @@ export const saveDescriptorList = (descriptorList: DescriptorList) => (dispatch, }; export const deleteDescriptorListPromise = (descriptorList: DescriptorList) => (dispatch, getState) => { - return DescriptorListService.deleteDescriptorList(getState().login.access_token, descriptorList); + return DescriptorListService.deleteDescriptorList(getState().login.access_token, descriptorList) + .then((descriptorList) => { + dispatch(removeDescriptorList(descriptorList)); + return descriptorList; + }); }; // Publish the descriptor list @@ -214,7 +223,7 @@ export const deleteDescriptorList = (descriptorList: DescriptorList) => (dispatc return DescriptorListService.deleteDescriptorList(getState().login.access_token, descriptorList) .then((descriptorList) => { // receive updates - dispatch(receiveDescriptorList(descriptorList)); + dispatch(removeDescriptorList(descriptorList)); }); }; diff --git a/src/actions/descriptors.ts b/src/actions/descriptors.ts index 36af57d..56466b2 100644 --- a/src/actions/descriptors.ts +++ b/src/actions/descriptors.ts @@ -3,7 +3,7 @@ import {SubmissionError} from 'redux-form'; import {cleanFilters, dereferenceReferences} from 'utilities'; import {DescriptorService} from 'service/DescriptorService'; -import {CREATE_DESCRIPTOR, RECEIVE_DESCRIPTOR, RECEIVE_DESCRIPTOR_EXTRA, RECEIVE_DESCRIPTOR_PAGE, GET_DESCRIPTOR, LIST_DESCRIPTORS} from 'constants/descriptors'; +import {CREATE_DESCRIPTOR, RECEIVE_DESCRIPTOR, RECEIVE_DESCRIPTOR_EXTRA, RECEIVE_DESCRIPTOR_PAGE, GET_DESCRIPTOR, LIST_DESCRIPTORS, REMOVE_DESCRIPTOR} from 'constants/descriptors'; import {Descriptor, IDescriptorFilter} from 'model/descriptor.model'; import {Partner} from 'model/partner.model'; import {Page, PublishState} from 'model/common.model'; @@ -16,6 +16,11 @@ const receiveDescriptor = (descriptor: Descriptor) => ({ payload: descriptor, }); +const removeDescriptor = (descriptor: Descriptor) => ({ + type: REMOVE_DESCRIPTOR, + payload: descriptor, +}); + const receiveDescriptorExtra = (descriptor: Descriptor, extra: any) => ({ type: RECEIVE_DESCRIPTOR_EXTRA, payload: { descriptor, extra }, @@ -131,16 +136,21 @@ export const copyDescriptor = (descriptor: Descriptor) => (dispatch, getState) = export const deleteDescriptorPromise = (descriptor: Descriptor) => (dispatch, getState) => { - return DescriptorService.deleteDescriptor(getState().login.access_token, descriptor) - .catch((error) => { - log('Error', error); - }); + return DescriptorService.deleteDescriptor(getState().login.access_token, descriptor) + .then((descriptor) => { + dispatch(removeDescriptor(descriptor)); + return descriptor; + }) + .catch((error) => { + log('Error', error); + }); }; // Delete a record export const deleteDescriptor = (descriptor: Descriptor) => (dispatch, getState) => { return DescriptorService.deleteDescriptor(getState().login.access_token, descriptor) .then((descriptor) => { + dispatch(removeDescriptor(descriptor)); dispatch(push(`/descriptors`)); }) .catch((error) => { diff --git a/src/constants/dashboard.ts b/src/constants/dashboard.ts index dd537a4..d8b2dad 100644 --- a/src/constants/dashboard.ts +++ b/src/constants/dashboard.ts @@ -6,4 +6,7 @@ export const ADD_TO_EDIT_LIST = 'dashboard/ADD_TO_EDIT_LIST'; export const REMOVE_FROM_EDIT_LIST = 'dashboard/REMOVE_FROM_EDIT_LIST'; export const RECEIVE_EDIT_LIST = 'dashboard/RECEIVE_EDIT_LIST'; +export const REFRESH_ITEM = 'dashboard/REFRESH_ITEM'; +export const REMOVE_ITEM = 'dashboard/REMOVE_ITEM'; + export const RECEIVE_STATIC_PAGE = 'dashboard/RECEIVE_STATIC_PAGE'; diff --git a/src/constants/datasets.ts b/src/constants/datasets.ts index 0580df9..14853f6 100644 --- a/src/constants/datasets.ts +++ b/src/constants/datasets.ts @@ -3,6 +3,7 @@ export const DATASET_BASIC_INFO_FORM = 'Form/DATASET_BASIC_INFO_FORM'; export const DATASET_LIST_OF_ACCESSION_FORM = 'Form/DATASET_LIST_OF_ACCESSION_FORM'; export const CREATE_DATASET = 'App/Dataset/RECEIVE_DATASET'; export const RECEIVE_DATASET = 'App/RECEIVE_DATASET'; +export const REMOVE_DATASET = 'App/DELETE_DATASET'; export const RECEIVE_DATASET_PAGE = 'App/RECEIVE_DATASET_PAGE'; // creators const params diff --git a/src/constants/descriptors.ts b/src/constants/descriptors.ts index 6a1fc19..b657d22 100644 --- a/src/constants/descriptors.ts +++ b/src/constants/descriptors.ts @@ -3,6 +3,7 @@ export const CREATE_DESCRIPTOR = 'App/Descriptor/CREATE_DESCRIPTOR'; export const PUBLISH_DESCRIPTOR = 'App/PUBLISH_DESCRIPTOR'; export const RECEIVE_DESCRIPTOR_LIST_PAGE = 'App/RECEIVE_DESCRIPTOR_LIST_PAGE'; export const RECEIVE_DESCRIPTOR = 'App/RECEIVE_DESCRIPTOR'; +export const REMOVE_DESCRIPTOR = 'App/REMOVE_DESCRIPTOR'; export const RECEIVE_DESCRIPTOR_EXTRA = 'App/Descriptor/RECEIVE_DESCRIPTOR_EXTRA'; export const DESCRIPTOR_FORM = 'Form/DESCRIPTOR_FORM'; export const RECEIVE_DESCRIPTOR_PAGE = 'App/RECEIVE_DESCRIPTOR_PAGE'; @@ -23,6 +24,7 @@ export const PUBLISH_DESCRIPTORLIST = 'App/DELETE_DESCRIPTORLIST'; export const DESCRIPTORLIST_FILTERFORM = 'Form/DESCRIPTORLIST_FILTERS'; export const LIST_DESCRIPTORLISTS = 'App/LIST_DESCRIPTORLISTS'; +export const REMOVE_DESCRIPTORLIST = 'App/REMOVE_DESCRIPTORLIST'; export const RECEIVE_DESCRIPTORLISTS = 'App/RECEIVE_DESCRIPTORLISTS'; /* diff --git a/src/reducers/dashboard.ts b/src/reducers/dashboard.ts index a3337a6..d39ae66 100644 --- a/src/reducers/dashboard.ts +++ b/src/reducers/dashboard.ts @@ -1,5 +1,7 @@ import update from 'immutability-helper'; -import {ADD_TO_EDIT_LIST, RECEIVE_STATIC_PAGE, RECEIVE_EDIT_LIST, REMOVE_FROM_EDIT_LIST, RECEIVE_IS_EDIT_MODE} from 'constants/dashboard'; +import {ADD_TO_EDIT_LIST, RECEIVE_STATIC_PAGE, RECEIVE_EDIT_LIST, REMOVE_FROM_EDIT_LIST, RECEIVE_IS_EDIT_MODE, REFRESH_ITEM, REMOVE_ITEM} from 'constants/dashboard'; +import {RECEIVE_DESCRIPTOR, RECEIVE_DESCRIPTORLIST, REMOVE_DESCRIPTOR, REMOVE_DESCRIPTORLIST} from 'constants/descriptors'; +import {RECEIVE_DATASET, REMOVE_DATASET} from 'constants/datasets'; import {Descriptor, DescriptorList} from 'model/descriptor.model'; import {Page} from 'model/common.model'; import {Dataset} from 'model/dataset.model'; @@ -18,6 +20,45 @@ const INITIAL_STATE: { export default function dashboard(state = INITIAL_STATE, action: { type?: string, payload?: any } = {type: '', payload: null}) { switch (action.type) { + case REFRESH_ITEM: + case RECEIVE_DESCRIPTOR: + case RECEIVE_DESCRIPTORLIST: + case RECEIVE_DATASET: { + const receivedIndex = state.staticPaged ? _.findIndex(state.staticPaged.content, (item) => item.uuid === action.payload.uuid) : -1; + + if (receivedIndex !== -1) { + return update(state, { + staticPaged: { + content: { + [receivedIndex]: {$set: action.payload}, + }, + }, + }); + } else { + return update(state, { + staticPaged: {$set: null}, + }); + } + } + + case REMOVE_ITEM: + case REMOVE_DESCRIPTOR: + case REMOVE_DESCRIPTORLIST: + case REMOVE_DATASET: { + if (state.staticPaged) { + const removeIndex = _.findIndex(state.staticPaged.content, (item) => item.uuid === action.payload.uuid); + return removeIndex === -1 ? state + : update(state, { + staticPaged: { + content: {$splice: [[removeIndex, 1]]}, + numberOfElements: {$set: state.staticPaged.numberOfElements - 1}, + totalElements: {$set: state.staticPaged.totalElements - 1}, + }, + }); + } + return state; + } + case RECEIVE_IS_EDIT_MODE: { return update(state, { isEditMode: { $set: action.payload }, diff --git a/src/reducers/datasets.ts b/src/reducers/datasets.ts index a091435..ffaf2f2 100644 --- a/src/reducers/datasets.ts +++ b/src/reducers/datasets.ts @@ -1,7 +1,8 @@ import update from 'immutability-helper'; import {log} from 'utilities/debug'; +import * as _ from 'lodash'; -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 {CREATE_DATASET, RECEIVE_DATASET, RECEIVE_DATASET_PAGE, ADD_CREATOR_TO_DATASET, REMOVE_CREATOR_FROM_DATASET, UPDATE_DATASET_CREATOR, ADD_LOCATION, RECEIVE_LOCATION, REMOVE_LOCATION, REMOVE_DATASET} from 'constants/datasets'; import { LOGIN_USER, LOGIN_APP, LOGOUT } from 'constants/login'; import { Dataset } from 'model/dataset.model'; @@ -28,9 +29,38 @@ function datasets(state = INITIAL_STATE, action: { type?: string, payload?: any } case RECEIVE_DATASET: { - return update(state, { - currentDataset: { $set: action.payload }, - }); + const receivedIndex = state.paged ? _.findIndex(state.paged.content, (item) => item.uuid === action.payload.uuid) : -1; + + if (receivedIndex !== -1) { + return update(state, { + currentDataset: { $set: action.payload }, + paged: { + content: { + [receivedIndex]: {$set: action.payload}, + }, + }, + }); + } else { + return update(state, { + currentDataset: { $set: action.payload }, + paged: {$set: null}, + }); + } + } + + case REMOVE_DATASET: { + if (state.paged) { + const removeIndex = _.findIndex(state.paged.content, (item) => item.uuid === action.payload.uuid); + return removeIndex === -1 ? state + : update(state, { + paged: { + content: {$splice: [[removeIndex, 1]]}, + numberOfElements: {$set: state.paged.numberOfElements - 1}, + totalElements: {$set: state.paged.totalElements - 1}, + }, + }); + } + return state; } case RECEIVE_DATASET_PAGE: { diff --git a/src/reducers/descriptorList.ts b/src/reducers/descriptorList.ts index 01d8dea..07229d1 100644 --- a/src/reducers/descriptorList.ts +++ b/src/reducers/descriptorList.ts @@ -1,9 +1,10 @@ import update from 'immutability-helper'; +import * as _ from 'lodash'; import { DescriptorList } from 'model/descriptor.model'; import { Page } from 'model/common.model'; -import { GET_DESCRIPTORLIST, RECEIVE_DESCRIPTORLIST, CREATE_DESCRIPTORLIST, LIST_DESCRIPTORLISTS, RECEIVE_DESCRIPTORLISTS } from 'constants/descriptors'; +import {GET_DESCRIPTORLIST, RECEIVE_DESCRIPTORLIST, CREATE_DESCRIPTORLIST, LIST_DESCRIPTORLISTS, RECEIVE_DESCRIPTORLISTS, REMOVE_DESCRIPTORLIST} from 'constants/descriptors'; import { LOGIN_USER, LOGIN_APP, LOGOUT } from 'constants/login'; const INITIAL_STATE: { @@ -41,11 +42,40 @@ function descriptorList(state = INITIAL_STATE, action: { type: string, payload?: // set the currentDescriptorList to whatever came in case RECEIVE_DESCRIPTORLIST: { - return update(state, { - currentDescriptorList: { $set: action.payload }, - loading: { $set: null }, - }); + const receivedIndex = state.paged ? _.findIndex(state.paged.content, (item) => item.uuid === action.payload.uuid) : -1; + + if (receivedIndex !== -1) { + return update(state, { + currentDescriptorList: { $set: action.payload }, + loading: { $set: null }, + paged: { + content: { + [receivedIndex]: {$set: action.payload}, + }, + }, + }); + } else { + return update(state, { + currentDescriptorList: { $set: action.payload }, + loading: { $set: null }, + paged: {$set: null}, + }); + } } + case REMOVE_DESCRIPTORLIST: { + if (state.paged) { + const removeIndex = _.findIndex(state.paged.content, (item) => item.uuid === action.payload.uuid); + return removeIndex === -1 ? state + : update(state, { + paged: { + content: {$splice: [[removeIndex, 1]]}, + numberOfElements: {$set: state.paged.numberOfElements - 1}, + totalElements: {$set: state.paged.totalElements - 1}, + }, + }); + } + return state; + } // set the currentDescriptorList to a blank new object case CREATE_DESCRIPTORLIST: { diff --git a/src/reducers/descriptors.ts b/src/reducers/descriptors.ts index fa6f628..7e9cebe 100644 --- a/src/reducers/descriptors.ts +++ b/src/reducers/descriptors.ts @@ -5,7 +5,7 @@ import { log } from 'utilities/debug'; import { IReducerAction, Page } from 'model/common.model'; import { Descriptor } from 'model/descriptor.model'; -import { CREATE_DESCRIPTOR, RECEIVE_DESCRIPTOR, RECEIVE_DESCRIPTOR_EXTRA, RECEIVE_DESCRIPTOR_PAGE, GET_DESCRIPTOR, LIST_DESCRIPTORS } from 'constants/descriptors'; +import {CREATE_DESCRIPTOR, RECEIVE_DESCRIPTOR, RECEIVE_DESCRIPTOR_EXTRA, RECEIVE_DESCRIPTOR_PAGE, GET_DESCRIPTOR, LIST_DESCRIPTORS, REMOVE_DESCRIPTOR} from 'constants/descriptors'; import { LOGIN_USER, LOGIN_APP, LOGOUT } from 'constants/login'; const INITIAL_STATE: { @@ -52,12 +52,42 @@ function descriptors(state = INITIAL_STATE, action: IReducerAction) { case RECEIVE_DESCRIPTOR: { log(RECEIVE_DESCRIPTOR, action); - return update(state, { - currentDescriptor: { $set: action.payload }, - currentDescriptorExtra: { $set: null }, - loading: { $set: null }, - }); + const receivedIndex = state.paged ? _.findIndex(state.paged.content, (item) => item.uuid === action.payload.uuid) : -1; + + if (receivedIndex !== -1) { + return update(state, { + currentDescriptor: { $set: action.payload }, + currentDescriptorExtra: { $set: null }, + loading: { $set: null }, + paged: { + content: { + [receivedIndex]: {$set: action.payload}, + }, + }, + }); + } else { + return update(state, { + currentDescriptor: { $set: action.payload }, + currentDescriptorExtra: { $set: null }, + loading: { $set: null }, + paged: {$set: null}, + }); + } } + case REMOVE_DESCRIPTOR: { + if (state.paged) { + const removeIndex = _.findIndex(state.paged.content, (item) => item.uuid === action.payload.uuid); + return removeIndex === -1 ? state + : update(state, { + paged: { + content: {$splice: [[removeIndex, 1]]}, + numberOfElements: {$set: state.paged.numberOfElements - 1}, + totalElements: {$set: state.paged.totalElements - 1}, + }, + }); + } + return state; + } case RECEIVE_DESCRIPTOR_EXTRA: { log(RECEIVE_DESCRIPTOR, action); diff --git a/src/ui/common/time/PrettyDate.tsx b/src/ui/common/time/PrettyDate.tsx index 630880c..0444ffd 100644 --- a/src/ui/common/time/PrettyDate.tsx +++ b/src/ui/common/time/PrettyDate.tsx @@ -15,7 +15,7 @@ export default function PrettyDate({ return ( { diffDays < 4 ? - { value } + { valueTime } : moment(value).format('D MMMM YYYY') } diff --git a/src/ui/pages/dashboard/DashboardPage.tsx b/src/ui/pages/dashboard/DashboardPage.tsx index 384c7ab..5a0cf0a 100644 --- a/src/ui/pages/dashboard/DashboardPage.tsx +++ b/src/ui/pages/dashboard/DashboardPage.tsx @@ -79,7 +79,7 @@ const mapStateToProps = (state, ownProps) => ({ page: +parse(ownProps.location.search).p || 0, // current page size: +parse(ownProps.location.search).l || 100, // page size sort: parse(ownProps.location.search).s || 'lastModifiedDate', // page sort - dir: parse(ownProps.location.search).d, // page sort directions + dir: parse(ownProps.location.search).d || 'DESC', // page sort directions filter: state.filterCode.filters && parse(ownProps.location.search).filter && state.filterCode.filters[parse(ownProps.location.search).filter] || null, filterCode: parse(ownProps.location.search).filter, }, diff --git a/src/ui/pages/dashboard/c/DashboardActionsArea.tsx b/src/ui/pages/dashboard/c/DashboardActionsArea.tsx index c3bce62..2a967ae 100644 --- a/src/ui/pages/dashboard/c/DashboardActionsArea.tsx +++ b/src/ui/pages/dashboard/c/DashboardActionsArea.tsx @@ -39,10 +39,10 @@ class DashboardActionsArea extends React.Component - { actions && actions.map((action) => ( + { actions && actions.map((action, i) => ( !action.admin ? - - : + + : )) } diff --git a/src/ui/pages/dataset/c/DatasetDisplay.tsx b/src/ui/pages/dataset/c/DatasetDisplay.tsx index d8b8120..0365327 100644 --- a/src/ui/pages/dataset/c/DatasetDisplay.tsx +++ b/src/ui/pages/dataset/c/DatasetDisplay.tsx @@ -253,7 +253,8 @@ class DetailInfo extends React.Component { } { dataset.accessionCount } { dataset.descriptorCount } - + + { publishDataset && (dataset._permissions.write || dataset._permissions.delete) && ( @@ -387,8 +388,6 @@ class DetailInfo extends React.Component { { dataset.created } - - { dataset.source } { dataset.createdDate && } -- GitLab