vintasend-medplum 0.6.0 → 0.6.2
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.
|
@@ -106,8 +106,20 @@ export declare class MedplumNotificationBackend<Config extends BaseNotificationT
|
|
|
106
106
|
filterNotifications(filter: NotificationFilter<Config>, page: number, pageSize: number): Promise<AnyDatabaseNotification<Config>[]>;
|
|
107
107
|
/**
|
|
108
108
|
* Ensure the `_tag` parameter always includes `notification`.
|
|
109
|
+
* Mutates the params record in place.
|
|
109
110
|
*/
|
|
110
111
|
private ensureNotificationTag;
|
|
112
|
+
/**
|
|
113
|
+
* Convert a `Record<string, string>` FHIR search params object into `string[][]` tuples.
|
|
114
|
+
*
|
|
115
|
+
* This is needed because the `_tag` parameter uses comma-separated values internally
|
|
116
|
+
* to accumulate multiple tags (notificationType + contextName + 'notification'), but
|
|
117
|
+
* **FHIR treats comma-separated token values as OR**. To get AND semantics we must
|
|
118
|
+
* repeat the parameter: `_tag=notification&_tag=SMS` instead of `_tag=notification,SMS`.
|
|
119
|
+
*
|
|
120
|
+
* All other parameters are passed through as single key-value pairs.
|
|
121
|
+
*/
|
|
122
|
+
private paramsToSearchTuples;
|
|
111
123
|
/**
|
|
112
124
|
* Recursively build FHIR search parameters from a NotificationFilter tree.
|
|
113
125
|
* Handles field filters, AND, and NOT. OR is handled at the caller level.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"medplum-backend.d.ts","sourceRoot":"","sources":["../src/medplum-backend.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"medplum-backend.d.ts","sourceRoot":"","sources":["../src/medplum-backend.ts"],"names":[],"mappings":"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"}
|
package/dist/medplum-backend.js
CHANGED
|
@@ -391,23 +391,25 @@ export class MedplumNotificationBackend {
|
|
|
391
391
|
}
|
|
392
392
|
}
|
|
393
393
|
async filterAllInAppUnreadNotifications(refenrenceString) {
|
|
394
|
-
const communications = await this.medplum.searchResources('Communication',
|
|
395
|
-
status
|
|
396
|
-
_tag
|
|
397
|
-
|
|
398
|
-
|
|
394
|
+
const communications = await this.medplum.searchResources('Communication', [
|
|
395
|
+
['status', 'completed'],
|
|
396
|
+
['_tag', 'notification'],
|
|
397
|
+
['_tag', 'in-app'],
|
|
398
|
+
['recipient', refenrenceString],
|
|
399
|
+
]);
|
|
399
400
|
return communications
|
|
400
401
|
.map((comm) => this.mapToDatabaseNotification(comm))
|
|
401
402
|
.filter((notif) => 'userId' in notif && !notif.readAt);
|
|
402
403
|
}
|
|
403
404
|
async filterInAppUnreadNotifications(refenrenceString, page, pageSize) {
|
|
404
|
-
const communications = await this.medplum.searchResources('Communication',
|
|
405
|
-
status
|
|
406
|
-
_tag
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
405
|
+
const communications = await this.medplum.searchResources('Communication', [
|
|
406
|
+
['status', 'completed'],
|
|
407
|
+
['_tag', 'notification'],
|
|
408
|
+
['_tag', 'in-app'],
|
|
409
|
+
['recipient', refenrenceString],
|
|
410
|
+
['_count', pageSize.toString()],
|
|
411
|
+
['_offset', (page * pageSize).toString()],
|
|
412
|
+
]);
|
|
411
413
|
return communications
|
|
412
414
|
.map((comm) => this.mapToDatabaseNotification(comm))
|
|
413
415
|
.filter((notif) => 'userId' in notif && !notif.readAt);
|
|
@@ -538,17 +540,19 @@ export class MedplumNotificationBackend {
|
|
|
538
540
|
return null;
|
|
539
541
|
}
|
|
540
542
|
async getAllOneOffNotifications() {
|
|
541
|
-
const communications = await this.medplum.searchResources('Communication',
|
|
542
|
-
_tag
|
|
543
|
-
|
|
543
|
+
const communications = await this.medplum.searchResources('Communication', [
|
|
544
|
+
['_tag', 'notification'],
|
|
545
|
+
['_tag', 'one-off'],
|
|
546
|
+
]);
|
|
544
547
|
return communications.map((comm) => this.mapToDatabaseNotification(comm));
|
|
545
548
|
}
|
|
546
549
|
async getOneOffNotifications(page, pageSize) {
|
|
547
|
-
const communications = await this.medplum.searchResources('Communication',
|
|
548
|
-
_tag
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
550
|
+
const communications = await this.medplum.searchResources('Communication', [
|
|
551
|
+
['_tag', 'notification'],
|
|
552
|
+
['_tag', 'one-off'],
|
|
553
|
+
['_count', pageSize.toString()],
|
|
554
|
+
['_offset', (page * pageSize).toString()],
|
|
555
|
+
]);
|
|
552
556
|
return communications.map((comm) => this.mapToDatabaseNotification(comm));
|
|
553
557
|
}
|
|
554
558
|
/* Notification filtering methods */
|
|
@@ -578,14 +582,17 @@ export class MedplumNotificationBackend {
|
|
|
578
582
|
throw new Error('OR filters are not supported by MedplumNotificationBackend (FHIR search does not support OR logic).');
|
|
579
583
|
}
|
|
580
584
|
const searchParams = this.buildFhirSearchParams(filter);
|
|
581
|
-
this.ensureNotificationTag(searchParams);
|
|
582
585
|
searchParams._count = pageSize.toString();
|
|
583
586
|
searchParams._offset = (page * pageSize).toString();
|
|
584
|
-
|
|
587
|
+
// Convert to string[][] so that _tag values become repeated AND parameters
|
|
588
|
+
// (comma-separated _tag in a single param means OR in FHIR, which is wrong here)
|
|
589
|
+
const searchTuples = this.paramsToSearchTuples(searchParams);
|
|
590
|
+
const communications = await this.medplum.searchResources('Communication', searchTuples);
|
|
585
591
|
return communications.map((comm) => this.mapToDatabaseNotification(comm));
|
|
586
592
|
}
|
|
587
593
|
/**
|
|
588
594
|
* Ensure the `_tag` parameter always includes `notification`.
|
|
595
|
+
* Mutates the params record in place.
|
|
589
596
|
*/
|
|
590
597
|
ensureNotificationTag(params) {
|
|
591
598
|
if (params._tag) {
|
|
@@ -597,6 +604,32 @@ export class MedplumNotificationBackend {
|
|
|
597
604
|
params._tag = 'notification';
|
|
598
605
|
}
|
|
599
606
|
}
|
|
607
|
+
/**
|
|
608
|
+
* Convert a `Record<string, string>` FHIR search params object into `string[][]` tuples.
|
|
609
|
+
*
|
|
610
|
+
* This is needed because the `_tag` parameter uses comma-separated values internally
|
|
611
|
+
* to accumulate multiple tags (notificationType + contextName + 'notification'), but
|
|
612
|
+
* **FHIR treats comma-separated token values as OR**. To get AND semantics we must
|
|
613
|
+
* repeat the parameter: `_tag=notification&_tag=SMS` instead of `_tag=notification,SMS`.
|
|
614
|
+
*
|
|
615
|
+
* All other parameters are passed through as single key-value pairs.
|
|
616
|
+
*/
|
|
617
|
+
paramsToSearchTuples(params) {
|
|
618
|
+
this.ensureNotificationTag(params);
|
|
619
|
+
const tuples = [];
|
|
620
|
+
for (const [key, value] of Object.entries(params)) {
|
|
621
|
+
if (key === '_tag') {
|
|
622
|
+
// Split into separate entries for AND semantics
|
|
623
|
+
for (const tag of value.split(',')) {
|
|
624
|
+
tuples.push(['_tag', tag.trim()]);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
tuples.push([key, value]);
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
return tuples;
|
|
632
|
+
}
|
|
600
633
|
/**
|
|
601
634
|
* Recursively build FHIR search parameters from a NotificationFilter tree.
|
|
602
635
|
* Handles field filters, AND, and NOT. OR is handled at the caller level.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vintasend-medplum",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@medplum/fhirtypes": "^5.0.10",
|
|
26
26
|
"pdfmake": "^0.2.23",
|
|
27
27
|
"pug": "^3.0.3",
|
|
28
|
-
"vintasend": "^0.6.
|
|
28
|
+
"vintasend": "^0.6.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@medplum/definitions": "^5.0.10",
|