Fix preview, delete, extras menu showing, media header, remove view controls from media library

This commit is contained in:
Daniel Lautzenheiser 2023-04-05 14:39:23 -04:00
parent 31b5588251
commit 7d8e0c3864
7 changed files with 48 additions and 36 deletions

View File

@ -844,8 +844,6 @@ collections:
label: Site Settings label: Site Settings
file: _data/settings.json file: _data/settings.json
description: General Site Settings description: General Site Settings
editor:
preview: true
fields: fields:
- label: Number of posts on frontpage - label: Number of posts on frontpage
name: front_limit name: front_limit

View File

@ -76,8 +76,18 @@ const CollectionHeader = ({
return ( return (
<> <>
<div className="flex flex-grow gap-4"> <div className="flex flex-grow gap-4">
<h2 className="text-xl font-semibold flex items-center text-gray-800 dark:text-gray-300"> <h2
<div className="mr-2 flex">{icon}</div> className="
text-xl
font-semibold
flex
items-center
text-gray-800
dark:text-gray-300
gap-2
"
>
<div className="flex items-center">{icon}</div>
{pluralLabel} {pluralLabel}
</h2> </h2>
{newEntryUrl ? ( {newEntryUrl ? (

View File

@ -47,7 +47,6 @@ const Editor: FC<TranslatedProps<EditorProps>> = ({
displayUrl, displayUrl,
isModification, isModification,
draftKey, draftKey,
showDelete,
slug, slug,
localBackup, localBackup,
scrollSyncActive, scrollSyncActive,
@ -292,7 +291,6 @@ const Editor: FC<TranslatedProps<EditorProps>> = ({
onPersist={handlePersistEntry} onPersist={handlePersistEntry}
onDelete={handleDeleteEntry} onDelete={handleDeleteEntry}
onDuplicate={handleDuplicateEntry} onDuplicate={handleDuplicateEntry}
showDelete={showDelete ?? true}
hasChanged={hasChanged} hasChanged={hasChanged}
displayUrl={displayUrl} displayUrl={displayUrl}
isNewEntry={!slug} isNewEntry={!slug}
@ -312,7 +310,6 @@ interface CollectionViewOwnProps {
name: string; name: string;
slug?: string; slug?: string;
newRecord: boolean; newRecord: boolean;
showDelete?: boolean;
} }
function mapStateToProps(state: RootState, ownProps: CollectionViewOwnProps) { function mapStateToProps(state: RootState, ownProps: CollectionViewOwnProps) {

View File

@ -62,7 +62,6 @@ interface EditorInterfaceProps {
onPersist: (opts?: EditorPersistOptions) => void; onPersist: (opts?: EditorPersistOptions) => void;
onDelete: () => Promise<void>; onDelete: () => Promise<void>;
onDuplicate: () => void; onDuplicate: () => void;
showDelete: boolean;
hasChanged: boolean; hasChanged: boolean;
displayUrl: string | undefined; displayUrl: string | undefined;
isNewEntry: boolean; isNewEntry: boolean;
@ -78,7 +77,6 @@ const EditorInterface = ({
entry, entry,
fields = [], fields = [],
fieldsErrors, fieldsErrors,
showDelete,
onDelete, onDelete,
onDuplicate, onDuplicate,
onPersist, onPersist,
@ -99,6 +97,7 @@ const EditorInterface = ({
const [previewActive, setPreviewActive] = useState( const [previewActive, setPreviewActive] = useState(
localStorage.getItem(PREVIEW_VISIBLE) !== 'false', localStorage.getItem(PREVIEW_VISIBLE) !== 'false',
); );
const [i18nActive, setI18nActive] = useState( const [i18nActive, setI18nActive] = useState(
Boolean(localStorage.getItem(I18N_VISIBLE) !== 'false' && locales && locales.length > 0), Boolean(localStorage.getItem(I18N_VISIBLE) !== 'false' && locales && locales.length > 0),
); );
@ -137,13 +136,16 @@ const EditorInterface = ({
}, []); }, []);
const [showPreviewToggle, previewInFrame] = useMemo(() => { const [showPreviewToggle, previewInFrame] = useMemo(() => {
console.log('[PREVIEW] collection', collection);
let preview = collection.editor?.preview ?? true; let preview = collection.editor?.preview ?? true;
console.log('[PREVIEW] preview', preview);
let frame = collection.editor?.frame ?? true; let frame = collection.editor?.frame ?? true;
if ('files' in collection) { if ('files' in collection) {
const file = getFileFromSlug(collection, entry.slug); const file = getFileFromSlug(collection, entry.slug);
if (file?.editor?.preview !== undefined) { if (file?.editor?.preview !== undefined) {
preview = file.editor.preview; preview = file.editor.preview;
console.log('[PREVIEW] preview file', preview);
} }
if (file?.editor?.frame !== undefined) { if (file?.editor?.frame !== undefined) {
@ -154,6 +156,11 @@ const EditorInterface = ({
return [preview, frame]; return [preview, frame];
}, [collection, entry.slug]); }, [collection, entry.slug]);
const finalPreviewActive = useMemo(
() => showPreviewToggle && previewActive,
[previewActive, showPreviewToggle],
);
const collectHasI18n = hasI18n(collection); const collectHasI18n = hasI18n(collection);
const editor = ( const editor = (
@ -174,7 +181,7 @@ const EditorInterface = ({
fieldsErrors={fieldsErrors} fieldsErrors={fieldsErrors}
locale={defaultLocale} locale={defaultLocale}
submitted={submitted} submitted={submitted}
hideBorder={!previewActive && !i18nActive} hideBorder={!finalPreviewActive && !i18nActive}
t={t} t={t}
/> />
</div> </div>
@ -240,6 +247,8 @@ const EditorInterface = ({
); );
const breadcrumbs = useBreadcrumbs(collection, nestedFieldPath, { isNewEntry, summary, t }); const breadcrumbs = useBreadcrumbs(collection, nestedFieldPath, { isNewEntry, summary, t });
console.log('[PREVIEW] showPreviewToggle', showPreviewToggle);
return ( return (
<MainView <MainView
breadcrumbs={breadcrumbs} breadcrumbs={breadcrumbs}
@ -253,7 +262,6 @@ const EditorInterface = ({
onPersistAndNew={() => handleOnPersist({ createNew: true })} onPersistAndNew={() => handleOnPersist({ createNew: true })}
onPersistAndDuplicate={() => handleOnPersist({ createNew: true, duplicate: true })} onPersistAndDuplicate={() => handleOnPersist({ createNew: true, duplicate: true })}
onDelete={onDelete} onDelete={onDelete}
showDelete={showDelete}
onDuplicate={onDuplicate} onDuplicate={onDuplicate}
hasChanged={hasChanged} hasChanged={hasChanged}
displayUrl={displayUrl} displayUrl={displayUrl}
@ -261,7 +269,7 @@ const EditorInterface = ({
isNewEntry={isNewEntry} isNewEntry={isNewEntry}
isModification={isModification} isModification={isModification}
showPreviewToggle={showPreviewToggle} showPreviewToggle={showPreviewToggle}
previewActive={previewActive} previewActive={finalPreviewActive}
scrollSyncActive={scrollSyncActive} scrollSyncActive={scrollSyncActive}
showI18nToggle={collectHasI18n} showI18nToggle={collectHasI18n}
i18nActive={i18nActive} i18nActive={i18nActive}
@ -274,7 +282,7 @@ const EditorInterface = ({
<EditorContent <EditorContent
key={draftKey} key={draftKey}
i18nActive={i18nActive} i18nActive={i18nActive}
previewActive={previewActive && !i18nActive} previewActive={finalPreviewActive && !i18nActive}
editor={editor} editor={editor}
editorSideBySideLocale={editorSideBySideLocale} editorSideBySideLocale={editorSideBySideLocale}
editorWithPreview={editorWithPreview} editorWithPreview={editorWithPreview}

View File

@ -25,7 +25,6 @@ export interface EditorToolbarProps {
onPersistAndNew: () => Promise<void>; onPersistAndNew: () => Promise<void>;
onPersistAndDuplicate: () => Promise<void>; onPersistAndDuplicate: () => Promise<void>;
onDelete: () => Promise<void>; onDelete: () => Promise<void>;
showDelete: boolean;
onDuplicate: () => void; onDuplicate: () => void;
hasChanged: boolean; hasChanged: boolean;
displayUrl: string | undefined; displayUrl: string | undefined;
@ -52,7 +51,6 @@ const EditorToolbar = ({
onPersistAndDuplicate, onPersistAndDuplicate,
onPersistAndNew, onPersistAndNew,
isNewEntry, isNewEntry,
showDelete,
onDelete, onDelete,
t, t,
showPreviewToggle, showPreviewToggle,
@ -110,10 +108,17 @@ const EditorToolbar = ({
return items; return items;
}, [canCreate, isPublished, onDuplicate, onPersist, onPersistAndDuplicate, onPersistAndNew, t]); }, [canCreate, isPublished, onDuplicate, onPersist, onPersistAndDuplicate, onPersistAndNew, t]);
console.log(
'[PREVIEW] showI18nToggle || showPreviewToggle || showDelete',
showI18nToggle,
showPreviewToggle,
canDelete,
);
return useMemo( return useMemo(
() => ( () => (
<div className="flex gap-2"> <div className="flex gap-2">
{showI18nToggle || showPreviewToggle || showDelete ? ( {showI18nToggle || showPreviewToggle || canDelete ? (
<Menu <Menu
key="extra-menu" key="extra-menu"
label={<MoreVertIcon className="w-5 h-5" />} label={<MoreVertIcon className="w-5 h-5" />}
@ -154,7 +159,7 @@ const EditorToolbar = ({
</> </>
)} )}
</MenuGroup> </MenuGroup>
{showDelete && canDelete ? ( {canDelete ? (
<MenuGroup key="delete-button"> <MenuGroup key="delete-button">
<MenuItemButton onClick={onDelete} startIcon={TrashIcon} color="error"> <MenuItemButton onClick={onDelete} startIcon={TrashIcon} color="error">
{t('editor.editorToolbar.deleteEntry')} {t('editor.editorToolbar.deleteEntry')}
@ -174,7 +179,6 @@ const EditorToolbar = ({
[ [
showI18nToggle, showI18nToggle,
showPreviewToggle, showPreviewToggle,
showDelete,
toggleI18n, toggleI18n,
i18nActive, i18nActive,
t, t,

View File

@ -4,7 +4,6 @@ import isEmpty from 'lodash/isEmpty';
import React, { useCallback, useEffect, useRef, useState } from 'react'; import React, { useCallback, useEffect, useRef, useState } from 'react';
import { translate } from 'react-polyglot'; import { translate } from 'react-polyglot';
import { changeViewStyle } from '@staticcms/core/actions/entries';
import { import {
closeMediaLibrary, closeMediaLibrary,
deleteMedia, deleteMedia,
@ -16,20 +15,17 @@ import {
import useMediaFiles from '@staticcms/core/lib/hooks/useMediaFiles'; import useMediaFiles from '@staticcms/core/lib/hooks/useMediaFiles';
import { fileExtension } from '@staticcms/core/lib/util'; import { fileExtension } from '@staticcms/core/lib/util';
import MediaLibraryCloseEvent from '@staticcms/core/lib/util/events/MediaLibraryCloseEvent'; import MediaLibraryCloseEvent from '@staticcms/core/lib/util/events/MediaLibraryCloseEvent';
import { selectViewStyle } from '@staticcms/core/reducers/selectors/entries';
import { selectMediaLibraryState } from '@staticcms/core/reducers/selectors/mediaLibrary'; import { selectMediaLibraryState } from '@staticcms/core/reducers/selectors/mediaLibrary';
import { useAppDispatch, useAppSelector } from '@staticcms/core/store/hooks'; import { useAppDispatch, useAppSelector } from '@staticcms/core/store/hooks';
import alert from '../../common/alert/Alert'; import alert from '../../common/alert/Alert';
import Button from '../../common/button/Button'; import Button from '../../common/button/Button';
import confirm from '../../common/confirm/Confirm'; import confirm from '../../common/confirm/Confirm';
import ViewStyleControl from '../../common/view-style/ViewStyleControl';
import CurrentMediaDetails from './CurrentMediaDetails'; import CurrentMediaDetails from './CurrentMediaDetails';
import EmptyMessage from './EmptyMessage'; import EmptyMessage from './EmptyMessage';
import FileUploadButton from './FileUploadButton'; import FileUploadButton from './FileUploadButton';
import MediaLibraryCardGrid from './MediaLibraryCardGrid'; import MediaLibraryCardGrid from './MediaLibraryCardGrid';
import MediaLibrarySearch from './MediaLibrarySearch'; import MediaLibrarySearch from './MediaLibrarySearch';
import type { ViewStyle } from '@staticcms/core/constants/views';
import type { MediaFile, TranslatedProps } from '@staticcms/core/interface'; import type { MediaFile, TranslatedProps } from '@staticcms/core/interface';
import type { ChangeEvent, FC, KeyboardEvent } from 'react'; import type { ChangeEvent, FC, KeyboardEvent } from 'react';
@ -59,7 +55,6 @@ const MediaLibrary: FC<TranslatedProps<MediaLibraryProps>> = ({ canInsert = fals
const [query, setQuery] = useState<string | undefined>(undefined); const [query, setQuery] = useState<string | undefined>(undefined);
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const viewStyle = useAppSelector(selectViewStyle);
const { const {
isVisible, isVisible,
displayURLs, displayURLs,
@ -86,13 +81,6 @@ const MediaLibrary: FC<TranslatedProps<MediaLibraryProps>> = ({ canInsert = fals
const files = useMediaFiles(field); const files = useMediaFiles(field);
const handleViewStyleChange = useCallback(
(viewStyle: ViewStyle) => {
dispatch(changeViewStyle(viewStyle));
},
[dispatch],
);
useEffect(() => { useEffect(() => {
if (!prevIsVisible && isVisible) { if (!prevIsVisible && isVisible) {
setSelectedFile(null); setSelectedFile(null);
@ -378,10 +366,20 @@ const MediaLibrary: FC<TranslatedProps<MediaLibraryProps>> = ({ canInsert = fals
/> />
<div className="flex items-center px-5 pt-4"> <div className="flex items-center px-5 pt-4">
<div className="flex flex-grow gap-4 mr-8"> <div className="flex flex-grow gap-4 mr-8">
<h2 className="text-xl font-semibold flex items-center text-gray-800 dark:text-gray-300"> <h2
<span className="mr-2"> className="
text-xl
font-semibold
flex
items-center
gap-2
text-gray-800
dark:text-gray-300
"
>
<div className="flex items-center">
<PhotoIcon className="w-5 h-5" /> <PhotoIcon className="w-5 h-5" />
</span> </div>
{t('app.header.media')} {t('app.header.media')}
</h2> </h2>
<MediaLibrarySearch <MediaLibrarySearch
@ -393,7 +391,6 @@ const MediaLibrary: FC<TranslatedProps<MediaLibraryProps>> = ({ canInsert = fals
/> />
</div> </div>
<div className="flex gap-3 items-center relative z-20"> <div className="flex gap-3 items-center relative z-20">
<ViewStyleControl viewStyle={viewStyle} onChangeViewStyle={handleViewStyleChange} />
<FileUploadButton imagesOnly={forImage} onChange={handlePersist} /> <FileUploadButton imagesOnly={forImage} onChange={handlePersist} />
{canInsert ? ( {canInsert ? (
<Button <Button

View File

@ -845,8 +845,6 @@ collections:
label: Site Settings label: Site Settings
file: _data/settings.json file: _data/settings.json
description: General Site Settings description: General Site Settings
editor:
preview: true
fields: fields:
- label: Number of posts on frontpage - label: Number of posts on frontpage
name: front_limit name: front_limit