diff --git a/src/components/Icons.jsx b/src/components/Icons.jsx index 4267e09..1519d27 100644 --- a/src/components/Icons.jsx +++ b/src/components/Icons.jsx @@ -128,6 +128,9 @@ export function Icons() { + + + {/* By Sam Herbert (@sherb), for everyone. More http://goo.gl/7AJzbL */} diff --git a/src/components/MainHeader.jsx b/src/components/MainHeader.jsx index d6d37f8..6517c07 100644 --- a/src/components/MainHeader.jsx +++ b/src/components/MainHeader.jsx @@ -4,16 +4,30 @@ import { Trans, NumberFormat, t } from '@lingui/macro'; import { I18n } from '@lingui/react'; import { ProBadge } from './ProBadge'; import { HStack, Stack } from './Stack'; +import { Icon } from './Icons'; const DEFAULT_PROFILE_IMG = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23ccc' d='M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z'/%3E%3C/svg%3E"; -export function MainHeader(props) { +export function MainHeader({ + user, + currentItem, + titleInputBlurHandler, + runBtnClickHandler, + assetsBtnHandler, + isFileMode, + onItemFork, + ...props +}) { const isAutoPreviewOn = window.forcedSettings.autoPreview !== undefined ? window.forcedSettings : props.isAutoPreviewOn; + const isNotMine = + currentItem.createdBy && user?.uid !== currentItem.createdBy; + + // console.log(33, currentItem, user?.uid); return ( {({ i18n }) => ( @@ -23,15 +37,15 @@ export function MainHeader(props) { id="titleInput" title="Click to edit" class="item-title-input" - value={props.currentItem.title} - onBlur={props.titleInputBlurHandler} + value={currentItem.title} + onBlur={titleInputBlurHandler} />
{!isAutoPreviewOn && ( )} - - - {!props.isFileMode && ( + {!isFileMode && ( )} - + + - + + {!isNotMine && ( + + )} - {!props.user ? ( + {!user ? ( )} diff --git a/src/components/app.jsx b/src/components/app.jsx index dd37f83..3640c9f 100644 --- a/src/components/app.jsx +++ b/src/components/app.jsx @@ -383,9 +383,11 @@ export default class App extends Component { } const fork = JSON.parse(JSON.stringify(sourceItem)); delete fork.id; + delete fork.createdBy; fork.title = '(Forked) ' + sourceItem.title; fork.updatedOn = Date.now(); this.setCurrentItem(fork).then(() => this.refreshEditor()); + route('/create'); alertsService.add(`"${sourceItem.title}" was forked`); trackEvent('fn', 'itemForked'); } @@ -936,6 +938,15 @@ export default class App extends Component { var isNewItem = !this.state.currentItem.id; this.state.currentItem.id = this.state.currentItem.id || 'item-' + generateRandomId(); + if ( + this.state.currentItem.createdBy && + this.state.currentItem.createdBy !== this.state.user.uid + ) { + alertsService.add( + 'You cannot save this item as it was created by someone else. Fork it to save it as your own.' + ); + return; + } this.setState({ isSaving: true }); @@ -1697,6 +1708,9 @@ export default class App extends Component { isFileMode={ this.state.currentItem && this.state.currentItem.files } + onItemFork={() => { + this.forkItem(this.state.currentItem); + }} /> {this.state.currentItem && this.state.currentItem.files ? (