diff --git a/src/chrome/ContentBoxTitle.tsx b/src/chrome/ContentBoxTitle.tsx index 0941767c..2d9de6df 100644 --- a/src/chrome/ContentBoxTitle.tsx +++ b/src/chrome/ContentBoxTitle.tsx @@ -1,13 +1,22 @@ import React from 'react' +import IconLink from './IconLink' + interface ContentBoxTitleProps { title: string + editLink?: string + editTitle?: string } const ContentBoxTitle: React.FC = ({ - title + title, + editLink = '', + editTitle = '' }) => ( -
{title}
+
+
{title}
+ {editLink !== '' && } +
) export default ContentBoxTitle diff --git a/src/chrome/Icon.tsx b/src/chrome/Icon.tsx index 7dd66de9..c89baa46 100644 --- a/src/chrome/Icon.tsx +++ b/src/chrome/Icon.tsx @@ -55,6 +55,7 @@ import Info from './icon/Info' import Integer from './icon/Integer' import Lock from './icon/Lock' import More from './icon/More' +import MoreVertical from './icon/MoreVertical' import MyDatasets from './icon/MyDatasets' import Null from './icon/Null' import Number from './icon/Number' @@ -149,6 +150,7 @@ const Icon: React.FunctionComponent = (props) => { loader: , lock: , more: , + moreVertical: , myDatasets: , null: , number: , diff --git a/src/chrome/IconLink.tsx b/src/chrome/IconLink.tsx index 1140246f..00c771f5 100644 --- a/src/chrome/IconLink.tsx +++ b/src/chrome/IconLink.tsx @@ -5,7 +5,7 @@ import Icon, { IconSize } from './Icon' interface IconLinkProps { icon: string - link?: string + to?: string size?: IconSize className?: string colorClassName?: string @@ -15,7 +15,7 @@ interface IconLinkProps { const IconLink: React.FC = ({ icon, - link, + to, size = 'sm', className, colorClassName = 'text-black hover:text-qripink-600', @@ -24,10 +24,10 @@ const IconLink: React.FC = ({ }) => { const linkClassNames = `${colorClassName} hover:cursor-pointer` - if (link) { + if (to) { return (
- +
diff --git a/src/chrome/icon/MoreVertical.tsx b/src/chrome/icon/MoreVertical.tsx new file mode 100644 index 00000000..b3229300 --- /dev/null +++ b/src/chrome/icon/MoreVertical.tsx @@ -0,0 +1,12 @@ +import React from 'react' +import CustomIcon, { CustomIconProps } from '../CustomIcon' + +const MoreVertical: React.FC = (props) => ( + + + + + +) + +export default MoreVertical diff --git a/src/features/app/App.css b/src/features/app/App.css index 8a260723..6d9ad051 100644 --- a/src/features/app/App.css +++ b/src/features/app/App.css @@ -117,3 +117,16 @@ html { 75% { content: '...'; } 100% { content: ''; } } + +/* Override default behavior of simplemede-markdown-editor */ +/* Makes readme editor 100% height with overflow-scrolling textarea */ + +#readme-editor-wrapper, +.EasyMDEContainer, +.CodeMirror-scroll { + height: 100%; +} + +.EasyMDEContainer .CodeMirror { + height: calc(100% - 49px); +} diff --git a/src/features/collection/CollectionTable.tsx b/src/features/collection/CollectionTable.tsx index 90f2216e..5e0d3ccc 100644 --- a/src/features/collection/CollectionTable.tsx +++ b/src/features/collection/CollectionTable.tsx @@ -161,7 +161,7 @@ const CollectionTable: React.FC = ({ selector: (row: VersionInfo) => row.commitTime, omit: simplified, sortable: true, - width: '180px', + width: '130px', // eslint-disable-next-line react/display-name cell: (row: VersionInfo) => { // TODO (ramfox): the activity feed expects more content than currently exists @@ -218,7 +218,7 @@ const CollectionTable: React.FC = ({ flexShrink: 0 }, omit: simplified, - width: '100px', + width: '88px', // eslint-disable-next-line react/display-name cell: (row: VersionInfo) => (
@@ -230,19 +230,16 @@ const CollectionTable: React.FC = ({ }, { name: '', - style: { - flexShrink: 0 - }, omit: simplified, - width: '60px', + width: '10px', // eslint-disable-next-line react/display-name cell: (row: VersionInfo, i: number) => { const isLastRow = (i === (filteredWorkflows.length - 1) && filteredWorkflows.length !== 1) return ( -
+
} + icon={} dropUp={isLastRow} oneItem={filteredWorkflows.length === 1} items={[ diff --git a/src/features/commits/CommitSummaryHeader.tsx b/src/features/commits/CommitSummaryHeader.tsx index b1b26316..3d1eb8da 100644 --- a/src/features/commits/CommitSummaryHeader.tsx +++ b/src/features/commits/CommitSummaryHeader.tsx @@ -23,7 +23,7 @@ const CommitSummaryHeader: React.FC = ({ return (
-
+
{ loading ? <>
Version Info
@@ -39,7 +39,7 @@ const CommitSummaryHeader: React.FC = ({ }
-
+
{children}
diff --git a/src/features/commits/DatasetCommitList.tsx b/src/features/commits/DatasetCommitList.tsx index ca347ea0..fe090c23 100644 --- a/src/features/commits/DatasetCommitList.tsx +++ b/src/features/commits/DatasetCommitList.tsx @@ -50,6 +50,8 @@ const DatasetCommits: React.FC = ({ {editable && } */} + + {userCanEditDataset && (
  •  
    @@ -57,14 +59,14 @@ const DatasetCommits: React.FC = ({
     
  • - {userCanEditDataset && ( -
    - - - -
    - )} +
    + + + +
    + )} + {loading ? Array(3).fill('').map((_, i) => ( void onCommit: () => void onClose?: () => void + commitButtonDisabled?: boolean } const DatasetEditorLayout: React.FC = ({ @@ -37,7 +38,8 @@ const DatasetEditorLayout: React.FC = ({ onTitleChange, onCommitTitleChange, onCommit, - onClose + onClose, + commitButtonDisabled = false }) => { // used to parse the selected tab const qriRef = newQriRef(refParamsFromLocation(useParams(), useLocation())) @@ -60,7 +62,7 @@ const DatasetEditorLayout: React.FC = ({ > -
    +
    = ({ commitTitle={commitTitle} onCommitTitleChange={onCommitTitleChange} onCommit={onCommit} + disabled={commitButtonDisabled} />}
    ) diff --git a/src/features/datasetEditor/ExistingDatasetEditor.tsx b/src/features/datasetEditor/ExistingDatasetEditor.tsx index e5b8305f..830a541f 100644 --- a/src/features/datasetEditor/ExistingDatasetEditor.tsx +++ b/src/features/datasetEditor/ExistingDatasetEditor.tsx @@ -1,6 +1,7 @@ import React, { useState } from "react" import { useHistory } from 'react-router' import { useDispatch, useSelector } from "react-redux" +import { useLocation } from 'react-router-dom' import DatasetEditorLayout from './DatasetEditorLayout' import { loadDataset } from '../dataset/state/datasetActions' @@ -16,11 +17,12 @@ import { newQriRef } from '../../qri/ref' import { NewDataset } from '../../qri/dataset' import Head from '../app/Head' -const DEFAULT_DATASET_COMMIT_TITLE = 'manually updated dataset' +const DEFAULT_DATASET_COMMIT_TITLE = '' const ExistingDatasetEditor: React.FC<{}> = () => { const dispatch = useDispatch() const history = useHistory() + const location = useLocation() const dataset = useSelector(selectDatasetEditorDataset) const isLoading = useSelector(selectDatasetEditorLoading) @@ -56,6 +58,15 @@ const ExistingDatasetEditor: React.FC<{}> = () => { <>Edit your dataset here and press Commit ) + let commitButtonDisabled = false + + if (commitTitle === DEFAULT_DATASET_COMMIT_TITLE) { + commitBarContent = ( + <>Enter a message to commit your changes + ) + commitButtonDisabled = true + } + if (error) { commitBarContent = ( {error} @@ -67,7 +78,7 @@ const ExistingDatasetEditor: React.FC<{}> = () => { } const handleClose = () => { - history.push(`/${dataset.username}/${dataset.name}/history`) + history.push(`/${dataset.username}/${dataset.name}/history${location.hash}`) } return ( @@ -86,6 +97,7 @@ const ExistingDatasetEditor: React.FC<{}> = () => { onCommitTitleChange={(commitTitle: string) => { setCommitTitle(commitTitle) }} onCommit={handleCommit} onClose={handleClose} + commitButtonDisabled={commitButtonDisabled} /> ) diff --git a/src/features/download/DownloadDatasetButton.tsx b/src/features/download/DownloadDatasetButton.tsx index ffc8a172..27b3ef29 100644 --- a/src/features/download/DownloadDatasetButton.tsx +++ b/src/features/download/DownloadDatasetButton.tsx @@ -50,7 +50,7 @@ const DownloadDatasetButton: React.FC = ({ if (user.username === 'new') { return } else { - return { + return { // preview-download-body trackGoal('MUBGTLL9', 0) }} /> diff --git a/src/features/dsComponents/DatasetComponent.tsx b/src/features/dsComponents/DatasetComponent.tsx index 06569a78..1c9123a9 100644 --- a/src/features/dsComponents/DatasetComponent.tsx +++ b/src/features/dsComponents/DatasetComponent.tsx @@ -118,20 +118,33 @@ const DatasetComponent: React.FC = ({ {component}
    ) + let componentHeaderBorder = true + let overflowScroll = true // exclude the default padding for some components if (['body', 'structure', 'transform'].includes(componentName)) { componentContent = component + componentHeaderBorder = false + } + + // no padding on readme editor + if (editor && (componentName === 'readme')) { + componentContent = component + componentHeaderBorder = false + overflowScroll = false } return (
    - + {componentHeader} -
    +
    {componentContent}
    diff --git a/src/features/dsPreview/DatasetPreviewPage.tsx b/src/features/dsPreview/DatasetPreviewPage.tsx index 81362b76..37c9c4e5 100644 --- a/src/features/dsPreview/DatasetPreviewPage.tsx +++ b/src/features/dsPreview/DatasetPreviewPage.tsx @@ -10,18 +10,16 @@ import { loadDsPreview } from './state/dsPreviewActions' import Spinner from '../../chrome/Spinner' import ContentBox from '../../chrome/ContentBox' import ContentBoxTitle from '../../chrome/ContentBoxTitle' - import BodyPreview from '../dsComponents/body/BodyPreview' - import DatasetScrollLayout from '../dataset/DatasetScrollLayout' import Readme from '../dsComponents/readme/Readme' - import MetaChips from '../../chrome/MetaChips' import DatasetCommitInfo from '../../chrome/DatasetCommitInfo' import DownloadDatasetButton from "../download/DownloadDatasetButton" import ContentBoxSubTitle from "../../chrome/ContentBoxSubTitle" import { newVersionInfoFromDataset } from '../../qri/versionInfo' import Head from '../app/Head' +import { selectSessionUserCanEditDataset } from '../dataset/state/datasetState' interface DatasetPreviewPageProps { qriRef: QriRef @@ -33,6 +31,7 @@ const DatasetPreviewPage: React.FC = ({ const dispatch = useDispatch() const dataset = useSelector(selectDsPreview) const loading = useSelector(selectIsDsPreviewLoading) + const userCanEditDataset = useSelector(selectSessionUserCanEditDataset) const [versionInfoContainer, { height: versionInfoContainerHeight }] = useDimensions() const [expandReadme, setExpandReadme] = useState(false) @@ -73,7 +72,11 @@ const DatasetPreviewPage: React.FC = ({ })} style={{ height: readmeContainerHeight }}>
    - +
    @@ -129,7 +132,11 @@ const DatasetPreviewPage: React.FC = ({ {dataset.readme && (
    - +
    @@ -141,7 +148,11 @@ const DatasetPreviewPage: React.FC = ({ )} {/* Bottom of the box */} - +
    {(dataset.meta?.description) || 'No Description'}
    @@ -158,7 +169,11 @@ const DatasetPreviewPage: React.FC = ({ }}>
    - +
    diff --git a/src/features/footer/QriSocialLinks.tsx b/src/features/footer/QriSocialLinks.tsx index c4fed0b4..15ee2e64 100644 --- a/src/features/footer/QriSocialLinks.tsx +++ b/src/features/footer/QriSocialLinks.tsx @@ -22,7 +22,7 @@ const QriSocialLinks = () => ( key={i} icon={icon} size='md' - link={link} + to={link} className='ml-5 first:ml-0' colorClassName='text-black hover:text-qripink-600' /> diff --git a/src/features/navbar/NavBar.tsx b/src/features/navbar/NavBar.tsx index 7a249132..aaf6dc47 100644 --- a/src/features/navbar/NavBar.tsx +++ b/src/features/navbar/NavBar.tsx @@ -80,7 +80,7 @@ const NavBar: React.FC = ({
    {!minimal && showSearch && (
    - +
    )}