mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Update labs settings in Ember when changed in AdminX (#18231)
refs https://github.com/TryGhost/Product/issues/3832
This commit is contained in:
parent
fada0237b8
commit
3928b628ca
5 changed files with 20 additions and 6 deletions
|
@ -14,6 +14,7 @@ interface AppProps {
|
||||||
officialThemes: OfficialTheme[];
|
officialThemes: OfficialTheme[];
|
||||||
zapierTemplates: ZapierTemplate[];
|
zapierTemplates: ZapierTemplate[];
|
||||||
externalNavigate: (link: ExternalLink) => void;
|
externalNavigate: (link: ExternalLink) => void;
|
||||||
|
toggleFeatureFlag: (flag: string, enabled: boolean) => void;
|
||||||
darkMode?: boolean;
|
darkMode?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +28,7 @@ const queryClient = new QueryClient({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function App({ghostVersion, officialThemes, zapierTemplates, externalNavigate, darkMode = false}: AppProps) {
|
function App({ghostVersion, officialThemes, zapierTemplates, externalNavigate, toggleFeatureFlag, darkMode = false}: AppProps) {
|
||||||
const appClassName = clsx(
|
const appClassName = clsx(
|
||||||
'admin-x-settings h-[100vh] w-full overflow-y-auto overflow-x-hidden',
|
'admin-x-settings h-[100vh] w-full overflow-y-auto overflow-x-hidden',
|
||||||
darkMode && 'dark'
|
darkMode && 'dark'
|
||||||
|
@ -35,7 +36,7 @@ function App({ghostVersion, officialThemes, zapierTemplates, externalNavigate, d
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<ServicesProvider ghostVersion={ghostVersion} officialThemes={officialThemes} zapierTemplates={zapierTemplates}>
|
<ServicesProvider ghostVersion={ghostVersion} officialThemes={officialThemes} toggleFeatureFlag={toggleFeatureFlag} zapierTemplates={zapierTemplates}>
|
||||||
<GlobalDataProvider>
|
<GlobalDataProvider>
|
||||||
<RoutingProvider externalNavigate={externalNavigate}>
|
<RoutingProvider externalNavigate={externalNavigate}>
|
||||||
<GlobalDirtyStateProvider>
|
<GlobalDirtyStateProvider>
|
||||||
|
|
|
@ -15,7 +15,8 @@ interface ServicesContextProps {
|
||||||
ghostVersion: string
|
ghostVersion: string
|
||||||
officialThemes: OfficialTheme[];
|
officialThemes: OfficialTheme[];
|
||||||
zapierTemplates: ZapierTemplate[];
|
zapierTemplates: ZapierTemplate[];
|
||||||
search: SearchService
|
search: SearchService;
|
||||||
|
toggleFeatureFlag: (flag: string, enabled: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ServicesProviderProps {
|
interface ServicesProviderProps {
|
||||||
|
@ -23,16 +24,18 @@ interface ServicesProviderProps {
|
||||||
ghostVersion: string;
|
ghostVersion: string;
|
||||||
zapierTemplates: ZapierTemplate[];
|
zapierTemplates: ZapierTemplate[];
|
||||||
officialThemes: OfficialTheme[];
|
officialThemes: OfficialTheme[];
|
||||||
|
toggleFeatureFlag: (flag: string, enabled: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ServicesContext = createContext<ServicesContextProps>({
|
const ServicesContext = createContext<ServicesContextProps>({
|
||||||
ghostVersion: '',
|
ghostVersion: '',
|
||||||
officialThemes: [],
|
officialThemes: [],
|
||||||
zapierTemplates: [],
|
zapierTemplates: [],
|
||||||
search: {filter: '', setFilter: () => {}, checkVisible: () => true}
|
search: {filter: '', setFilter: () => {}, checkVisible: () => true},
|
||||||
|
toggleFeatureFlag: () => {}
|
||||||
});
|
});
|
||||||
|
|
||||||
const ServicesProvider: React.FC<ServicesProviderProps> = ({children, ghostVersion, zapierTemplates, officialThemes}) => {
|
const ServicesProvider: React.FC<ServicesProviderProps> = ({children, ghostVersion, zapierTemplates, officialThemes, toggleFeatureFlag}) => {
|
||||||
const search = useSearchService();
|
const search = useSearchService();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -40,7 +43,8 @@ const ServicesProvider: React.FC<ServicesProviderProps> = ({children, ghostVersi
|
||||||
ghostVersion,
|
ghostVersion,
|
||||||
officialThemes,
|
officialThemes,
|
||||||
zapierTemplates,
|
zapierTemplates,
|
||||||
search
|
search,
|
||||||
|
toggleFeatureFlag
|
||||||
}}>
|
}}>
|
||||||
{children}
|
{children}
|
||||||
</ServicesContext.Provider>
|
</ServicesContext.Provider>
|
||||||
|
|
|
@ -4,12 +4,14 @@ import {ConfigResponseType, configDataType} from '../../../../api/config';
|
||||||
import {getSettingValue, useEditSettings} from '../../../../api/settings';
|
import {getSettingValue, useEditSettings} from '../../../../api/settings';
|
||||||
import {useGlobalData} from '../../../providers/GlobalDataProvider';
|
import {useGlobalData} from '../../../providers/GlobalDataProvider';
|
||||||
import {useQueryClient} from '@tanstack/react-query';
|
import {useQueryClient} from '@tanstack/react-query';
|
||||||
|
import {useServices} from '../../../providers/ServiceProvider';
|
||||||
|
|
||||||
const FeatureToggle: React.FC<{ flag: string; }> = ({flag}) => {
|
const FeatureToggle: React.FC<{ flag: string; }> = ({flag}) => {
|
||||||
const {settings} = useGlobalData();
|
const {settings} = useGlobalData();
|
||||||
const labs = JSON.parse(getSettingValue<string>(settings, 'labs') || '{}');
|
const labs = JSON.parse(getSettingValue<string>(settings, 'labs') || '{}');
|
||||||
const {mutateAsync: editSettings} = useEditSettings();
|
const {mutateAsync: editSettings} = useEditSettings();
|
||||||
const client = useQueryClient();
|
const client = useQueryClient();
|
||||||
|
const {toggleFeatureFlag} = useServices();
|
||||||
|
|
||||||
return <Toggle checked={labs[flag]} onChange={async () => {
|
return <Toggle checked={labs[flag]} onChange={async () => {
|
||||||
const newValue = !labs[flag];
|
const newValue = !labs[flag];
|
||||||
|
@ -17,6 +19,7 @@ const FeatureToggle: React.FC<{ flag: string; }> = ({flag}) => {
|
||||||
key: 'labs',
|
key: 'labs',
|
||||||
value: JSON.stringify({...labs, [flag]: newValue})
|
value: JSON.stringify({...labs, [flag]: newValue})
|
||||||
}]);
|
}]);
|
||||||
|
toggleFeatureFlag(flag, newValue);
|
||||||
client.setQueriesData([configDataType], current => ({
|
client.setQueriesData([configDataType], current => ({
|
||||||
config: {
|
config: {
|
||||||
...(current as ConfigResponseType).config,
|
...(current as ConfigResponseType).config,
|
||||||
|
|
|
@ -29,6 +29,7 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
|
||||||
ref: 'TryGhost/Edition',
|
ref: 'TryGhost/Edition',
|
||||||
image: 'assets/img/themes/Edition.png'
|
image: 'assets/img/themes/Edition.png'
|
||||||
}]}
|
}]}
|
||||||
|
toggleFeatureFlag={() => {}}
|
||||||
zapierTemplates={[]}
|
zapierTemplates={[]}
|
||||||
/>
|
/>
|
||||||
</React.StrictMode>
|
</React.StrictMode>
|
||||||
|
|
|
@ -275,6 +275,10 @@ export default class AdminXSettings extends Component {
|
||||||
this.router.transitionTo(route, ...models);
|
this.router.transitionTo(route, ...models);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
toggleFeatureFlag = (flag, value) => {
|
||||||
|
this.feature.set(flag, value);
|
||||||
|
};
|
||||||
|
|
||||||
editorResource = fetchSettings();
|
editorResource = fetchSettings();
|
||||||
|
|
||||||
AdminXApp = (props) => {
|
AdminXApp = (props) => {
|
||||||
|
@ -310,6 +314,7 @@ export default class AdminXSettings extends Component {
|
||||||
officialThemes={officialThemes}
|
officialThemes={officialThemes}
|
||||||
zapierTemplates={zapierTemplates}
|
zapierTemplates={zapierTemplates}
|
||||||
externalNavigate={this.externalNavigate}
|
externalNavigate={this.externalNavigate}
|
||||||
|
toggleFeatureFlag={this.toggleFeatureFlag}
|
||||||
darkMode={this.feature.nightShift}
|
darkMode={this.feature.nightShift}
|
||||||
/>
|
/>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
|
|
Loading…
Add table
Reference in a new issue