@noatgnu/cupcake-mint-chocolate 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
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# CupcakeMintChocolate
|
|
2
|
+
|
|
3
|
+
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ng generate component component-name
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
ng generate --help
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Building
|
|
20
|
+
|
|
21
|
+
To build the library, run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
ng build cupcake-mint-chocolate
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
28
|
+
|
|
29
|
+
### Publishing the Library
|
|
30
|
+
|
|
31
|
+
Once the project is built, you can publish your library by following these steps:
|
|
32
|
+
|
|
33
|
+
1. Navigate to the `dist` directory:
|
|
34
|
+
```bash
|
|
35
|
+
cd dist/cupcake-mint-chocolate
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
39
|
+
```bash
|
|
40
|
+
npm publish
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Running unit tests
|
|
44
|
+
|
|
45
|
+
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ng test
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Running end-to-end tests
|
|
52
|
+
|
|
53
|
+
For end-to-end (e2e) testing, run:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
ng e2e
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
60
|
+
|
|
61
|
+
## Additional Resources
|
|
62
|
+
|
|
63
|
+
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Injectable, inject } from '@angular/core';
|
|
3
|
+
import { BaseApiService } from '@cupcake/core';
|
|
4
|
+
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
5
|
+
|
|
6
|
+
class CupcakeMintChocolate {
|
|
7
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CupcakeMintChocolate, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CupcakeMintChocolate, isStandalone: true, selector: "ccmc-cupcake-mint-chocolate", ngImport: i0, template: `
|
|
9
|
+
<p>
|
|
10
|
+
cupcake-mint-chocolate works!
|
|
11
|
+
</p>
|
|
12
|
+
`, isInline: true, styles: [""] });
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CupcakeMintChocolate, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: 'ccmc-cupcake-mint-chocolate', imports: [], template: `
|
|
17
|
+
<p>
|
|
18
|
+
cupcake-mint-chocolate works!
|
|
19
|
+
</p>
|
|
20
|
+
` }]
|
|
21
|
+
}] });
|
|
22
|
+
|
|
23
|
+
var NotificationType;
|
|
24
|
+
(function (NotificationType) {
|
|
25
|
+
NotificationType["SYSTEM"] = "system";
|
|
26
|
+
NotificationType["MAINTENANCE"] = "maintenance";
|
|
27
|
+
NotificationType["INVENTORY"] = "inventory";
|
|
28
|
+
NotificationType["BILLING"] = "billing";
|
|
29
|
+
NotificationType["PROJECT"] = "project";
|
|
30
|
+
NotificationType["PROTOCOL"] = "protocol";
|
|
31
|
+
NotificationType["DOCUMENT"] = "document";
|
|
32
|
+
NotificationType["USER"] = "user";
|
|
33
|
+
})(NotificationType || (NotificationType = {}));
|
|
34
|
+
const NotificationTypeLabels = {
|
|
35
|
+
[NotificationType.SYSTEM]: 'System',
|
|
36
|
+
[NotificationType.MAINTENANCE]: 'Maintenance',
|
|
37
|
+
[NotificationType.INVENTORY]: 'Inventory',
|
|
38
|
+
[NotificationType.BILLING]: 'Billing',
|
|
39
|
+
[NotificationType.PROJECT]: 'Project',
|
|
40
|
+
[NotificationType.PROTOCOL]: 'Protocol',
|
|
41
|
+
[NotificationType.DOCUMENT]: 'Document',
|
|
42
|
+
[NotificationType.USER]: 'User'
|
|
43
|
+
};
|
|
44
|
+
var NotificationPriority;
|
|
45
|
+
(function (NotificationPriority) {
|
|
46
|
+
NotificationPriority["LOW"] = "low";
|
|
47
|
+
NotificationPriority["NORMAL"] = "normal";
|
|
48
|
+
NotificationPriority["HIGH"] = "high";
|
|
49
|
+
NotificationPriority["URGENT"] = "urgent";
|
|
50
|
+
})(NotificationPriority || (NotificationPriority = {}));
|
|
51
|
+
const NotificationPriorityLabels = {
|
|
52
|
+
[NotificationPriority.LOW]: 'Low',
|
|
53
|
+
[NotificationPriority.NORMAL]: 'Normal',
|
|
54
|
+
[NotificationPriority.HIGH]: 'High',
|
|
55
|
+
[NotificationPriority.URGENT]: 'Urgent'
|
|
56
|
+
};
|
|
57
|
+
var DeliveryStatus;
|
|
58
|
+
(function (DeliveryStatus) {
|
|
59
|
+
DeliveryStatus["PENDING"] = "pending";
|
|
60
|
+
DeliveryStatus["SENT"] = "sent";
|
|
61
|
+
DeliveryStatus["DELIVERED"] = "delivered";
|
|
62
|
+
DeliveryStatus["FAILED"] = "failed";
|
|
63
|
+
DeliveryStatus["READ"] = "read";
|
|
64
|
+
})(DeliveryStatus || (DeliveryStatus = {}));
|
|
65
|
+
const DeliveryStatusLabels = {
|
|
66
|
+
[DeliveryStatus.PENDING]: 'Pending',
|
|
67
|
+
[DeliveryStatus.SENT]: 'Sent',
|
|
68
|
+
[DeliveryStatus.DELIVERED]: 'Delivered',
|
|
69
|
+
[DeliveryStatus.FAILED]: 'Failed',
|
|
70
|
+
[DeliveryStatus.READ]: 'Read'
|
|
71
|
+
};
|
|
72
|
+
var MessageType;
|
|
73
|
+
(function (MessageType) {
|
|
74
|
+
MessageType["DIRECT"] = "direct";
|
|
75
|
+
MessageType["THREAD"] = "thread";
|
|
76
|
+
MessageType["BROADCAST"] = "broadcast";
|
|
77
|
+
MessageType["SYSTEM"] = "system";
|
|
78
|
+
})(MessageType || (MessageType = {}));
|
|
79
|
+
const MessageTypeLabels = {
|
|
80
|
+
[MessageType.DIRECT]: 'Direct Message',
|
|
81
|
+
[MessageType.THREAD]: 'Thread Reply',
|
|
82
|
+
[MessageType.BROADCAST]: 'Broadcast',
|
|
83
|
+
[MessageType.SYSTEM]: 'System Message'
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
class NotificationService extends BaseApiService {
|
|
87
|
+
/**
|
|
88
|
+
* Get all notifications with optional filtering
|
|
89
|
+
*/
|
|
90
|
+
getNotifications(params) {
|
|
91
|
+
const httpParams = this.buildHttpParams(params);
|
|
92
|
+
return this.get(`${this.apiUrl}/notifications/`, { params: httpParams });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get a single notification by ID
|
|
96
|
+
*/
|
|
97
|
+
getNotification(id) {
|
|
98
|
+
return this.get(`${this.apiUrl}/notifications/${id}/`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a new notification
|
|
102
|
+
*/
|
|
103
|
+
createNotification(notification) {
|
|
104
|
+
return this.post(`${this.apiUrl}/notifications/`, notification);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Update an existing notification
|
|
108
|
+
*/
|
|
109
|
+
updateNotification(id, notification) {
|
|
110
|
+
return this.put(`${this.apiUrl}/notifications/${id}/`, notification);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Partially update a notification
|
|
114
|
+
*/
|
|
115
|
+
patchNotification(id, notification) {
|
|
116
|
+
return this.patch(`${this.apiUrl}/notifications/${id}/`, notification);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Delete a notification
|
|
120
|
+
*/
|
|
121
|
+
deleteNotification(id) {
|
|
122
|
+
return this.delete(`${this.apiUrl}/notifications/${id}/`);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Mark a notification as read/unread
|
|
126
|
+
*/
|
|
127
|
+
markNotificationRead(id, request) {
|
|
128
|
+
return this.post(`${this.apiUrl}/notifications/${id}/mark_read/`, request);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get unread notifications for current user
|
|
132
|
+
*/
|
|
133
|
+
getUnreadNotifications() {
|
|
134
|
+
return this.get(`${this.apiUrl}/notifications/unread/`);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get notification statistics for current user
|
|
138
|
+
*/
|
|
139
|
+
getNotificationStats() {
|
|
140
|
+
return this.get(`${this.apiUrl}/notifications/stats/`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Mark all notifications as read for current user
|
|
144
|
+
*/
|
|
145
|
+
markAllNotificationsRead() {
|
|
146
|
+
return this.post(`${this.apiUrl}/notifications/mark_all_read/`, {});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Search notifications by title or message
|
|
150
|
+
*/
|
|
151
|
+
searchNotifications(query) {
|
|
152
|
+
return this.getNotifications({ search: query });
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get notifications by type
|
|
156
|
+
*/
|
|
157
|
+
getNotificationsByType(type) {
|
|
158
|
+
return this.getNotifications({ notificationType: type });
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get notifications by priority
|
|
162
|
+
*/
|
|
163
|
+
getNotificationsByPriority(priority) {
|
|
164
|
+
return this.getNotifications({ priority });
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get notifications by sender
|
|
168
|
+
*/
|
|
169
|
+
getNotificationsBySender(senderId) {
|
|
170
|
+
return this.getNotifications({ sender: senderId });
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get notifications by delivery status
|
|
174
|
+
*/
|
|
175
|
+
getNotificationsByStatus(status) {
|
|
176
|
+
return this.getNotifications({ deliveryStatus: status });
|
|
177
|
+
}
|
|
178
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
179
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationService, providedIn: 'root' });
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationService, decorators: [{
|
|
182
|
+
type: Injectable,
|
|
183
|
+
args: [{
|
|
184
|
+
providedIn: 'root'
|
|
185
|
+
}]
|
|
186
|
+
}] });
|
|
187
|
+
|
|
188
|
+
class MessageThreadService extends BaseApiService {
|
|
189
|
+
/**
|
|
190
|
+
* Get all message threads with optional filtering
|
|
191
|
+
*/
|
|
192
|
+
getMessageThreads(params) {
|
|
193
|
+
const httpParams = this.buildHttpParams(params);
|
|
194
|
+
return this.get(`${this.apiUrl}/threads/`, { params: httpParams });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get a single message thread by ID
|
|
198
|
+
*/
|
|
199
|
+
getMessageThread(id) {
|
|
200
|
+
return this.get(`${this.apiUrl}/threads/${id}/`);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create a new message thread
|
|
204
|
+
*/
|
|
205
|
+
createMessageThread(thread) {
|
|
206
|
+
return this.post(`${this.apiUrl}/threads/`, thread);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Update an existing message thread
|
|
210
|
+
*/
|
|
211
|
+
updateMessageThread(id, thread) {
|
|
212
|
+
return this.put(`${this.apiUrl}/threads/${id}/`, thread);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Partially update a message thread
|
|
216
|
+
*/
|
|
217
|
+
patchMessageThread(id, thread) {
|
|
218
|
+
return this.patch(`${this.apiUrl}/threads/${id}/`, thread);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Delete a message thread
|
|
222
|
+
*/
|
|
223
|
+
deleteMessageThread(id) {
|
|
224
|
+
return this.delete(`${this.apiUrl}/threads/${id}/`);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Add participant to a thread
|
|
228
|
+
*/
|
|
229
|
+
addParticipant(id, request) {
|
|
230
|
+
return this.post(`${this.apiUrl}/threads/${id}/add_participant/`, request);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Remove participant from a thread
|
|
234
|
+
*/
|
|
235
|
+
removeParticipant(id, request) {
|
|
236
|
+
return this.post(`${this.apiUrl}/threads/${id}/remove_participant/`, request);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get thread participants
|
|
240
|
+
*/
|
|
241
|
+
getParticipants(id) {
|
|
242
|
+
return this.get(`${this.apiUrl}/threads/${id}/participants/`);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Archive/unarchive a thread (toggles state)
|
|
246
|
+
*/
|
|
247
|
+
toggleArchiveThread(id) {
|
|
248
|
+
return this.post(`${this.apiUrl}/threads/${id}/archive/`, {});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Mark thread as read for current user
|
|
252
|
+
*/
|
|
253
|
+
markThreadAsRead(id) {
|
|
254
|
+
return this.post(`${this.apiUrl}/threads/${id}/mark_read/`, {});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Search message threads by title or description
|
|
258
|
+
*/
|
|
259
|
+
searchMessageThreads(query) {
|
|
260
|
+
return this.getMessageThreads({ search: query });
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get private threads only
|
|
264
|
+
*/
|
|
265
|
+
getPrivateThreads() {
|
|
266
|
+
return this.getMessageThreads({ isPrivate: true });
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get public threads only
|
|
270
|
+
*/
|
|
271
|
+
getPublicThreads() {
|
|
272
|
+
return this.getMessageThreads({ isPrivate: false });
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Get archived threads
|
|
276
|
+
*/
|
|
277
|
+
getArchivedThreads() {
|
|
278
|
+
return this.getMessageThreads({ isArchived: true });
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get active threads (non-archived)
|
|
282
|
+
*/
|
|
283
|
+
getActiveThreads() {
|
|
284
|
+
return this.getMessageThreads({ isArchived: false });
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get threads created by a specific user
|
|
288
|
+
*/
|
|
289
|
+
getThreadsByCreator(creatorId) {
|
|
290
|
+
return this.getMessageThreads({ creator: creatorId });
|
|
291
|
+
}
|
|
292
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MessageThreadService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
293
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MessageThreadService, providedIn: 'root' });
|
|
294
|
+
}
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MessageThreadService, decorators: [{
|
|
296
|
+
type: Injectable,
|
|
297
|
+
args: [{
|
|
298
|
+
providedIn: 'root'
|
|
299
|
+
}]
|
|
300
|
+
}] });
|
|
301
|
+
|
|
302
|
+
class MessageService extends BaseApiService {
|
|
303
|
+
/**
|
|
304
|
+
* Get all messages with optional filtering
|
|
305
|
+
*/
|
|
306
|
+
getMessages(params) {
|
|
307
|
+
const httpParams = this.buildHttpParams(params);
|
|
308
|
+
return this.get(`${this.apiUrl}/messages/`, { params: httpParams });
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get a single message by ID
|
|
312
|
+
*/
|
|
313
|
+
getMessage(id) {
|
|
314
|
+
return this.get(`${this.apiUrl}/messages/${id}/`);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Create a new message
|
|
318
|
+
*/
|
|
319
|
+
createMessage(message) {
|
|
320
|
+
return this.post(`${this.apiUrl}/messages/`, message);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Update an existing message
|
|
324
|
+
*/
|
|
325
|
+
updateMessage(id, message) {
|
|
326
|
+
return this.put(`${this.apiUrl}/messages/${id}/`, message);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Partially update a message
|
|
330
|
+
*/
|
|
331
|
+
patchMessage(id, message) {
|
|
332
|
+
return this.patch(`${this.apiUrl}/messages/${id}/`, message);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Delete a message (soft delete)
|
|
336
|
+
*/
|
|
337
|
+
deleteMessage(id) {
|
|
338
|
+
return this.delete(`${this.apiUrl}/messages/${id}/`);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Get messages in a specific thread
|
|
342
|
+
*/
|
|
343
|
+
getThreadMessages(threadId, params) {
|
|
344
|
+
const queryParams = { ...params, thread: threadId };
|
|
345
|
+
return this.getMessages(queryParams);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Search messages by content
|
|
349
|
+
*/
|
|
350
|
+
searchMessages(query, threadId) {
|
|
351
|
+
const params = { search: query };
|
|
352
|
+
if (threadId) {
|
|
353
|
+
params.thread = threadId;
|
|
354
|
+
}
|
|
355
|
+
return this.getMessages(params);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Get messages by sender
|
|
359
|
+
*/
|
|
360
|
+
getMessagesBySender(senderId, threadId) {
|
|
361
|
+
const params = { sender: senderId };
|
|
362
|
+
if (threadId) {
|
|
363
|
+
params.thread = threadId;
|
|
364
|
+
}
|
|
365
|
+
return this.getMessages(params);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Get messages by type
|
|
369
|
+
*/
|
|
370
|
+
getMessagesByType(messageType, threadId) {
|
|
371
|
+
const params = { messageType };
|
|
372
|
+
if (threadId) {
|
|
373
|
+
params.thread = threadId;
|
|
374
|
+
}
|
|
375
|
+
return this.getMessages(params);
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Get deleted messages (for moderation)
|
|
379
|
+
*/
|
|
380
|
+
getDeletedMessages(threadId) {
|
|
381
|
+
const params = { isDeleted: true };
|
|
382
|
+
if (threadId) {
|
|
383
|
+
params.thread = threadId;
|
|
384
|
+
}
|
|
385
|
+
return this.getMessages(params);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Get active messages (non-deleted)
|
|
389
|
+
*/
|
|
390
|
+
getActiveMessages(threadId) {
|
|
391
|
+
const params = { isDeleted: false };
|
|
392
|
+
if (threadId) {
|
|
393
|
+
params.thread = threadId;
|
|
394
|
+
}
|
|
395
|
+
return this.getMessages(params);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Reply to a message
|
|
399
|
+
*/
|
|
400
|
+
replyToMessage(parentMessageId, content, threadId) {
|
|
401
|
+
const message = {
|
|
402
|
+
thread: threadId,
|
|
403
|
+
content,
|
|
404
|
+
replyTo: parentMessageId
|
|
405
|
+
};
|
|
406
|
+
return this.createMessage(message);
|
|
407
|
+
}
|
|
408
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MessageService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
409
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MessageService, providedIn: 'root' });
|
|
410
|
+
}
|
|
411
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MessageService, decorators: [{
|
|
412
|
+
type: Injectable,
|
|
413
|
+
args: [{
|
|
414
|
+
providedIn: 'root'
|
|
415
|
+
}]
|
|
416
|
+
}] });
|
|
417
|
+
|
|
418
|
+
class ThreadParticipantService {
|
|
419
|
+
http = inject(HttpClient);
|
|
420
|
+
apiUrl = '/api'; // This should be configurable
|
|
421
|
+
/**
|
|
422
|
+
* Get all thread participants with optional filtering
|
|
423
|
+
*/
|
|
424
|
+
getThreadParticipants(params) {
|
|
425
|
+
let httpParams = new HttpParams();
|
|
426
|
+
if (params) {
|
|
427
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
428
|
+
if (value !== undefined && value !== null) {
|
|
429
|
+
httpParams = httpParams.set(key, value.toString());
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
return this.http.get(`${this.apiUrl}/thread-participants/`, { params: httpParams });
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Get a single thread participant by ID
|
|
437
|
+
*/
|
|
438
|
+
getThreadParticipant(id) {
|
|
439
|
+
return this.http.get(`${this.apiUrl}/thread-participants/${id}/`);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Update thread participant settings
|
|
443
|
+
*/
|
|
444
|
+
updateThreadParticipant(id, updates) {
|
|
445
|
+
return this.http.patch(`${this.apiUrl}/thread-participants/${id}/`, updates);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Update participant's last read timestamp
|
|
449
|
+
*/
|
|
450
|
+
updateLastRead(id) {
|
|
451
|
+
return this.http.post(`${this.apiUrl}/thread-participants/${id}/update_last_read/`, {});
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Get participants for a specific thread
|
|
455
|
+
*/
|
|
456
|
+
getParticipantsForThread(threadId) {
|
|
457
|
+
return this.getThreadParticipants({ thread: threadId });
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Get moderators for a specific thread
|
|
461
|
+
*/
|
|
462
|
+
getModeratorsForThread(threadId) {
|
|
463
|
+
return this.getThreadParticipants({ thread: threadId, isModerator: true });
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Get non-moderator participants for a specific thread
|
|
467
|
+
*/
|
|
468
|
+
getRegularParticipantsForThread(threadId) {
|
|
469
|
+
return this.getThreadParticipants({ thread: threadId, isModerator: false });
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Get participants with notifications enabled for a specific thread
|
|
473
|
+
*/
|
|
474
|
+
getNotificationEnabledParticipants(threadId) {
|
|
475
|
+
return this.getThreadParticipants({ thread: threadId, notificationsEnabled: true });
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Get participants with notifications disabled for a specific thread
|
|
479
|
+
*/
|
|
480
|
+
getNotificationDisabledParticipants(threadId) {
|
|
481
|
+
return this.getThreadParticipants({ thread: threadId, notificationsEnabled: false });
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Toggle moderator status for a participant
|
|
485
|
+
*/
|
|
486
|
+
toggleModeratorStatus(id) {
|
|
487
|
+
return this.http.post(`${this.apiUrl}/thread-participants/${id}/toggle_moderator/`, {});
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Toggle notifications for a participant
|
|
491
|
+
*/
|
|
492
|
+
toggleNotifications(id) {
|
|
493
|
+
return this.http.post(`${this.apiUrl}/thread-participants/${id}/toggle_notifications/`, {});
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Leave a thread (for current user)
|
|
497
|
+
*/
|
|
498
|
+
leaveThread(threadId) {
|
|
499
|
+
return this.http.post(`${this.apiUrl}/thread-participants/leave_thread/`, { thread: threadId });
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Get threads where current user is participant
|
|
503
|
+
*/
|
|
504
|
+
getMyParticipations() {
|
|
505
|
+
return this.http.get(`${this.apiUrl}/thread-participants/my_participations/`);
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Get threads where current user is moderator
|
|
509
|
+
*/
|
|
510
|
+
getMyModerations() {
|
|
511
|
+
return this.http.get(`${this.apiUrl}/thread-participants/my_moderations/`);
|
|
512
|
+
}
|
|
513
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ThreadParticipantService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
514
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ThreadParticipantService, providedIn: 'root' });
|
|
515
|
+
}
|
|
516
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ThreadParticipantService, decorators: [{
|
|
517
|
+
type: Injectable,
|
|
518
|
+
args: [{
|
|
519
|
+
providedIn: 'root'
|
|
520
|
+
}]
|
|
521
|
+
}] });
|
|
522
|
+
|
|
523
|
+
// Communication and messaging services
|
|
524
|
+
|
|
525
|
+
/*
|
|
526
|
+
* Public API Surface of cupcake-mint-chocolate
|
|
527
|
+
*/
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* Generated bundle index. Do not edit.
|
|
531
|
+
*/
|
|
532
|
+
|
|
533
|
+
export { CupcakeMintChocolate, DeliveryStatus, DeliveryStatusLabels, MessageService, MessageThreadService, MessageType, MessageTypeLabels, NotificationPriority, NotificationPriorityLabels, NotificationService, NotificationType, NotificationTypeLabels, ThreadParticipantService };
|
|
534
|
+
//# sourceMappingURL=noatgnu-cupcake-mint-chocolate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noatgnu-cupcake-mint-chocolate.mjs","sources":["../../../projects/cupcake-mint-chocolate/src/lib/cupcake-mint-chocolate.ts","../../../projects/cupcake-mint-chocolate/src/lib/models/enums.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/notification.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/message-thread.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/message.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/thread-participant.ts","../../../projects/cupcake-mint-chocolate/src/lib/services/index.ts","../../../projects/cupcake-mint-chocolate/src/public-api.ts","../../../projects/cupcake-mint-chocolate/src/noatgnu-cupcake-mint-chocolate.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'ccmc-cupcake-mint-chocolate',\n imports: [],\n template: `\n <p>\n cupcake-mint-chocolate works!\n </p>\n `,\n styles: ``\n})\nexport class CupcakeMintChocolate {\n\n}\n","export enum NotificationType {\r\n SYSTEM = 'system',\r\n MAINTENANCE = 'maintenance',\r\n INVENTORY = 'inventory',\r\n BILLING = 'billing',\r\n PROJECT = 'project',\r\n PROTOCOL = 'protocol',\r\n DOCUMENT = 'document',\r\n USER = 'user'\r\n}\r\n\r\nexport const NotificationTypeLabels: Record<NotificationType, string> = {\r\n [NotificationType.SYSTEM]: 'System',\r\n [NotificationType.MAINTENANCE]: 'Maintenance',\r\n [NotificationType.INVENTORY]: 'Inventory',\r\n [NotificationType.BILLING]: 'Billing',\r\n [NotificationType.PROJECT]: 'Project',\r\n [NotificationType.PROTOCOL]: 'Protocol',\r\n [NotificationType.DOCUMENT]: 'Document',\r\n [NotificationType.USER]: 'User'\r\n};\r\n\r\nexport enum NotificationPriority {\r\n LOW = 'low',\r\n NORMAL = 'normal',\r\n HIGH = 'high',\r\n URGENT = 'urgent'\r\n}\r\n\r\nexport const NotificationPriorityLabels: Record<NotificationPriority, string> = {\r\n [NotificationPriority.LOW]: 'Low',\r\n [NotificationPriority.NORMAL]: 'Normal',\r\n [NotificationPriority.HIGH]: 'High',\r\n [NotificationPriority.URGENT]: 'Urgent'\r\n};\r\n\r\nexport enum DeliveryStatus {\r\n PENDING = 'pending',\r\n SENT = 'sent',\r\n DELIVERED = 'delivered',\r\n FAILED = 'failed',\r\n READ = 'read'\r\n}\r\n\r\nexport const DeliveryStatusLabels: Record<DeliveryStatus, string> = {\r\n [DeliveryStatus.PENDING]: 'Pending',\r\n [DeliveryStatus.SENT]: 'Sent',\r\n [DeliveryStatus.DELIVERED]: 'Delivered',\r\n [DeliveryStatus.FAILED]: 'Failed',\r\n [DeliveryStatus.READ]: 'Read'\r\n};\r\n\r\nexport enum MessageType {\r\n DIRECT = 'direct',\r\n THREAD = 'thread',\r\n BROADCAST = 'broadcast',\r\n SYSTEM = 'system'\r\n}\r\n\r\nexport const MessageTypeLabels: Record<MessageType, string> = {\r\n [MessageType.DIRECT]: 'Direct Message',\r\n [MessageType.THREAD]: 'Thread Reply',\r\n [MessageType.BROADCAST]: 'Broadcast',\r\n [MessageType.SYSTEM]: 'System Message'\r\n};","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n Notification,\r\n NotificationCreateRequest,\r\n NotificationUpdateRequest,\r\n MarkNotificationReadRequest,\r\n BulkNotificationActionRequest,\r\n NotificationType,\r\n NotificationPriority,\r\n DeliveryStatus,\r\n PaginatedResponse,\r\n NotificationQueryParams\r\n} from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService extends BaseApiService {\r\n\r\n /**\r\n * Get all notifications with optional filtering\r\n */\r\n getNotifications(params?: NotificationQueryParams): Observable<PaginatedResponse<Notification>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<Notification>>(`${this.apiUrl}/notifications/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single notification by ID\r\n */\r\n getNotification(id: string): Observable<Notification> {\r\n return this.get<Notification>(`${this.apiUrl}/notifications/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new notification\r\n */\r\n createNotification(notification: NotificationCreateRequest): Observable<Notification> {\r\n return this.post<Notification>(`${this.apiUrl}/notifications/`, notification);\r\n }\r\n\r\n /**\r\n * Update an existing notification\r\n */\r\n updateNotification(id: string, notification: NotificationUpdateRequest): Observable<Notification> {\r\n return this.put<Notification>(`${this.apiUrl}/notifications/${id}/`, notification);\r\n }\r\n\r\n /**\r\n * Partially update a notification\r\n */\r\n patchNotification(id: string, notification: Partial<NotificationUpdateRequest>): Observable<Notification> {\r\n return this.patch<Notification>(`${this.apiUrl}/notifications/${id}/`, notification);\r\n }\r\n\r\n /**\r\n * Delete a notification\r\n */\r\n deleteNotification(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/notifications/${id}/`);\r\n }\r\n\r\n /**\r\n * Mark a notification as read/unread\r\n */\r\n markNotificationRead(id: string, request: MarkNotificationReadRequest): Observable<Notification> {\r\n return this.post<Notification>(`${this.apiUrl}/notifications/${id}/mark_read/`, request);\r\n }\r\n\r\n\r\n /**\r\n * Get unread notifications for current user\r\n */\r\n getUnreadNotifications(): Observable<PaginatedResponse<Notification>> {\r\n return this.get<PaginatedResponse<Notification>>(`${this.apiUrl}/notifications/unread/`);\r\n }\r\n\r\n /**\r\n * Get notification statistics for current user\r\n */\r\n getNotificationStats(): Observable<{\r\n total: number;\r\n unread: number;\r\n byType: { [key: string]: number };\r\n byPriority: { [key: string]: number };\r\n }> {\r\n return this.get<{\r\n total: number;\r\n unread: number;\r\n byType: { [key: string]: number };\r\n byPriority: { [key: string]: number };\r\n }>(`${this.apiUrl}/notifications/stats/`);\r\n }\r\n\r\n /**\r\n * Mark all notifications as read for current user\r\n */\r\n markAllNotificationsRead(): Observable<{ success: boolean; message: string }> {\r\n return this.post<{ success: boolean; message: string }>(`${this.apiUrl}/notifications/mark_all_read/`, {});\r\n }\r\n\r\n /**\r\n * Search notifications by title or message\r\n */\r\n searchNotifications(query: string): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ search: query });\r\n }\r\n\r\n /**\r\n * Get notifications by type\r\n */\r\n getNotificationsByType(type: NotificationType): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ notificationType: type });\r\n }\r\n\r\n /**\r\n * Get notifications by priority\r\n */\r\n getNotificationsByPriority(priority: NotificationPriority): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ priority });\r\n }\r\n\r\n /**\r\n * Get notifications by sender\r\n */\r\n getNotificationsBySender(senderId: number): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ sender: senderId });\r\n }\r\n\r\n /**\r\n * Get notifications by delivery status\r\n */\r\n getNotificationsByStatus(status: DeliveryStatus): Observable<PaginatedResponse<Notification>> {\r\n return this.getNotifications({ deliveryStatus: status });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n MessageThread,\r\n MessageThreadCreateRequest,\r\n MessageThreadUpdateRequest,\r\n ThreadParticipantRequest,\r\n ThreadSearchRequest,\r\n ThreadParticipant,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface MessageThreadQueryParams {\r\n search?: string;\r\n isPrivate?: boolean;\r\n isArchived?: boolean;\r\n creator?: number;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageThreadService extends BaseApiService {\r\n\r\n /**\r\n * Get all message threads with optional filtering\r\n */\r\n getMessageThreads(params?: MessageThreadQueryParams): Observable<PaginatedResponse<MessageThread>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<MessageThread>>(`${this.apiUrl}/threads/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single message thread by ID\r\n */\r\n getMessageThread(id: string): Observable<MessageThread> {\r\n return this.get<MessageThread>(`${this.apiUrl}/threads/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new message thread\r\n */\r\n createMessageThread(thread: MessageThreadCreateRequest): Observable<MessageThread> {\r\n return this.post<MessageThread>(`${this.apiUrl}/threads/`, thread);\r\n }\r\n\r\n /**\r\n * Update an existing message thread\r\n */\r\n updateMessageThread(id: string, thread: MessageThreadUpdateRequest): Observable<MessageThread> {\r\n return this.put<MessageThread>(`${this.apiUrl}/threads/${id}/`, thread);\r\n }\r\n\r\n /**\r\n * Partially update a message thread\r\n */\r\n patchMessageThread(id: string, thread: Partial<MessageThreadUpdateRequest>): Observable<MessageThread> {\r\n return this.patch<MessageThread>(`${this.apiUrl}/threads/${id}/`, thread);\r\n }\r\n\r\n /**\r\n * Delete a message thread\r\n */\r\n deleteMessageThread(id: string): Observable<void> {\r\n return this.delete<void>(`${this.apiUrl}/threads/${id}/`);\r\n }\r\n\r\n /**\r\n * Add participant to a thread\r\n */\r\n addParticipant(id: string, request: { username: string }): Observable<{ message: string; participant: ThreadParticipant }> {\r\n return this.post<{ message: string; participant: ThreadParticipant }>(`${this.apiUrl}/threads/${id}/add_participant/`, request);\r\n }\r\n\r\n /**\r\n * Remove participant from a thread\r\n */\r\n removeParticipant(id: string, request: { username: string }): Observable<{ message: string }> {\r\n return this.post<{ message: string }>(`${this.apiUrl}/threads/${id}/remove_participant/`, request);\r\n }\r\n\r\n /**\r\n * Get thread participants\r\n */\r\n getParticipants(id: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/threads/${id}/participants/`);\r\n }\r\n\r\n /**\r\n * Archive/unarchive a thread (toggles state)\r\n */\r\n toggleArchiveThread(id: string): Observable<{ message: string; isArchived: boolean }> {\r\n return this.post<{ message: string; isArchived: boolean }>(`${this.apiUrl}/threads/${id}/archive/`, {});\r\n }\r\n\r\n /**\r\n * Mark thread as read for current user\r\n */\r\n markThreadAsRead(id: string): Observable<{ success: boolean; message: string }> {\r\n return this.post<{ success: boolean; message: string }>(`${this.apiUrl}/threads/${id}/mark_read/`, {});\r\n }\r\n\r\n\r\n /**\r\n * Search message threads by title or description\r\n */\r\n searchMessageThreads(query: string): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ search: query });\r\n }\r\n\r\n /**\r\n * Get private threads only\r\n */\r\n getPrivateThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isPrivate: true });\r\n }\r\n\r\n /**\r\n * Get public threads only\r\n */\r\n getPublicThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isPrivate: false });\r\n }\r\n\r\n /**\r\n * Get archived threads\r\n */\r\n getArchivedThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isArchived: true });\r\n }\r\n\r\n /**\r\n * Get active threads (non-archived)\r\n */\r\n getActiveThreads(): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ isArchived: false });\r\n }\r\n\r\n /**\r\n * Get threads created by a specific user\r\n */\r\n getThreadsByCreator(creatorId: number): Observable<PaginatedResponse<MessageThread>> {\r\n return this.getMessageThreads({ creator: creatorId });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseApiService } from '@cupcake/core';\r\n\r\nimport {\r\n Message,\r\n MessageCreateRequest,\r\n MessageUpdateRequest,\r\n MessageSearchRequest,\r\n MessageType,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface MessageQueryParams {\r\n search?: string;\r\n thread?: string;\r\n messageType?: MessageType;\r\n sender?: number;\r\n isDeleted?: boolean;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageService extends BaseApiService {\r\n\r\n /**\r\n * Get all messages with optional filtering\r\n */\r\n getMessages(params?: MessageQueryParams): Observable<PaginatedResponse<Message>> {\r\n const httpParams = this.buildHttpParams(params);\r\n return this.get<PaginatedResponse<Message>>(`${this.apiUrl}/messages/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single message by ID\r\n */\r\n getMessage(id: string): Observable<Message> {\r\n return this.get<Message>(`${this.apiUrl}/messages/${id}/`);\r\n }\r\n\r\n /**\r\n * Create a new message\r\n */\r\n createMessage(message: MessageCreateRequest): Observable<Message> {\r\n return this.post<Message>(`${this.apiUrl}/messages/`, message);\r\n }\r\n\r\n /**\r\n * Update an existing message\r\n */\r\n updateMessage(id: string, message: MessageUpdateRequest): Observable<Message> {\r\n return this.put<Message>(`${this.apiUrl}/messages/${id}/`, message);\r\n }\r\n\r\n /**\r\n * Partially update a message\r\n */\r\n patchMessage(id: string, message: Partial<MessageUpdateRequest>): Observable<Message> {\r\n return this.patch<Message>(`${this.apiUrl}/messages/${id}/`, message);\r\n }\r\n\r\n /**\r\n * Delete a message (soft delete)\r\n */\r\n deleteMessage(id: string): Observable<Message> {\r\n return this.delete<Message>(`${this.apiUrl}/messages/${id}/`);\r\n }\r\n\r\n\r\n /**\r\n * Get messages in a specific thread\r\n */\r\n getThreadMessages(threadId: string, params?: Omit<MessageQueryParams, 'thread'>): Observable<PaginatedResponse<Message>> {\r\n const queryParams = { ...params, thread: threadId };\r\n return this.getMessages(queryParams);\r\n }\r\n\r\n /**\r\n * Search messages by content\r\n */\r\n searchMessages(query: string, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { search: query };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get messages by sender\r\n */\r\n getMessagesBySender(senderId: number, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { sender: senderId };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get messages by type\r\n */\r\n getMessagesByType(messageType: MessageType, threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { messageType };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get deleted messages (for moderation)\r\n */\r\n getDeletedMessages(threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { isDeleted: true };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Get active messages (non-deleted)\r\n */\r\n getActiveMessages(threadId?: string): Observable<PaginatedResponse<Message>> {\r\n const params: MessageQueryParams = { isDeleted: false };\r\n if (threadId) {\r\n params.thread = threadId;\r\n }\r\n return this.getMessages(params);\r\n }\r\n\r\n /**\r\n * Reply to a message\r\n */\r\n replyToMessage(parentMessageId: string, content: string, threadId: string): Observable<Message> {\r\n const message: MessageCreateRequest = {\r\n thread: threadId,\r\n content,\r\n replyTo: parentMessageId\r\n };\r\n return this.createMessage(message);\r\n }\r\n}","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport {\r\n ThreadParticipant,\r\n PaginatedResponse\r\n} from '../models';\r\n\r\nexport interface ThreadParticipantQueryParams {\r\n thread?: string;\r\n isModerator?: boolean;\r\n notificationsEnabled?: boolean;\r\n limit?: number;\r\n offset?: number;\r\n ordering?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThreadParticipantService {\r\n private http = inject(HttpClient);\r\n private apiUrl = '/api'; // This should be configurable\r\n\r\n /**\r\n * Get all thread participants with optional filtering\r\n */\r\n getThreadParticipants(params?: ThreadParticipantQueryParams): Observable<PaginatedResponse<ThreadParticipant>> {\r\n let httpParams = new HttpParams();\r\n \r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n httpParams = httpParams.set(key, value.toString());\r\n }\r\n });\r\n }\r\n\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/`, { params: httpParams });\r\n }\r\n\r\n /**\r\n * Get a single thread participant by ID\r\n */\r\n getThreadParticipant(id: number): Observable<ThreadParticipant> {\r\n return this.http.get<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/`);\r\n }\r\n\r\n /**\r\n * Update thread participant settings\r\n */\r\n updateThreadParticipant(id: number, updates: { isModerator?: boolean; notificationsEnabled?: boolean }): Observable<ThreadParticipant> {\r\n return this.http.patch<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/`, updates);\r\n }\r\n\r\n /**\r\n * Update participant's last read timestamp\r\n */\r\n updateLastRead(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/update_last_read/`, {});\r\n }\r\n\r\n /**\r\n * Get participants for a specific thread\r\n */\r\n getParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId });\r\n }\r\n\r\n /**\r\n * Get moderators for a specific thread\r\n */\r\n getModeratorsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, isModerator: true });\r\n }\r\n\r\n /**\r\n * Get non-moderator participants for a specific thread\r\n */\r\n getRegularParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, isModerator: false });\r\n }\r\n\r\n /**\r\n * Get participants with notifications enabled for a specific thread\r\n */\r\n getNotificationEnabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, notificationsEnabled: true });\r\n }\r\n\r\n /**\r\n * Get participants with notifications disabled for a specific thread\r\n */\r\n getNotificationDisabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.getThreadParticipants({ thread: threadId, notificationsEnabled: false });\r\n }\r\n\r\n /**\r\n * Toggle moderator status for a participant\r\n */\r\n toggleModeratorStatus(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/toggle_moderator/`, {});\r\n }\r\n\r\n /**\r\n * Toggle notifications for a participant\r\n */\r\n toggleNotifications(id: number): Observable<ThreadParticipant> {\r\n return this.http.post<ThreadParticipant>(`${this.apiUrl}/thread-participants/${id}/toggle_notifications/`, {});\r\n }\r\n\r\n /**\r\n * Leave a thread (for current user)\r\n */\r\n leaveThread(threadId: string): Observable<{ success: boolean; message: string }> {\r\n return this.http.post<{ success: boolean; message: string }>(`${this.apiUrl}/thread-participants/leave_thread/`, { thread: threadId });\r\n }\r\n\r\n /**\r\n * Get threads where current user is participant\r\n */\r\n getMyParticipations(): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/my_participations/`);\r\n }\r\n\r\n /**\r\n * Get threads where current user is moderator\r\n */\r\n getMyModerations(): Observable<PaginatedResponse<ThreadParticipant>> {\r\n return this.http.get<PaginatedResponse<ThreadParticipant>>(`${this.apiUrl}/thread-participants/my_moderations/`);\r\n }\r\n}","// Communication and messaging services\r\nexport * from './notification';\r\nexport * from './message-thread';\r\nexport * from './message';\r\nexport * from './thread-participant';","/*\n * Public API Surface of cupcake-mint-chocolate\n */\n\nexport * from './lib/cupcake-mint-chocolate';\n\n// Models and interfaces\nexport * from './lib/models';\n\n// Services\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { BaseApiService } from '@cupcake/core';
|
|
4
|
+
|
|
5
|
+
declare class CupcakeMintChocolate {
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CupcakeMintChocolate, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CupcakeMintChocolate, "ccmc-cupcake-mint-chocolate", never, {}, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface BaseTimestampedModel {
|
|
11
|
+
createdAt: string;
|
|
12
|
+
updatedAt: string;
|
|
13
|
+
}
|
|
14
|
+
interface UserBasic {
|
|
15
|
+
id: number;
|
|
16
|
+
username: string;
|
|
17
|
+
firstName?: string;
|
|
18
|
+
lastName?: string;
|
|
19
|
+
email: string;
|
|
20
|
+
}
|
|
21
|
+
interface PaginatedResponse<T> {
|
|
22
|
+
count: number;
|
|
23
|
+
next?: string;
|
|
24
|
+
previous?: string;
|
|
25
|
+
results: T[];
|
|
26
|
+
}
|
|
27
|
+
interface ApiResponse<T = any> {
|
|
28
|
+
data?: T;
|
|
29
|
+
error?: any;
|
|
30
|
+
status: number;
|
|
31
|
+
success: boolean;
|
|
32
|
+
}
|
|
33
|
+
interface NotificationQueryParams {
|
|
34
|
+
page?: number;
|
|
35
|
+
pageSize?: number;
|
|
36
|
+
search?: string;
|
|
37
|
+
ordering?: string;
|
|
38
|
+
notificationType?: string;
|
|
39
|
+
priority?: string;
|
|
40
|
+
isRead?: boolean;
|
|
41
|
+
recipient?: number;
|
|
42
|
+
includeExpired?: boolean;
|
|
43
|
+
sender?: number;
|
|
44
|
+
deliveryStatus?: string;
|
|
45
|
+
limit?: number;
|
|
46
|
+
offset?: number;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare enum NotificationType {
|
|
50
|
+
SYSTEM = "system",
|
|
51
|
+
MAINTENANCE = "maintenance",
|
|
52
|
+
INVENTORY = "inventory",
|
|
53
|
+
BILLING = "billing",
|
|
54
|
+
PROJECT = "project",
|
|
55
|
+
PROTOCOL = "protocol",
|
|
56
|
+
DOCUMENT = "document",
|
|
57
|
+
USER = "user"
|
|
58
|
+
}
|
|
59
|
+
declare const NotificationTypeLabels: Record<NotificationType, string>;
|
|
60
|
+
declare enum NotificationPriority {
|
|
61
|
+
LOW = "low",
|
|
62
|
+
NORMAL = "normal",
|
|
63
|
+
HIGH = "high",
|
|
64
|
+
URGENT = "urgent"
|
|
65
|
+
}
|
|
66
|
+
declare const NotificationPriorityLabels: Record<NotificationPriority, string>;
|
|
67
|
+
declare enum DeliveryStatus {
|
|
68
|
+
PENDING = "pending",
|
|
69
|
+
SENT = "sent",
|
|
70
|
+
DELIVERED = "delivered",
|
|
71
|
+
FAILED = "failed",
|
|
72
|
+
READ = "read"
|
|
73
|
+
}
|
|
74
|
+
declare const DeliveryStatusLabels: Record<DeliveryStatus, string>;
|
|
75
|
+
declare enum MessageType {
|
|
76
|
+
DIRECT = "direct",
|
|
77
|
+
THREAD = "thread",
|
|
78
|
+
BROADCAST = "broadcast",
|
|
79
|
+
SYSTEM = "system"
|
|
80
|
+
}
|
|
81
|
+
declare const MessageTypeLabels: Record<MessageType, string>;
|
|
82
|
+
|
|
83
|
+
interface Notification extends BaseTimestampedModel {
|
|
84
|
+
id: string;
|
|
85
|
+
title: string;
|
|
86
|
+
message: string;
|
|
87
|
+
notificationType: NotificationType;
|
|
88
|
+
priority: NotificationPriority;
|
|
89
|
+
recipient: number;
|
|
90
|
+
recipientUsername?: string;
|
|
91
|
+
recipientName?: string;
|
|
92
|
+
sender?: number;
|
|
93
|
+
senderUsername?: string;
|
|
94
|
+
senderName?: string;
|
|
95
|
+
deliveryStatus: DeliveryStatus;
|
|
96
|
+
sentAt?: string;
|
|
97
|
+
readAt?: string;
|
|
98
|
+
data?: any;
|
|
99
|
+
expiresAt?: string;
|
|
100
|
+
relatedObjectType?: string;
|
|
101
|
+
relatedObjectApp?: string;
|
|
102
|
+
objectId?: number;
|
|
103
|
+
isRead: boolean;
|
|
104
|
+
isExpired: boolean;
|
|
105
|
+
}
|
|
106
|
+
interface NotificationCreateRequest {
|
|
107
|
+
title: string;
|
|
108
|
+
message: string;
|
|
109
|
+
notificationType: NotificationType;
|
|
110
|
+
priority?: NotificationPriority;
|
|
111
|
+
recipient: number;
|
|
112
|
+
data?: any;
|
|
113
|
+
expiresAt?: string;
|
|
114
|
+
contentType?: number;
|
|
115
|
+
objectId?: number;
|
|
116
|
+
}
|
|
117
|
+
interface NotificationUpdateRequest {
|
|
118
|
+
title?: string;
|
|
119
|
+
message?: string;
|
|
120
|
+
priority?: NotificationPriority;
|
|
121
|
+
deliveryStatus?: DeliveryStatus;
|
|
122
|
+
data?: any;
|
|
123
|
+
expiresAt?: string;
|
|
124
|
+
}
|
|
125
|
+
interface MarkNotificationReadRequest {
|
|
126
|
+
isRead: boolean;
|
|
127
|
+
}
|
|
128
|
+
interface BulkNotificationActionRequest {
|
|
129
|
+
notificationIds: string[];
|
|
130
|
+
action: 'mark_read' | 'mark_unread' | 'delete';
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
interface ThreadParticipant extends BaseTimestampedModel {
|
|
134
|
+
id: number;
|
|
135
|
+
user: number;
|
|
136
|
+
username?: string;
|
|
137
|
+
userDetails?: UserBasic;
|
|
138
|
+
joinedAt: string;
|
|
139
|
+
lastReadAt?: string;
|
|
140
|
+
isModerator: boolean;
|
|
141
|
+
notificationsEnabled: boolean;
|
|
142
|
+
}
|
|
143
|
+
interface Message extends BaseTimestampedModel {
|
|
144
|
+
id: string;
|
|
145
|
+
thread: string;
|
|
146
|
+
content: string;
|
|
147
|
+
messageType: MessageType;
|
|
148
|
+
sender: number;
|
|
149
|
+
senderUsername?: string;
|
|
150
|
+
senderDetails?: UserBasic;
|
|
151
|
+
isEdited: boolean;
|
|
152
|
+
isDeleted: boolean;
|
|
153
|
+
replyTo?: string;
|
|
154
|
+
replyToContent?: string;
|
|
155
|
+
replyToSender?: string;
|
|
156
|
+
annotationsCount: number;
|
|
157
|
+
}
|
|
158
|
+
interface MessageThread extends BaseTimestampedModel {
|
|
159
|
+
id: string;
|
|
160
|
+
title: string;
|
|
161
|
+
description?: string;
|
|
162
|
+
creator: number;
|
|
163
|
+
creatorUsername?: string;
|
|
164
|
+
creatorDetails?: UserBasic;
|
|
165
|
+
participantsCount: number;
|
|
166
|
+
messagesCount: number;
|
|
167
|
+
participantsList?: ThreadParticipant[];
|
|
168
|
+
relatedObjectType?: string;
|
|
169
|
+
relatedObjectApp?: string;
|
|
170
|
+
objectId?: number;
|
|
171
|
+
isPrivate: boolean;
|
|
172
|
+
isArchived: boolean;
|
|
173
|
+
allowExternalParticipants: boolean;
|
|
174
|
+
lastMessageAt?: string;
|
|
175
|
+
latestMessage?: Message;
|
|
176
|
+
}
|
|
177
|
+
interface MessageThreadCreateRequest {
|
|
178
|
+
title: string;
|
|
179
|
+
description?: string;
|
|
180
|
+
isPrivate?: boolean;
|
|
181
|
+
allowExternalParticipants?: boolean;
|
|
182
|
+
contentType?: number;
|
|
183
|
+
objectId?: number;
|
|
184
|
+
participantUsernames?: string[];
|
|
185
|
+
}
|
|
186
|
+
interface MessageThreadUpdateRequest {
|
|
187
|
+
title?: string;
|
|
188
|
+
description?: string;
|
|
189
|
+
isPrivate?: boolean;
|
|
190
|
+
isArchived?: boolean;
|
|
191
|
+
allowExternalParticipants?: boolean;
|
|
192
|
+
}
|
|
193
|
+
interface MessageCreateRequest {
|
|
194
|
+
thread: string;
|
|
195
|
+
content: string;
|
|
196
|
+
messageType?: MessageType;
|
|
197
|
+
replyTo?: string;
|
|
198
|
+
}
|
|
199
|
+
interface MessageUpdateRequest {
|
|
200
|
+
content?: string;
|
|
201
|
+
}
|
|
202
|
+
interface ThreadParticipantRequest {
|
|
203
|
+
usernames: string[];
|
|
204
|
+
isModerator?: boolean;
|
|
205
|
+
notificationsEnabled?: boolean;
|
|
206
|
+
}
|
|
207
|
+
interface ThreadSearchRequest {
|
|
208
|
+
query?: string;
|
|
209
|
+
creator?: number;
|
|
210
|
+
participant?: number;
|
|
211
|
+
privateOnly?: boolean;
|
|
212
|
+
includeArchived?: boolean;
|
|
213
|
+
relatedObjectType?: string;
|
|
214
|
+
dateFrom?: string;
|
|
215
|
+
dateTo?: string;
|
|
216
|
+
}
|
|
217
|
+
interface MessageSearchRequest {
|
|
218
|
+
query?: string;
|
|
219
|
+
thread?: number;
|
|
220
|
+
sender?: number;
|
|
221
|
+
messageType?: MessageType;
|
|
222
|
+
dateFrom?: string;
|
|
223
|
+
dateTo?: string;
|
|
224
|
+
includeDeleted?: boolean;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
declare class NotificationService extends BaseApiService {
|
|
228
|
+
/**
|
|
229
|
+
* Get all notifications with optional filtering
|
|
230
|
+
*/
|
|
231
|
+
getNotifications(params?: NotificationQueryParams): Observable<PaginatedResponse<Notification>>;
|
|
232
|
+
/**
|
|
233
|
+
* Get a single notification by ID
|
|
234
|
+
*/
|
|
235
|
+
getNotification(id: string): Observable<Notification>;
|
|
236
|
+
/**
|
|
237
|
+
* Create a new notification
|
|
238
|
+
*/
|
|
239
|
+
createNotification(notification: NotificationCreateRequest): Observable<Notification>;
|
|
240
|
+
/**
|
|
241
|
+
* Update an existing notification
|
|
242
|
+
*/
|
|
243
|
+
updateNotification(id: string, notification: NotificationUpdateRequest): Observable<Notification>;
|
|
244
|
+
/**
|
|
245
|
+
* Partially update a notification
|
|
246
|
+
*/
|
|
247
|
+
patchNotification(id: string, notification: Partial<NotificationUpdateRequest>): Observable<Notification>;
|
|
248
|
+
/**
|
|
249
|
+
* Delete a notification
|
|
250
|
+
*/
|
|
251
|
+
deleteNotification(id: string): Observable<void>;
|
|
252
|
+
/**
|
|
253
|
+
* Mark a notification as read/unread
|
|
254
|
+
*/
|
|
255
|
+
markNotificationRead(id: string, request: MarkNotificationReadRequest): Observable<Notification>;
|
|
256
|
+
/**
|
|
257
|
+
* Get unread notifications for current user
|
|
258
|
+
*/
|
|
259
|
+
getUnreadNotifications(): Observable<PaginatedResponse<Notification>>;
|
|
260
|
+
/**
|
|
261
|
+
* Get notification statistics for current user
|
|
262
|
+
*/
|
|
263
|
+
getNotificationStats(): Observable<{
|
|
264
|
+
total: number;
|
|
265
|
+
unread: number;
|
|
266
|
+
byType: {
|
|
267
|
+
[key: string]: number;
|
|
268
|
+
};
|
|
269
|
+
byPriority: {
|
|
270
|
+
[key: string]: number;
|
|
271
|
+
};
|
|
272
|
+
}>;
|
|
273
|
+
/**
|
|
274
|
+
* Mark all notifications as read for current user
|
|
275
|
+
*/
|
|
276
|
+
markAllNotificationsRead(): Observable<{
|
|
277
|
+
success: boolean;
|
|
278
|
+
message: string;
|
|
279
|
+
}>;
|
|
280
|
+
/**
|
|
281
|
+
* Search notifications by title or message
|
|
282
|
+
*/
|
|
283
|
+
searchNotifications(query: string): Observable<PaginatedResponse<Notification>>;
|
|
284
|
+
/**
|
|
285
|
+
* Get notifications by type
|
|
286
|
+
*/
|
|
287
|
+
getNotificationsByType(type: NotificationType): Observable<PaginatedResponse<Notification>>;
|
|
288
|
+
/**
|
|
289
|
+
* Get notifications by priority
|
|
290
|
+
*/
|
|
291
|
+
getNotificationsByPriority(priority: NotificationPriority): Observable<PaginatedResponse<Notification>>;
|
|
292
|
+
/**
|
|
293
|
+
* Get notifications by sender
|
|
294
|
+
*/
|
|
295
|
+
getNotificationsBySender(senderId: number): Observable<PaginatedResponse<Notification>>;
|
|
296
|
+
/**
|
|
297
|
+
* Get notifications by delivery status
|
|
298
|
+
*/
|
|
299
|
+
getNotificationsByStatus(status: DeliveryStatus): Observable<PaginatedResponse<Notification>>;
|
|
300
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
|
|
301
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
interface MessageThreadQueryParams {
|
|
305
|
+
search?: string;
|
|
306
|
+
isPrivate?: boolean;
|
|
307
|
+
isArchived?: boolean;
|
|
308
|
+
creator?: number;
|
|
309
|
+
limit?: number;
|
|
310
|
+
offset?: number;
|
|
311
|
+
ordering?: string;
|
|
312
|
+
}
|
|
313
|
+
declare class MessageThreadService extends BaseApiService {
|
|
314
|
+
/**
|
|
315
|
+
* Get all message threads with optional filtering
|
|
316
|
+
*/
|
|
317
|
+
getMessageThreads(params?: MessageThreadQueryParams): Observable<PaginatedResponse<MessageThread>>;
|
|
318
|
+
/**
|
|
319
|
+
* Get a single message thread by ID
|
|
320
|
+
*/
|
|
321
|
+
getMessageThread(id: string): Observable<MessageThread>;
|
|
322
|
+
/**
|
|
323
|
+
* Create a new message thread
|
|
324
|
+
*/
|
|
325
|
+
createMessageThread(thread: MessageThreadCreateRequest): Observable<MessageThread>;
|
|
326
|
+
/**
|
|
327
|
+
* Update an existing message thread
|
|
328
|
+
*/
|
|
329
|
+
updateMessageThread(id: string, thread: MessageThreadUpdateRequest): Observable<MessageThread>;
|
|
330
|
+
/**
|
|
331
|
+
* Partially update a message thread
|
|
332
|
+
*/
|
|
333
|
+
patchMessageThread(id: string, thread: Partial<MessageThreadUpdateRequest>): Observable<MessageThread>;
|
|
334
|
+
/**
|
|
335
|
+
* Delete a message thread
|
|
336
|
+
*/
|
|
337
|
+
deleteMessageThread(id: string): Observable<void>;
|
|
338
|
+
/**
|
|
339
|
+
* Add participant to a thread
|
|
340
|
+
*/
|
|
341
|
+
addParticipant(id: string, request: {
|
|
342
|
+
username: string;
|
|
343
|
+
}): Observable<{
|
|
344
|
+
message: string;
|
|
345
|
+
participant: ThreadParticipant;
|
|
346
|
+
}>;
|
|
347
|
+
/**
|
|
348
|
+
* Remove participant from a thread
|
|
349
|
+
*/
|
|
350
|
+
removeParticipant(id: string, request: {
|
|
351
|
+
username: string;
|
|
352
|
+
}): Observable<{
|
|
353
|
+
message: string;
|
|
354
|
+
}>;
|
|
355
|
+
/**
|
|
356
|
+
* Get thread participants
|
|
357
|
+
*/
|
|
358
|
+
getParticipants(id: string): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
359
|
+
/**
|
|
360
|
+
* Archive/unarchive a thread (toggles state)
|
|
361
|
+
*/
|
|
362
|
+
toggleArchiveThread(id: string): Observable<{
|
|
363
|
+
message: string;
|
|
364
|
+
isArchived: boolean;
|
|
365
|
+
}>;
|
|
366
|
+
/**
|
|
367
|
+
* Mark thread as read for current user
|
|
368
|
+
*/
|
|
369
|
+
markThreadAsRead(id: string): Observable<{
|
|
370
|
+
success: boolean;
|
|
371
|
+
message: string;
|
|
372
|
+
}>;
|
|
373
|
+
/**
|
|
374
|
+
* Search message threads by title or description
|
|
375
|
+
*/
|
|
376
|
+
searchMessageThreads(query: string): Observable<PaginatedResponse<MessageThread>>;
|
|
377
|
+
/**
|
|
378
|
+
* Get private threads only
|
|
379
|
+
*/
|
|
380
|
+
getPrivateThreads(): Observable<PaginatedResponse<MessageThread>>;
|
|
381
|
+
/**
|
|
382
|
+
* Get public threads only
|
|
383
|
+
*/
|
|
384
|
+
getPublicThreads(): Observable<PaginatedResponse<MessageThread>>;
|
|
385
|
+
/**
|
|
386
|
+
* Get archived threads
|
|
387
|
+
*/
|
|
388
|
+
getArchivedThreads(): Observable<PaginatedResponse<MessageThread>>;
|
|
389
|
+
/**
|
|
390
|
+
* Get active threads (non-archived)
|
|
391
|
+
*/
|
|
392
|
+
getActiveThreads(): Observable<PaginatedResponse<MessageThread>>;
|
|
393
|
+
/**
|
|
394
|
+
* Get threads created by a specific user
|
|
395
|
+
*/
|
|
396
|
+
getThreadsByCreator(creatorId: number): Observable<PaginatedResponse<MessageThread>>;
|
|
397
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MessageThreadService, never>;
|
|
398
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MessageThreadService>;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
interface MessageQueryParams {
|
|
402
|
+
search?: string;
|
|
403
|
+
thread?: string;
|
|
404
|
+
messageType?: MessageType;
|
|
405
|
+
sender?: number;
|
|
406
|
+
isDeleted?: boolean;
|
|
407
|
+
limit?: number;
|
|
408
|
+
offset?: number;
|
|
409
|
+
ordering?: string;
|
|
410
|
+
}
|
|
411
|
+
declare class MessageService extends BaseApiService {
|
|
412
|
+
/**
|
|
413
|
+
* Get all messages with optional filtering
|
|
414
|
+
*/
|
|
415
|
+
getMessages(params?: MessageQueryParams): Observable<PaginatedResponse<Message>>;
|
|
416
|
+
/**
|
|
417
|
+
* Get a single message by ID
|
|
418
|
+
*/
|
|
419
|
+
getMessage(id: string): Observable<Message>;
|
|
420
|
+
/**
|
|
421
|
+
* Create a new message
|
|
422
|
+
*/
|
|
423
|
+
createMessage(message: MessageCreateRequest): Observable<Message>;
|
|
424
|
+
/**
|
|
425
|
+
* Update an existing message
|
|
426
|
+
*/
|
|
427
|
+
updateMessage(id: string, message: MessageUpdateRequest): Observable<Message>;
|
|
428
|
+
/**
|
|
429
|
+
* Partially update a message
|
|
430
|
+
*/
|
|
431
|
+
patchMessage(id: string, message: Partial<MessageUpdateRequest>): Observable<Message>;
|
|
432
|
+
/**
|
|
433
|
+
* Delete a message (soft delete)
|
|
434
|
+
*/
|
|
435
|
+
deleteMessage(id: string): Observable<Message>;
|
|
436
|
+
/**
|
|
437
|
+
* Get messages in a specific thread
|
|
438
|
+
*/
|
|
439
|
+
getThreadMessages(threadId: string, params?: Omit<MessageQueryParams, 'thread'>): Observable<PaginatedResponse<Message>>;
|
|
440
|
+
/**
|
|
441
|
+
* Search messages by content
|
|
442
|
+
*/
|
|
443
|
+
searchMessages(query: string, threadId?: string): Observable<PaginatedResponse<Message>>;
|
|
444
|
+
/**
|
|
445
|
+
* Get messages by sender
|
|
446
|
+
*/
|
|
447
|
+
getMessagesBySender(senderId: number, threadId?: string): Observable<PaginatedResponse<Message>>;
|
|
448
|
+
/**
|
|
449
|
+
* Get messages by type
|
|
450
|
+
*/
|
|
451
|
+
getMessagesByType(messageType: MessageType, threadId?: string): Observable<PaginatedResponse<Message>>;
|
|
452
|
+
/**
|
|
453
|
+
* Get deleted messages (for moderation)
|
|
454
|
+
*/
|
|
455
|
+
getDeletedMessages(threadId?: string): Observable<PaginatedResponse<Message>>;
|
|
456
|
+
/**
|
|
457
|
+
* Get active messages (non-deleted)
|
|
458
|
+
*/
|
|
459
|
+
getActiveMessages(threadId?: string): Observable<PaginatedResponse<Message>>;
|
|
460
|
+
/**
|
|
461
|
+
* Reply to a message
|
|
462
|
+
*/
|
|
463
|
+
replyToMessage(parentMessageId: string, content: string, threadId: string): Observable<Message>;
|
|
464
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MessageService, never>;
|
|
465
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MessageService>;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
interface ThreadParticipantQueryParams {
|
|
469
|
+
thread?: string;
|
|
470
|
+
isModerator?: boolean;
|
|
471
|
+
notificationsEnabled?: boolean;
|
|
472
|
+
limit?: number;
|
|
473
|
+
offset?: number;
|
|
474
|
+
ordering?: string;
|
|
475
|
+
}
|
|
476
|
+
declare class ThreadParticipantService {
|
|
477
|
+
private http;
|
|
478
|
+
private apiUrl;
|
|
479
|
+
/**
|
|
480
|
+
* Get all thread participants with optional filtering
|
|
481
|
+
*/
|
|
482
|
+
getThreadParticipants(params?: ThreadParticipantQueryParams): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
483
|
+
/**
|
|
484
|
+
* Get a single thread participant by ID
|
|
485
|
+
*/
|
|
486
|
+
getThreadParticipant(id: number): Observable<ThreadParticipant>;
|
|
487
|
+
/**
|
|
488
|
+
* Update thread participant settings
|
|
489
|
+
*/
|
|
490
|
+
updateThreadParticipant(id: number, updates: {
|
|
491
|
+
isModerator?: boolean;
|
|
492
|
+
notificationsEnabled?: boolean;
|
|
493
|
+
}): Observable<ThreadParticipant>;
|
|
494
|
+
/**
|
|
495
|
+
* Update participant's last read timestamp
|
|
496
|
+
*/
|
|
497
|
+
updateLastRead(id: number): Observable<ThreadParticipant>;
|
|
498
|
+
/**
|
|
499
|
+
* Get participants for a specific thread
|
|
500
|
+
*/
|
|
501
|
+
getParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
502
|
+
/**
|
|
503
|
+
* Get moderators for a specific thread
|
|
504
|
+
*/
|
|
505
|
+
getModeratorsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
506
|
+
/**
|
|
507
|
+
* Get non-moderator participants for a specific thread
|
|
508
|
+
*/
|
|
509
|
+
getRegularParticipantsForThread(threadId: string): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
510
|
+
/**
|
|
511
|
+
* Get participants with notifications enabled for a specific thread
|
|
512
|
+
*/
|
|
513
|
+
getNotificationEnabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
514
|
+
/**
|
|
515
|
+
* Get participants with notifications disabled for a specific thread
|
|
516
|
+
*/
|
|
517
|
+
getNotificationDisabledParticipants(threadId: string): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
518
|
+
/**
|
|
519
|
+
* Toggle moderator status for a participant
|
|
520
|
+
*/
|
|
521
|
+
toggleModeratorStatus(id: number): Observable<ThreadParticipant>;
|
|
522
|
+
/**
|
|
523
|
+
* Toggle notifications for a participant
|
|
524
|
+
*/
|
|
525
|
+
toggleNotifications(id: number): Observable<ThreadParticipant>;
|
|
526
|
+
/**
|
|
527
|
+
* Leave a thread (for current user)
|
|
528
|
+
*/
|
|
529
|
+
leaveThread(threadId: string): Observable<{
|
|
530
|
+
success: boolean;
|
|
531
|
+
message: string;
|
|
532
|
+
}>;
|
|
533
|
+
/**
|
|
534
|
+
* Get threads where current user is participant
|
|
535
|
+
*/
|
|
536
|
+
getMyParticipations(): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
537
|
+
/**
|
|
538
|
+
* Get threads where current user is moderator
|
|
539
|
+
*/
|
|
540
|
+
getMyModerations(): Observable<PaginatedResponse<ThreadParticipant>>;
|
|
541
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ThreadParticipantService, never>;
|
|
542
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ThreadParticipantService>;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
export { CupcakeMintChocolate, DeliveryStatus, DeliveryStatusLabels, MessageService, MessageThreadService, MessageType, MessageTypeLabels, NotificationPriority, NotificationPriorityLabels, NotificationService, NotificationType, NotificationTypeLabels, ThreadParticipantService };
|
|
546
|
+
export type { ApiResponse, BaseTimestampedModel, BulkNotificationActionRequest, MarkNotificationReadRequest, Message, MessageCreateRequest, MessageQueryParams, MessageSearchRequest, MessageThread, MessageThreadCreateRequest, MessageThreadQueryParams, MessageThreadUpdateRequest, MessageUpdateRequest, Notification, NotificationCreateRequest, NotificationQueryParams, NotificationUpdateRequest, PaginatedResponse, ThreadParticipant, ThreadParticipantQueryParams, ThreadParticipantRequest, ThreadSearchRequest, UserBasic };
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@noatgnu/cupcake-mint-chocolate",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "An extension for cupcake-core that provides additional api and interfaces for managing notifications and messaging.",
|
|
5
|
+
"author": "Toan Phung",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/noatgnu/cupcake-vanilla-ng"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/noatgnu/cupcake-vanilla-ng#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/noatgnu/cupcake-vanilla-ng/issues"
|
|
14
|
+
},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@angular/common": "^20.1.0",
|
|
17
|
+
"@angular/core": "^20.1.0",
|
|
18
|
+
"rxjs": "~7.8.0"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"tslib": "^2.3.0"
|
|
22
|
+
},
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"module": "fesm2022/noatgnu-cupcake-mint-chocolate.mjs",
|
|
25
|
+
"typings": "index.d.ts",
|
|
26
|
+
"exports": {
|
|
27
|
+
"./package.json": {
|
|
28
|
+
"default": "./package.json"
|
|
29
|
+
},
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./index.d.ts",
|
|
32
|
+
"default": "./fesm2022/noatgnu-cupcake-mint-chocolate.mjs"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|