mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
Updated AdminX search to also hide sidebar items (#18109)
refs https://github.com/TryGhost/Product/issues/3832
This commit is contained in:
parent
dbc93bf1c7
commit
7462ad2be6
8 changed files with 58 additions and 41 deletions
|
@ -1,23 +1,28 @@
|
|||
import React from 'react';
|
||||
import clsx from 'clsx';
|
||||
import {useScrollSectionContext} from '../../hooks/useScrollSection';
|
||||
import {useSearch} from '../../components/providers/ServiceProvider';
|
||||
|
||||
interface Props {
|
||||
title: React.ReactNode;
|
||||
navid?: string;
|
||||
keywords?: string[];
|
||||
onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
|
||||
}
|
||||
|
||||
const SettingNavItem: React.FC<Props> = ({
|
||||
title,
|
||||
navid = '',
|
||||
keywords,
|
||||
onClick = () => {}
|
||||
}) => {
|
||||
const {currentSection} = useScrollSectionContext();
|
||||
const {checkVisible} = useSearch();
|
||||
|
||||
const classNames = clsx(
|
||||
'block px-0 py-1 text-sm dark:text-white',
|
||||
(currentSection === navid) && 'font-bold'
|
||||
(currentSection === navid) && 'font-bold',
|
||||
!checkVisible(keywords || []) && 'hidden'
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
import React from 'react';
|
||||
import SettingSectionHeader from './SettingSectionHeader';
|
||||
import {useSearch} from '../../components/providers/ServiceProvider';
|
||||
|
||||
interface Props {
|
||||
title?: string;
|
||||
keywords?: string[];
|
||||
children?: React.ReactNode;
|
||||
}
|
||||
|
||||
const SettingNavSection: React.FC<Props> = ({title, children}) => {
|
||||
const SettingNavSection: React.FC<Props> = ({title, keywords, children}) => {
|
||||
const {checkVisible} = useSearch();
|
||||
|
||||
if (!checkVisible(keywords || [])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{title && <SettingSectionHeader title={title} />}
|
||||
|
@ -19,4 +27,4 @@ const SettingNavSection: React.FC<Props> = ({title, children}) => {
|
|||
);
|
||||
};
|
||||
|
||||
export default SettingNavSection;
|
||||
export default SettingNavSection;
|
||||
|
|
|
@ -5,8 +5,13 @@ import SettingNavSection from '../admin-x-ds/settings/SettingNavSection';
|
|||
import TextField from '../admin-x-ds/global/form/TextField';
|
||||
import useFeatureFlag from '../hooks/useFeatureFlag';
|
||||
import useRouting from '../hooks/useRouting';
|
||||
import {searchKeywords as advancedSearchKeywords} from './settings/advanced/AdvancedSettings';
|
||||
import {searchKeywords as emailSearchKeywords} from './settings/email/EmailSettings';
|
||||
import {searchKeywords as generalSearchKeywords} from './settings/general/GeneralSettings';
|
||||
import {getSettingValues} from '../api/settings';
|
||||
import {isEditorUser} from '../api/users';
|
||||
import {searchKeywords as membershipSearchKeywords} from './settings/membership/MembershipSettings';
|
||||
import {searchKeywords as siteSearchKeywords} from './settings/site/SiteSettings';
|
||||
import {useGlobalData} from './providers/GlobalDataProvider';
|
||||
import {useSearch} from './providers/ServiceProvider';
|
||||
|
||||
|
@ -45,51 +50,50 @@ const Sidebar: React.FC = () => {
|
|||
<TextField autoComplete="off" className='border-b border-grey-500 bg-transparent px-3 py-1.5 pl-[24px] text-sm dark:text-white' placeholder="Search" title="Search" value={filter} hideTitle unstyled onChange={updateSearch} />
|
||||
</div>
|
||||
<div className="hidden tablet:!visible tablet:!block">
|
||||
<SettingNavSection title="General">
|
||||
<SettingNavItem navid='title-and-description' title="Title and description" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='timezone' title="Timezone" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='publication-language' title="Publication language" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='metadata' title="Meta data" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='twitter' title="Twitter card" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='facebook' title="Facebook card" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='social-accounts' title="Social accounts" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='locksite' title="Make this site private" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='users' title="Staff" onClick={handleSectionClick} />
|
||||
<SettingNavSection keywords={Object.values(generalSearchKeywords).flat()} title="General">
|
||||
<SettingNavItem keywords={generalSearchKeywords.titleAndDescription} navid='title-and-description' title="Title and description" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.timeZone} navid='timezone' title="Timezone" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.publicationLanguage} navid='publication-language' title="Publication language" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.metadata} navid='metadata' title="Meta data" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.twitter} navid='twitter' title="Twitter card" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.facebook} navid='facebook' title="Facebook card" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.socialAccounts} navid='social-accounts' title="Social accounts" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.lockSite} navid='locksite' title="Make this site private" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={generalSearchKeywords.users} navid='users' title="Staff" onClick={handleSectionClick} />
|
||||
</SettingNavSection>
|
||||
|
||||
<SettingNavSection title="Site">
|
||||
{/* <SettingNavItem navid='theme' title="Theme" onClick={handleSectionClick} /> */}
|
||||
<SettingNavItem navid='design' title="Branding and design" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='navigation' title="Navigation" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='announcement-bar' title="Announcement bar" onClick={handleSectionClick} />
|
||||
<SettingNavSection keywords={Object.values(siteSearchKeywords).flat()} title="Site">
|
||||
<SettingNavItem keywords={siteSearchKeywords.design} navid='design' title="Branding and design" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={siteSearchKeywords.navigation} navid='navigation' title="Navigation" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={siteSearchKeywords.announcementBar} navid='announcement-bar' title="Announcement bar" onClick={handleSectionClick} />
|
||||
</SettingNavSection>
|
||||
|
||||
<SettingNavSection title="Membership">
|
||||
<SettingNavItem navid='portal' title="Portal" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='access' title="Access" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='tiers' title="Tiers" onClick={handleSectionClick} />
|
||||
{hasTipsAndDonations && <SettingNavItem navid='tips-or-donations' title="Tips or donations" onClick={handleSectionClick} />}
|
||||
<SettingNavItem navid='embed-signup-form' title="Embeddable signup form" onClick={handleSectionClick} />
|
||||
{hasRecommendations && <SettingNavItem navid='recommendations' title="Recommendations" onClick={handleSectionClick} />}
|
||||
<SettingNavItem navid='analytics' title="Analytics" onClick={handleSectionClick} />
|
||||
<SettingNavSection keywords={Object.values(membershipSearchKeywords).flat()} title="Membership">
|
||||
<SettingNavItem keywords={membershipSearchKeywords.portal} navid='portal' title="Portal" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={membershipSearchKeywords.access} navid='access' title="Access" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={membershipSearchKeywords.tiers} navid='tiers' title="Tiers" onClick={handleSectionClick} />
|
||||
{hasTipsAndDonations && <SettingNavItem keywords={membershipSearchKeywords.tips} navid='tips-or-donations' title="Tips or donations" onClick={handleSectionClick} />}
|
||||
<SettingNavItem keywords={membershipSearchKeywords.embedSignupForm} navid='embed-signup-form' title="Embeddable signup form" onClick={handleSectionClick} />
|
||||
{hasRecommendations && <SettingNavItem keywords={membershipSearchKeywords.recommendations} navid='recommendations' title="Recommendations" onClick={handleSectionClick} />}
|
||||
<SettingNavItem keywords={membershipSearchKeywords.analytics} navid='analytics' title="Analytics" onClick={handleSectionClick} />
|
||||
</SettingNavSection>
|
||||
|
||||
<SettingNavSection title="Email newsletter">
|
||||
<SettingNavItem navid='enable-newsletters' title="Newsletter sending" onClick={handleSectionClick} />
|
||||
<SettingNavSection keywords={Object.values(emailSearchKeywords).flat()} title="Email newsletter">
|
||||
<SettingNavItem keywords={emailSearchKeywords.enableNewsletters} navid='enable-newsletters' title="Newsletter sending" onClick={handleSectionClick} />
|
||||
{newslettersEnabled !== 'disabled' && (
|
||||
<>
|
||||
<SettingNavItem navid='newsletters' title="Newsletters" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='default-recipients' title="Default recipients" onClick={handleSectionClick} />
|
||||
{!config.mailgunIsConfigured && <SettingNavItem navid='mailgun' title="Mailgun settings" onClick={handleSectionClick} />}
|
||||
<SettingNavItem keywords={emailSearchKeywords.newsletters} navid='newsletters' title="Newsletters" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={emailSearchKeywords.defaultRecipients} navid='default-recipients' title="Default recipients" onClick={handleSectionClick} />
|
||||
{!config.mailgunIsConfigured && <SettingNavItem keywords={emailSearchKeywords.mailgun} navid='mailgun' title="Mailgun settings" onClick={handleSectionClick} />}
|
||||
</>
|
||||
)}
|
||||
</SettingNavSection>
|
||||
|
||||
<SettingNavSection title="Advanced">
|
||||
<SettingNavItem navid='integrations' title="Integrations" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='code-injection' title="Code injection" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='labs' title="Labs" onClick={handleSectionClick} />
|
||||
<SettingNavItem navid='history' title="History" onClick={handleSectionClick} />
|
||||
<SettingNavSection keywords={Object.values(advancedSearchKeywords).flat()} title="Advanced">
|
||||
<SettingNavItem keywords={advancedSearchKeywords.integrations} navid='integrations' title="Integrations" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={advancedSearchKeywords.codeInjection} navid='code-injection' title="Code injection" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={advancedSearchKeywords.labs} navid='labs' title="Labs" onClick={handleSectionClick} />
|
||||
<SettingNavItem keywords={advancedSearchKeywords.history} navid='history' title="History" onClick={handleSectionClick} />
|
||||
</SettingNavSection>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@ import Labs from './Labs';
|
|||
import React from 'react';
|
||||
import SettingSection from '../../../admin-x-ds/settings/SettingSection';
|
||||
|
||||
const searchKeywords = {
|
||||
export const searchKeywords = {
|
||||
integrations: ['integration', 'zapier', 'slack', 'amp', 'unsplash', 'first promoter', 'firstpromoter', 'pintura', 'disqus', 'analytics', 'ulysses', 'typeform', 'buffer', 'plausible', 'github'],
|
||||
codeInjection: ['newsletter', 'enable', 'disable', 'turn on'],
|
||||
labs: ['labs', 'alpha', 'beta', 'flag', 'import', 'export', 'migrate', 'routes', 'redirects', 'translation', 'delete'],
|
||||
|
|
|
@ -7,7 +7,7 @@ import SettingSection from '../../../admin-x-ds/settings/SettingSection';
|
|||
import {getSettingValues} from '../../../api/settings';
|
||||
import {useGlobalData} from '../../providers/GlobalDataProvider';
|
||||
|
||||
const searchKeywords = {
|
||||
export const searchKeywords = {
|
||||
enableNewsletters: ['newsletter', 'enable', 'disable', 'turn on'],
|
||||
newsletters: ['newsletter', 'email'],
|
||||
defaultRecipients: ['newsletter', 'default recipients', 'email'],
|
||||
|
|
|
@ -11,7 +11,7 @@ import TitleAndDescription from './TitleAndDescription';
|
|||
import Twitter from './Twitter';
|
||||
import Users from './Users';
|
||||
|
||||
const searchKeywords = {
|
||||
export const searchKeywords = {
|
||||
titleAndDescription: ['title and description', 'site title', 'site description'],
|
||||
timeZone: ['time', 'date', 'site timezone', 'time zone'],
|
||||
publicationLanguage: ['publication language', 'locale'],
|
||||
|
|
|
@ -9,7 +9,7 @@ import Tiers from './Tiers';
|
|||
import TipsOrDonations from './TipsOrDonations';
|
||||
import useFeatureFlag from '../../../hooks/useFeatureFlag';
|
||||
|
||||
const searchKeywords = {
|
||||
export const searchKeywords = {
|
||||
portal: ['portal', 'signup', 'sign up', 'signin', 'sign in', 'login', 'account', 'membership'],
|
||||
access: ['default', 'access', 'subscription', 'post', 'membership'],
|
||||
tiers: ['tiers', 'payment', 'paid'],
|
||||
|
|
|
@ -4,7 +4,7 @@ import Navigation from './Navigation';
|
|||
import React from 'react';
|
||||
import SettingSection from '../../../admin-x-ds/settings/SettingSection';
|
||||
|
||||
const searchKeywords = {
|
||||
export const searchKeywords = {
|
||||
design: ['design', 'branding', 'logo', 'cover', 'colors', 'fonts', 'background', 'themes', 'appearance', 'style'],
|
||||
navigation: ['navigation', 'menus', 'primary', 'secondary', 'links'],
|
||||
announcementBar: ['announcement', 'bar', 'important', 'banner']
|
||||
|
|
Loading…
Add table
Reference in a new issue