Fix preview, delete, extras menu showing, media header, remove view controls from media library
This commit is contained in:
parent
31b5588251
commit
7d8e0c3864
@ -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
|
||||||
|
@ -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 ? (
|
||||||
|
@ -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) {
|
||||||
|
@ -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}
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user