diff --git a/frontend/src/components/dialog/trash-dialog.js b/frontend/src/components/dialog/trash-dialog.js index 63f67eb6de..4f366d2940 100644 --- a/frontend/src/components/dialog/trash-dialog.js +++ b/frontend/src/components/dialog/trash-dialog.js @@ -11,6 +11,8 @@ import ModalPortal from '../../components/modal-portal'; import toaster from '../../components/toast'; import CleanTrash from '../../components/dialog/clean-trash'; import Paginator from '../paginator'; +import Loading from '../../components/loading'; +import EmptyTip from '../../components/empty-tip'; import '../../css/toolbar.css'; import '../../css/search.css'; @@ -141,7 +143,7 @@ class TrashDialog extends React.Component { render() { const { showTrashDialog, toggleTrashDialog } = this.props; - const { isCleanTrashDialogOpen, showFolder } = this.state; + const { isCleanTrashDialogOpen, showFolder, isLoading, items } = this.state; const isRepoAdmin = this.props.currentRepoInfo.owner_email === username || this.props.currentRepoInfo.is_admin; const repoFolderName = this.props.currentRepoInfo.repo_name; const oldTrashUrl = siteRoot + 'repo/' + this.props.repoID + '/trash/'; @@ -164,6 +166,11 @@ class TrashDialog extends React.Component {
+ {isLoading && } + {!isLoading && items.length === 0 && + + } + {!isLoading && items.length > 0 && + } {isCleanTrashDialogOpen && -
    - { - direntList.length !== 0 && direntList.map((dirent, index) => { + {direntList.length > 0 ? +
      + {direntList.map((dirent, index) => { return ( ); - }) - } - {this.renderSelectionBox()} -
    + })} + {this.renderSelectionBox()} +
+ : +
    + +
+ } + {direntList.length > 0 && {isDesktop ? ( @@ -729,6 +731,10 @@ class DirentListView extends React.Component { })}
+ } + {direntList.length === 0 && + + } +
{title && {title}} {text && {text}} diff --git a/frontend/src/metadata/metadata-view/components/view/gallery/main.js b/frontend/src/metadata/metadata-view/components/view/gallery/gallery-main.js similarity index 86% rename from frontend/src/metadata/metadata-view/components/view/gallery/main.js rename to frontend/src/metadata/metadata-view/components/view/gallery/gallery-main.js index 43a80c6c6e..235ad4662d 100644 --- a/frontend/src/metadata/metadata-view/components/view/gallery/main.js +++ b/frontend/src/metadata/metadata-view/components/view/gallery/gallery-main.js @@ -1,7 +1,9 @@ import React, { useCallback, useMemo } from 'react'; import PropTypes from 'prop-types'; +import EmptyTip from '../../../../../components/empty-tip'; +import { gettext } from '../../../utils'; -const Main = ({ groups, overScan, columns, size, gap }) => { +const GalleryMain = ({ groups, overScan, columns, size, gap }) => { const imageHeight = useMemo(() => size + gap, [size, gap]); const renderDisplayGroup = useCallback((group) => { @@ -47,17 +49,20 @@ const Main = ({ groups, overScan, columns, size, gap }) => { ); }, [overScan, columns, size, imageHeight]); - if (!Array.isArray(groups) || groups.length === 0) return null; + if (!Array.isArray(groups) || groups.length === 0) { + return ; + } + return groups.map((group, index) => { return renderDisplayGroup(group, index); }); }; -Main.propTypes = { +GalleryMain.propTypes = { groups: PropTypes.array, overScan: PropTypes.object, columns: PropTypes.number, size: PropTypes.number, }; -export default Main; +export default GalleryMain; diff --git a/frontend/src/metadata/metadata-view/components/view/gallery/index.js b/frontend/src/metadata/metadata-view/components/view/gallery/index.js index e3910f9096..95cc5a564e 100644 --- a/frontend/src/metadata/metadata-view/components/view/gallery/index.js +++ b/frontend/src/metadata/metadata-view/components/view/gallery/index.js @@ -5,7 +5,7 @@ import { Utils } from '../../../../../utils/utils'; import { getDateDisplayString, PRIVATE_COLUMN_KEY } from '../../../_basic'; import { siteRoot, thumbnailSizeForGrid } from '../../../../../utils/constants'; import { EVENT_BUS_TYPE, PER_LOAD_NUMBER } from '../../../constants'; -import Main from './main'; +import GalleryMain from './gallery-main'; import toaster from '../../../../../components/toast'; import './index.css'; @@ -167,8 +167,12 @@ const Gallery = () => {
{!isFirstLoading && ( <> -
- {isLoadingMore && (
)} + + {isLoadingMore && +
+ +
+ } )}
diff --git a/frontend/src/metadata/metadata-view/components/view/table/table-main/records/index.js b/frontend/src/metadata/metadata-view/components/view/table/table-main/records/index.js index 50127ec38b..58cff79afb 100644 --- a/frontend/src/metadata/metadata-view/components/view/table/table-main/records/index.js +++ b/frontend/src/metadata/metadata-view/components/view/table/table-main/records/index.js @@ -1,4 +1,4 @@ -import React, { Component, Fragment } from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import RecordsHeader from './records-header'; import Body from './body'; @@ -9,8 +9,9 @@ import { recalculate } from '../../../../../utils/column-utils'; import { SEQUENCE_COLUMN_WIDTH, CANVAS_RIGHT_INTERVAL, GROUP_ROW_TYPE, EVENT_BUS_TYPE } from '../../../../../constants'; import { isWindowsBrowser, isWebkitBrowser, isMobile, getEventClassName, - addClassName, removeClassName, + addClassName, removeClassName, gettext, } from '../../../../../utils'; +import EmptyTip from '../../../../../../../components/empty-tip'; import RecordMetrics from '../../../../../utils/record-metrics'; import { isShiftKeyDown } from '../../../../../utils/keyboard-utils'; import { getVisibleBoundaries } from '../../../../../utils/viewport'; @@ -665,8 +666,12 @@ class Records extends Component { const hasSelectedRecord = this.hasSelectedRecord(); const isSelectedAll = RecordMetrics.isSelectedAll(recordIds, recordMetrics); + if (recordsCount === 0) { + return (); + } + return ( - + <>
{}} loadAll={this.props.loadAll} /> - + ); } } diff --git a/frontend/src/metadata/metadata-view/components/view/table/table-main/records/record-footer/index.js b/frontend/src/metadata/metadata-view/components/view/table/table-main/records/record-footer/index.js index 2725472cc3..856e9e4c44 100644 --- a/frontend/src/metadata/metadata-view/components/view/table/table-main/records/record-footer/index.js +++ b/frontend/src/metadata/metadata-view/components/view/table/table-main/records/record-footer/index.js @@ -118,7 +118,7 @@ class RecordsFooter extends React.Component { return gettext('xxx cells selected').replace('xxx', selectedCellsCount); } - let recordsCountText = gettext('No record'); + let recordsCountText; if (recordsCount > 1) { recordsCountText = gettext('xxx records').replace('xxx', recordsCount); } else if (recordsCount === 1) {