chore: add privacy policy and term of use

This commit is contained in:
Zotov Ivan Yuryevich
2026-06-01 22:05:26 +03:00
parent 3ec1e776af
commit 5c7f09e37a
9 changed files with 5372 additions and 5425 deletions

View File

@@ -585,39 +585,50 @@ input PaginationArg {
start: Int
}
enum PublicationFilter {
HAS_PUBLISHED_VERSION
HAS_PUBLISHED_VERSION_DOCUMENT
MODIFIED
NEVER_PUBLISHED
NEVER_PUBLISHED_DOCUMENT
PUBLISHED_WITHOUT_DRAFT
PUBLISHED_WITH_DRAFT
UNMODIFIED
}
enum PublicationStatus {
DRAFT
PUBLISHED
}
type Query {
categories(filters: CategoryFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [Category]!
categories_connection(filters: CategoryFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): CategoryEntityResponseCollection
category(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): Category
homePage(hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): HomePage
i18NLocale(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): I18NLocale
i18NLocales(filters: I18NLocaleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [I18NLocale]!
i18NLocales_connection(filters: I18NLocaleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): I18NLocaleEntityResponseCollection
categories(filters: CategoryFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [Category]!
categories_connection(filters: CategoryFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): CategoryEntityResponseCollection
category(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): Category
homePage(hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): HomePage
i18NLocale(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): I18NLocale
i18NLocales(filters: I18NLocaleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [I18NLocale]!
i18NLocales_connection(filters: I18NLocaleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): I18NLocaleEntityResponseCollection
me: UsersPermissionsMe
reviewWorkflowsWorkflow(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflow
reviewWorkflowsWorkflowStage(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflowStage
reviewWorkflowsWorkflowStages(filters: ReviewWorkflowsWorkflowStageFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [ReviewWorkflowsWorkflowStage]!
reviewWorkflowsWorkflowStages_connection(filters: ReviewWorkflowsWorkflowStageFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflowStageEntityResponseCollection
reviewWorkflowsWorkflows(filters: ReviewWorkflowsWorkflowFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [ReviewWorkflowsWorkflow]!
reviewWorkflowsWorkflows_connection(filters: ReviewWorkflowsWorkflowFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflowEntityResponseCollection
siteConfig(hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): SiteConfig
uploadFile(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): UploadFile
uploadFiles(filters: UploadFileFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [UploadFile]!
uploadFiles_connection(filters: UploadFileFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): UploadFileEntityResponseCollection
usersPermissionsRole(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): UsersPermissionsRole
usersPermissionsRoles(filters: UsersPermissionsRoleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [UsersPermissionsRole]!
usersPermissionsRoles_connection(filters: UsersPermissionsRoleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): UsersPermissionsRoleEntityResponseCollection
usersPermissionsUser(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): UsersPermissionsUser
usersPermissionsUsers(filters: UsersPermissionsUserFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [UsersPermissionsUser]!
usersPermissionsUsers_connection(filters: UsersPermissionsUserFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): UsersPermissionsUserEntityResponseCollection
vendor(documentId: ID!, hasPublishedVersion: Boolean, status: PublicationStatus = PUBLISHED): Vendor
vendors(filters: VendorFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): [Vendor]!
vendors_connection(filters: VendorFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, sort: [String] = [], status: PublicationStatus = PUBLISHED): VendorEntityResponseCollection
reviewWorkflowsWorkflow(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflow
reviewWorkflowsWorkflowStage(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflowStage
reviewWorkflowsWorkflowStages(filters: ReviewWorkflowsWorkflowStageFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [ReviewWorkflowsWorkflowStage]!
reviewWorkflowsWorkflowStages_connection(filters: ReviewWorkflowsWorkflowStageFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflowStageEntityResponseCollection
reviewWorkflowsWorkflows(filters: ReviewWorkflowsWorkflowFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [ReviewWorkflowsWorkflow]!
reviewWorkflowsWorkflows_connection(filters: ReviewWorkflowsWorkflowFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): ReviewWorkflowsWorkflowEntityResponseCollection
siteConfig(hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): SiteConfig
uploadFile(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): UploadFile
uploadFiles(filters: UploadFileFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [UploadFile]!
uploadFiles_connection(filters: UploadFileFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): UploadFileEntityResponseCollection
usersPermissionsRole(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): UsersPermissionsRole
usersPermissionsRoles(filters: UsersPermissionsRoleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [UsersPermissionsRole]!
usersPermissionsRoles_connection(filters: UsersPermissionsRoleFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): UsersPermissionsRoleEntityResponseCollection
usersPermissionsUser(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): UsersPermissionsUser
usersPermissionsUsers(filters: UsersPermissionsUserFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [UsersPermissionsUser]!
usersPermissionsUsers_connection(filters: UsersPermissionsUserFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): UsersPermissionsUserEntityResponseCollection
vendor(documentId: ID!, hasPublishedVersion: Boolean, publicationFilter: PublicationFilter, status: PublicationStatus = PUBLISHED): Vendor
vendors(filters: VendorFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): [Vendor]!
vendors_connection(filters: VendorFiltersInput, hasPublishedVersion: Boolean, pagination: PaginationArg = {}, publicationFilter: PublicationFilter, sort: [String] = [], status: PublicationStatus = PUBLISHED): VendorEntityResponseCollection
}
type ReviewWorkflowsWorkflow {
@@ -703,7 +714,9 @@ type SiteConfig {
createdAt: DateTime
description: String
documentId: ID!
privacyPolicy: UploadFile
publishedAt: DateTime
termsOfUse: UploadFile
title: String!
updatedAt: DateTime
}
@@ -711,7 +724,9 @@ type SiteConfig {
input SiteConfigInput {
contacts: [ComponentSharedContactInput]
description: String
privacyPolicy: ID
publishedAt: DateTime
termsOfUse: ID
title: String
}

File diff suppressed because it is too large Load Diff

10
src/env.d.ts vendored
View File

@@ -1 +1,11 @@
/// <reference types="astro/client" />
interface ImportMetaEnv {
readonly PUBLIC_API_URL: string
readonly PUBLIC_GRAPHQL_URL: string
readonly PUBLIC_UPLOADS_BASE_URL: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}

View File

@@ -11,6 +11,12 @@ export const siteConfigDocument = gql`
value
displayValue
}
privacyPolicy {
url
}
termsOfUse {
url
}
}
}
`

View File

@@ -825,6 +825,17 @@ export type PaginationArg = {
start?: InputMaybe<Scalars['Int']['input']>;
};
export enum PublicationFilter {
HasPublishedVersion = 'HAS_PUBLISHED_VERSION',
HasPublishedVersionDocument = 'HAS_PUBLISHED_VERSION_DOCUMENT',
Modified = 'MODIFIED',
NeverPublished = 'NEVER_PUBLISHED',
NeverPublishedDocument = 'NEVER_PUBLISHED_DOCUMENT',
PublishedWithoutDraft = 'PUBLISHED_WITHOUT_DRAFT',
PublishedWithDraft = 'PUBLISHED_WITH_DRAFT',
Unmodified = 'UNMODIFIED'
}
export enum PublicationStatus {
Draft = 'DRAFT',
Published = 'PUBLISHED'
@@ -866,6 +877,7 @@ export type QueryCategoriesArgs = {
filters?: InputMaybe<CategoryFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -875,6 +887,7 @@ export type QueryCategories_ConnectionArgs = {
filters?: InputMaybe<CategoryFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -883,12 +896,14 @@ export type QueryCategories_ConnectionArgs = {
export type QueryCategoryArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
export type QueryHomePageArgs = {
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -896,6 +911,7 @@ export type QueryHomePageArgs = {
export type QueryI18NLocaleArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -904,6 +920,7 @@ export type QueryI18NLocalesArgs = {
filters?: InputMaybe<I18NLocaleFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -913,6 +930,7 @@ export type QueryI18NLocales_ConnectionArgs = {
filters?: InputMaybe<I18NLocaleFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -921,6 +939,7 @@ export type QueryI18NLocales_ConnectionArgs = {
export type QueryReviewWorkflowsWorkflowArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -928,6 +947,7 @@ export type QueryReviewWorkflowsWorkflowArgs = {
export type QueryReviewWorkflowsWorkflowStageArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -936,6 +956,7 @@ export type QueryReviewWorkflowsWorkflowStagesArgs = {
filters?: InputMaybe<ReviewWorkflowsWorkflowStageFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -945,6 +966,7 @@ export type QueryReviewWorkflowsWorkflowStages_ConnectionArgs = {
filters?: InputMaybe<ReviewWorkflowsWorkflowStageFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -954,6 +976,7 @@ export type QueryReviewWorkflowsWorkflowsArgs = {
filters?: InputMaybe<ReviewWorkflowsWorkflowFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -963,6 +986,7 @@ export type QueryReviewWorkflowsWorkflows_ConnectionArgs = {
filters?: InputMaybe<ReviewWorkflowsWorkflowFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -970,6 +994,7 @@ export type QueryReviewWorkflowsWorkflows_ConnectionArgs = {
export type QuerySiteConfigArgs = {
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -977,6 +1002,7 @@ export type QuerySiteConfigArgs = {
export type QueryUploadFileArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -985,6 +1011,7 @@ export type QueryUploadFilesArgs = {
filters?: InputMaybe<UploadFileFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -994,6 +1021,7 @@ export type QueryUploadFiles_ConnectionArgs = {
filters?: InputMaybe<UploadFileFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1002,6 +1030,7 @@ export type QueryUploadFiles_ConnectionArgs = {
export type QueryUsersPermissionsRoleArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1010,6 +1039,7 @@ export type QueryUsersPermissionsRolesArgs = {
filters?: InputMaybe<UsersPermissionsRoleFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1019,6 +1049,7 @@ export type QueryUsersPermissionsRoles_ConnectionArgs = {
filters?: InputMaybe<UsersPermissionsRoleFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1027,6 +1058,7 @@ export type QueryUsersPermissionsRoles_ConnectionArgs = {
export type QueryUsersPermissionsUserArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1035,6 +1067,7 @@ export type QueryUsersPermissionsUsersArgs = {
filters?: InputMaybe<UsersPermissionsUserFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1044,6 +1077,7 @@ export type QueryUsersPermissionsUsers_ConnectionArgs = {
filters?: InputMaybe<UsersPermissionsUserFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1052,6 +1086,7 @@ export type QueryUsersPermissionsUsers_ConnectionArgs = {
export type QueryVendorArgs = {
documentId: Scalars['ID']['input'];
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
publicationFilter?: InputMaybe<PublicationFilter>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1060,6 +1095,7 @@ export type QueryVendorsArgs = {
filters?: InputMaybe<VendorFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1069,6 +1105,7 @@ export type QueryVendors_ConnectionArgs = {
filters?: InputMaybe<VendorFiltersInput>;
hasPublishedVersion?: InputMaybe<Scalars['Boolean']['input']>;
pagination?: InputMaybe<PaginationArg>;
publicationFilter?: InputMaybe<PublicationFilter>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
status?: InputMaybe<PublicationStatus>;
};
@@ -1176,7 +1213,9 @@ export type SiteConfig = {
createdAt?: Maybe<Scalars['DateTime']['output']>;
description?: Maybe<Scalars['String']['output']>;
documentId: Scalars['ID']['output'];
privacyPolicy?: Maybe<UploadFile>;
publishedAt?: Maybe<Scalars['DateTime']['output']>;
termsOfUse?: Maybe<UploadFile>;
title: Scalars['String']['output'];
updatedAt?: Maybe<Scalars['DateTime']['output']>;
};
@@ -1191,7 +1230,9 @@ export type SiteConfigContactsArgs = {
export type SiteConfigInput = {
contacts?: InputMaybe<Array<InputMaybe<ComponentSharedContactInput>>>;
description?: InputMaybe<Scalars['String']['input']>;
privacyPolicy?: InputMaybe<Scalars['ID']['input']>;
publishedAt?: InputMaybe<Scalars['DateTime']['input']>;
termsOfUse?: InputMaybe<Scalars['ID']['input']>;
title?: InputMaybe<Scalars['String']['input']>;
};
@@ -1586,7 +1627,7 @@ export type MenuItemsQuery = { __typename?: 'Query', categories: Array<{ __typen
export type SiteConfigQueryVariables = Exact<{ [key: string]: never; }>;
export type SiteConfigQuery = { __typename?: 'Query', siteConfig?: { __typename?: 'SiteConfig', title: string, description?: string | null, contacts?: Array<{ __typename?: 'ComponentSharedContact', id: string, type: Enum_Componentsharedcontact_Type, value: string, displayValue?: string | null } | null> | null } | null };
export type SiteConfigQuery = { __typename?: 'Query', siteConfig?: { __typename?: 'SiteConfig', title: string, description?: string | null, contacts?: Array<{ __typename?: 'ComponentSharedContact', id: string, type: Enum_Componentsharedcontact_Type, value: string, displayValue?: string | null } | null> | null, privacyPolicy?: { __typename?: 'UploadFile', url: string } | null, termsOfUse?: { __typename?: 'UploadFile', url: string } | null } | null };
export class TypedDocumentString<TResult, TVariables>
extends String
@@ -1743,6 +1784,12 @@ export const SiteConfigDocument = new TypedDocumentString(`
value
displayValue
}
privacyPolicy {
url
}
termsOfUse {
url
}
}
}
`) as unknown as TypedDocumentString<SiteConfigQuery, SiteConfigQueryVariables>;

View File

@@ -0,0 +1,25 @@
const defaultUploadsBaseUrl = 'http://localhost:1337'
function getUploadsBaseUrl(): string {
if (typeof import.meta !== 'undefined' && import.meta.env?.PUBLIC_UPLOADS_BASE_URL) {
return import.meta.env.PUBLIC_UPLOADS_BASE_URL
}
if (typeof process !== 'undefined' && process.env.PUBLIC_UPLOADS_BASE_URL) {
return process.env.PUBLIC_UPLOADS_BASE_URL
}
return defaultUploadsBaseUrl
}
/** Resolves Strapi-relative upload paths using {@link PUBLIC_UPLOADS_BASE_URL}. */
export function resolveUploadUrl(url: string | null | undefined): string | undefined {
if (!url) {
return undefined
}
if (/^https?:\/\//i.test(url)) {
return url
}
const base = getUploadsBaseUrl().replace(/\/$/, '')
const path = url.startsWith('/') ? url : `/${url}`
return `${base}${path}`
}

View File

@@ -8,6 +8,7 @@ import { CategoryView } from '../views/CategoryView'
import { siteConfigQuery } from '../graphql-documents/site-config.gql.generated'
import { menuItemsQuery } from '../graphql-documents/menu-items.gql.generated'
import { categoryQuery } from '../graphql-documents/category.gql.generated'
import { resolveUploadUrl } from '../lib/cms/uploads/url'
const [siteResult, menuItemsResult] = await Promise.all([siteConfigQuery.execute(), menuItemsQuery.execute()])
if (siteResult.errors?.length) {
@@ -17,6 +18,8 @@ const siteConfig = siteResult.data?.siteConfig
const siteTitle = siteConfig?.title ?? ''
const siteDescription = siteConfig?.description ?? ''
const contacts = siteConfig?.contacts?.filter(c => c != null) ?? []
const privacyPolicyUrl = resolveUploadUrl(siteConfig?.privacyPolicy?.url)
const termsOfUseUrl = resolveUploadUrl(siteConfig?.termsOfUse?.url)
if (menuItemsResult.errors?.length) {
throw new Error(menuItemsResult.errors.map(e => e.message).join(', '))
}
@@ -61,6 +64,13 @@ const vendors = (category.vendors?.filter(v => v != null) ?? []).map(vendor => (
<div class="min-h-screen bg-white w-full overflow-x-hidden">
<Header client:load siteTitle={siteTitle} contacts={contacts} solutions={solutionCategories} services={serviceCategories} />
<CategoryView client:load badge={badge} title={title} description={description} vendors={vendors} contacts={contacts} />
<Footer client:load siteTitle={siteTitle} contacts={contacts} solutionCategories={solutionCategories} />
<Footer
client:load
siteTitle={siteTitle}
contacts={contacts}
solutionCategories={solutionCategories}
privacyPolicyUrl={privacyPolicyUrl}
termsOfUseUrl={termsOfUseUrl}
/>
</div>
</Layout>

View File

@@ -8,6 +8,7 @@ import { Enum_Category_Group } from '../graphql/graphql'
import { menuItemsQuery } from '../graphql-documents/menu-items.gql.generated'
import { homePageQuery } from '../graphql-documents/home-page.gql.generated'
import { siteConfigQuery } from '../graphql-documents/site-config.gql.generated'
import { resolveUploadUrl } from '../lib/cms/uploads/url'
const [homeResult, siteResult, menuItemsResult] = await Promise.all([
homePageQuery.execute(),
@@ -30,6 +31,8 @@ const siteConfig = siteResult.data?.siteConfig
const siteTitle = siteConfig?.title ?? ''
const siteDescription = siteConfig?.description ?? ''
const contacts = siteConfig?.contacts?.filter(c => c != null) ?? []
const privacyPolicyUrl = resolveUploadUrl(siteConfig?.privacyPolicy?.url)
const termsOfUseUrl = resolveUploadUrl(siteConfig?.termsOfUse?.url)
const menuItems = (menuItemsResult.data?.categories?.filter(c => c != null) ?? []).sort(
(a, b) => a.sortOrder - b.sortOrder
)
@@ -42,6 +45,13 @@ const serviceCategories = menuItems.filter(c => c.group === Enum_Category_Group.
<div class="min-h-screen bg-white w-full overflow-x-hidden">
<Header client:load siteTitle={siteTitle} contacts={contacts} solutions={solutionCategories} services={serviceCategories} />
<HomePage client:load homePage={homePage} contacts={contacts} />
<Footer client:load siteTitle={siteTitle} contacts={contacts} solutionCategories={solutionCategories} />
<Footer
client:load
siteTitle={siteTitle}
contacts={contacts}
solutionCategories={solutionCategories}
privacyPolicyUrl={privacyPolicyUrl}
termsOfUseUrl={termsOfUseUrl}
/>
</div>
</Layout>

View File

@@ -10,9 +10,17 @@ export interface FooterProps {
siteTitle?: string
contacts?: readonly SiteConfigContact[]
solutionCategories?: CategoryNavItem[]
privacyPolicyUrl?: string
termsOfUseUrl?: string
}
export function Footer({ siteTitle = '', contacts = [], solutionCategories = [] }: FooterProps) {
export function Footer({
siteTitle = '',
contacts = [],
solutionCategories = [],
privacyPolicyUrl,
termsOfUseUrl,
}: FooterProps) {
return (
<footer className="bg-gray-900 text-gray-400 pt-20 pb-10 border-t border-gray-800">
<div className="max-w-400 mx-auto px-6 xl:px-12 2xl:px-16">
@@ -109,12 +117,26 @@ export function Footer({ siteTitle = '', contacts = [], solutionCategories = []
<div className="pt-8 border-t border-gray-800 flex flex-col md:flex-row justify-between items-center gap-4">
<div>&copy; 2025 {siteTitle}. Все права защищены.</div>
<div className="flex gap-6">
<a href="#" className="hover:text-blue-400 transition-colors">
Политика конфиденциальности
</a>
<a href="#" className="hover:text-blue-400 transition-colors">
Условия использования
</a>
{privacyPolicyUrl ? (
<a
href={privacyPolicyUrl}
target="_blank"
rel="noopener noreferrer"
className="hover:text-blue-400 transition-colors"
>
Политика конфиденциальности
</a>
) : null}
{termsOfUseUrl ? (
<a
href={termsOfUseUrl}
target="_blank"
rel="noopener noreferrer"
className="hover:text-blue-400 transition-colors"
>
Условия использования
</a>
) : null}
</div>
</div>
</div>