- Мы собрали статистику за 13 лет работы с застройщиками, реализовав 40
- проектов
+ Мы собрали статистику за 13 лет работы с застройщиками, реализовав
+ {getProjectsCount(projects.length)}
diff --git a/src/consts/cities.ts b/src/consts/cities.ts
new file mode 100644
index 00000000..f096db87
--- /dev/null
+++ b/src/consts/cities.ts
@@ -0,0 +1,183 @@
+import { ICity } from '@/types/ICity';
+
+export const cities: ICity[] = [
+ {
+ x: 23700 / 1160,
+ y: 19900 / 490,
+ city: 'Москва',
+ projects: [
+ {
+ name: 'Sezar City',
+ company: 'Sezar Group',
+ image: '/img/components/main_projects/sezar.png',
+ },
+ {
+ name: 'Upside Towers',
+ company: 'Upside Development',
+ image: '/img/components/main_projects/upside.png',
+ },
+ {
+ company: 'Северный порт',
+ name: 'ГК Легенда',
+ image: '/img/components/main_projects/north_port.png',
+ },
+ ],
+ },
+ {
+ x: 24900 / 1160,
+ y: 12500 / 490,
+ city: 'Санкт-Петербург',
+ projects: [
+ {
+ name: 'Фотограф',
+ company: 'Мавис',
+ image: '/img/components/main_projects/photograph.png',
+ },
+ {
+ name: 'Графика',
+ company: 'Мавис',
+ image: '/img/components/main_projects/graphica.png',
+ },
+ ],
+ },
+ {
+ x: 18800 / 1160,
+ y: 19900 / 490,
+ city: 'Брянск',
+ projects: [
+ {
+ name: 'Новая Атмосфера',
+ company: 'Застройщик Атмосфера',
+ image: '/img/components/main_projects/new_atmosphera.png',
+ },
+ ],
+ },
+ {
+ x: 24900 / 1160,
+ y: 26100 / 490,
+ city: 'Пенза',
+ projects: [
+ {
+ name: 'Scala City',
+ company: 'Рисан',
+ image: '/img/components/main_projects/scala.png',
+ },
+ ],
+ },
+ {
+ x: 28700 / 1160,
+ y: 24800 / 490,
+ city: 'Казань',
+ projects: [
+ {
+ name: 'Риваят',
+ company: 'КамаСтройИнвест',
+ image: '/img/components/main_projects/rivayat.png',
+ },
+ ],
+ },
+ {
+ x: 34900 / 1160,
+ y: 26100 / 490,
+ city: 'Пермь',
+ projects: [
+ {
+ name: 'Кама',
+ company: 'ГК Альфа',
+ image: '/img/components/main_projects/kama.png',
+ },
+ ],
+ },
+ {
+ x: 37300 / 1160,
+ y: 27300 / 490,
+ city: 'Нижний Тагил',
+ projects: [
+ {
+ name: 'Александровский',
+ company: 'АС-Строй',
+ image: '/img/components/main_projects/alexandrovsky.png',
+ },
+ ],
+ },
+ {
+ x: 36100 / 1160,
+ y: 28600 / 490,
+ city: 'Екатеринбург',
+ projects: [
+ {
+ name: 'Re:volution Towers',
+ company: 'НКС-девелопмент',
+ image: '/img/components/main_projects/revolution.png',
+ },
+ {
+ name: 'Тёплые кварталы',
+ company: 'Паритет Девелопмент',
+ image: '/img/components/main_projects/warm_quartals.png',
+ },
+ {
+ name: 'Тактика',
+ company: 'Fortis Development',
+ image: '/img/components/main_projects/tactic.png',
+ },
+ ],
+ },
+ {
+ x: 34900 / 1160,
+ y: 31000 / 490,
+ city: 'Челябинск',
+ projects: [
+ {
+ name: 'Голос в сердце города',
+ company: 'Голос Девелопмент',
+ image: '/img/components/main_projects/voice.png',
+ },
+ ],
+ },
+ {
+ x: 39800 / 1160,
+ y: 31000 / 490,
+ city: 'Тюмень',
+ projects: [
+ {
+ name: 'Август',
+ company: 'Родина Девелопмент',
+ image: '/img/components/main_projects/august.png',
+ },
+ {
+ name: 'Новатор',
+ company: 'СБК',
+ image: '/img/components/main_projects/novator.png',
+ },
+ {
+ name: 'Айвазовский City',
+ company: 'ЭНКО',
+ image: '/img/components/main_projects/aivazovsky.png',
+ },
+ ],
+ },
+ {
+ x: 90500 / 1160,
+ y: 39700 / 490,
+ city: 'Хабаровск',
+ projects: [
+ {
+ name: 'Ориент',
+ company: 'СК+',
+ image: '/img/components/main_projects/orient.png',
+ },
+ ],
+ },
+ {
+ x: 90500 / 1160,
+ y: 47100 / 490,
+ city: 'Владивосток',
+ projects: [
+ {
+ name: 'DNS Ситиs',
+ company: 'DNS Девелопмент',
+ image: '/img/components/main_projects/dns.png',
+ },
+ ],
+ },
+];
diff --git a/src/types/ICity.ts b/src/types/ICity.ts
new file mode 100644
index 00000000..215a57fd
--- /dev/null
+++ b/src/types/ICity.ts
@@ -0,0 +1,8 @@
+import { IProject } from './IProject';
+
+export interface ICity {
+ x: number;
+ y: number;
+ city: string;
+ projects: Pick[];
+}
diff --git a/src/utils/getProjectsCount.ts b/src/utils/getProjectsCount.ts
new file mode 100644
index 00000000..796b893c
--- /dev/null
+++ b/src/utils/getProjectsCount.ts
@@ -0,0 +1,3 @@
+export function getProjectsCount(count: number) {
+ return `${count} проект${count > 10 && count < 15 ? 'ов' : count % 10 === 1 ? '' : count % 10 === 2 || count % 10 === 3 || count % 10 === 4 ? 'а' : 'ов'}`;
+}
diff --git a/src/utils/getProjectsGroupedByCities.ts b/src/utils/getProjectsGroupedByCities.ts
new file mode 100644
index 00000000..ac6ba3e1
--- /dev/null
+++ b/src/utils/getProjectsGroupedByCities.ts
@@ -0,0 +1,12 @@
+import { IProject } from '@/types/IProject';
+
+export function getProjectsGroupedByCities(projects: IProject[]) {
+ const projectsGroupedByCities: Map = new Map();
+ for (const project of projects) {
+ if (!projectsGroupedByCities.has(project.city)) {
+ projectsGroupedByCities.set(project.city, []);
+ }
+ projectsGroupedByCities.get(project.city)!.push(project);
+ }
+ return projectsGroupedByCities;
+}