Skip to content

Commit d17c290

Browse files
committed
fix: build
1 parent e1a9fca commit d17c290

3 files changed

Lines changed: 84 additions & 82 deletions

File tree

src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export function App() {
112112
<AuthProvider>
113113
<AdminSettingsProvider>
114114
<RateLimitProvider>
115-
<BrowserRouter>
115+
<BrowserRouter basename={basename}>
116116
<AppRoutes />
117117
</BrowserRouter>
118118
</RateLimitProvider>

src/lib/admin.ts

Lines changed: 2 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,2 @@
1-
import React, { createContext, useContext, useEffect, useState } from 'react';
2-
import { getFile, putFile } from './github';
3-
import { parseFrontmatter, stringifyFrontmatter } from './utils';
4-
5-
export interface AdminSettings {
6-
maintenanceMode: boolean;
7-
allowSignups: boolean;
8-
adminNotice: string;
9-
showDaysSinceFirstPost: boolean;
10-
}
11-
12-
export const adminSettingsFile = 'admin-settings.md';
13-
14-
export const defaultAdminSettings: AdminSettings = {
15-
maintenanceMode: false,
16-
allowSignups: true,
17-
adminNotice: 'Добро пожаловать в админ-панель.',
18-
showDaysSinceFirstPost: false
19-
};
20-
21-
export async function loadAdminSettings(): Promise<AdminSettings> {
22-
const file = await getFile(adminSettingsFile);
23-
if (!file) {
24-
return defaultAdminSettings;
25-
}
26-
27-
const { data } = parseFrontmatter<AdminSettings>(file.content);
28-
return { ...defaultAdminSettings, ...data };
29-
}
30-
31-
export async function saveAdminSettings(settings: AdminSettings): Promise<void> {
32-
const content = stringifyFrontmatter(settings, '');
33-
await putFile(adminSettingsFile, content, 'Update admin settings');
34-
}
35-
36-
interface AdminSettingsContextType {
37-
settings: AdminSettings;
38-
setSettings: React.Dispatch<React.SetStateAction<AdminSettings>>;
39-
saveSettings: (settings: AdminSettings) => Promise<void>;
40-
isLoading: boolean;
41-
}
42-
43-
const AdminSettingsContext = createContext<AdminSettingsContextType | null>(null);
44-
45-
export function AdminSettingsProvider({ children }: { children: React.ReactNode }) {
46-
const [settings, setSettings] = useState<AdminSettings>(defaultAdminSettings);
47-
const [isLoading, setIsLoading] = useState(true);
48-
49-
useEffect(() => {
50-
loadAdminSettings()
51-
.then((loadedSettings) => {
52-
setSettings(loadedSettings);
53-
})
54-
.catch((error) => {
55-
console.error('Failed to load admin settings:', error);
56-
})
57-
.finally(() => {
58-
setIsLoading(false);
59-
});
60-
}, []);
61-
62-
const saveSettings = async (updatedSettings: AdminSettings) => {
63-
await saveAdminSettings(updatedSettings);
64-
setSettings(updatedSettings);
65-
};
66-
67-
return (
68-
<AdminSettingsContext.Provider
69-
value={{ settings, setSettings, saveSettings, isLoading }}>
70-
{children}
71-
</AdminSettingsContext.Provider>
72-
);
73-
}
74-
75-
export function useAdminSettings() {
76-
const context = useContext(AdminSettingsContext);
77-
if (!context) {
78-
throw new Error('useAdminSettings must be used within AdminSettingsProvider');
79-
}
80-
return context;
81-
}
1+
export { AdminSettingsProvider, loadAdminSettings, saveAdminSettings, useAdminSettings, defaultAdminSettings, adminSettingsFile } from './admin.tsx';
2+
export type { AdminSettings } from './admin.tsx';

src/lib/admin.tsx

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import React, { createContext, useContext, useEffect, useState } from 'react';
2+
import { getFile, putFile } from './github';
3+
import { parseFrontmatter, stringifyFrontmatter } from './utils';
4+
5+
export interface AdminSettings {
6+
maintenanceMode: boolean;
7+
allowSignups: boolean;
8+
adminNotice: string;
9+
showDaysSinceFirstPost: boolean;
10+
}
11+
12+
export const adminSettingsFile = 'admin-settings.md';
13+
14+
export const defaultAdminSettings: AdminSettings = {
15+
maintenanceMode: false,
16+
allowSignups: true,
17+
adminNotice: 'Добро пожаловать в админ-панель.',
18+
showDaysSinceFirstPost: false
19+
};
20+
21+
export async function loadAdminSettings(): Promise<AdminSettings> {
22+
const file = await getFile(adminSettingsFile);
23+
if (!file) {
24+
return defaultAdminSettings;
25+
}
26+
27+
const { data } = parseFrontmatter<AdminSettings>(file.content);
28+
return { ...defaultAdminSettings, ...data };
29+
}
30+
31+
export async function saveAdminSettings(settings: AdminSettings): Promise<void> {
32+
const content = stringifyFrontmatter(settings, '');
33+
await putFile(adminSettingsFile, content, 'Update admin settings');
34+
}
35+
36+
interface AdminSettingsContextType {
37+
settings: AdminSettings;
38+
setSettings: React.Dispatch<React.SetStateAction<AdminSettings>>;
39+
saveSettings: (settings: AdminSettings) => Promise<void>;
40+
isLoading: boolean;
41+
}
42+
43+
const AdminSettingsContext = createContext<AdminSettingsContextType | null>(null);
44+
45+
export function AdminSettingsProvider({ children }: { children: React.ReactNode }) {
46+
const [settings, setSettings] = useState<AdminSettings>(defaultAdminSettings);
47+
const [isLoading, setIsLoading] = useState(true);
48+
49+
useEffect(() => {
50+
loadAdminSettings()
51+
.then((loadedSettings) => {
52+
setSettings(loadedSettings);
53+
})
54+
.catch((error) => {
55+
console.error('Failed to load admin settings:', error);
56+
})
57+
.finally(() => {
58+
setIsLoading(false);
59+
});
60+
}, []);
61+
62+
const saveSettings = async (updatedSettings: AdminSettings) => {
63+
await saveAdminSettings(updatedSettings);
64+
setSettings(updatedSettings);
65+
};
66+
67+
return (
68+
<AdminSettingsContext.Provider
69+
value={{ settings, setSettings, saveSettings, isLoading }}>
70+
{children}
71+
</AdminSettingsContext.Provider>
72+
);
73+
}
74+
75+
export function useAdminSettings() {
76+
const context = useContext(AdminSettingsContext);
77+
if (!context) {
78+
throw new Error('useAdminSettings must be used within AdminSettingsProvider');
79+
}
80+
return context;
81+
}

0 commit comments

Comments
 (0)