+
+
{SUBSCRIBE_MODAL_SUBTITLE}
+
{MANDATORY}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/container.tsx b/src/container.tsx
index 370d8ebf..e9f3df84 100644
--- a/src/container.tsx
+++ b/src/container.tsx
@@ -2,6 +2,7 @@ import { AlertRepositoryImpl } from './infrastructure/repositories/AlertReposito
import ChatbotRepositoryImpl from './infrastructure/repositories/ChatbotRepositoryImpl';
import CountryRepositoryImpl from './infrastructure/repositories/CountryRepositoryImpl';
import GlobalDataRepositoryImpl from './infrastructure/repositories/GlobalDataRepositoryImpl';
+import SubscriptionRepositoryImpl from './infrastructure/repositories/SubscriptionRepositoryImpl';
class Container {
private dependencies: { [key: string]: unknown } = {};
@@ -24,5 +25,6 @@ container.register('CountryRepository', new CountryRepositoryImpl());
container.register('AlertRepository', new AlertRepositoryImpl());
container.register('GlobalDataRepository', new GlobalDataRepositoryImpl());
container.register('ChatbotRepository', new ChatbotRepositoryImpl());
+container.register('SubscriptionRepository', new SubscriptionRepositoryImpl());
export default container;
diff --git a/src/domain/constant/subscribe/Subscribe.ts b/src/domain/constant/subscribe/Subscribe.ts
new file mode 100644
index 00000000..28ba47a0
--- /dev/null
+++ b/src/domain/constant/subscribe/Subscribe.ts
@@ -0,0 +1,14 @@
+export const SUBSCRIBE_MODAL_TITLE = 'Subscribe to new updates';
+
+export const SUBSCRIBE_MODAL_SUBTITLE =
+ 'WFP’s Hunger Monitoring Unit produces recurrent updates, information, newsletters and snapshots. Add your details below to stay in touch and receive the latest news.';
+
+export const SUBSCRIBE = 'Subscribe';
+
+export const MANDATORY = '*Mandatory fields';
+
+export const FOLLOW_US = 'Follow us on: ';
+
+export const SUCCESSFUL_SUBSCRIPTION = 'Successfully subscribed!';
+
+export const UNSUCCESSFUL_SUBSCRIPTION = 'Subscribed failed. Please try again later.';
diff --git a/src/domain/entities/subscribe/Subscribe.ts b/src/domain/entities/subscribe/Subscribe.ts
new file mode 100644
index 00000000..b74f68f5
--- /dev/null
+++ b/src/domain/entities/subscribe/Subscribe.ts
@@ -0,0 +1,6 @@
+export interface ISubscribe {
+ name: string;
+ email: string;
+ selectedTopic?: string;
+ organization?: string;
+}
diff --git a/src/domain/enums/SubscribeTopic.ts b/src/domain/enums/SubscribeTopic.ts
new file mode 100644
index 00000000..54af69ae
--- /dev/null
+++ b/src/domain/enums/SubscribeTopic.ts
@@ -0,0 +1,12 @@
+export enum SubscribeTopic {
+ FOOD_SECURITY = 'Food Security',
+ NUTRITION = 'Nutrition',
+ EMERGENCY_RESPONSE = 'Emergency Response',
+}
+
+export enum SubscribeStatus {
+ Idle = 'idle',
+ Loading = 'loading',
+ Success = 'success',
+ Error = 'error',
+}
diff --git a/src/domain/props/SocialLinkProps.tsx b/src/domain/props/SocialLinkProps.tsx
new file mode 100644
index 00000000..4aa00d7e
--- /dev/null
+++ b/src/domain/props/SocialLinkProps.tsx
@@ -0,0 +1,4 @@
+export interface SocialLinkProps {
+ href: string;
+ children: React.ReactNode;
+}
diff --git a/src/domain/repositories/SubscriptionRepository.ts b/src/domain/repositories/SubscriptionRepository.ts
new file mode 100644
index 00000000..0a4bc7ec
--- /dev/null
+++ b/src/domain/repositories/SubscriptionRepository.ts
@@ -0,0 +1,10 @@
+import { ISubscribe } from '../entities/subscribe/Subscribe';
+
+export default interface SubscriptionRepository {
+ /**
+ * Subscribes a user to a topic.
+ * @param subscribe is the subscription details.
+ * @returns A promise that resolves to a boolean indicating the success of the operation.
+ */
+ subscribe(subscribe: ISubscribe): Promise