mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-30 21:40:39 +03:00
Broke down design settings in AdminX
refs. https://github.com/TryGhost/Team/issues/3354
This commit is contained in:
parent
d7e5661a35
commit
a3cba13381
@ -71,8 +71,10 @@ const Modal: React.FC<ModalProps> = ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//bg-[linear-gradient(0deg,rgba(255,255,255,1)_85%,rgba(255,255,255,0)_100%)]
|
let modalClasses = clsx(
|
||||||
let modalClasses = clsx('relative z-50 mx-auto flex w-full flex-col justify-between rounded bg-white shadow-xl');
|
'relative z-50 mx-auto flex w-full flex-col justify-between rounded bg-white shadow-xl'
|
||||||
|
// !stickyFooter && ' overflow-hidden'
|
||||||
|
);
|
||||||
let backdropClasses = clsx('fixed inset-0 z-40 h-[100vh] w-[100vw] overflow-y-scroll ');
|
let backdropClasses = clsx('fixed inset-0 z-40 h-[100vh] w-[100vw] overflow-y-scroll ');
|
||||||
|
|
||||||
let padding = '';
|
let padding = '';
|
||||||
|
@ -1,124 +1,35 @@
|
|||||||
|
import BrandSettings from './designAndBranding/BrandSettings';
|
||||||
import Button from '../../../../admin-x-ds/global/Button';
|
import Button from '../../../../admin-x-ds/global/Button';
|
||||||
import DesktopChrome from '../../../../admin-x-ds/global/DesktopChrome';
|
|
||||||
import Heading from '../../../../admin-x-ds/global/Heading';
|
|
||||||
import Hint from '../../../../admin-x-ds/global/Hint';
|
|
||||||
import NiceModal from '@ebay/nice-modal-react';
|
import NiceModal from '@ebay/nice-modal-react';
|
||||||
import PreviewModal from '../../../../admin-x-ds/global/PreviewModal';
|
import PreviewModal from '../../../../admin-x-ds/global/PreviewModal';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import SettingGroup from '../../../../admin-x-ds/settings/SettingGroup';
|
import SettingGroup from '../../../../admin-x-ds/settings/SettingGroup';
|
||||||
import SettingGroupContent from '../../../../admin-x-ds/settings/SettingGroupContent';
|
|
||||||
import TabView from '../../../../admin-x-ds/global/TabView';
|
import TabView from '../../../../admin-x-ds/global/TabView';
|
||||||
import TextField from '../../../../admin-x-ds/global/TextField';
|
import ThemePreview from './designAndBranding/ThemePreivew';
|
||||||
import useSettingGroup from '../../../../hooks/useSettingGroup';
|
import ThemeSettings from './designAndBranding/ThemeSettings';
|
||||||
import {Tab} from '../../../../admin-x-ds/global/TabView';
|
import {Tab} from '../../../../admin-x-ds/global/TabView';
|
||||||
|
|
||||||
const Preview: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<DesktopChrome>
|
|
||||||
<div className='flex h-full items-center justify-center bg-grey-50 text-sm text-grey-400'>
|
|
||||||
Preview iframe
|
|
||||||
</div>
|
|
||||||
</DesktopChrome>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const Brand: React.FC = () => {
|
|
||||||
const {
|
|
||||||
getSettingValues
|
|
||||||
} = useSettingGroup();
|
|
||||||
|
|
||||||
const [description, accentColor] = getSettingValues(['description', 'accent_color']) as string[];
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className='mt-7'>
|
|
||||||
<SettingGroupContent>
|
|
||||||
<TextField
|
|
||||||
key='site-description'
|
|
||||||
clearBg={true}
|
|
||||||
hint='Used in your theme, meta data and search results'
|
|
||||||
title='Site description'
|
|
||||||
value={description}
|
|
||||||
/>
|
|
||||||
<div className='flex items-center justify-between gap-3'>
|
|
||||||
<Heading level={6}>Accent color</Heading>
|
|
||||||
<div className='relative max-w-[70px]'>
|
|
||||||
{/* <span className='absolute left-1 top-[9px] text-grey-600'>#</span> */}
|
|
||||||
<TextField
|
|
||||||
key='accent-color'
|
|
||||||
className='text-right'
|
|
||||||
clearBg={true}
|
|
||||||
maxLength={7}
|
|
||||||
value={accentColor}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<Heading level={6}>Publication icon</Heading>
|
|
||||||
<div className='mt-2 flex gap-3'>
|
|
||||||
<Hint className='mr-5'>A square, social icon, at least 60x60px</Hint>
|
|
||||||
<Button color='grey' label='Upload icon' />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<Heading level={6}>Publication logo</Heading>
|
|
||||||
<Button className='mt-2' color='grey' fullWidth={true} label='Upload logo' />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<Heading level={6}>Publication cover</Heading>
|
|
||||||
<Button className='mt-2' color='grey' fullWidth={true} label='Upload cover' />
|
|
||||||
</div>
|
|
||||||
</SettingGroupContent>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const SiteWide: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<div className='mt-2'>
|
|
||||||
Site wide design settings
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const Homepage: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<div className='mt-2'>
|
|
||||||
Homepage design settings
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const Post: React.FC = () => {
|
|
||||||
return (
|
|
||||||
<div className='mt-2'>
|
|
||||||
Post design settings
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const Sidebar: React.FC = () => {
|
const Sidebar: React.FC = () => {
|
||||||
const tabs: Tab[] = [
|
const tabs: Tab[] = [
|
||||||
{
|
{
|
||||||
id: 'brand',
|
id: 'brand',
|
||||||
title: 'Brand',
|
title: 'Brand',
|
||||||
contents: <Brand />
|
contents: <BrandSettings />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'site-wide',
|
id: 'site-wide',
|
||||||
title: 'Site wide',
|
title: 'Site wide',
|
||||||
contents: <SiteWide />
|
contents: <ThemeSettings settingSection='site-wide' />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'homepage',
|
id: 'homepage',
|
||||||
title: 'Homepage',
|
title: 'Homepage',
|
||||||
contents: <Homepage />
|
contents: <ThemeSettings settingSection='homepage' />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'post',
|
id: 'post',
|
||||||
title: 'Post',
|
title: 'Post',
|
||||||
contents: <Post />
|
contents: <ThemeSettings settingSection='post' />
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -132,7 +43,7 @@ const DesignModal: React.FC = () => {
|
|||||||
NiceModal.show(PreviewModal, {
|
NiceModal.show(PreviewModal, {
|
||||||
title: 'Design',
|
title: 'Design',
|
||||||
okLabel: 'Save',
|
okLabel: 'Save',
|
||||||
preview: <Preview />,
|
preview: <ThemePreview />,
|
||||||
sidebar: <Sidebar />
|
sidebar: <Sidebar />
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
import Button from '../../../../../admin-x-ds/global/Button';
|
||||||
|
import Heading from '../../../../../admin-x-ds/global/Heading';
|
||||||
|
import Hint from '../../../../../admin-x-ds/global/Hint';
|
||||||
|
import React from 'react';
|
||||||
|
import SettingGroupContent from '../../../../../admin-x-ds/settings/SettingGroupContent';
|
||||||
|
import TextField from '../../../../../admin-x-ds/global/TextField';
|
||||||
|
import useSettingGroup from '../../../../../hooks/useSettingGroup';
|
||||||
|
|
||||||
|
const BrandSettings: React.FC = () => {
|
||||||
|
const {
|
||||||
|
getSettingValues
|
||||||
|
} = useSettingGroup();
|
||||||
|
|
||||||
|
const [description, accentColor] = getSettingValues(['description', 'accent_color']) as string[];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className='mt-7'>
|
||||||
|
<SettingGroupContent>
|
||||||
|
<TextField
|
||||||
|
key='site-description'
|
||||||
|
clearBg={true}
|
||||||
|
hint='Used in your theme, meta data and search results'
|
||||||
|
title='Site description'
|
||||||
|
value={description}
|
||||||
|
/>
|
||||||
|
<div className='flex items-center justify-between gap-3'>
|
||||||
|
<Heading level={6}>Accent color</Heading>
|
||||||
|
<div className='relative max-w-[70px]'>
|
||||||
|
{/* <span className='absolute left-1 top-[9px] text-grey-600'>#</span> */}
|
||||||
|
<TextField
|
||||||
|
key='accent-color'
|
||||||
|
className='text-right'
|
||||||
|
clearBg={true}
|
||||||
|
maxLength={7}
|
||||||
|
value={accentColor}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Heading level={6}>Publication icon</Heading>
|
||||||
|
<div className='mt-2 flex gap-3'>
|
||||||
|
<Hint className='mr-5'>A square, social icon, at least 60x60px</Hint>
|
||||||
|
<Button color='grey' label='Upload icon' />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Heading level={6}>Publication logo</Heading>
|
||||||
|
<Button className='mt-2' color='grey' fullWidth={true} label='Upload logo' />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Heading level={6}>Publication cover</Heading>
|
||||||
|
<Button className='mt-2' color='grey' fullWidth={true} label='Upload cover' />
|
||||||
|
</div>
|
||||||
|
</SettingGroupContent>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BrandSettings;
|
@ -0,0 +1,16 @@
|
|||||||
|
import DesktopChrome from '../../../../../admin-x-ds/global/DesktopChrome';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const ThemePreview: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<DesktopChrome>
|
||||||
|
<div className='flex h-full items-center justify-center bg-grey-50 text-sm text-grey-400'>
|
||||||
|
Preview iframe
|
||||||
|
</div>
|
||||||
|
</DesktopChrome>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ThemePreview;
|
@ -0,0 +1,17 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
type ThemeSettingSection = 'site-wide' | 'homepage' | 'post';
|
||||||
|
|
||||||
|
interface ThemeSettingsProps {
|
||||||
|
settingSection: ThemeSettingSection;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ThemeSettings: React.FC<ThemeSettingsProps> = ({settingSection}) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{settingSection}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ThemeSettings;
|
Loading…
Reference in New Issue
Block a user