diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index 94695d7f4..ebcb6081e 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -110,21 +110,21 @@ jobs:
working-directory: ./frontend
run: yarn run test:e2e
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: ./frontend/e2e/test-results/
retention-days: 14
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: ./frontend/e2e/e2e-reports/
retention-days: 14
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
if: failure()
with:
name: logs
diff --git a/README.md b/README.md
index 158dd3ea0..825cd8c9a 100644
--- a/README.md
+++ b/README.md
@@ -100,7 +100,9 @@ Watch releases of this repository to be notified about future updates:
## Contributors ✨
+
[![All Contributors](https://img.shields.io/badge/all_contributors-76-orange.svg?style=flat-square)](#contributors-)
+
Please check [contributors guide](https://github.com/podkrepi-bg/frontend/blob/master/CONTRIBUTING.md) for:
diff --git a/next.config.js b/next.config.js
index 963dfefc6..a968f4c27 100644
--- a/next.config.js
+++ b/next.config.js
@@ -53,8 +53,8 @@ const moduleExports = {
},
{
source: '/robots.txt',
- destination: '/api/robots'
- }
+ destination: '/api/robots',
+ },
]
},
async redirects() {
diff --git a/public/locales/bg/about-project.json b/public/locales/bg/about-project.json
index b89417840..a3ba364bb 100644
--- a/public/locales/bg/about-project.json
+++ b/public/locales/bg/about-project.json
@@ -3,24 +3,9 @@
"aboutPlatformTitle": "Какво представлява платформата Подкрепи.бг",
"aboutPlatformDescription": "Искаме да създадем дарителска платформа с отворен код, в която чрез прозрачност се премахват възможностите за злоупотреби с дарените средства както от организаторите на кампании, така и от вътрешния екип на дарителската платформа.",
"whatIsDoneTitle": "Какво направихме до момента",
- "volunteersIcon": "записали се доброволци",
"members": "члена на Сдружението",
"meetingsIcon": "проведени срещи",
"investedHoursIcon": "вложени часа",
- "nameSuggestionIcon": "предложения за име",
- "volunteers": "700+ доброволци- в Discord сървъра",
- "meetings": "100+ вътрешни срещи на екипите",
- "infoSite": "Създадохме информативен сайт на Платформата, през който да могат да се запишат бъдещи дарители - физически лица, компании, доброволци, медии или партньори",
- "businessModel": "Избор на първоначален бизнес модел (членски внос, директни дарения към Платформата, мърчандайз)",
- "organizationWork": "Организация на работата (Discord, Google Drive, GitHub, Ora.pm, разделяне по екипи и т.н.)",
- "hostingPartners": "Партньорства с хостинг компании (Superhosting, ICN.bg)",
- "nameSuggestions": "Събрахме 150+ предложения за име и гласувахме вътрешно.",
- "internalMeetings": "100+ вътрешни срещи на екипите",
- "npoConversations": "Проведохме серия от разговори с НПО представители, с цел по-добро разбиране и дефиниране на проблема, който трябва да решим.",
- "featuresList": "Създадохме \"потребителски истории\" и списък с функционалностите (features list)",
- "trademark": "Запазихме търговската марка",
- "association": "Регистрирахме сдружение в обществена полза (19.02.2021)",
- "architecture": "Създадохме основна архитектура на Платформата",
"timeline": "Нашата история",
"october-2020-title": "октомври 2020",
"platform-idea": "Зараждане на идеята за изграждане на дарителска платформа от доброволци.",
@@ -35,7 +20,6 @@
"distribution": "Разпределение по експертни направления и избор на лидери.",
"name-choice": "Избор на име на Платформата измежду 197 предложения.",
"self-support": "Проучени бизнес модели за самоиздръжка на Платформата.",
- "january-2021-title": "януари 2021",
"user-stories-preparation": "Подготовка на 270 \"потребителски истории\" за основа на Платформата.",
"logo-choice": "Избор на лого от предложени 150 варианта.",
"trademarking": "Регистриране на запазена търговска марка.",
@@ -77,7 +61,6 @@
"github-project": "Проекта се разработва в GitHub.",
"documentation-social": "Документацията на социалната част на проекта поддържаме в GitBook.",
"documentation-technical": "Техническата документация.",
- "high-level-map": "Приготвили сме архитектурнo-организационна карта на Платформата на високо ниво.",
"opened-donations-account": "Открихме дарителска сметка в",
"bank-name": "Уникредит Булбанк",
"with-holder": "с титуляр",
diff --git a/public/locales/bg/auth.json b/public/locales/bg/auth.json
index 77cf1f132..440e59019 100644
--- a/public/locales/bg/auth.json
+++ b/public/locales/bg/auth.json
@@ -12,6 +12,7 @@
},
"cta": {
"login": "Вход",
+ "guest": "Като гост",
"logout": "Изход",
"register": "Регистрация",
"send": "Изпрати",
@@ -19,6 +20,7 @@
},
"fields": {
"email": "Email",
+ "email-descriptive": "Въведи email адрес",
"password": "Парола",
"confirm-password": "Потвърждение на парола",
"first-name": "Име",
diff --git a/public/locales/bg/bankaccounts.json b/public/locales/bg/bankaccounts.json
index 4163eceeb..f9f55bcdb 100644
--- a/public/locales/bg/bankaccounts.json
+++ b/public/locales/bg/bankaccounts.json
@@ -26,17 +26,14 @@
"withdrawals": "Извлечения",
"actions": "Действия",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Сметката беше създадена успешно!",
"edit": "Сметката беше редактирана успешно!",
"delete": "Сметката беше изтрита успешно!",
- "deleteAll": "Сметките бяха изтрити успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно."
},
"cta": {
"add": "Добави",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай"
}
}
diff --git a/public/locales/bg/benefactor.json b/public/locales/bg/benefactor.json
index 2f0dd5bf8..1c0d9292c 100644
--- a/public/locales/bg/benefactor.json
+++ b/public/locales/bg/benefactor.json
@@ -9,14 +9,11 @@
"description": "Описание",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Записът беше създаден успешно!",
"edit": "Записът беше редактиран успешно!",
"delete": "Записът беше изтрит успешно!",
- "deleteAll": "Записите бяха изтрити успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно."
},
"cta": {
@@ -24,7 +21,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли",
"submit": "Изпрати"
diff --git a/public/locales/bg/beneficiary.json b/public/locales/bg/beneficiary.json
index c33c9f06a..d7047fd9a 100644
--- a/public/locales/bg/beneficiary.json
+++ b/public/locales/bg/beneficiary.json
@@ -10,7 +10,6 @@
"not-person": "Не е личност",
"not-company": "Не е компания",
"city": "Град",
- "coordinatorRelation": "Отношения с координатор",
"organizerRelation": "Отношения с организатор",
"type": "Тип на бенефициента",
"description": "Описание",
@@ -36,11 +35,9 @@
},
"person-select": "Изберете потребител или",
"company-select": "Изберете ЮЛНЦ или",
- "organizer-select": "Изберете организатор или",
"create-new": "създайте нов",
"person-label": "Потребител",
"company-label": "ЮЛНЦ",
- "organizer-label": "Организатор"
}
},
"actions": "Действия",
diff --git a/public/locales/bg/campaigns.json b/public/locales/bg/campaigns.json
index 25521718e..c3cb8daf5 100644
--- a/public/locales/bg/campaigns.json
+++ b/public/locales/bg/campaigns.json
@@ -26,6 +26,7 @@
"startDate": "Стартова дата",
"endDate": "Крайна дата",
"createDate": "Съдадена на",
+ "indefinite": "Безсрочна",
"deletedAt": "Изтрита на",
"targetDate": "Целева дата",
"createdAt": "Създаден на",
@@ -37,7 +38,6 @@
"campaignId": "ID на кампания",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"statistics": {
"button": "Статистика за даренията",
@@ -59,11 +59,9 @@
"hourlyDesc": "Графиката показва колко дарения са направени в кои часове от деня и дава видимост за активността на дарителите през деня."
},
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Кампанията беше създадено успешно!",
"edit": "Кампанията беше редактирано успешно!",
"delete": "Кампанията беше преместено в кошчето!",
- "deleteAll": "Кампаниите бяха преместени в кошчето!",
"error": "Възникна грешка! Моля опитайте отново по-късно.",
"deletedFile": "Файлът беше изтрит успешно!"
},
@@ -73,20 +71,25 @@
"save": "Запази",
"submit": "Изпрати",
"apply": "Кандидатствайте",
- "subscribe": "Абониране за известия",
+ "subscribe": "Абонирай се за email известия за кампанията",
+ "subscribeFooter": "Абонирай се за бюлетина",
+ "subscribeGeneral": "Абонирайте се за email известия от Подкрепи.бг",
+ "subscribe-monthly-newsletter": "Месечен бюлтеин на Подкрепи.бг",
+ "subscribeGeneralSubtext": "Получавайте нашия месечен бюлетин, в който ще Ви информираме за най-интересните новини от Подкрепи.бг!",
+ "subscribe-general-monthly-newsletter": "Получавайте нашия месечен бюлетин, за да сте в час най-интересните новини от Подкрепи.бг!",
+ "subscribeGeneralButton": "Абонирайте се за новини",
+ "subscribe-general-newsletter-button": "Абонирайте се",
"support": "Дарете",
"support-cause-today": "Подкрепете кауза днес!",
"support-now": "Подкрепете сега",
"see-all": "Вижте всички",
"see-less": "Вижте по-малко",
- "see-top-10": "Виж ТОП 10",
"see-more": "Вижте повече",
"donor": "Дарител",
"add": "Добави",
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за Кампанията",
"add-files": "Добавете файлове",
@@ -95,21 +98,27 @@
"allow-donation-on-complete": "Разрешете дарения след достигане на сумата"
},
"subscribe": {
- "confirm-sent": "Благодарим ви! На посочения e-mail адрес беше изпратено съобщение за потвърждение на вашето абониране.",
- "confirm-subscribe": "Благодарим ви! Абонирахте се успешно.",
- "subscribe-title": "Абониране за известия и новини от Podkrepi.bg",
- "subscribe-campaign-title": "Абониране за известия по тази кампания"
+ "confirm-sent": "Моля, активирай абонамента си от email-a, който ти изпратихме на {{email}}",
+ "confirm-subscribe": "Записа се успешно.",
+ "subscribe-title": "Абониране за новините на Подкрепи.бг",
+ "subscribe-campaign-title": "Абониране за новините по кампанията",
+ "subscribe-text-nonLoggedUser": "Моля, продължи като гост и въведи email адреса, на който желаеш да получаваш известия за тази кампания, или влез в профила си. Вписвайки се с потребителското си име и парола, ще можеш да управляваш абонамента си от своя Личен профил.",
+ "subscribe-text-nonLoggedUser-general": "Моля, продължи като гост и въведи email адреса, на който желаеш да получаваш известия от нас, или влез в профила си. Вписвайки се с потребителското си име и парола, ще можеш да управляваш абонамента си от своя Личен профил.",
+ "subscribe-text-loggedUser": "Моля, избери дали желаеш да получаваш новините за кампанията на email адреса, асоцииран с профила ти, или на алтернативен адрес:",
+ "subscribe-subtitle": "Искам да получавам новини и известия от Подкрепи.бг на този email адрес:",
+ "subscribe-campaign-subtTitle": "Искам да получавам новини за кампанията на този email адрес:",
+ "subscribe-button": "Запиши ме",
+ "profile-button": "На профилния",
+ "another-button": "На друг"
},
"campaign": {
"subheading": "Вашата подкрепа променя света и има значение. Всички подкрепящи чрез Подкрепи.бг са наши партньори в подпомагането на кампании за общността. Като щедър дарител Вие ставате важен партньор в подпомагането на кампания за нечие здраве или за успеха на кауза, която ви е близка до сърцето.",
- "subheading-bold": "Дори и най-малката помощ може да бъде двигател на голяма промяна.",
- "subheading-bold-secondary": "Заедно подкрепяме и насърчаваме дарителската и доброволческата култура в България!",
"title": "Име на кампанията",
"notify": "Изпрати известие до всички абонирани",
"slug": {
"name": "Кратко наименование на кампанията",
- "warning": "Редактирането на това поле ще измени линка към кампанията и ще направи текущия невалиден",
- "placeholder": "Стойността по подразбиране е същата като 'Име на кампанията'"
+ "warning": "Редактирането на това поле ще измени линка към кампанията и ще направи текущия невалиден.",
+ "placeholder": "Стойността по подразбиране е същата като 'Име на кампанията'."
},
"rte": {
"modern": "Нов (бета)",
@@ -124,9 +133,9 @@
"documents": "документи",
"guarantor": "гарант",
"others": "други",
+ "messages": "Кампанията подкрепиха",
"profile": "Профил:",
"status": "Статус:",
- "messages": "Кампанията подкрепиха",
"sort": {
"title": "Сортирай по:",
"date": "Дата",
@@ -135,36 +144,9 @@
"noResults": "Не са открити резултати"
},
"gallery": "Галерия",
- "report-irregularity": "Сигнализирай за злоупотреба",
"financial-report": "Финансови отчети",
"report-campaign": "Докладвайте кампанията",
"feedback": "Обратна връзка",
- "images": {
- "add": "Добави снимки",
- "add-more": "Добави още",
- "adding-more": "Добавяне на още снимки",
- "drop-paste-import-files": "Пуснете снимки тук или изберете от следните източници:",
- "my-device": "Компютър",
- "back": "Назад",
- "edit": "Редактирай",
- "editing": "Редактиране",
- "import-from": "Добавяне от външен източник",
- "close": "Затвори",
- "cancel": "Откажи",
- "remove": "Премахни",
- "save": "Запази",
- "files-selected": "Избрани снимки",
- "uploading": "Качване...",
- "complete": "Завършено",
- "upload-file": "Качи %{smart_count} снимка",
- "upload-multiple": "Качи %{smart_count} снимки",
- "x-time-left": "%{time} оставащо време",
- "upload-failed": "Неуспешно качване",
- "pause": "Прекъсни",
- "paused": "Прекъснато",
- "resume": "Продължи",
- "retry": "Опитай пак"
- },
"beneficiary": {
"name": "Бенефициент",
"label": "Бенефициент:",
@@ -173,29 +155,23 @@
},
"coordinator": {
"name": "Координатор:",
- "add": "Добавете координатор",
- "create": "Създате координатор"
+ "add": "Добавете координатор"
},
"organizer": {
- "name": "Организатор:",
- "add": "Добавете организатор",
- "create": "Създайте организатор"
+ "name": "Организатор:"
},
"image-of": "Изображение на",
"podkrepi-bg-operator": "Подкрепи.бг Оператор:",
"have-a-question": "Имате въпрос?",
"btn-connect": "Пишете ни",
- "write-to-coordinator": "Пишете на Координатор",
"description": "Описание",
"start-date": "Начална дата:",
"end-date": "Крайна дата:",
- "indefinite": "Безсрочна",
"tag": "Таг:",
"date": "Дата:",
"news": "Новини",
"wishes": "Пожелания",
- "nowishes": "Няма добавени пожелания",
- "seeAll": "Виж всички"
+ "nowishes": "Няма добавени пожелания"
},
"info-graphics": {
"donation-title": "100% от дарението отива при нуждаещите се",
diff --git a/public/locales/bg/cities.json b/public/locales/bg/cities.json
index 04740c602..e5494417e 100644
--- a/public/locales/bg/cities.json
+++ b/public/locales/bg/cities.json
@@ -4,7 +4,6 @@
"all": "Всички Градове",
"cities": "Градове",
"name": "Име",
- "name2": "Име",
"postalCode": "Пощенски Код",
"countryId": "Код на държавата",
"createdAt": "Създаден на",
@@ -12,14 +11,11 @@
"campaignId": "ID на кампания",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Градът беше създаден успешно!",
"edit": "Градът беше редактиран успешно!",
"delete": "Градът беше изтрит успешно!",
- "deleteAll": "Градовете бяха изтрити успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно."
},
"cta": {
@@ -27,7 +23,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за Града",
"submit": "Изпрати"
diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json
index 52b83c3e7..1319b9af9 100644
--- a/public/locales/bg/common.json
+++ b/public/locales/bg/common.json
@@ -33,7 +33,6 @@
"donate": "Дарете",
"donation-menu": "Кампании",
"blog": "Блог",
- "support_us_button": "Подкрепете ни",
"profile": "Моят профил",
"login": "Вход",
"login-with": "Вход с",
@@ -66,7 +65,6 @@
"resources": "Ресурси",
"others": "Други",
"all-campaigns": "Всички кампании",
- "suggest-campaign": "Предложете кампания",
"who-are-we": "Кои сме ние?",
"about-project": "За проекта",
"support-us": "Подкрепете ни",
@@ -77,7 +75,7 @@
"faq": "Често задавани въпроси",
"privacy-policy": "Защита на лични данни",
"terms-of-service": "Общи условия",
- "copyrights": "Podkrepi.bg ©2023 Всички права запазени.",
+ "copyrights": "Podkrepi.bg ©2024 Всички права запазени.",
"hosting-partner": "Хостинг партньор:",
"social": {
"facebook": "Facebook",
@@ -101,10 +99,7 @@
"email": "Имейл"
},
"cta": {
- "more-information": "Повече информация",
- "read-more": "Прочетете още",
- "see-profile": "Вижте профил",
- "question": "Имате въпрос?"
+ "more-information": "Повече информация"
},
"cookieConsent": "Подкрепи.бг не използва бисквитки, освен тези от трети страни, нужни за аналитичните компоненти Google Analytics и HotJar. Приемането на бисквитките ще ни помогне да подобрим вашето потребителско преживяване.",
"cookieConsentButton": "Приемам",
diff --git a/public/locales/bg/documents.json b/public/locales/bg/documents.json
index 850f96766..37ec2b455 100644
--- a/public/locales/bg/documents.json
+++ b/public/locales/bg/documents.json
@@ -14,7 +14,6 @@
"create": "Документът беше създаден успешно!",
"edit": "Документът беше редактиран успешно!",
"delete": "Документът беше изтрит успешно!",
- "deleteAll": "Документите бяха изтрити успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно."
},
"cta": {
@@ -22,7 +21,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за документа",
"submit": "Изпрати"
diff --git a/public/locales/bg/donations.json b/public/locales/bg/donations.json
index 7faa71e64..7177c4473 100644
--- a/public/locales/bg/donations.json
+++ b/public/locales/bg/donations.json
@@ -19,7 +19,6 @@
"updated-at": "Редактирано на",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"createdAt": "Направено на",
"bankTransactionsFileId": "Име на файла с банкови транзакции",
@@ -29,12 +28,10 @@
"message": "Съобщение",
"noOptions": "Няма резултати",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Дарението беше създадено успешно!",
"edit": "Дарението беше редактирано успешно!",
"delete": "Дарението беше изтрито успешно!",
"invalidate": "Дарението беше маркирано като невалидно!",
- "deleteAll": "Даренията бяха изтрити успешно!",
"refundSuccess": "Беше създадена успешна заявка за връщане на парите към Stripe",
"editDonor": "Дарителят беше редактиран успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно.",
@@ -46,7 +43,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за дарение",
"submit": "Изпрати",
diff --git a/public/locales/bg/index.json b/public/locales/bg/index.json
index e2d2e6ef3..732554929 100644
--- a/public/locales/bg/index.json
+++ b/public/locales/bg/index.json
@@ -10,6 +10,10 @@
"content": "Подкрепи.бг представлява общност от специалисти в областта на програмирането, правото, маркетинга, дизайна, медицината, финансите, социалното предприемачество и др. Обединени сме от целта да създадем устойчива и прозрачна платформа за дарения, която подкрепя каузи и хора в нужда, като заедно с това популяризира и връща доверието към дарителството в България.",
"meet-our-team": "Запознайте се с екипа ни"
},
+ "subscription-section": {
+ "heading": "Искаш да си в час с бъдещите ни постижения?",
+ "content": "Абонирай се за нашия бюлетин и ние ще те информираме за най-важното от живота на Подкрепи.бг. Всеки месец ще получваш email от нас, в който ще ти споделяме най-интересното за кампаниите, които поддържаме, както и за техните организатори и бенефициенти. Ще получаваш новините за нашите партньори, доброволци и дарители в електронната си пощенска кутия. Ако ти звучи добре, запиши се, като въведеш email адреса си тук:"
+ },
"support-us-section": {
"heading": "Подкрепете ни като:",
"financial-support": "- дарител",
diff --git a/public/locales/bg/news.json b/public/locales/bg/news.json
index 16b429412..9c101b5aa 100644
--- a/public/locales/bg/news.json
+++ b/public/locales/bg/news.json
@@ -4,7 +4,7 @@
"edit-form-heading": "Редактирайте статия",
"read-more": "Прочети повече",
"read-less": "Прочети по-малко",
- "see-all-news": "Виж всички новини",
+ "see-all-news": "Вижте всички новини",
"news-not-found": "Не бяха намерени новини за тази кампания",
"write-new-article": "Напишете нова статия",
"status": {
diff --git a/public/locales/bg/notifications.json b/public/locales/bg/notifications.json
index b65e5c755..6a1a3a9fa 100644
--- a/public/locales/bg/notifications.json
+++ b/public/locales/bg/notifications.json
@@ -1,7 +1,9 @@
{
"subscribe": {
- "thank-you-msg": "Абонирането за получаване на известия e успешно! Благодарим ❤️",
- "subscription-fail": "Възникна проблем при потвърджаването на абонамента за известия 🙄",
+ "thank-you-msg-heading": "Абонаментът ти е активен!",
+ "thank-you-msg-text": "Успешно активира своя абонамент. Очаквай новини от нас на {{email}}",
+ "subscription-fail-heading": "Възникна грешка",
+ "subscription-fail-text": "Не успяхме да активираме абонамента ти. Моля, опитай пак.",
"cta": "Към сайта",
"cta-retry": "Опитай пак"
},
diff --git a/public/locales/bg/profile.json b/public/locales/bg/profile.json
index 6de138c5f..d6e713daf 100644
--- a/public/locales/bg/profile.json
+++ b/public/locales/bg/profile.json
@@ -56,7 +56,6 @@
"refund": "възстановено",
"cancelled": "отменено",
"guaranteed": "гарантирано"
-
}
},
"certificates-history": {
diff --git a/public/locales/bg/transfer.json b/public/locales/bg/transfer.json
index bc7e0664e..fcc934712 100644
--- a/public/locales/bg/transfer.json
+++ b/public/locales/bg/transfer.json
@@ -21,14 +21,11 @@
"updatedAt": "Обновен на",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Прехвърлянето беше създадено успешно!",
"edit": "Прехвърлянето беше редактирано успешно!",
"delete": "Прехвърлянето беше изтрито успешно!",
- "deleteAll": "Прехвърлянията бяха изтрити успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно."
},
"cta": {
@@ -36,7 +33,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за Прехвърлянето",
"submit": "Изпрати",
diff --git a/public/locales/bg/validation.json b/public/locales/bg/validation.json
index 3018432bb..ef89b0927 100644
--- a/public/locales/bg/validation.json
+++ b/public/locales/bg/validation.json
@@ -16,6 +16,7 @@
"agree-terms": "Съгласявам се с Общите условия",
"agree-with": "Съгласявам се с",
"agree-with-newsletter": "Съгласявам се да получавам известия ",
+ "agree-with-newsletter-campaign": "Съгласявам се да получавам новини за тази кампания и известия от Подкрепи.бг *",
"informed-agree-with": "Запознат съм и се съгласявам с",
"terms-and-conditions": "общите условия",
"gdpr": "политиката за защита на личните данни",
diff --git a/public/locales/bg/vaults.json b/public/locales/bg/vaults.json
index b47077198..96c04f729 100644
--- a/public/locales/bg/vaults.json
+++ b/public/locales/bg/vaults.json
@@ -13,14 +13,11 @@
"campaignId": "ID на кампания",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Подсметката беше създадена успешно!",
"edit": "Подсметката беше редактирана успешно!",
"delete": "Подсметката беше изтрита успешно!",
- "deleteAll": "Подсметките бяха изтрити успешно!",
"error": "Възникна грешка! Моля опитайте отново по-късно."
},
"cta": {
@@ -28,7 +25,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за подсметката",
"submit": "Изпрати"
diff --git a/public/locales/bg/withdrawals.json b/public/locales/bg/withdrawals.json
index 843289530..d1505649e 100644
--- a/public/locales/bg/withdrawals.json
+++ b/public/locales/bg/withdrawals.json
@@ -22,14 +22,11 @@
"campaignId": "ID на кампания",
"deleteTitle": "Сигурни ли сте?",
"deleteContent": "Това действие ще изтрие елемента завинаги!",
- "deleteAllContent": "Това действие ще изтрие избраните елементи завинаги!",
"actions": "Действия",
"alerts": {
- "selectRow": "Моля изберете ред",
"create": "Преводът беше създаден успешно!",
"edit": "Преводът беше редактиран успешно!",
"delete": "Преводът беше преместен в кошчето!",
- "deleteAll": "Преводите бяха преместени в кошчето!",
"error": "Възникна грешка! Моля опитайте отново по-късно.",
"no-edit": "Превода е приключен успешно и не може да се променя."
},
@@ -46,7 +43,6 @@
"confirm": "Потвърди",
"cancel": "Отказ",
"delete": "Изтрий",
- "deleteSelected": "Изтрий избраните редове",
"edit": "Редактирай",
"details": "Детайли за превода",
"submit": "Изпрати"
diff --git a/public/locales/en/about-project.json b/public/locales/en/about-project.json
index 273b6a770..6c7ff5f7e 100644
--- a/public/locales/en/about-project.json
+++ b/public/locales/en/about-project.json
@@ -3,23 +3,9 @@
"aboutPlatformTitle": "What is the platform Podkrepi.bg",
"aboutPlatformDescription": "We want to create an open-source charity platform, in which the transparency removes the chances of misuse of the donated funds, both by campaign organizers and by the internal team of the donation platform.",
"whatIsDoneTitle": "What has been done already",
- "volunteersIcon": "volunteers signed up",
"members": "members of the association",
"meetingsIcon": "meetings held",
"investedHoursIcon": "hours invested",
- "nameSuggestionIcon": "name suggestions",
- "volunteers": "700+ volunteers in our Discord server",
- "meetings": "100+ internal team meetings",
- "infoSite": "We have created an informative site on the platform through which future benefactors (whether individuals or companies), volunteers, media or partners can sign up.",
- "businessModel": "Choice of initial business model (membership fee + direct donations to the platform + merch)",
- "organizationWork": "Work organization (Discord, Drive, GitHub, Ora.pm, division into teams, etc.)",
- "hostingPartners": "Partnerships with hosting companies (superhosting & icn or others)",
- "nameSuggestions": "We collected 150+ name suggestions and voted internally.",
- "internalMeetings": "100+ internal team meetings",
- "npoConversations": "We conducted a series of talks with NGO representatives in order to better understand and define the problem we need to solve.",
- "featuresList": "We created user stories + a list of functionalities (features list)",
- "trademark": "We kept the trademark (date)",
- "association": "We registered an association for public benefit (date)",
"architecture": "Assembled platform architecture",
"timeline": "Our timeline",
"october-2020-title": "October 2020",
@@ -35,7 +21,6 @@
"distribution": "Distribution by expert areas and selection of leads.",
"name-choice": "Choosing a platform name out of 197 proposals.",
"self-support": "Researched business models for self-support of the platform.",
- "january-2021-title": "January 2021",
"user-stories-preparation": "Preparation of 270 User Stories as the basis for the platform.",
"logo-choice": "Logo choice out of 150 variants offered.",
"trademarking": "Registered a trademark.",
@@ -78,7 +63,6 @@
"github-project": "The project is being developed on GitHub.",
"documentation-social": "The documentation for the social aspect of the project is on GitBook.",
"documentation-technical": "Technical documentation.",
- "high-level-map": "Developed a High-level architectural/organisational map of the platform.",
"opened-donations-account": "Opened a donations account in",
"bank-name": "UniCredit Bulbank",
"with-holder": "with holder",
diff --git a/public/locales/en/auth.json b/public/locales/en/auth.json
index 0e11270fb..8fb087a09 100644
--- a/public/locales/en/auth.json
+++ b/public/locales/en/auth.json
@@ -11,6 +11,7 @@
},
"cta": {
"login": "Login",
+ "guest": "As guest",
"logout": "Logout",
"register": "Register",
"send": "Send",
@@ -18,6 +19,7 @@
},
"fields": {
"email": "Email",
+ "email-descriptive": "Fill in your email",
"password": "Password",
"confirm-password": "Confirm Password",
"first-name": "First name",
diff --git a/public/locales/en/bank-transactions.json b/public/locales/en/bank-transactions.json
new file mode 100644
index 000000000..1e6146cfb
--- /dev/null
+++ b/public/locales/en/bank-transactions.json
@@ -0,0 +1,27 @@
+{
+ "all": "All bank transactions",
+ "bank-transactions": "Bank transactions",
+ "transaction-date": "Transaction date",
+ "amount": "Amount",
+ "currency": "Currency",
+ "donation-status": "Donation status",
+ "id": "Trnsaction ID",
+ "bank-name": "Bank name",
+ "type": "Type",
+ "description": "Description",
+ "cta": {
+ "download": "Download",
+ "status": "Donation status",
+ "type": "Type",
+ "from": "From",
+ "to": "To",
+ "apply-ref-heading": "Apply ref heading",
+ "apply-ref": "Apply ref",
+ "edit": "Edit",
+ "start-sync": "Start sync"
+ },
+ "matched-ref": "Matched ref",
+ "payment-ref": "Payment ref",
+ "rerun-dates": "Repeat bank sync"
+ }
+
\ No newline at end of file
diff --git a/public/locales/en/bankaccounts.json b/public/locales/en/bankaccounts.json
index a91dae4cb..ea67bbb31 100644
--- a/public/locales/en/bankaccounts.json
+++ b/public/locales/en/bankaccounts.json
@@ -26,17 +26,14 @@
"withdrawals": "Withdrawals",
"actions": "Actions",
"alerts": {
- "selectRow": "Please choose a row",
"create": "Bank account has been created successfully!",
"edit": "Bank account has been edited successfully!",
"delete": "Bank account has been deleted successfully!",
- "deleteAll": "Bank accounts have been deleted successfully!",
"error": "An error has occured! Please try again later."
},
"cta": {
"add": "Add",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit"
}
}
diff --git a/public/locales/en/beneficiary.json b/public/locales/en/beneficiary.json
index 7fa810a2e..7a169acf3 100644
--- a/public/locales/en/beneficiary.json
+++ b/public/locales/en/beneficiary.json
@@ -10,7 +10,6 @@
"not-person": "Not a person",
"not-company": "Not a company",
"city": "City",
- "coordinatorRelation": "Coordinator relation",
"organizerRelation": "Organizer relation",
"type": "Beneficiary type",
"description": "Description",
@@ -36,11 +35,9 @@
},
"person-select": "Select person or",
"company-select": "Select company or",
- "organizer-select": "Select organizer or",
"create-new": "create new",
"person-label": "Person",
"company-label": "Company",
- "organizer-label": "Organizer"
}
},
"actions": "Actions",
diff --git a/public/locales/en/campaigns.json b/public/locales/en/campaigns.json
index 8609116b4..04f405c1f 100644
--- a/public/locales/en/campaigns.json
+++ b/public/locales/en/campaigns.json
@@ -38,7 +38,6 @@
"campaignId": "Campaign ID",
"deleteTitle": "Are you sure you want to delete this campaign?",
"deleteContent": "This action cannot be undone.",
- "deleteAllContent": "This action cannot be undone.",
"actions": "Actions",
"statistics": {
"button": "Donation statistics",
@@ -60,11 +59,9 @@
"hourlyDesc": "Shows number of donations for each hour of the day"
},
"alerts": {
- "selectRow": "Please select a row",
"create": "Campaign created successfully",
"edit": "Campaign edited successfully",
"delete": "Campaign deleted successfully",
- "deleteAll": "All withdrawals deleted successfully",
"error": "An error occurred. Please try again later.",
"deletedFile": "File deleted successfully"
},
@@ -74,30 +71,59 @@
"save": "Save",
"submit": "Submit",
"apply": "Apply",
+ "subscribe": "Subscribe for email notifications for the campaign",
+ "subscribeFooter": "Subscribe for the newsletter",
+ "subscribeGeneral": "Subscribe for email notifications from Podkrepi.bg",
+ "subscribe-monthly-newsletter": "Monthly newsletter of Podkrepi.bg",
+ "subscribeGeneralSubtext": "Receive our monthly newsletter which will inform you about the most interesting news from Podkrepi.bg!!",
+ "subscribe-general-monthly-newsletter": "Receive our monthly newsletter so that you are aware of the most interesting news from Podkrepi.bg!",
+ "subscribeGeneralButton": "Subscribe for news",
+ "subscribe-general-newsletter-button": "Subscribe",
"support": "Donate",
"support-cause-today": "Support a campaign today!",
"support-now": "Support now",
"see-all": "See all",
"see-less": "See less",
- "see-top-10": "See TOP 10",
"see-more": "See more",
"donor": "Donor",
"add": "Add",
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Details about the Campaign",
"add-files": "Add files",
"attached-files": "Attached files",
- "download": "Download"
+ "download": "Download",
+ "allow-donation-on-complete": "Allow donations after the amount is reached"
+ },
+ "subscribe": {
+ "confirm-sent": "Please, activate your subscription from the email that we sent to {{email}}",
+ "confirm-subscribe": "You subscribed successfully",
+ "subscribe-title": "Subscribe for news from Podkrepi.bg",
+ "subscribe-campaign-title": "Subscribe for news about the campaign",
+ "subscribe-text-nonLoggedUser": "Please, proceed as a guest and write down your email, on which you want to receive notifications for this campaign or you can log in. If you log in with your and password you will be able to manage your subscription from your Personal profile",
+ "subscribe-text-nonLoggedUser-general": "Please, proceed as a guest and write down your email, on which you want to receive notifications from us or you can log in. If you log in with your and password you will be able to manage your subscription from your Personal profile",
+ "subscribe-text-loggedUser": "Please, choose if you want to receive the news about the campaign on your profile email or on another one:",
+ "subscribe-subtitle": "I want to receive news and notifications from Podkrepi.bg on this email:",
+ "subscribe-campaign-subtTitle": "I want to receive news about the campaign on this email:",
+ "subscribe-button": "Subscribe me",
+ "profile-button": "On the profile one",
+ "another-button": "On another one"
},
"campaign": {
"subheading": "Your support for the world matters. All supporters through Podkrepi.bg are our partners in supporting the community campaign. As a generous benefactor, you become an important partner in supporting a campaign regarding someone's health or the success of a cause that is close to your heart.",
- "subheading-bold": "Even the slightest help can be the engine of great change",
- "subheading-bold-secondary": "Together we support and encourage the donation and volunteer culture in Bulgaria!",
"title": "Campaign name",
+ "notify": "Send a notification to all subscribers",
+ "slug": {
+ "name": "Short name of the campaign",
+ "warning": "Editing this field will modify the campaign link and make the current one invalid.",
+ "placeholder": "The default value is the same as 'Campaign Name'."
+ },
+ "rte": {
+ "modern": "New (beta)",
+ "classic": "Classic"
+ },
"amount": "Target amount",
"type": "Campaign type",
"state": "Campaign state",
@@ -107,7 +133,9 @@
"documents": "documents",
"guarantor": "guarantor",
"others": "others",
- "messages": "Messages",
+ "messages": "The campaign was supported by",
+ "profile": "Profile:",
+ "status": "Status:",
"sort": {
"title": "Sort by:",
"date": "Date",
@@ -115,43 +143,10 @@
"search": "Search...",
"noResults": "No messages found"
},
- "profile": "Profile:",
- "status": "Status:",
"gallery": "Gallery",
- "report-irregularity": "Report irregularity",
"financial-report": "Financial report",
"report-campaign": "Report the campaign",
"feedback": "Feedback",
- "images": {
- "add": "Add image",
- "add-more": "Add more",
- "adding-more": "Adding more images",
- "drop-paste-import-files": "Drop files here or import from:",
- "my-device": "Device",
- "back": "Back",
- "edit": "Edit",
- "editing": "Editing",
- "import-from": "Importing from external source",
- "close": "Close",
- "cancel": "Cancel",
- "remove": "Remove",
- "save": "Save",
- "files-selected": "Selected images",
- "uploading": "Uploading...",
- "complete": "Complete",
- "upload-file": "Upload %{smart_count} image",
- "upload-multiple": "Upload %{smart_count} images",
- "x-time-left": "%{time} time remaining",
- "upload-failed": "Upload failed",
- "pause": "Pause",
- "paused": "Paused",
- "resume": "Resume",
- "retry": "Retry"
- },
- "rte": {
- "modern": "New (beta)",
- "classic": "Classic"
- },
"beneficiary": {
"name": "Beneficiary",
"label": "Beneficiary:",
@@ -160,19 +155,15 @@
},
"coordinator": {
"name": "Coordinator:",
- "add": "Add coordinator",
- "create": "Create coordinator"
+ "add": "Add coordinator"
},
"organizer": {
- "name": "Organizer:",
- "add": "Add organizer",
- "create": "Create organizer"
+ "name": "Organizer:"
},
"image-of": "Image of",
"podkrepi-bg-operator": "Podkrepi.bg Operator:",
"have-a-question": "Have a question?",
"btn-connect": "Write to us",
- "write-to-coordinator": "Write to Coordinator",
"description": "Description",
"start-date": "Start date:",
"end-date": "End date:",
@@ -180,8 +171,7 @@
"date": "Date:",
"news": "News",
"wishes": "Wishes",
- "nowishes": "No wishes yet",
- "seeAll": "Show all"
+ "nowishes": "No wishes yet"
},
"info-graphics": {
"donation-title": "100% of the donation goes to those in need",
diff --git a/public/locales/en/cities.json b/public/locales/en/cities.json
index cc7cc7f7c..039bae65e 100644
--- a/public/locales/en/cities.json
+++ b/public/locales/en/cities.json
@@ -11,14 +11,11 @@
"campaignId": "Campaign ID",
"deleteTitle": "Are you sure?",
"deleteContent": "This action will delete this item permanently!",
- "deleteAllContent": "This action will delete selected items permanently!",
"actions": "Actions",
"alerts": {
- "selectRow": "Please choose a row",
"create": "City has been created successfully!",
"edit": "City has been edited successfully!",
"delete": "City has been deleted successfully!",
- "deleteAll": "City have been deleted successfully!",
"error": "An error has occured! Please try again later."
},
"cta": {
@@ -26,7 +23,6 @@
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Details",
"submit": "Submit"
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 1cc29d1ea..47459e250 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -33,7 +33,6 @@
"donate": "Donate",
"donation-menu": "Campaigns",
"blog": "Blog",
- "support_us_button": "Support us",
"profile": "Profile",
"login": "Login",
"login-with": "Login with",
@@ -60,13 +59,13 @@
"link": "Link",
"components": {
"footer": {
+ "subscribe": "Subscribe for notifications",
"donatе": "Donate",
"about-us": "About us",
"resources": "Resources",
"others": "Others",
"all-campaigns": "All campaigns",
"who-are-we": "Who are we?",
- "suggest-campaign": "Suggest a campaign",
"about-project": "About the project",
"support-us": "Support us",
"become-a-volunteer": "Become a volunteer",
@@ -75,7 +74,7 @@
"faq": "Frequently asked questions",
"privacy-policy": "Privacy Policy",
"terms-of-service": "Terms of Service",
- "copyrights": "Podkrepi.bg ©2023 All rights reserved.",
+ "copyrights": "Podkrepi.bg ©2024 All rights reserved.",
"hosting-partner": "Hosting partner:",
"partners": "Partners",
"social": {
@@ -94,14 +93,13 @@
"fields": {
"currency": "Currency",
"personId": "Person",
+ "campaignId": "Campaign",
"sourceCampaignId": "Source campaign",
- "targetCampaignId": "Target campaign"
+ "targetCampaignId": "Target campaign",
+ "email": "Email"
},
"cta": {
- "more-information": "More information",
- "read-more": "Read more",
- "see-profile": "See profile",
- "question": "Have a question?"
+ "more-information": "More information"
},
"cookieConsent": "Podkrepi.bg doesn't use cookies, except the third-party cookies required for the analytics components Google Analytics and HotJar. Accepting the cookies will help us improve your user experience.",
"cookieConsentButton": "Accept",
diff --git a/public/locales/en/documents.json b/public/locales/en/documents.json
index 0a0f5c0fd..4766b341f 100644
--- a/public/locales/en/documents.json
+++ b/public/locales/en/documents.json
@@ -14,7 +14,6 @@
"create": "Document has been created successfully!",
"edit": "Document has been edited successfully!",
"delete": "Document has been deleted successfully!",
- "deleteAll": "Documents have been deleted successfully!",
"error": "An error has occured! Please try again later."
},
"cta": {
@@ -22,7 +21,6 @@
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Details",
"submit": "Submit"
diff --git a/public/locales/en/donations.json b/public/locales/en/donations.json
index 14ae0885a..9ab810f5c 100644
--- a/public/locales/en/donations.json
+++ b/public/locales/en/donations.json
@@ -19,7 +19,6 @@
"updated-at": "Updated at",
"deleteTitle": "Are you sure?",
"deleteContent": "This action will delete this item permanently!",
- "deleteAllContent": "This action will delete selected items permanently!",
"bankTransactionsFileId": "Name of bank transactions file",
"addFiles": "Select file",
"bankImprotResults": "Bank import results",
@@ -29,12 +28,10 @@
"createdAt": "Created at",
"noOptions": "No results",
"alerts": {
- "selectRow": "Please choose a row",
"create": "Document has been created successfully!",
"edit": "Document has been edited successfully!",
"delete": "Document has been deleted successfully!",
"invalidate": "Document has been marked as invalid successfully!",
- "deleteAll": "Documents have been deleted successfully!",
"editDonor": "Donation donor has been edited successfully!",
"error": "An error has occured! Please try again later.",
"requiredError": "Fields is required!"
@@ -45,7 +42,6 @@
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Donation Details",
"submit": "Submit",
diff --git a/public/locales/en/index.json b/public/locales/en/index.json
index bc92241a8..2f546d6c5 100644
--- a/public/locales/en/index.json
+++ b/public/locales/en/index.json
@@ -10,6 +10,10 @@
"content": "Podkrepi.bg is a community of specialists in the field of programming, law, marketing, design, medicine, finance, social entrepreneurship and others. We are united by the goal of creating a sustainable and transparent donation platform that supports causes and people in need, while promoting and restoring trust in donations in Bulgaria.",
"meet-our-team": "Meet our team"
},
+ "subscription-section": {
+ "heading": "You want to know about our future achievements?",
+ "content": "Subscribe for our newsletter we will infrom you about the most important from the life of Podkrepi.bg. Every month you will receive email from us in which we will share with you the most important things about the campaigns that we have and their organizers and beneficiaries. You will receive news for our partners, volunteers and donors in your email box. If this sounds good for you, subscribe as you fill in your email here:"
+ },
"support-us-section": {
"heading": "Support us as:",
"financial-support": "- a benefactor",
diff --git a/public/locales/en/notifications.json b/public/locales/en/notifications.json
new file mode 100644
index 000000000..3d9f6a360
--- /dev/null
+++ b/public/locales/en/notifications.json
@@ -0,0 +1,16 @@
+{
+ "subscribe": {
+ "thank-you-msg-heading": "Your subscription is active!",
+ "thank-you-msg-text": "You successfully activated your subscription. You can wait news from us on {{email}}",
+ "subscription-fail-heading": "An error occurred",
+ "subscription-fail-text": "We couldn`t activate your subscription. Please, try again.",
+ "cta": "To the site",
+ "cta-retry": "Try again"
+ },
+ "unsubscribe": {
+ "thank-you-msg": "You successfully deactivated your news subscription!",
+ "subscription-fail": "An error occurred while deactivating your news subscription",
+ "cta": "To the site",
+ "cta-retry": "Try again"
+ }
+}
diff --git a/public/locales/en/transfer.json b/public/locales/en/transfer.json
index 462362666..2b27291cf 100644
--- a/public/locales/en/transfer.json
+++ b/public/locales/en/transfer.json
@@ -21,14 +21,11 @@
"updatedAt": "Updated at",
"deleteTitle": "Are you sure?",
"deleteContent": "This action will delete this item permanently!",
- "deleteAllContent": "This action will delete selected items permanently!",
"actions": "Actions",
"alerts": {
- "selectRow": "Please choose a row",
"create": "Transfer has been created successfully!",
"edit": "Transfer has been edited successfully!",
"delete": "Transfer has been deleted successfully!",
- "deleteAll": "Transfers have been deleted successfully!",
"error": "An error has occured! Please try again later."
},
"cta": {
@@ -36,7 +33,6 @@
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Details",
"submit": "Submit"
diff --git a/public/locales/en/validation.json b/public/locales/en/validation.json
index a91ffb1ac..4e1a9592e 100644
--- a/public/locales/en/validation.json
+++ b/public/locales/en/validation.json
@@ -16,6 +16,8 @@
"agree-terms": "Agree to the Terms and Conditions",
"agree-with": "I agree to the",
"informed-agree-with": "I understand and I agree to the",
+ "agree-with-newsletter": "I agree to receive news",
+ "agree-with-newsletter-campaign": "I agree to receive news about this campaign and news by Podkrepi.bg *",
"terms-and-conditions": "Terms and Conditions",
"gdpr": "General Data Protection Regulation (GDPR)",
"legal-entity": "Legal entity",
diff --git a/public/locales/en/vaults.json b/public/locales/en/vaults.json
index b0c5ac61f..a27cd9382 100644
--- a/public/locales/en/vaults.json
+++ b/public/locales/en/vaults.json
@@ -13,14 +13,11 @@
"campaignId": "Campaign ID",
"deleteTitle": "Are you sure?",
"deleteContent": "This action will delete this item permanently!",
- "deleteAllContent": "This action will delete selected items permanently!",
"actions": "Actions",
"alerts": {
- "selectRow": "Please choose a row",
"create": "Vault has been created successfully!",
"edit": "Vault has been edited successfully!",
"delete": "Vault has been deleted successfully!",
- "deleteAll": "Vaults have been deleted successfully!",
"error": "An error has occured! Please try again later."
},
"cta": {
@@ -28,7 +25,6 @@
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Details",
"submit": "Submit"
diff --git a/public/locales/en/withdrawals.json b/public/locales/en/withdrawals.json
index 39955e1ae..679020954 100644
--- a/public/locales/en/withdrawals.json
+++ b/public/locales/en/withdrawals.json
@@ -17,14 +17,11 @@
"campaignId": "Campaign ID",
"deleteTitle": "Are you sure?",
"deleteContent": "This action will delete this item permanently!",
- "deleteAllContent": "This action will delete selected items permanently!",
"actions": "Actions",
"alerts": {
- "selectRow": "Please choose a row",
"create": "Withdrawal has been created successfully!",
"edit": "Withdrawal has been edited successfully!",
"delete": "Withdrawal has been deleted successfully!",
- "deleteAll": "Withdrawals have been deleted successfully!",
"error": "An error has occured! Please try again later.",
"no-edit": "This withdrawal is completed successfully and cannot be changed."
},
@@ -41,7 +38,6 @@
"confirm": "Confirm",
"cancel": "Cancel",
"delete": "Delete",
- "deleteSelected": "Delete selected rows",
"edit": "Edit",
"details": "Details",
"submit": "Submit"
diff --git a/src/components/client/about-project/helpers/whatIsDoneData.tsx b/src/components/client/about-project/helpers/whatIsDoneData.tsx
index dc5398a67..94450dc10 100644
--- a/src/components/client/about-project/helpers/whatIsDoneData.tsx
+++ b/src/components/client/about-project/helpers/whatIsDoneData.tsx
@@ -39,9 +39,4 @@ export const rightColumnLabels = [
href: staticUrls.projectDocs,
},
{ label: 'documentation-technical', href: staticUrls.devDocs },
- // Currently the architecture map is not available
- // {
- // label: 'high-level-map',
- // href: 'https://docs.podkrepi.bg/general/arkhitektura/architecture',
- // },
]
diff --git a/src/components/client/auth/register/CorporateRegisterForm.tsx b/src/components/client/auth/register/CorporateRegisterForm.tsx
index 3418905cb..35b1e2caa 100644
--- a/src/components/client/auth/register/CorporateRegisterForm.tsx
+++ b/src/components/client/auth/register/CorporateRegisterForm.tsx
@@ -9,7 +9,7 @@ import PasswordField from 'components/common/form/PasswordField'
import AcceptPrivacyPolicyField from 'components/common/form/AcceptPrivacyPolicyField'
import AcceptTermsField from 'components/common/form/AcceptTermsField'
import EmailField from 'components/common/form/EmailField'
-import AcceptNewsLetterField from 'components/common/form/AcceptNewsletterField'
+import { AcceptNewsLetterField } from 'components/common/form/AcceptNewsletterField'
import { AccountType } from 'gql/user-registration'
import { validateEIK13, validateEIK9 } from 'components/common/validations/EIKValidator'
diff --git a/src/components/client/auth/register/RegisterForm.tsx b/src/components/client/auth/register/RegisterForm.tsx
index b56f2a08c..5ee114f58 100644
--- a/src/components/client/auth/register/RegisterForm.tsx
+++ b/src/components/client/auth/register/RegisterForm.tsx
@@ -9,7 +9,7 @@ import PasswordField from 'components/common/form/PasswordField'
import AcceptPrivacyPolicyField from 'components/common/form/AcceptPrivacyPolicyField'
import AcceptTermsField from 'components/common/form/AcceptTermsField'
import EmailField from 'components/common/form/EmailField'
-import AcceptNewsLetterField from 'components/common/form/AcceptNewsletterField'
+import { AcceptNewsLetterField } from 'components/common/form/AcceptNewsletterField'
import { AccountType } from 'gql/user-registration'
import { IndividualRegisterFormData } from 'gql/user-registration'
diff --git a/src/components/client/campaign-news/secured/CreateForm.tsx b/src/components/client/campaign-news/secured/CreateForm.tsx
index 13290a3f6..58ca10d8e 100644
--- a/src/components/client/campaign-news/secured/CreateForm.tsx
+++ b/src/components/client/campaign-news/secured/CreateForm.tsx
@@ -206,7 +206,7 @@ export default function CreateForm({ campaignId = '', isAdmin = true }: Campaign
}}
/>
-
+ {/*
-
+ */}
{isAdmin && }
diff --git a/src/components/client/campaign-news/secured/EditForm.tsx b/src/components/client/campaign-news/secured/EditForm.tsx
index d7f948910..bed31df12 100644
--- a/src/components/client/campaign-news/secured/EditForm.tsx
+++ b/src/components/client/campaign-news/secured/EditForm.tsx
@@ -237,7 +237,7 @@ export default function EditForm({ article, campaignId = '', isAdmin = true }: P
}}
/>
-
+ {/*
-
+ */}
{isAdmin && }
diff --git a/src/components/client/campaigns/CampaignDetails.tsx b/src/components/client/campaigns/CampaignDetails.tsx
index f60bd78c1..6cf7451e6 100644
--- a/src/components/client/campaigns/CampaignDetails.tsx
+++ b/src/components/client/campaigns/CampaignDetails.tsx
@@ -1,4 +1,4 @@
-import React from 'react'
+import React, { useState } from 'react'
import { useTranslation } from 'next-i18next'
import dynamic from 'next/dynamic'
@@ -26,6 +26,8 @@ import { routes } from 'common/routes'
import { useCanEditCampaign } from 'common/hooks/campaigns'
import { moneyPublic } from 'common/util/money'
import CampaignPublicExpensesChart from './CampaignPublicExpensesChart'
+import EmailIcon from '@mui/icons-material/Email'
+import RenderCampaignSubscribeModal from '../notifications/CampaignSubscribeModal'
const ReactQuill = dynamic(() => import('react-quill'), { ssr: false })
const CampaignNewsSection = dynamic(() => import('./CampaignNewsSection'), { ssr: false })
@@ -37,6 +39,7 @@ const classes = {
campaignTitle: `${PREFIX}-campaignTitle`,
linkButton: `${PREFIX}-linkButton`,
securityIcon: `${PREFIX}-securityIcon`,
+ subscribeLink: `${PREFIX}-subscribe`,
financeSummary: `${PREFIX}-financeSummary`,
}
@@ -93,7 +96,18 @@ const StyledGrid = styled(Grid)(({ theme }) => ({
width: theme.spacing(2.25),
height: theme.spacing(2.75),
},
+ [`& .${classes.subscribeLink}`]: {
+ fontWeight: 500,
+ fontSize: theme.typography.pxToRem(16.5),
+ textAlign: 'center',
+ '&:hover': {
+ textDecoration: 'underline',
+ transform: 'scale(1.01)',
+ cursor: 'pointer',
+ transition: 'all 0.3s ease',
+ },
+ },
[`& .${classes.financeSummary}`]: {
fontSize: `1.2rem`,
[theme.breakpoints.up('sm')]: {
@@ -109,6 +123,7 @@ type Props = {
export default function CampaignDetails({ campaign }: Props) {
const { t } = useTranslation()
+ const [subscribeIsOpen, setSubscribeOpen] = useState(false)
const sliderImages = campaignSliderUrls(campaign)
const canEditCampaign = useCanEditCampaign(campaign.slug)
const { data: expensesList } = useCampaignApprovedExpensesList(campaign.slug)
@@ -124,7 +139,22 @@ export default function CampaignDetails({ campaign }: Props) {
showExpensesLink={(expensesList && expensesList?.length > 0) || canEditCampaign}
/>
-
+ {subscribeIsOpen && (
+
+ )}
+
+ setSubscribeOpen(true)}
+ cursor="pointer"
+ />
+ setSubscribeOpen(true)} className={classes.subscribeLink}>
+ {t('campaigns:cta.subscribe')}
+
+
+
@@ -172,6 +202,21 @@ export default function CampaignDetails({ campaign }: Props) {
)}
+ {subscribeIsOpen && (
+
+ )}
+
+ setSubscribeOpen(true)}
+ cursor="pointer"
+ />
+ setSubscribeOpen(true)} className={classes.subscribeLink}>
+ {t('campaigns:cta.subscribe')}
+
+
diff --git a/src/components/client/campaigns/DonorsAndDonations.tsx b/src/components/client/campaigns/DonorsAndDonations.tsx
index c4f025b5a..05dad12d2 100644
--- a/src/components/client/campaigns/DonorsAndDonations.tsx
+++ b/src/components/client/campaigns/DonorsAndDonations.tsx
@@ -84,7 +84,7 @@ export default function DonorsAndDonations({ donations }: { donations: CampaignD
{donationsToShow && donationsToShow.length !== 0 ? (
- donationsToShow.map(({ type, metadata, person, amount, createdAt, currency }, key) => (
+ donationsToShow.map(({ type, metadata, person, amount, updatedAt, currency }, key) => (
)}
- {/* {!metadata && (
-
- {person
- ? person.company
- ? `${person.company.companyName}`
- : `${person.firstName} ${person.lastName}`
- : t('campaigns:donations.anonymous')}
-
- )}
- {metadata && person && (
- <>
- {metadata.name}
-
- {t('campaigns:campaign.from')} {person.company.companyName}
-
- >
- )} */}
{moneyPublic(amount, currency)}
|
- {formatDistanceStrict(parseISO(createdAt), new Date(), {
+ {formatDistanceStrict(parseISO(updatedAt), new Date(), {
locale: i18n?.language == 'bg' ? bg : enUS,
addSuffix: true,
})}
diff --git a/src/components/client/campaigns/InlineDonation.tsx b/src/components/client/campaigns/InlineDonation.tsx
index cd58f931f..c41e32b6a 100644
--- a/src/components/client/campaigns/InlineDonation.tsx
+++ b/src/components/client/campaigns/InlineDonation.tsx
@@ -36,11 +36,11 @@ import LinkButton from '../../common/LinkButton'
import CampaignProgress from './CampaignProgress'
import DonorsAndDonations from './DonorsAndDonations'
import DonationWishesInline from './DonationWishesInline'
+
import CustomListItem from 'components/common/navigation/CustomListItem'
import { socialMedia } from './helpers/socialMedia'
import { CampaignState } from './helpers/campaign.enums'
import { AlertStore } from 'stores/AlertStore'
-import RenderCampaignSubscribeModal from '../notifications/CampaignSubscribeModal'
import { useDonationWishesList } from 'common/hooks/donationWish'
const PREFIX = 'InlineDonation'
@@ -66,7 +66,6 @@ const classes = {
campaignInfoKey: `${PREFIX}-campaignInfoKey`,
campaignInfoValue: `${PREFIX}-campaignInfoValue`,
pagination: `${PREFIX}-pagination`,
- subscribeLink: `${PREFIX}-subscribe`,
}
const StyledGrid = styled(Grid)(({ theme }) => ({
@@ -243,19 +242,6 @@ const StyledGrid = styled(Grid)(({ theme }) => ({
fontSize: theme.typography.pxToRem(15),
},
},
-
- [`& .${classes.subscribeLink}`]: {
- fontWeight: 500,
- fontSize: theme.typography.pxToRem(16.5),
- textAlign: 'center',
-
- '&:hover': {
- textDecoration: 'underline',
- transform: 'scale(1.01)',
- cursor: 'pointer',
- transition: 'all 0.3s ease',
- },
- },
}))
type Props = {
@@ -266,7 +252,6 @@ export default function InlineDonation({ campaign }: Props) {
const { t } = useTranslation('campaigns')
const { asPath } = useRouter()
const [status, copyUrl] = useCopyToClipboard(1000)
- const [subscribeIsOpen, setSubscribeOpen] = useState(false)
const active = status === 'copied' ? 'inherit' : 'primary'
const [page, setPage] = useState(0)
const { mobile } = useMobile()
@@ -335,7 +320,7 @@ export default function InlineDonation({ campaign }: Props) {
{wishList && }
{wishList?.totalCount !== 0 && (
}
onDelete={() => {
return
@@ -439,22 +424,6 @@ export default function InlineDonation({ campaign }: Props) {
- {subscribeIsOpen && (
-
- )}
- {/* Hide until notifications is ready */}
- {/*
- setSubscribeOpen(true)} className={classes.subscribeLink}>
- {t('campaigns:cta.subscribe')}
-
- setSubscribeOpen(true)} cursor="pointer" />
- */}
{detailsShown &&
(donationHistoryError ? (
'Error fetching donation history'
diff --git a/src/components/client/index/IndexPage.tsx b/src/components/client/index/IndexPage.tsx
index 9917614b0..819b2bc95 100644
--- a/src/components/client/index/IndexPage.tsx
+++ b/src/components/client/index/IndexPage.tsx
@@ -7,6 +7,7 @@ import PlatformStatisticsSection from './sections/PlatformStatisticsSection/Plat
import MediaSection from './sections/MediaSection/MediaSection'
import HowWeWorkSection from './sections/HowWeWorkSection/HowWeWorkSection'
import PartnersSection from './sections/PartnersSection/PartnersSection'
+import SubscriptionSection from './sections/SubscriptionSection/SubscriptionSection'
import TeamMembersSection from './sections/TeamMembersSection/TeamMembersSection'
import JoinPodkrepiBgSection from './sections/JoinPodkrepiBgSection/JoinPodkrepiBgSection'
import FaqSection from './sections/FaqSection/FaqSection'
@@ -28,6 +29,7 @@ export default function IndexPage() {
+
)
diff --git a/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.styled.tsx b/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.styled.tsx
index c24d71384..51c99674e 100644
--- a/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.styled.tsx
+++ b/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.styled.tsx
@@ -1,4 +1,4 @@
-import { Typography, Grid } from '@mui/material'
+import { Button, Typography, Grid } from '@mui/material'
import { styled } from '@mui/material/styles'
import theme from 'common/theme'
@@ -73,3 +73,33 @@ export const HelpThoseInNeedButton = styled(LinkButton)(() => ({
},
},
}))
+
+export const SubscribeHeading = styled(Typography)(() => ({
+ fontWeight: 500,
+ fontSize: theme.typography.pxToRem(16.5),
+ textAlign: 'center',
+}))
+
+export const SubscribeButton = styled(Button)(() => ({
+ fontWeight: 600,
+ borderRadius: theme.borders.round,
+ backgroundColor: theme.palette.secondary.main,
+ minWidth: theme.spacing(3.75),
+ fontSize: theme.typography.pxToRem(15),
+ margin: theme.spacing(2, 0, 0, 'auto'),
+ boxShadow:
+ '0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px rgba(0, 0, 0, 0.14), 0px 1px 5px rgba(0, 0, 0, 0.12)',
+
+ '& span': {
+ display: 'none',
+ },
+
+ [theme.breakpoints.up('md')]: {
+ fontSize: theme.typography.pxToRem(17),
+ minWidth: theme.spacing(50),
+
+ '& span': {
+ display: 'inline-flex',
+ },
+ },
+}))
diff --git a/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.tsx b/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.tsx
index b10ed3359..4fe900a49 100644
--- a/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.tsx
+++ b/src/components/client/index/sections/PlatformStatisticsSection/PlatformStatisticsSection.tsx
@@ -1,8 +1,9 @@
-import React from 'react'
+import React, { useState } from 'react'
import { useTranslation } from 'next-i18next'
-import ArrowForwardSharp from '@mui/icons-material/ArrowForwardSharp'
import { Grid } from '@mui/material'
+import ArrowForwardSharp from '@mui/icons-material/ArrowForwardSharp'
+import EmailIcon from '@mui/icons-material/Email'
import { routes } from 'common/routes'
import Statistics from './Statistics/Statistics'
@@ -13,10 +14,14 @@ import {
Root,
SectionGridWrapper,
Subtitle,
+ SubscribeButton,
+ SubscribeHeading,
} from './PlatformStatisticsSection.styled'
+import RenderSubscribeModal from 'components/client/notifications/GeneralSubscribeModal'
export default function PlatformStatisticsSection() {
- const { t } = useTranslation('index')
+ const { t } = useTranslation()
+ const [subscribeIsOpen, setSubscribeOpen] = useState(false)
return (
@@ -26,14 +31,26 @@ export default function PlatformStatisticsSection() {
margin: '0 auto',
maxWidth: theme.spacing(67),
})}>
- {t('platform-statistics.heading')}
- {t('platform-statistics.text')}
+ {t('index:platform-statistics.heading')}
+ {t('index:platform-statistics.text')}
}>
- {t('platform-statistics.donate-to-those-in-need')}
+ {t('index:platform-statistics.donate-to-those-in-need')}
+ {subscribeIsOpen && }
+
+
+ {t('campaigns:cta.subscribeGeneral')}
+
+ {t('campaigns:cta.subscribeGeneralSubtext')}
+ setSubscribeOpen(true)}
+ variant="contained"
+ endIcon={}>
+ {t('campaigns:cta.subscribeGeneralButton')}
+
diff --git a/src/components/client/index/sections/PlatformStatisticsSection/Statistics/Statistics.styled.tsx b/src/components/client/index/sections/PlatformStatisticsSection/Statistics/Statistics.styled.tsx
index 1042190ee..576db43f9 100644
--- a/src/components/client/index/sections/PlatformStatisticsSection/Statistics/Statistics.styled.tsx
+++ b/src/components/client/index/sections/PlatformStatisticsSection/Statistics/Statistics.styled.tsx
@@ -27,10 +27,10 @@ export const Fraction = styled(Typography)(() => ({
fontWeight: 'bold',
lineHeight: 1,
fontSize: theme.typography.pxToRem(20),
- marginTop: theme.spacing(0.7),
+ marginTop: theme.spacing(1),
[theme.breakpoints.up('md')]: {
- marginTop: theme.spacing(1.6),
+ marginTop: theme.spacing(1.87),
},
}))
diff --git a/src/components/client/index/sections/SubscriptionSection/SubscriptionSection.styled.tsx b/src/components/client/index/sections/SubscriptionSection/SubscriptionSection.styled.tsx
new file mode 100644
index 000000000..74d06c87f
--- /dev/null
+++ b/src/components/client/index/sections/SubscriptionSection/SubscriptionSection.styled.tsx
@@ -0,0 +1,35 @@
+import { Grid, Typography } from '@mui/material'
+import { styled } from '@mui/material/styles'
+
+import theme from 'common/theme'
+
+export const Root = styled('section')(() => ({
+ maxWidth: theme.spacing(150),
+ margin: '0 auto',
+ padding: theme.spacing(0, 3),
+ marginBottom: theme.spacing(13),
+}))
+
+export const InfoText = styled(Typography)(() => ({
+ textAlign: 'center',
+ fontSize: theme.typography.pxToRem(16),
+ lineHeight: theme.spacing(3),
+ padding: theme.spacing(0, 8, 6, 8),
+}))
+
+export const SubscribeGrid = styled(Grid)(() => ({
+ margin: theme.spacing(4, 'auto'),
+
+ [`& .subscribeBtn`]: {
+ fontSize: theme.typography.pxToRem(16),
+ background: `${theme.palette.primary}`,
+
+ '&:hover': {
+ background: theme.palette.primary.main,
+ },
+ },
+
+ [theme.breakpoints.up(768)]: {
+ margin: theme.spacing(8, 'auto'),
+ },
+}))
diff --git a/src/components/client/index/sections/SubscriptionSection/SubscriptionSection.tsx b/src/components/client/index/sections/SubscriptionSection/SubscriptionSection.tsx
new file mode 100644
index 000000000..dcb74da18
--- /dev/null
+++ b/src/components/client/index/sections/SubscriptionSection/SubscriptionSection.tsx
@@ -0,0 +1,65 @@
+import React, { useState } from 'react'
+import { useTranslation } from 'next-i18next'
+
+import { Grid } from '@mui/material'
+import EmailIcon from '@mui/icons-material/Email'
+
+import RenderSubscribeModal from 'components/client/notifications/GeneralSubscribeModal'
+import theme from 'common/theme'
+
+import { Heading } from '../../IndexPage.styled'
+import { Root, InfoText } from './SubscriptionSection.styled'
+import {
+ SubscribeButton,
+ SubscribeHeading,
+ Subtitle,
+} from '../PlatformStatisticsSection/PlatformStatisticsSection.styled'
+
+export type SubscribeToNotificationsInput = {
+ email: string
+}
+
+const SubscriptionSection = () => {
+ const { t } = useTranslation()
+ const [subscribeIsOpen, setSubscribeOpen] = useState(false)
+
+ return (
+
+
+ {t('index:subscription-section.heading')}
+
+ {t('index:subscription-section.content')}
+
+ {subscribeIsOpen && }
+
+ setSubscribeOpen(true)}
+ cursor="pointer"
+ />
+ setSubscribeOpen(true)}>
+ {t('campaigns:cta.subscribe-monthly-newsletter')}
+
+
+
+ {t('campaigns:cta.subscribe-general-monthly-newsletter')}
+
+ setSubscribeOpen(true)} variant="contained">
+ {t('campaigns:cta.subscribe-general-newsletter-button')}
+
+
+
+ )
+}
+
+export default SubscriptionSection
diff --git a/src/components/client/index/sections/TeamMembersSection/TeamMembersSection.tsx b/src/components/client/index/sections/TeamMembersSection/TeamMembersSection.tsx
index 4b38e2eaa..420bebbc6 100644
--- a/src/components/client/index/sections/TeamMembersSection/TeamMembersSection.tsx
+++ b/src/components/client/index/sections/TeamMembersSection/TeamMembersSection.tsx
@@ -2,8 +2,7 @@ import React from 'react'
import Image from 'next/image'
import { useTranslation } from 'next-i18next'
import ChevronRightIcon from '@mui/icons-material/ChevronRight'
-import { Box, Grid } from '@mui/material'
-
+import { Box } from '@mui/material'
import { routes } from 'common/routes'
import { Heading, InfoText, OutlinedButton } from '../../IndexPage.styled'
@@ -27,11 +26,9 @@ export default function TeamMembersSection() {
/>
{/* A11Y TODO: Translate alt text */}
-
- }>
- {t('team-section.meet-our-team')}
-
-
+ }>
+ {t('team-section.meet-our-team')}
+
)
}
diff --git a/src/components/client/layout/Footer/Footer.styled.tsx b/src/components/client/layout/Footer/Footer.styled.tsx
index 3e23b93ad..2be5e2134 100644
--- a/src/components/client/layout/Footer/Footer.styled.tsx
+++ b/src/components/client/layout/Footer/Footer.styled.tsx
@@ -75,3 +75,12 @@ export const SubscribeLinkWrapper = styled(Grid)(({ theme }) => ({
transition: 'all 0.3s ease',
},
}))
+
+export const SubscriptionTitle = styled(Typography)(() => ({
+ '&:hover': {
+ textDecoration: 'underline',
+ transform: 'scale(1.01)',
+ cursor: 'pointer',
+ transition: 'all 0.3s ease',
+ },
+}))
diff --git a/src/components/client/layout/Footer/LogoSocialIcons.tsx b/src/components/client/layout/Footer/LogoSocialIcons.tsx
index 5460efe7b..5d1efb84a 100644
--- a/src/components/client/layout/Footer/LogoSocialIcons.tsx
+++ b/src/components/client/layout/Footer/LogoSocialIcons.tsx
@@ -6,7 +6,6 @@ import { Grid } from '@mui/material'
import { routes } from 'common/routes'
import PodkrepiLogo from 'components/common/brand/PodkrepiLogo'
import { SocialIcons } from './SocialIcons'
-// import { SubscribeBtn } from './SubscribeBtn'
export const LogoSocialIcons = () => {
const { locale } = useRouter()
@@ -20,8 +19,6 @@ export const LogoSocialIcons = () => {
- {/* Hide until notifications is ready */}
- {/* */}
)
}
diff --git a/src/components/client/layout/Footer/SocialIcons.tsx b/src/components/client/layout/Footer/SocialIcons.tsx
index 0894ee91b..15804174f 100644
--- a/src/components/client/layout/Footer/SocialIcons.tsx
+++ b/src/components/client/layout/Footer/SocialIcons.tsx
@@ -5,6 +5,7 @@ import ExternalLink from 'components/common/ExternalLink'
import { useTranslation } from 'next-i18next'
import { SocialIconsWrapper } from './Footer.styled'
+import Subscription from './Subscription'
export const SocialIcons = () => {
const { t } = useTranslation()
@@ -25,6 +26,7 @@ export const SocialIcons = () => {
aria-label={t('components.footer.social.instagram')}>
+
)
}
diff --git a/src/components/client/layout/Footer/Subscription.tsx b/src/components/client/layout/Footer/Subscription.tsx
new file mode 100644
index 000000000..8bf5afe7c
--- /dev/null
+++ b/src/components/client/layout/Footer/Subscription.tsx
@@ -0,0 +1,29 @@
+import React, { useState } from 'react'
+import { useTranslation } from 'next-i18next'
+
+import { Grid } from '@mui/material'
+import EmailIcon from '@mui/icons-material/Email'
+
+import RenderSubscribeModal from 'components/client/notifications/GeneralSubscribeModal'
+import { SubscriptionTitle } from './Footer.styled'
+
+export default function Subscription() {
+ const { t } = useTranslation()
+ const [subscribeIsOpen, setSubscribeOpen] = useState(false)
+
+ return (
+
+ {subscribeIsOpen && }
+ setSubscribeOpen(true)}
+ cursor="pointer"
+ />
+ setSubscribeOpen(true)}>
+ {t('campaigns:cta.subscribeFooter')}
+
+
+ )
+}
diff --git a/src/components/client/notifications/CampaignSubscribeModal.tsx b/src/components/client/notifications/CampaignSubscribeModal.tsx
index ab029399a..35ea56b4a 100644
--- a/src/components/client/notifications/CampaignSubscribeModal.tsx
+++ b/src/components/client/notifications/CampaignSubscribeModal.tsx
@@ -1,23 +1,26 @@
+import React, { useState } from 'react'
import * as yup from 'yup'
-import { email } from 'common/form/validation'
+import { Trans } from 'react-i18next'
import { useTranslation } from 'next-i18next'
-import { useState } from 'react'
+import { useMutation } from '@tanstack/react-query'
+import { useSession } from 'next-auth/react'
import { AxiosError, AxiosResponse } from 'axios'
import { ApiError } from 'next/dist/server/api-utils'
+import { useRouter } from 'next/router'
import { AlertStore } from 'stores/AlertStore'
import { useSubscribeToCampaign } from 'service/notification'
import { CampaignResponse, CampaignSubscribeInput, CampaignSubscribeResponse } from 'gql/campaigns'
-import { useMutation } from '@tanstack/react-query'
-import { Dialog, DialogContent, DialogTitle, Grid } from '@mui/material'
+import { Dialog, DialogContent, DialogTitle, Grid, Typography } from '@mui/material'
+import EmailIcon from '@mui/icons-material/Email'
+import ThumbUpIcon from '@mui/icons-material/ThumbUp'
+import { styled } from '@mui/material/styles'
import CloseModalButton from 'components/common/CloseModalButton'
import GenericForm from 'components/common/form/GenericForm'
-import { styled } from '@mui/material/styles'
import SubmitButton from 'components/common/form/SubmitButton'
import EmailField from 'components/common/form/EmailField'
-import AcceptNewsLetterField from 'components/common/form/AcceptNewsletterField'
-import { useSession } from 'next-auth/react'
-import { getCurrentPerson } from 'common/util/useCurrentPerson'
-import React from 'react'
+import { email } from 'common/form/validation'
+import { AcceptNewsLetterFieldCampaign } from 'components/common/form/AcceptNewsletterField'
+import { routes } from 'common/routes'
const PREFIX = 'CampaignSubscribeModal'
@@ -28,14 +31,7 @@ const classes = {
const StyledGrid = styled(Grid)(({ theme }) => ({
[`& .${classes.subscribeBtn}`]: {
fontSize: theme.typography.pxToRem(16),
- background: `${theme.palette.secondary.main}`,
-
- '&:hover': {
- background: theme.palette.primary.main,
- },
- '& svg': {
- color: '#ab2f26',
- },
+ background: `${theme.palette.primary}`,
},
}))
@@ -59,10 +55,13 @@ const validationSchema: yup.SchemaOf = yup
export default function RenderCampaignSubscribeModal({ campaign, setOpen }: ModalProps) {
const { t } = useTranslation()
- const { status } = useSession()
-
+ const { status, data } = useSession()
const [loading, setLoading] = useState(false)
const [isSuccess, setIsSuccess] = useState(false)
+ const [isGuest, setIsGuest] = useState(false)
+ const [email, setEmail] = useState('')
+ const [consent, setConsent] = useState(false)
+ const router = useRouter()
const handleError = (e: AxiosError) => {
const error = e.response?.data?.message
@@ -75,10 +74,11 @@ export default function RenderCampaignSubscribeModal({ campaign, setOpen }: Moda
CampaignSubscribeInput
>({
mutationFn: useSubscribeToCampaign(campaign.id),
- onError: (error) => handleError(error),
+ onError: (error) => {
+ handleError(error)
+ },
onSuccess: () => {
AlertStore.show(t('common:alerts.message-sent'), 'success')
-
setIsSuccess(true)
},
})
@@ -89,6 +89,8 @@ export default function RenderCampaignSubscribeModal({ campaign, setOpen }: Moda
async function onSubmit(values: { email: string; consent: boolean }) {
setLoading(true)
+ setEmail(values.email)
+ setConsent(values.consent)
try {
await mutation.mutateAsync(values)
} finally {
@@ -96,35 +98,7 @@ export default function RenderCampaignSubscribeModal({ campaign, setOpen }: Moda
}
}
- function AuthenticatedForm() {
- const { data: user } = getCurrentPerson()
-
- return (
-
-
- {/* Show consent checkbox if user has not provided it previously */}
- {!user?.user?.newsletter && (
-
-
-
- )}
-
-
-
-
-
- )
- }
-
- function NonAuthenticatedForm() {
+ const NonAuthenticatedForm = () => {
return (
-
+
+ {t('campaigns:subscribe.subscribe-campaign-subtTitle')}
+
-
-
+
+
+
+
+
@@ -150,36 +129,128 @@ export default function RenderCampaignSubscribeModal({ campaign, setOpen }: Moda
)
}
- return (
-
- )
+
+
+ )
+ } else {
+ return (
+
+
+
+ {!isSuccess ? (
+
+
+
+ {t('campaigns:subscribe.subscribe-campaign-title')}
+
+
+
+
+
+ ) : (
+
+
+
+
+
+
+ {t('campaigns:subscribe.confirm-subscribe')}
+
+
+
+
+
+
+
+ )}
+
+
+ )
+ }
}
diff --git a/src/components/client/notifications/GeneralSubscribeModal.tsx b/src/components/client/notifications/GeneralSubscribeModal.tsx
index b35cc42fb..9f5409f60 100644
--- a/src/components/client/notifications/GeneralSubscribeModal.tsx
+++ b/src/components/client/notifications/GeneralSubscribeModal.tsx
@@ -1,22 +1,29 @@
+import React, { useState } from 'react'
import * as yup from 'yup'
-import { email } from 'common/form/validation'
+import { Trans } from 'react-i18next'
import { useTranslation } from 'next-i18next'
-import { useState } from 'react'
+import { useMutation } from '@tanstack/react-query'
+import { useSession } from 'next-auth/react'
import { AxiosError, AxiosResponse } from 'axios'
import { ApiError } from 'next/dist/server/api-utils'
+import { useRouter } from 'next/router'
import { AlertStore } from 'stores/AlertStore'
-import { useMutation } from '@tanstack/react-query'
-import { Dialog, DialogContent, DialogTitle, Grid } from '@mui/material'
+import { Dialog, DialogContent, DialogTitle, Grid, Typography } from '@mui/material'
+import EmailIcon from '@mui/icons-material/Email'
+import ThumbUpIcon from '@mui/icons-material/ThumbUp'
+import { styled } from '@mui/material/styles'
import CloseModalButton from 'components/common/CloseModalButton'
import GenericForm from 'components/common/form/GenericForm'
-import { styled } from '@mui/material/styles'
import SubmitButton from 'components/common/form/SubmitButton'
import EmailField from 'components/common/form/EmailField'
+import { email } from 'common/form/validation'
+import { AcceptNewsLetterField } from 'components/common/form/AcceptNewsletterField'
+import { routes } from 'common/routes'
+
import { useSendConfirmationEmail } from 'service/notification'
import { SendConfirmationEmailResponse, SendConfirmationEmailInput } from 'gql/notification'
-import React from 'react'
-const PREFIX = 'SubscribeModal'
+const PREFIX = 'GeneralSubscribeModal'
const classes = {
subscribeBtn: `${PREFIX}-subscribe`,
@@ -25,7 +32,7 @@ const classes = {
const StyledGrid = styled(Grid)(({ theme }) => ({
[`& .${classes.subscribeBtn}`]: {
fontSize: theme.typography.pxToRem(16),
- background: `${theme.palette.secondary.main}`,
+ background: `${theme.palette.primary}`,
'&:hover': {
background: theme.palette.primary.main,
@@ -42,17 +49,26 @@ interface ModalProps {
export type SubscribeToNotificationsInput = {
email: string
+ consent: boolean
}
-const validationSchema: yup.SchemaOf = yup.object().defined().shape({
- email: email.required(),
-})
+const validationSchema: yup.SchemaOf = yup
+ .object()
+ .defined()
+ .shape({
+ email: email.required(),
+ consent: yup.bool().required().oneOf([true], 'validation:newsletter'),
+ })
export default function RenderSubscribeModal({ setOpen }: ModalProps) {
const { t } = useTranslation()
+ const { status, data } = useSession()
const [loading, setLoading] = useState(false)
const [isSuccess, setIsSuccess] = useState(false)
+ const [isGuest, setIsGuest] = useState(false)
+ const [email, setEmail] = useState('')
+ const router = useRouter()
const handleError = (e: AxiosError) => {
const error = e.response?.data?.message
@@ -79,6 +95,7 @@ export default function RenderSubscribeModal({ setOpen }: ModalProps) {
async function onSubmit(values: { email: string }) {
setLoading(true)
+ setEmail(values.email)
try {
await mutation.mutateAsync(values)
} finally {
@@ -86,21 +103,29 @@ export default function RenderSubscribeModal({ setOpen }: ModalProps) {
}
}
- function SubscribeForm() {
+ const SubscribeForm = () => {
return (
-
+
+ {t('campaigns:subscribe.subscribe-subtitle')}
+
+
+
+
+
+
+
@@ -109,34 +134,128 @@ export default function RenderSubscribeModal({ setOpen }: ModalProps) {
)
}
- return (
-
-
-
+ const openAsGuest = () => {
+ setIsGuest(true)
+ }
+
+ const sendOnProfileEmail = (status: string) => {
+ const userData = data?.user
+ if (status !== 'authenticated') {
+ router.push(routes.login)
+ } else {
+ onSubmit({ email: userData?.email || '' })
+ handleClose()
+ }
+ }
+
+ if (!isGuest) {
+ return (
+
+
-
- {!isSuccess ? (
+
{t('campaigns:subscribe.subscribe-title')}
-
+
+
+
+ {status !== 'authenticated'
+ ? t('campaigns:subscribe.subscribe-text-nonLoggedUser-general')
+ : t('campaigns:subscribe.subscribe-text-loggedUser')}
+
+
+
+ sendOnProfileEmail(status)}
+ />
+ openAsGuest()}
+ />
+
+
- ) : (
-
- {t('campaigns:subscribe.confirm-sent').split('{{email}}')}
-
- )}
-
-
- )
+
+
+ )
+ } else {
+ return (
+
+
+
+ {!isSuccess ? (
+
+
+
+ {t('campaigns:subscribe.subscribe-title')}
+
+
+
+
+
+ ) : (
+
+
+
+
+
+
+ {t('campaigns:subscribe.confirm-subscribe')}
+
+
+
+
+
+
+
+ )}
+
+
+ )
+ }
}
diff --git a/src/components/client/notifications/SubscriptionPage.tsx b/src/components/client/notifications/SubscriptionPage.tsx
index e0e5e26f1..bad56f453 100644
--- a/src/components/client/notifications/SubscriptionPage.tsx
+++ b/src/components/client/notifications/SubscriptionPage.tsx
@@ -1,8 +1,10 @@
-import { useTranslation } from 'next-i18next'
+import { useTranslation, Trans } from 'react-i18next'
import Layout from '../layout/Layout'
import PodkrepiLogo from 'components/common/brand/PodkrepiLogo'
import { useRouter } from 'next/router'
-import { Button, DialogContent, Grid } from '@mui/material'
+import { Button, DialogTitle, Grid, Typography } from '@mui/material'
+import ThumbUpIcon from '@mui/icons-material/ThumbUp'
+import AnnouncementIcon from '@mui/icons-material/Announcement'
import { styled } from '@mui/material/styles'
import LinkButton from 'components/common/LinkButton'
import React, { useEffect, useState } from 'react'
@@ -96,11 +98,17 @@ export default function SubscriptionPage(data: Props) {
const handleError = (e: AxiosError) => {
const error = e.response?.data?.message
- console.log(error)
+ AlertStore.show(error ? error : t('common:alerts.error'), 'error')
setLoading(false)
setIsSuccess(false)
}
+ const handleSuccess = () => {
+ AlertStore.show(t('common:alerts.message-sent'), 'success')
+ setIsSuccess(true)
+ setLoading(false)
+ }
+
const mutation = useMutation<
AxiosResponse,
AxiosError,
@@ -108,11 +116,7 @@ export default function SubscriptionPage(data: Props) {
>({
mutationFn: useSubscribePublicEmail(),
onError: (error) => handleError(error),
- onSuccess: () => {
- AlertStore.show(t('common:alerts.message-sent'), 'success')
- setIsSuccess(true)
- setLoading(false)
- },
+ onSuccess: () => handleSuccess,
})
async function callSubscribeApiRoute(values: {
@@ -147,26 +151,44 @@ export default function SubscriptionPage(data: Props) {
{isSuccess ? (
-
-
- {t('notifications:subscribe.thank-you-msg')}
-
+
+
+
+
+ {t('notifications:subscribe.thank-you-msg-heading')}
+
+
+
+
+
{t('notifications:subscribe.cta')}
- {' '}
+
) : (
-
-
- {t('notifications:subscribe.subscription-fail')}
-
+
+
+
+
+ {t('notifications:subscribe.subscription-fail-heading')}
+
+
+
+
+