@djangocfg/ext-newsletter 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -0
- package/dist/chunk-LQLPNWHR.js +2075 -0
- package/dist/hooks.cjs +2539 -0
- package/dist/hooks.d.cts +267 -0
- package/dist/hooks.d.ts +267 -0
- package/dist/hooks.js +370 -0
- package/dist/index.cjs +2153 -0
- package/dist/index.d.cts +2084 -0
- package/dist/index.d.ts +2084 -0
- package/dist/index.js +1 -0
- package/package.json +80 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter.ts +210 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__bulk_email.ts +93 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__campaigns.ts +338 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__logs.ts +92 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__newsletters.ts +150 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__subscriptions.ts +210 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/ext_newsletter__newsletter__testing.ts +93 -0
- package/src/api/generated/ext_newsletter/_utils/fetchers/index.ts +34 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter.ts +81 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__bulk_email.ts +42 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__campaigns.ts +130 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__logs.ts +37 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__newsletters.ts +52 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__subscriptions.ts +78 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/ext_newsletter__newsletter__testing.ts +42 -0
- package/src/api/generated/ext_newsletter/_utils/hooks/index.ts +34 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/BulkEmailRequest.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/BulkEmailResponse.schema.ts +23 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/EmailLog.schema.ts +31 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/ErrorResponse.schema.ts +20 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/Newsletter.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/NewsletterCampaign.schema.ts +33 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/NewsletterCampaignRequest.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/NewsletterSubscription.schema.ts +27 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedEmailLogList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedNewsletterCampaignList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedNewsletterList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PaginatedNewsletterSubscriptionList.schema.ts +24 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PatchedNewsletterCampaignRequest.schema.ts +26 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/PatchedUnsubscribeRequest.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SendCampaignRequest.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SendCampaignResponse.schema.ts +22 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SubscribeRequest.schema.ts +20 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SubscribeResponse.schema.ts +21 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/SuccessResponse.schema.ts +20 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/TestEmailRequest.schema.ts +21 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/Unsubscribe.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/UnsubscribeRequest.schema.ts +19 -0
- package/src/api/generated/ext_newsletter/_utils/schemas/index.ts +40 -0
- package/src/api/generated/ext_newsletter/api-instance.ts +131 -0
- package/src/api/generated/ext_newsletter/client.ts +319 -0
- package/src/api/generated/ext_newsletter/enums.ts +24 -0
- package/src/api/generated/ext_newsletter/errors.ts +116 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter/client.ts +38 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter/models.ts +71 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__bulk_email/client.ts +24 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__bulk_email/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__bulk_email/models.ts +29 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__campaigns/client.ts +85 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__campaigns/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__campaigns/models.ts +100 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__logs/client.ts +35 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__logs/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__logs/models.ts +51 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__newsletters/client.ts +45 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__newsletters/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__newsletters/models.ts +42 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__subscriptions/client.ts +55 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__subscriptions/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__subscriptions/models.ts +92 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__testing/client.ts +24 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__testing/index.ts +2 -0
- package/src/api/generated/ext_newsletter/ext_newsletter__newsletter__testing/models.ts +24 -0
- package/src/api/generated/ext_newsletter/http.ts +103 -0
- package/src/api/generated/ext_newsletter/index.ts +315 -0
- package/src/api/generated/ext_newsletter/logger.ts +259 -0
- package/src/api/generated/ext_newsletter/retry.ts +175 -0
- package/src/api/generated/ext_newsletter/schema.json +1739 -0
- package/src/api/generated/ext_newsletter/storage.ts +161 -0
- package/src/api/generated/ext_newsletter/validation-events.ts +133 -0
- package/src/api/index.ts +9 -0
- package/src/components/Hero/index.tsx +160 -0
- package/src/components/Hero/types.ts +37 -0
- package/src/config.ts +20 -0
- package/src/contexts/newsletter/NewsletterContext.tsx +264 -0
- package/src/contexts/newsletter/types.ts +32 -0
- package/src/hooks/index.ts +21 -0
- package/src/index.ts +14 -0
- package/src/utils/logger.ts +9 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Newsletter Context
|
|
3
|
+
*
|
|
4
|
+
* Manages newsletter campaigns and subscriptions using generated SWR hooks
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Campaign management (create, update, delete, send)
|
|
8
|
+
* - Subscription management (subscribe, unsubscribe)
|
|
9
|
+
* - Campaign lists with pagination
|
|
10
|
+
* - Subscription lists with pagination
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
"use client";
|
|
14
|
+
|
|
15
|
+
import { createContext, useContext, ReactNode } from 'react';
|
|
16
|
+
import { useSWRConfig } from 'swr';
|
|
17
|
+
import { ExtensionProvider } from '@djangocfg/ext-base/hooks';
|
|
18
|
+
|
|
19
|
+
import { extensionConfig } from '../../config';
|
|
20
|
+
import { apiNewsletter } from '../../api';
|
|
21
|
+
import {
|
|
22
|
+
useNewsletterCampaignsList,
|
|
23
|
+
useNewsletterCampaignsRetrieve,
|
|
24
|
+
useCreateNewsletterCampaignsCreate,
|
|
25
|
+
useUpdateNewsletterCampaignsUpdate,
|
|
26
|
+
usePartialUpdateNewsletterCampaignsPartialUpdate,
|
|
27
|
+
useDeleteNewsletterCampaignsDestroy,
|
|
28
|
+
useCreateNewsletterCampaignsSendCreate,
|
|
29
|
+
useNewsletterSubscriptionsList,
|
|
30
|
+
useCreateNewsletterSubscribeCreate,
|
|
31
|
+
useCreateNewsletterUnsubscribeCreate,
|
|
32
|
+
} from '../../api/generated/ext_newsletter/_utils/hooks';
|
|
33
|
+
import type {
|
|
34
|
+
NewsletterCampaign,
|
|
35
|
+
NewsletterCampaignRequest,
|
|
36
|
+
PatchedNewsletterCampaignRequest,
|
|
37
|
+
NewsletterSubscription,
|
|
38
|
+
PaginatedNewsletterCampaignList,
|
|
39
|
+
PaginatedNewsletterSubscriptionList,
|
|
40
|
+
SubscribeRequest,
|
|
41
|
+
SubscribeResponse,
|
|
42
|
+
UnsubscribeRequest,
|
|
43
|
+
SuccessResponse,
|
|
44
|
+
SendCampaignRequest,
|
|
45
|
+
SendCampaignResponse,
|
|
46
|
+
} from './types';
|
|
47
|
+
|
|
48
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
49
|
+
// Context Type
|
|
50
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
export interface NewsletterContextValue {
|
|
53
|
+
// Campaigns list state
|
|
54
|
+
campaigns: NewsletterCampaign[];
|
|
55
|
+
isLoadingCampaigns: boolean;
|
|
56
|
+
campaignsError: Error | null;
|
|
57
|
+
pagination?: {
|
|
58
|
+
count: number;
|
|
59
|
+
next: number | null;
|
|
60
|
+
previous: number | null;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Campaign operations
|
|
64
|
+
getCampaign: (id: number) => { data?: NewsletterCampaign; error?: Error; isLoading: boolean };
|
|
65
|
+
createCampaign: (data: NewsletterCampaignRequest) => Promise<NewsletterCampaign>;
|
|
66
|
+
updateCampaign: (id: number, data: NewsletterCampaignRequest) => Promise<NewsletterCampaign>;
|
|
67
|
+
partialUpdateCampaign: (id: number, data: PatchedNewsletterCampaignRequest) => Promise<NewsletterCampaign>;
|
|
68
|
+
deleteCampaign: (id: number) => Promise<void>;
|
|
69
|
+
sendCampaign: (campaignId: number) => Promise<SendCampaignResponse>;
|
|
70
|
+
|
|
71
|
+
// Subscriptions list state
|
|
72
|
+
subscriptions: NewsletterSubscription[];
|
|
73
|
+
isLoadingSubscriptions: boolean;
|
|
74
|
+
subscriptionsError: Error | null;
|
|
75
|
+
|
|
76
|
+
// Subscription operations
|
|
77
|
+
subscribe: (data: SubscribeRequest) => Promise<SubscribeResponse>;
|
|
78
|
+
unsubscribe: (data: UnsubscribeRequest) => Promise<SuccessResponse>;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
82
|
+
// Context
|
|
83
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
const NewsletterContext = createContext<NewsletterContextValue | undefined>(undefined);
|
|
86
|
+
|
|
87
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
88
|
+
// Provider Props
|
|
89
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
90
|
+
|
|
91
|
+
interface NewsletterProviderProps {
|
|
92
|
+
children: ReactNode;
|
|
93
|
+
page?: number;
|
|
94
|
+
pageSize?: number;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
98
|
+
// Provider Component
|
|
99
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
100
|
+
|
|
101
|
+
export function NewsletterProvider({
|
|
102
|
+
children,
|
|
103
|
+
page = 1,
|
|
104
|
+
pageSize = 100
|
|
105
|
+
}: NewsletterProviderProps) {
|
|
106
|
+
const { mutate } = useSWRConfig();
|
|
107
|
+
|
|
108
|
+
const swrConfig = {
|
|
109
|
+
revalidateOnFocus: false,
|
|
110
|
+
revalidateOnReconnect: false,
|
|
111
|
+
revalidateIfStale: false,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// List params for proper revalidation
|
|
115
|
+
const listParams = { page, page_size: pageSize };
|
|
116
|
+
|
|
117
|
+
// Campaigns list
|
|
118
|
+
const {
|
|
119
|
+
data: campaignsData,
|
|
120
|
+
error: campaignsError,
|
|
121
|
+
isLoading: isLoadingCampaigns,
|
|
122
|
+
} = useNewsletterCampaignsList(listParams, apiNewsletter);
|
|
123
|
+
|
|
124
|
+
// Subscriptions list
|
|
125
|
+
const {
|
|
126
|
+
data: subscriptionsData,
|
|
127
|
+
error: subscriptionsError,
|
|
128
|
+
isLoading: isLoadingSubscriptions,
|
|
129
|
+
} = useNewsletterSubscriptionsList(listParams, apiNewsletter);
|
|
130
|
+
|
|
131
|
+
// Mutation hooks
|
|
132
|
+
const createCampaignMutation = useCreateNewsletterCampaignsCreate();
|
|
133
|
+
const updateCampaignMutation = useUpdateNewsletterCampaignsUpdate();
|
|
134
|
+
const partialUpdateCampaignMutation = usePartialUpdateNewsletterCampaignsPartialUpdate();
|
|
135
|
+
const deleteCampaignMutation = useDeleteNewsletterCampaignsDestroy();
|
|
136
|
+
const sendCampaignMutation = useCreateNewsletterCampaignsSendCreate();
|
|
137
|
+
const subscribeMutation = useCreateNewsletterSubscribeCreate();
|
|
138
|
+
const unsubscribeMutation = useCreateNewsletterUnsubscribeCreate();
|
|
139
|
+
|
|
140
|
+
// Extract data from paginated responses
|
|
141
|
+
const campaigns = campaignsData?.results || [];
|
|
142
|
+
const subscriptions = subscriptionsData?.results || [];
|
|
143
|
+
|
|
144
|
+
// Get single campaign
|
|
145
|
+
const getCampaign = (id: number) => {
|
|
146
|
+
const { data, error, isLoading } = useNewsletterCampaignsRetrieve(id, apiNewsletter);
|
|
147
|
+
return { data, error, isLoading };
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Create campaign
|
|
151
|
+
const createCampaign = async (data: NewsletterCampaignRequest): Promise<NewsletterCampaign> => {
|
|
152
|
+
const result = await createCampaignMutation(data, apiNewsletter);
|
|
153
|
+
await mutate(['cfg-newsletter-campaigns-list', listParams]);
|
|
154
|
+
return result as NewsletterCampaign;
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// Update campaign (full)
|
|
158
|
+
const updateCampaign = async (id: number, data: NewsletterCampaignRequest): Promise<NewsletterCampaign> => {
|
|
159
|
+
const result = await updateCampaignMutation(id, data, apiNewsletter);
|
|
160
|
+
await mutate(['cfg-newsletter-campaigns-list', listParams]);
|
|
161
|
+
await mutate(['cfg-newsletter-campaigns-retrieve', id]);
|
|
162
|
+
return result as NewsletterCampaign;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// Partial update campaign (currently not supported by generated API)
|
|
166
|
+
const partialUpdateCampaign = async (id: number, data: PatchedNewsletterCampaignRequest): Promise<NewsletterCampaign> => {
|
|
167
|
+
// TODO: Fix generator to include data parameter for PATCH requests
|
|
168
|
+
// const result = await partialUpdateCampaignMutation(id, data);
|
|
169
|
+
// For now, fallback to full update
|
|
170
|
+
const result = await updateCampaignMutation(id, data as NewsletterCampaignRequest);
|
|
171
|
+
await mutate(['cfg-newsletter-campaigns-list', listParams]);
|
|
172
|
+
await mutate(['cfg-newsletter-campaigns-retrieve', id]);
|
|
173
|
+
return result as NewsletterCampaign;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
// Delete campaign
|
|
177
|
+
const deleteCampaign = async (id: number): Promise<void> => {
|
|
178
|
+
await deleteCampaignMutation(id, apiNewsletter);
|
|
179
|
+
await mutate(['cfg-newsletter-campaigns-list', listParams]);
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// Send campaign
|
|
183
|
+
const sendCampaign = async (campaignId: number): Promise<SendCampaignResponse> => {
|
|
184
|
+
const result = await sendCampaignMutation({ campaign_id: campaignId }, apiNewsletter);
|
|
185
|
+
await mutate(['cfg-newsletter-campaigns-list', listParams]);
|
|
186
|
+
await mutate(['cfg-newsletter-campaigns-retrieve', campaignId]);
|
|
187
|
+
return result as SendCampaignResponse;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// Subscribe
|
|
191
|
+
const subscribe = async (data: SubscribeRequest): Promise<SubscribeResponse> => {
|
|
192
|
+
const result = await subscribeMutation(data, apiNewsletter);
|
|
193
|
+
await mutate(['cfg-newsletter-subscriptions-list', listParams]);
|
|
194
|
+
return result as SubscribeResponse;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// Unsubscribe
|
|
198
|
+
const unsubscribe = async (data: UnsubscribeRequest): Promise<SuccessResponse> => {
|
|
199
|
+
const result = await unsubscribeMutation(data, apiNewsletter);
|
|
200
|
+
await mutate(['cfg-newsletter-subscriptions-list', listParams]);
|
|
201
|
+
return result as SuccessResponse;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const value: NewsletterContextValue = {
|
|
205
|
+
campaigns,
|
|
206
|
+
isLoadingCampaigns,
|
|
207
|
+
campaignsError,
|
|
208
|
+
pagination: campaignsData ? {
|
|
209
|
+
count: campaignsData.count,
|
|
210
|
+
next: campaignsData.next_page ?? null,
|
|
211
|
+
previous: campaignsData.previous_page ?? null,
|
|
212
|
+
} : undefined,
|
|
213
|
+
getCampaign,
|
|
214
|
+
createCampaign,
|
|
215
|
+
updateCampaign,
|
|
216
|
+
partialUpdateCampaign,
|
|
217
|
+
deleteCampaign,
|
|
218
|
+
sendCampaign,
|
|
219
|
+
subscriptions,
|
|
220
|
+
isLoadingSubscriptions,
|
|
221
|
+
subscriptionsError,
|
|
222
|
+
subscribe,
|
|
223
|
+
unsubscribe,
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
return (
|
|
227
|
+
<ExtensionProvider metadata={extensionConfig} options={swrConfig}>
|
|
228
|
+
<NewsletterContext.Provider value={value}>
|
|
229
|
+
{children}
|
|
230
|
+
</NewsletterContext.Provider>
|
|
231
|
+
</ExtensionProvider>
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
236
|
+
// Hook
|
|
237
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
238
|
+
|
|
239
|
+
export function useNewsletterContext(): NewsletterContextValue {
|
|
240
|
+
const context = useContext(NewsletterContext);
|
|
241
|
+
if (!context) {
|
|
242
|
+
throw new Error('useNewsletterContext must be used within NewsletterProvider');
|
|
243
|
+
}
|
|
244
|
+
return context;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
248
|
+
// Re-export types for external use
|
|
249
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
250
|
+
|
|
251
|
+
export type {
|
|
252
|
+
NewsletterCampaign,
|
|
253
|
+
NewsletterCampaignRequest,
|
|
254
|
+
PatchedNewsletterCampaignRequest,
|
|
255
|
+
NewsletterSubscription,
|
|
256
|
+
PaginatedNewsletterCampaignList,
|
|
257
|
+
PaginatedNewsletterSubscriptionList,
|
|
258
|
+
SubscribeRequest,
|
|
259
|
+
SubscribeResponse,
|
|
260
|
+
UnsubscribeRequest,
|
|
261
|
+
SuccessResponse,
|
|
262
|
+
SendCampaignRequest,
|
|
263
|
+
SendCampaignResponse,
|
|
264
|
+
} from './types';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Newsletter Types
|
|
3
|
+
* Centralized type definitions for newsletter context
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
useNewsletterCampaignsList,
|
|
8
|
+
useNewsletterCampaignsRetrieve,
|
|
9
|
+
useUpdateNewsletterCampaignsUpdate,
|
|
10
|
+
usePartialUpdateNewsletterCampaignsPartialUpdate,
|
|
11
|
+
useNewsletterSubscriptionsList,
|
|
12
|
+
useCreateNewsletterSubscribeCreate,
|
|
13
|
+
useCreateNewsletterUnsubscribeCreate,
|
|
14
|
+
useCreateNewsletterCampaignsSendCreate,
|
|
15
|
+
} from '../../api/generated/ext_newsletter/_utils/hooks';
|
|
16
|
+
|
|
17
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
18
|
+
// Newsletter Types
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
export type PaginatedNewsletterCampaignList = NonNullable<Awaited<ReturnType<typeof useNewsletterCampaignsList>>['data']>;
|
|
22
|
+
export type NewsletterCampaign = NonNullable<Awaited<ReturnType<typeof useNewsletterCampaignsRetrieve>>['data']>;
|
|
23
|
+
export type NewsletterCampaignRequest = Parameters<ReturnType<typeof useUpdateNewsletterCampaignsUpdate>>[1];
|
|
24
|
+
export type PatchedNewsletterCampaignRequest = Parameters<ReturnType<typeof usePartialUpdateNewsletterCampaignsPartialUpdate>>[1];
|
|
25
|
+
export type PaginatedNewsletterSubscriptionList = NonNullable<Awaited<ReturnType<typeof useNewsletterSubscriptionsList>>['data']>;
|
|
26
|
+
export type NewsletterSubscription = NonNullable<Awaited<ReturnType<typeof useNewsletterSubscriptionsList>>['data']> extends { results: infer T } ? T extends Array<infer U> ? U : never : never;
|
|
27
|
+
export type SubscribeRequest = Parameters<ReturnType<typeof useCreateNewsletterSubscribeCreate>>[0];
|
|
28
|
+
export type SubscribeResponse = Awaited<ReturnType<ReturnType<typeof useCreateNewsletterSubscribeCreate>>>;
|
|
29
|
+
export type UnsubscribeRequest = Parameters<ReturnType<typeof useCreateNewsletterUnsubscribeCreate>>[0];
|
|
30
|
+
export type SuccessResponse = Awaited<ReturnType<ReturnType<typeof useCreateNewsletterUnsubscribeCreate>>>;
|
|
31
|
+
export type SendCampaignRequest = Parameters<ReturnType<typeof useCreateNewsletterCampaignsSendCreate>>[1];
|
|
32
|
+
export type SendCampaignResponse = Awaited<ReturnType<ReturnType<typeof useCreateNewsletterCampaignsSendCreate>>>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @djangocfg/ext-newsletter/hooks
|
|
5
|
+
*
|
|
6
|
+
* React hooks for newsletter extension.
|
|
7
|
+
* Use this entry point in client components.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// Re-export everything from main entry (server-safe code)
|
|
11
|
+
export * from '../index';
|
|
12
|
+
|
|
13
|
+
// SWR hooks from generated API
|
|
14
|
+
export * from '../api/generated/ext_newsletter/_utils/hooks';
|
|
15
|
+
|
|
16
|
+
// Newsletter context
|
|
17
|
+
export { NewsletterProvider, useNewsletterContext } from '../contexts/newsletter/NewsletterContext';
|
|
18
|
+
|
|
19
|
+
// Hero component
|
|
20
|
+
export { Hero } from '../components/Hero';
|
|
21
|
+
export { default as NewsletterHero } from '../components/Hero';
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @djangocfg/ext-newsletter
|
|
3
|
+
*
|
|
4
|
+
* Server-safe entry point.
|
|
5
|
+
* Use this in server components and API routes.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Export generated API types and client
|
|
9
|
+
export * from './api/generated/ext_newsletter';
|
|
10
|
+
export { API } from './api/generated/ext_newsletter';
|
|
11
|
+
export { apiNewsletter } from './api';
|
|
12
|
+
|
|
13
|
+
// Export component types (server-safe)
|
|
14
|
+
export type { HeroProps, HeroAction } from './components/Hero/types';
|