diff --git a/src/api/adminLegalPages.ts b/src/api/adminLegalPages.ts new file mode 100644 index 0000000..855862a --- /dev/null +++ b/src/api/adminLegalPages.ts @@ -0,0 +1,152 @@ +import apiClient from './client'; + +export type LegalDisplayMode = 'bot' | 'web' | 'both'; + +export interface LegalDocumentItem { + language: string; + content: string; + is_enabled: boolean; + updated_at: string | null; +} + +export interface LegalDocumentResponse { + display_mode: LegalDisplayMode; + display_mode_env_locked: boolean; + items: LegalDocumentItem[]; +} + +export interface LegalDocumentUpdateRequest { + display_mode?: LegalDisplayMode; + items?: Array<{ language: string; content: string; is_enabled: boolean }>; +} + +export interface RulesItem { + language: string; + content: string; + updated_at: string | null; +} + +export interface RulesResponse { + display_mode: LegalDisplayMode; + display_mode_env_locked: boolean; + items: RulesItem[]; +} + +export interface RulesUpdateRequest { + display_mode?: LegalDisplayMode; + items?: Array<{ language: string; content: string }>; +} + +export interface FaqSettingItem { + language: string; + is_enabled: boolean; +} + +export interface FaqPageItem { + id: number; + language: string; + title: string; + content: string; + display_order: number; + is_active: boolean; + updated_at: string | null; +} + +export interface FaqResponse { + display_mode: LegalDisplayMode; + display_mode_env_locked: boolean; + settings: FaqSettingItem[]; + pages: FaqPageItem[]; +} + +export interface FaqUpdateRequest { + display_mode?: LegalDisplayMode; + settings?: FaqSettingItem[]; +} + +export interface FaqPageCreateRequest { + language: string; + title: string; + content: string; + display_order?: number; + is_active?: boolean; +} + +export interface FaqPageUpdateRequest { + title?: string; + content?: string; + display_order?: number; + is_active?: boolean; +} + +export const adminLegalPagesApi = { + getPrivacyPolicy: async (): Promise => { + const response = await apiClient.get( + '/cabinet/admin/legal-pages/privacy-policy', + ); + return response.data; + }, + + updatePrivacyPolicy: async (data: LegalDocumentUpdateRequest): Promise => { + const response = await apiClient.put( + '/cabinet/admin/legal-pages/privacy-policy', + data, + ); + return response.data; + }, + + getPublicOffer: async (): Promise => { + const response = await apiClient.get( + '/cabinet/admin/legal-pages/public-offer', + ); + return response.data; + }, + + updatePublicOffer: async (data: LegalDocumentUpdateRequest): Promise => { + const response = await apiClient.put( + '/cabinet/admin/legal-pages/public-offer', + data, + ); + return response.data; + }, + + getRules: async (): Promise => { + const response = await apiClient.get('/cabinet/admin/legal-pages/rules'); + return response.data; + }, + + updateRules: async (data: RulesUpdateRequest): Promise => { + const response = await apiClient.put('/cabinet/admin/legal-pages/rules', data); + return response.data; + }, + + getFaq: async (): Promise => { + const response = await apiClient.get('/cabinet/admin/legal-pages/faq'); + return response.data; + }, + + updateFaq: async (data: FaqUpdateRequest): Promise => { + const response = await apiClient.put('/cabinet/admin/legal-pages/faq', data); + return response.data; + }, + + createFaqPage: async (data: FaqPageCreateRequest): Promise => { + const response = await apiClient.post( + '/cabinet/admin/legal-pages/faq/pages', + data, + ); + return response.data; + }, + + updateFaqPage: async (id: number, data: FaqPageUpdateRequest): Promise => { + const response = await apiClient.put( + `/cabinet/admin/legal-pages/faq/pages/${id}`, + data, + ); + return response.data; + }, + + deleteFaqPage: async (id: number): Promise => { + await apiClient.delete(`/cabinet/admin/legal-pages/faq/pages/${id}`); + }, +}; diff --git a/src/api/info.ts b/src/api/info.ts index 7ccf50d..76894d1 100644 --- a/src/api/info.ts +++ b/src/api/info.ts @@ -37,6 +37,13 @@ export interface LanguageInfo { flag: string; } +export interface InfoVisibility { + faq: boolean; + rules: boolean; + privacy: boolean; + offer: boolean; +} + export const infoApi = { // Get FAQ pages list getFaqPages: async (): Promise => { @@ -99,4 +106,9 @@ export const infoApi = { const response = await apiClient.get('/cabinet/info/support-config'); return response.data; }, + + getVisibility: async (): Promise => { + const response = await apiClient.get('/cabinet/info/visibility'); + return response.data; + }, }; diff --git a/src/api/infoPages.ts b/src/api/infoPages.ts index 39a39a4..b482510 100644 --- a/src/api/infoPages.ts +++ b/src/api/infoPages.ts @@ -4,6 +4,8 @@ export type InfoPageType = 'page' | 'faq'; export type ReplacesTab = 'faq' | 'rules' | 'privacy' | 'offer'; +export type InfoPageDisplayMode = 'bot' | 'web' | 'both'; + export interface InfoPage { id: number; slug: string; @@ -14,6 +16,7 @@ export interface InfoPage { sort_order: number; icon: string | null; replaces_tab: ReplacesTab | null; + display_mode: InfoPageDisplayMode; created_at: string; updated_at: string | null; } @@ -27,6 +30,7 @@ export interface InfoPageListItem { sort_order: number; icon: string | null; replaces_tab: ReplacesTab | null; + display_mode: InfoPageDisplayMode; updated_at: string | null; } @@ -39,6 +43,7 @@ export interface InfoPageCreateRequest { sort_order: number; icon: string | null; replaces_tab: ReplacesTab | null; + display_mode?: InfoPageDisplayMode; } export interface InfoPageUpdateRequest { @@ -50,6 +55,7 @@ export interface InfoPageUpdateRequest { sort_order?: number; icon?: string | null; replaces_tab?: ReplacesTab | null; + display_mode?: InfoPageDisplayMode; } export type TabReplacements = Record;