@openmrs/ngx-formentry 5.0.1-pre.339 → 5.0.1-pre.345

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.
@@ -24,6 +24,7 @@ export class DiagnosisValueAdapter {
24
24
  _createDiagnosesPayload(diagnosisNodes, existingDiagnoses) {
25
25
  const payload = [];
26
26
  let deletedDiagnoses = [];
27
+ // Add new diagnosis to payload
27
28
  diagnosisNodes?.forEach((node) => {
28
29
  if (node instanceof ArrayNode) {
29
30
  node.control.value
@@ -31,8 +32,12 @@ export class DiagnosisValueAdapter {
31
32
  .forEach((value) => {
32
33
  // Create Payload
33
34
  const payloadDiagnosis = this._createPayloadDiagnosis(value[node.question.key], node.question.extras);
34
- // Validate if is new value
35
- payload.push(payloadDiagnosis);
35
+ const isNewDiagnosis = existingDiagnoses.every((d) => d.diagnosis.coded.uuid !== value[node.question.key] ||
36
+ d.certainty !== 'CONFIRMED' ||
37
+ d.rank !== node.question.extras.questionOptions.rank);
38
+ if (isNewDiagnosis) {
39
+ payload.push(payloadDiagnosis);
40
+ }
36
41
  });
37
42
  }
38
43
  if (node instanceof ArrayNode) {
@@ -86,19 +91,26 @@ export class DiagnosisValueAdapter {
86
91
  };
87
92
  return diagnosis;
88
93
  }
89
- _getDeletedDiagnoses(payloadDiagnoses, existingDiagnoses) {
94
+ _getDeletedDiagnoses(diagnosisNodes, existingDiagnoses) {
90
95
  return existingDiagnoses
91
- ?.filter((e) => {
92
- return !payloadDiagnoses.find((p) => {
93
- let isSame = !e.voided && p.diagnosis.coded === e.diagnosis.coded.uuid;
94
- return isSame;
96
+ .filter((existingDiagnosis) => {
97
+ return !diagnosisNodes?.some((node) => {
98
+ if (node instanceof ArrayNode) {
99
+ return node.control.value.some((value) => {
100
+ return (value[node.question.key] ===
101
+ existingDiagnosis.diagnosis.coded.uuid &&
102
+ existingDiagnosis.rank ===
103
+ node.question.extras.questionOptions.rank &&
104
+ existingDiagnosis.certainty === 'CONFIRMED');
105
+ });
106
+ }
107
+ return false;
95
108
  });
96
109
  })
97
- .map((d) => {
98
- let diagnosisPayload = this._convert(d);
99
- diagnosisPayload.voided = true;
100
- return diagnosisPayload;
101
- });
110
+ .map((existingDiagnosis) => ({
111
+ uuid: existingDiagnosis.uuid,
112
+ voided: true
113
+ }));
102
114
  }
103
115
  _updatedOldDiagnoses(payloadDiagnoses, existingDiagnoses) {
104
116
  payloadDiagnoses.forEach((p) => {
@@ -214,7 +226,7 @@ export class DiagnosisValueAdapter {
214
226
  hasDiagnosisNodeChanged(nodeAsGroup) {
215
227
  const childrenNodes = Object.values(nodeAsGroup.children);
216
228
  for (let childNode of childrenNodes) {
217
- if (childNode.control.value !== childNode.initialValue) {
229
+ if (childNode.control.value !== nodeAsGroup.initialValue?.primaryDiagnosisId) {
218
230
  return true;
219
231
  }
220
232
  }
@@ -226,4 +238,4 @@ DiagnosisValueAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0"
226
238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagnosisValueAdapter, decorators: [{
227
239
  type: Injectable
228
240
  }] });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc2lzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2RpYWdub3Npcy5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQzs7QUFHM0UsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVFLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQWdSekI7SUE5UUMsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFVLEVBQUUsU0FBMkI7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixD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UyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzlCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3JDLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVE7YUFDdkM7WUFDRCxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7WUFDOUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLFdBQXNCO1FBQzVDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FFdkQsQ0FBQztRQUVGLEtBQUssSUFBSSxTQUFTLElBQUksYUFBYSxFQUFFO1lBQ25DLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDdEQsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzttSEFoUlUscUJBQXFCO3VIQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtJztcbmltcG9ydCB7IFZhbHVlQWRhcHRlciB9IGZyb20gJy4vdmFsdWUuYWRhcHRlcic7XG5pbXBvcnQgeyBBcnJheU5vZGUsIEdyb3VwTm9kZSwgTGVhZk5vZGUgfSBmcm9tICcuLi9mb3JtLWZhY3RvcnkvZm9ybS1ub2RlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERpYWdub3Npc1ZhbHVlQWRhcHRlciBpbXBsZW1lbnRzIFZhbHVlQWRhcHRlciB7XG4gIGZvcm1EaWFnbm9zaXNOb2RlcyA9IFtdO1xuXG4gIGdlbmVyYXRlRm9ybVBheWxvYWQoZm9ybTogRm9ybSkge1xuICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzID0gW107XG4gICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybS5yb290Tm9kZSk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURpYWdub3Nlc1BheWxvYWQoXG4gICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2RlcyxcbiAgICAgIGZvcm0uZXhpc3RpbmdEaWFnbm9zZXNcbiAgICApO1xuICB9XG5cbiAgcG9wdWxhdGVGb3JtKGZvcm06IEZvcm0sIGRpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPikge1xuICAgIGZvcm0uZXhpc3RpbmdEaWFnbm9zZXMgPSBkaWFnbm9zZXM/LmZpbHRlcigoZCkgPT4ge1xuICAgICAgcmV0dXJuICFkLnZvaWRlZDtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2RlcyA9IFtdO1xuICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm0ucm9vdE5vZGUpO1xuICAgIHRoaXMuX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyxcbiAgICAgIDFcbiAgICApO1xuICAgIHRoaXMuX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyxcbiAgICAgIDJcbiAgICApO1xuICAgIHRoaXMuc2V0RGlhZ25vc2lzR3JvdXBWYWx1ZShcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3Nlc1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEaWFnbm9zZXNQYXlsb2FkKGRpYWdub3Npc05vZGVzLCBleGlzdGluZ0RpYWdub3Nlcykge1xuICAgIGNvbnN0IHBheWxvYWQ6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+ID0gW107XG4gICAgbGV0IGRlbGV0ZWREaWFnbm9zZXM6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+ID0gW107XG4gICAgZGlhZ25vc2lzTm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgICAgIG5vZGUuY29udHJvbC52YWx1ZVxuICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHZbbm9kZS5xdWVzdGlvbi5rZXldKVxuICAgICAgICAgIC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIFBheWxvYWRcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWREaWFnbm9zaXMgPSB0aGlzLl9jcmVhdGVQYXlsb2FkRGlhZ25vc2lzKFxuICAgICAgICAgICAgICB2YWx1ZVtub2RlLnF1ZXN0aW9uLmtleV0sXG4gICAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgaWYgaXMgbmV3IHZhbHVlXG4gICAgICAgICAgICBwYXlsb2FkLnB1c2gocGF5bG9hZERpYWdub3Npcyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwTm9kZUFycmF5ID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZ3JvdXBOb2RlQXJyYXkuZm9yRWFjaCgoZ3JvdXBOb2RlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzRGlhZ25vc2lzTm9kZUNoYW5nZWQoZ3JvdXBOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgZGlhZ25vc2lzUGF5bG9hZDogUGFydGlhbDxEaWFnbm9zaXNQYXlsb2FkPiA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhncm91cE5vZGUuY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkTm9kZTogTGVhZk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGRpYWdub3Npc1R5cGVcbiAgICAgICAgICAgICAgfSA9IGNoaWxkTm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGRpYWdub3Npc1R5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdyYW5rJzpcbiAgICAgICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQucmFuayA9XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGNoaWxkTm9kZS5jb250cm9sLnZhbHVlLCAxMCkgPz8gMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NlcnRhaW50eSc6XG4gICAgICAgICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLmNlcnRhaW50eSA9IGNoaWxkTm9kZS5jb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGlhZ25vc2lzJzpcbiAgICAgICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQuZGlhZ25vc2lzID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlZDogY2hpbGROb2RlLmNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eShkaWFnbm9zaXNQYXlsb2FkKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncm91cE5vZGUucXVlc3Rpb24uZGVmYXVsdFZhbHVlPy51dWlkKSB7XG4gICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQudXVpZCA9IGdyb3VwTm9kZS5xdWVzdGlvbi5kZWZhdWx0VmFsdWUudXVpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQudm9pZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBwYXlsb2FkLnB1c2goZGlhZ25vc2lzUGF5bG9hZCBhcyBEaWFnbm9zaXNQYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3VwZGF0ZWRPbGREaWFnbm9zZXMocGF5bG9hZCwgZXhpc3RpbmdEaWFnbm9zZXMpO1xuICAgIGRlbGV0ZWREaWFnbm9zZXMgPSB0aGlzLl9nZXREZWxldGVkRGlhZ25vc2VzKHBheWxvYWQsIGV4aXN0aW5nRGlhZ25vc2VzKTtcbiAgICByZXR1cm4gcGF5bG9hZC5jb25jYXQoZGVsZXRlZERpYWdub3Nlcyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVQYXlsb2FkRGlhZ25vc2lzKGNvZGVkVXVpZCwgcXVlc3Rpb25FeHRyYXMpOiBEaWFnbm9zaXNQYXlsb2FkIHtcbiAgICBjb25zdCBkaWFnbm9zaXM6IERpYWdub3Npc1BheWxvYWQgPSB7XG4gICAgICBkaWFnbm9zaXM6IHtcbiAgICAgICAgY29kZWQ6IGNvZGVkVXVpZFxuICAgICAgfSxcbiAgICAgIGNlcnRhaW50eTogJ0NPTkZJUk1FRCcsXG4gICAgICByYW5rOiBxdWVzdGlvbkV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmFuayxcbiAgICAgIHZvaWRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRpYWdub3NpcztcbiAgfVxuXG4gIHByaXZhdGUgX2dldERlbGV0ZWREaWFnbm9zZXMoXG4gICAgcGF5bG9hZERpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4sXG4gICAgZXhpc3RpbmdEaWFnbm9zZXM6IEFycmF5PERpYWdub3Npcz5cbiAgKTogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4ge1xuICAgIHJldHVybiBleGlzdGluZ0RpYWdub3Nlc1xuICAgICAgPy5maWx0ZXIoKGUpID0+IHtcbiAgICAgICAgcmV0dXJuICFwYXlsb2FkRGlhZ25vc2VzLmZpbmQoKHApID0+IHtcbiAgICAgICAgICBsZXQgaXNTYW1lID1cbiAgICAgICAgICAgICFlLnZvaWRlZCAmJiBwLmRpYWdub3Npcy5jb2RlZCA9PT0gZS5kaWFnbm9zaXMuY29kZWQudXVpZDtcbiAgICAgICAgICByZXR1cm4gaXNTYW1lO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAubWFwKChkKSA9PiB7XG4gICAgICAgIGxldCBkaWFnbm9zaXNQYXlsb2FkID0gdGhpcy5fY29udmVydChkKTtcbiAgICAgICAgZGlhZ25vc2lzUGF5bG9hZC52b2lkZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZGlhZ25vc2lzUGF5bG9hZDtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlZE9sZERpYWdub3NlcyhcbiAgICBwYXlsb2FkRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPixcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPlxuICApIHtcbiAgICBwYXlsb2FkRGlhZ25vc2VzLmZvckVhY2goKHApID0+IHtcbiAgICAgIGV4aXN0aW5nRGlhZ25vc2VzPy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGxldCBpc1NhbWUgPSAhZS52b2lkZWQgJiYgcC5kaWFnbm9zaXMuY29kZWQgPT09IGUuZGlhZ25vc2lzLmNvZGVkLnV1aWQ7XG4gICAgICAgIHAudXVpZCA9IGlzU2FtZSA/IGUudXVpZCA6IG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICBmb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgZXhpc3RpbmdEaWFnbm9zZXM6IEFycmF5PERpYWdub3Npcz4sXG4gICAgcmFuazogbnVtYmVyXG4gICkge1xuICAgIGZvcm1EaWFnbm9zaXNOb2Rlc1xuICAgICAgPy5maWx0ZXIoKG5vZGUpID0+IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yYW5rID09IHJhbmspXG4gICAgICAuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBub2RlWydpbml0aWFsVmFsdWUnXSA9IGV4aXN0aW5nRGlhZ25vc2VzO1xuICAgICAgICBleGlzdGluZ0RpYWdub3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQucmFuayA9PSByYW5rKVxuICAgICAgICAgIC5mb3JFYWNoKChkaWFnbm9zaXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBub2RlLmNyZWF0ZUNoaWxkTm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgIHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSA9IGRpYWdub3Npcy5kaWFnbm9zaXMuY29kZWQudXVpZDtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5vZGUuY2hpbGRyZW5baW5kZXhdO1xuICAgICAgICAgICAgY2hpbGROb2RlLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgY2hpbGROb2RlWydpbml0aWFsVmFsdWUnXSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERpYWdub3Npc0dyb3VwVmFsdWUoXG4gICAgZm9ybURpYWdub3Npc05vZGVzLFxuICAgIGV4aXN0aW5nRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+XG4gICkge1xuICAgIGZvciAoY29uc3QgZGlhZ25vc2lzIG9mIGV4aXN0aW5nRGlhZ25vc2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGRpYWdub3Npc05vZGUgb2YgZm9ybURpYWdub3Npc05vZGVzKSB7XG4gICAgICAgIGlmIChkaWFnbm9zaXNOb2RlLnF1ZXN0aW9uLmV4dHJhcy50eXBlICE9PSAnZGlhZ25vc2lzR3JvdXAnKSBicmVhaztcbiAgICAgICAgY29uc3QgZ3JvdXBOb2RlID0gZGlhZ25vc2lzTm9kZS5jcmVhdGVDaGlsZE5vZGUoKSBhcyBHcm91cE5vZGU7XG5cbiAgICAgICAgZ3JvdXBOb2RlLnF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSA9IHsgdXVpZDogZGlhZ25vc2lzLnV1aWQgfTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKGdyb3VwTm9kZS5jaGlsZHJlbikgYXMgTGVhZk5vZGVbXSkge1xuICAgICAgICAgIGNvbnN0IGRpYWdub3Npc1R5cGUgPVxuICAgICAgICAgICAgY2hpbGQucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5kaWFnbm9zaXNUeXBlO1xuICAgICAgICAgIHN3aXRjaCAoZGlhZ25vc2lzVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZGlhZ25vc2lzJzpcbiAgICAgICAgICAgICAgY2hpbGQuaW5pdGlhbFZhbHVlID0gZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZD8udXVpZDtcbiAgICAgICAgICAgICAgY2hpbGQuY29udHJvbC5zZXRWYWx1ZShkaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkPy51dWlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyYW5rJzpcbiAgICAgICAgICAgICAgY2hpbGQuaW5pdGlhbFZhbHVlID0gZGlhZ25vc2lzLnJhbms7XG4gICAgICAgICAgICAgIGNoaWxkLmNvbnRyb2wuc2V0VmFsdWUoZGlhZ25vc2lzLnJhbmspO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlcnRhaW50eSc6XG4gICAgICAgICAgICAgIGNoaWxkLmluaXRpYWxWYWx1ZSA9IGRpYWdub3Npcy5jZXJ0YWludHk7XG4gICAgICAgICAgICAgIGNoaWxkLmNvbnRyb2wuc2V0VmFsdWUoZGlhZ25vc2lzLmNlcnRhaW50eSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlKSB7XG4gICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgc3dpdGNoIChmb3JtTm9kZS5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGFnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3JlcGVhdGluZyc6XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBmb3JtTm9kZTtcbiAgICAgICAgICAgICAgICAgIC8vIENvbmRpdGlvbiBmb3IgZGlhZ25vc2lzR3JvdXAgbm9kZXNcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBpbiBmb3JtTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkV4dHJhcyA9XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybU5vZGUuY2hpbGRyZW5bbm9kZV0ucXVlc3Rpb24uZXh0cmFzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25FeHRyYXMudHlwZSA9PT0gJ2RpYWdub3Npc0dyb3VwJykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5Tm9kZSA9IGZvcm1Ob2RlLmNoaWxkcmVuW25vZGVdIGFzIEFycmF5Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2Rlcy5wdXNoKGFycmF5Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvbmRpdGlvbiBmb3IgZGlhZ25vc2lzIG5vZGVzXG4gICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZDogTGVhZk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBxdWVzdGlvbiwgbm9kZUluZGV4IH0gPSBjaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmV4dHJhcz8udHlwZSA9PT0gJ2RpYWdub3NpcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICh4KSA9PiB4Lm5vZGVJbmRleCA9PT0gbm9kZUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY29udmVydChkaWFnbm9zaXM6IERpYWdub3Npcyk6IERpYWdub3Npc1BheWxvYWQge1xuICAgIHJldHVybiB7XG4gICAgICB1dWlkOiBkaWFnbm9zaXMudXVpZCxcbiAgICAgIGVuY291bnRlcjogZGlhZ25vc2lzLmVuY291bnRlcixcbiAgICAgIHBhdGllbnQ6IGRpYWdub3Npcy5wYXRpZW50LFxuICAgICAgZGlhZ25vc2lzOiB7XG4gICAgICAgIGNvZGVkOiBkaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkLnV1aWQsXG4gICAgICAgIG5vbkNvZGVkOiBkaWFnbm9zaXMuZGlhZ25vc2lzLm5vbkNvZGVkXG4gICAgICB9LFxuICAgICAgY2VydGFpbnR5OiBkaWFnbm9zaXMuY2VydGFpbnR5LFxuICAgICAgcmFuazogZGlhZ25vc2lzLnJhbmssXG4gICAgICB2b2lkZWQ6IGRpYWdub3Npcy52b2lkZWRcbiAgICB9O1xuICB9XG5cbiAgaGFzRGlhZ25vc2lzTm9kZUNoYW5nZWQobm9kZUFzR3JvdXA6IEdyb3VwTm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaWxkcmVuTm9kZXMgPSBPYmplY3QudmFsdWVzKG5vZGVBc0dyb3VwLmNoaWxkcmVuKSBhcyBBcnJheTxcbiAgICAgIExlYWZOb2RlXG4gICAgPjtcblxuICAgIGZvciAobGV0IGNoaWxkTm9kZSBvZiBjaGlsZHJlbk5vZGVzKSB7XG4gICAgICBpZiAoY2hpbGROb2RlLmNvbnRyb2wudmFsdWUgIT09IGNoaWxkTm9kZS5pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc2lzIHtcbiAgdXVpZD86IHN0cmluZztcbiAgZGlzcGxheT86IHN0cmluZztcbiAgZW5jb3VudGVyPzogc3RyaW5nO1xuICBwYXRpZW50Pzogc3RyaW5nO1xuICBkaWFnbm9zaXM6IHtcbiAgICBjb2RlZD86IHtcbiAgICAgIHV1aWQ6IHN0cmluZztcbiAgICAgIGRpc3BsYXk/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBub25Db2RlZD86IHN0cmluZztcbiAgfTtcbiAgY2VydGFpbnR5OiAnQ09ORklSTUVEJyB8ICdQUk9WSVNJT05BTCc7XG4gIHJhbms6IG51bWJlcjtcbiAgdm9pZGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zaXNQYXlsb2FkIHtcbiAgdXVpZD86IHN0cmluZztcbiAgZW5jb3VudGVyPzogc3RyaW5nO1xuICBwYXRpZW50Pzogc3RyaW5nO1xuICBkaWFnbm9zaXM6IHtcbiAgICBjb2RlZD86IHN0cmluZztcbiAgICBub25Db2RlZD86IHN0cmluZztcbiAgfTtcbiAgY2VydGFpbnR5OiAnQ09ORklSTUVEJyB8ICdQUk9WSVNJT05BTCc7XG4gIHJhbms6IG51bWJlcjtcbiAgdm9pZGVkPzogYm9vbGVhbjtcbn1cbiJdfQ==
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc2lzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2RpYWdub3Npcy5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQzs7QUFHM0UsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVFLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQXFTekI7SUFuU0MsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFVLEVBQUUsU0FBMkI7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixD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QUFDLEtBQUssS0FBSyxXQUFXLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUN4RTtnQkFDQSxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O21IQXJTVSxxQkFBcUI7dUhBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0nO1xuaW1wb3J0IHsgVmFsdWVBZGFwdGVyIH0gZnJvbSAnLi92YWx1ZS5hZGFwdGVyJztcbmltcG9ydCB7IEFycmF5Tm9kZSwgR3JvdXBOb2RlLCBMZWFmTm9kZSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtLW5vZGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGlhZ25vc2lzVmFsdWVBZGFwdGVyIGltcGxlbWVudHMgVmFsdWVBZGFwdGVyIHtcbiAgZm9ybURpYWdub3Npc05vZGVzID0gW107XG5cbiAgZ2VuZXJhdGVGb3JtUGF5bG9hZChmb3JtOiBGb3JtKSB7XG4gICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMgPSBbXTtcbiAgICB0aGlzLl9maW5kRGlhZ25vc2lzUXVlc3Rpb25Ob2Rlcyhmb3JtLnJvb3ROb2RlKTtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGlhZ25vc2VzUGF5bG9hZChcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3Nlc1xuICAgICk7XG4gIH1cblxuICBwb3B1bGF0ZUZvcm0oZm9ybTogRm9ybSwgZGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+KSB7XG4gICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyA9IGRpYWdub3Nlcz8uZmlsdGVyKChkKSA9PiB7XG4gICAgICByZXR1cm4gIWQudm9pZGVkO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzID0gW107XG4gICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybS5yb290Tm9kZSk7XG4gICAgdGhpcy5fc2V0RGlhZ25vc2VzVmFsdWVzKFxuICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgICBmb3JtLmV4aXN0aW5nRGlhZ25vc2VzLFxuICAgICAgMVxuICAgICk7XG4gICAgdGhpcy5fc2V0RGlhZ25vc2VzVmFsdWVzKFxuICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgICBmb3JtLmV4aXN0aW5nRGlhZ25vc2VzLFxuICAgICAgMlxuICAgICk7XG4gICAgdGhpcy5zZXREaWFnbm9zaXNHcm91cFZhbHVlKFxuICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgICBmb3JtLmV4aXN0aW5nRGlhZ25vc2VzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURpYWdub3Nlc1BheWxvYWQoZGlhZ25vc2lzTm9kZXMsIGV4aXN0aW5nRGlhZ25vc2VzKSB7XG4gICAgY29uc3QgcGF5bG9hZDogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4gPSBbXTtcbiAgICBsZXQgZGVsZXRlZERpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4gPSBbXTtcblxuICAgIC8vIEFkZCBuZXcgZGlhZ25vc2lzIHRvIHBheWxvYWRcbiAgICBkaWFnbm9zaXNOb2Rlcz8uZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICAgICAgbm9kZS5jb250cm9sLnZhbHVlXG4gICAgICAgICAgLmZpbHRlcigodikgPT4gdltub2RlLnF1ZXN0aW9uLmtleV0pXG4gICAgICAgICAgLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgUGF5bG9hZFxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZERpYWdub3NpcyA9IHRoaXMuX2NyZWF0ZVBheWxvYWREaWFnbm9zaXMoXG4gICAgICAgICAgICAgIHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSxcbiAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTmV3RGlhZ25vc2lzID0gZXhpc3RpbmdEaWFnbm9zZXMuZXZlcnkoXG4gICAgICAgICAgICAgIChkKSA9PlxuICAgICAgICAgICAgICAgIGQuZGlhZ25vc2lzLmNvZGVkLnV1aWQgIT09IHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSB8fFxuICAgICAgICAgICAgICAgIGQuY2VydGFpbnR5ICE9PSAnQ09ORklSTUVEJyB8fFxuICAgICAgICAgICAgICAgIGQucmFuayAhPT0gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJhbmtcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpc05ld0RpYWdub3Npcykge1xuICAgICAgICAgICAgICBwYXlsb2FkLnB1c2gocGF5bG9hZERpYWdub3Npcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwTm9kZUFycmF5ID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZ3JvdXBOb2RlQXJyYXkuZm9yRWFjaCgoZ3JvdXBOb2RlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzRGlhZ25vc2lzTm9kZUNoYW5nZWQoZ3JvdXBOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgZGlhZ25vc2lzUGF5bG9hZDogUGFydGlhbDxEaWFnbm9zaXNQYXlsb2FkPiA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhncm91cE5vZGUuY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkTm9kZTogTGVhZk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGRpYWdub3Npc1R5cGVcbiAgICAgICAgICAgICAgfSA9IGNoaWxkTm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGRpYWdub3Npc1R5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdyYW5rJzpcbiAgICAgICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQucmFuayA9XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGNoaWxkTm9kZS5jb250cm9sLnZhbHVlLCAxMCkgPz8gMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NlcnRhaW50eSc6XG4gICAgICAgICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLmNlcnRhaW50eSA9IGNoaWxkTm9kZS5jb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGlhZ25vc2lzJzpcbiAgICAgICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQuZGlhZ25vc2lzID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlZDogY2hpbGROb2RlLmNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eShkaWFnbm9zaXNQYXlsb2FkKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncm91cE5vZGUucXVlc3Rpb24uZGVmYXVsdFZhbHVlPy51dWlkKSB7XG4gICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQudXVpZCA9IGdyb3VwTm9kZS5xdWVzdGlvbi5kZWZhdWx0VmFsdWUudXVpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQudm9pZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBwYXlsb2FkLnB1c2goZGlhZ25vc2lzUGF5bG9hZCBhcyBEaWFnbm9zaXNQYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3VwZGF0ZWRPbGREaWFnbm9zZXMocGF5bG9hZCwgZXhpc3RpbmdEaWFnbm9zZXMpO1xuICAgIGRlbGV0ZWREaWFnbm9zZXMgPSB0aGlzLl9nZXREZWxldGVkRGlhZ25vc2VzKHBheWxvYWQsIGV4aXN0aW5nRGlhZ25vc2VzKTtcbiAgICByZXR1cm4gcGF5bG9hZC5jb25jYXQoZGVsZXRlZERpYWdub3Nlcyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVQYXlsb2FkRGlhZ25vc2lzKGNvZGVkVXVpZCwgcXVlc3Rpb25FeHRyYXMpOiBEaWFnbm9zaXNQYXlsb2FkIHtcbiAgICBjb25zdCBkaWFnbm9zaXM6IERpYWdub3Npc1BheWxvYWQgPSB7XG4gICAgICBkaWFnbm9zaXM6IHtcbiAgICAgICAgY29kZWQ6IGNvZGVkVXVpZFxuICAgICAgfSxcbiAgICAgIGNlcnRhaW50eTogJ0NPTkZJUk1FRCcsXG4gICAgICByYW5rOiBxdWVzdGlvbkV4dHJhcy5xdWVzdGlvbk9wdGlvbnMucmFuayxcbiAgICAgIHZvaWRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRpYWdub3NpcztcbiAgfVxuXG4gIHByaXZhdGUgX2dldERlbGV0ZWREaWFnbm9zZXMoXG4gICAgZGlhZ25vc2lzTm9kZXM6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+LFxuICAgIGV4aXN0aW5nRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+XG4gICk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiBleGlzdGluZ0RpYWdub3Nlc1xuICAgICAgLmZpbHRlcigoZXhpc3RpbmdEaWFnbm9zaXMpID0+IHtcbiAgICAgICAgcmV0dXJuICFkaWFnbm9zaXNOb2Rlcz8uc29tZSgobm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jb250cm9sLnZhbHVlLnNvbWUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdmFsdWVbbm9kZS5xdWVzdGlvbi5rZXldID09PVxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdEaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkLnV1aWQgJiZcbiAgICAgICAgICAgICAgICBleGlzdGluZ0RpYWdub3Npcy5yYW5rID09PVxuICAgICAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJhbmsgJiZcbiAgICAgICAgICAgICAgICBleGlzdGluZ0RpYWdub3Npcy5jZXJ0YWludHkgPT09ICdDT05GSVJNRUQnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAubWFwKChleGlzdGluZ0RpYWdub3NpcykgPT4gKHtcbiAgICAgICAgdXVpZDogZXhpc3RpbmdEaWFnbm9zaXMudXVpZCxcbiAgICAgICAgdm9pZGVkOiB0cnVlXG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVkT2xkRGlhZ25vc2VzKFxuICAgIHBheWxvYWREaWFnbm9zZXM6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+LFxuICAgIGV4aXN0aW5nRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+XG4gICkge1xuICAgIHBheWxvYWREaWFnbm9zZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgZXhpc3RpbmdEaWFnbm9zZXM/LmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgbGV0IGlzU2FtZSA9ICFlLnZvaWRlZCAmJiBwLmRpYWdub3Npcy5jb2RlZCA9PT0gZS5kaWFnbm9zaXMuY29kZWQudXVpZDtcbiAgICAgICAgcC51dWlkID0gaXNTYW1lID8gZS51dWlkIDogbnVsbDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGlhZ25vc2VzVmFsdWVzKFxuICAgIGZvcm1EaWFnbm9zaXNOb2RlcyxcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPixcbiAgICByYW5rOiBudW1iZXJcbiAgKSB7XG4gICAgZm9ybURpYWdub3Npc05vZGVzXG4gICAgICA/LmZpbHRlcigobm9kZSkgPT4gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJhbmsgPT0gcmFuaylcbiAgICAgIC5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIG5vZGVbJ2luaXRpYWxWYWx1ZSddID0gZXhpc3RpbmdEaWFnbm9zZXM7XG4gICAgICAgIGV4aXN0aW5nRGlhZ25vc2VzXG4gICAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5yYW5rID09IHJhbmspXG4gICAgICAgICAgLmZvckVhY2goKGRpYWdub3NpcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIG5vZGUuY3JlYXRlQ2hpbGROb2RlKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgdmFsdWVbbm9kZS5xdWVzdGlvbi5rZXldID0gZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZC51dWlkO1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbm9kZS5jaGlsZHJlbltpbmRleF07XG4gICAgICAgICAgICBjaGlsZE5vZGUuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBjaGlsZE5vZGVbJ2luaXRpYWxWYWx1ZSddID0gdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlhZ25vc2lzR3JvdXBWYWx1ZShcbiAgICBmb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgZXhpc3RpbmdEaWFnbm9zZXM6IEFycmF5PERpYWdub3Npcz5cbiAgKSB7XG4gICAgZm9yIChjb25zdCBkaWFnbm9zaXMgb2YgZXhpc3RpbmdEaWFnbm9zZXMpIHtcbiAgICAgIGZvciAoY29uc3QgZGlhZ25vc2lzTm9kZSBvZiBmb3JtRGlhZ25vc2lzTm9kZXMpIHtcbiAgICAgICAgaWYgKGRpYWdub3Npc05vZGUucXVlc3Rpb24uZXh0cmFzLnR5cGUgIT09ICdkaWFnbm9zaXNHcm91cCcpIGJyZWFrO1xuICAgICAgICBjb25zdCBncm91cE5vZGUgPSBkaWFnbm9zaXNOb2RlLmNyZWF0ZUNoaWxkTm9kZSgpIGFzIEdyb3VwTm9kZTtcblxuICAgICAgICBncm91cE5vZGUucXVlc3Rpb24uZGVmYXVsdFZhbHVlID0geyB1dWlkOiBkaWFnbm9zaXMudXVpZCB9O1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXMoZ3JvdXBOb2RlLmNoaWxkcmVuKSBhcyBMZWFmTm9kZVtdKSB7XG4gICAgICAgICAgY29uc3QgZGlhZ25vc2lzVHlwZSA9XG4gICAgICAgICAgICBjaGlsZC5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLmRpYWdub3Npc1R5cGU7XG4gICAgICAgICAgc3dpdGNoIChkaWFnbm9zaXNUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdkaWFnbm9zaXMnOlxuICAgICAgICAgICAgICBjaGlsZC5pbml0aWFsVmFsdWUgPSBkaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkPy51dWlkO1xuICAgICAgICAgICAgICBjaGlsZC5jb250cm9sLnNldFZhbHVlKGRpYWdub3Npcy5kaWFnbm9zaXMuY29kZWQ/LnV1aWQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JhbmsnOlxuICAgICAgICAgICAgICBjaGlsZC5pbml0aWFsVmFsdWUgPSBkaWFnbm9zaXMucmFuaztcbiAgICAgICAgICAgICAgY2hpbGQuY29udHJvbC5zZXRWYWx1ZShkaWFnbm9zaXMucmFuayk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2VydGFpbnR5JzpcbiAgICAgICAgICAgICAgY2hpbGQuaW5pdGlhbFZhbHVlID0gZGlhZ25vc2lzLmNlcnRhaW50eTtcbiAgICAgICAgICAgICAgY2hpbGQuY29udHJvbC5zZXRWYWx1ZShkaWFnbm9zaXMuY2VydGFpbnR5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUpIHtcbiAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChmb3JtTm9kZS5jaGlsZHJlbiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIGlmIChmb3JtTm9kZS5jaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZvcm1Ob2RlLmNoaWxkcmVuW2tleV0ucXVlc3Rpb24ucmVuZGVyaW5nVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdwYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5kRGlhZ25vc2lzUXVlc3Rpb25Ob2Rlcyhmb3JtTm9kZS5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5kRGlhZ25vc2lzUXVlc3Rpb25Ob2Rlcyhmb3JtTm9kZS5jaGlsZHJlbltrZXldKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAncmVwZWF0aW5nJzpcbiAgICAgICAgICAgICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IGZvcm1Ob2RlO1xuICAgICAgICAgICAgICAgICAgLy8gQ29uZGl0aW9uIGZvciBkaWFnbm9zaXNHcm91cCBub2Rlc1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIGluIGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uRXh0cmFzID1cbiAgICAgICAgICAgICAgICAgICAgICBmb3JtTm9kZS5jaGlsZHJlbltub2RlXS5xdWVzdGlvbi5leHRyYXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbkV4dHJhcy50eXBlID09PSAnZGlhZ25vc2lzR3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyYXlOb2RlID0gZm9ybU5vZGUuY2hpbGRyZW5bbm9kZV0gYXMgQXJyYXlOb2RlO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLnB1c2goYXJyYXlOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gQ29uZGl0aW9uIGZvciBkaWFnbm9zaXMgbm9kZXNcbiAgICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkOiBMZWFmTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHF1ZXN0aW9uLCBub2RlSW5kZXggfSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24uZXh0cmFzPy50eXBlID09PSAnZGlhZ25vc2lzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmZvcm1EaWFnbm9zaXNOb2Rlcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHgpID0+IHgubm9kZUluZGV4ID09PSBub2RlSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb252ZXJ0KGRpYWdub3NpczogRGlhZ25vc2lzKTogRGlhZ25vc2lzUGF5bG9hZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHV1aWQ6IGRpYWdub3Npcy51dWlkLFxuICAgICAgZW5jb3VudGVyOiBkaWFnbm9zaXMuZW5jb3VudGVyLFxuICAgICAgcGF0aWVudDogZGlhZ25vc2lzLnBhdGllbnQsXG4gICAgICBkaWFnbm9zaXM6IHtcbiAgICAgICAgY29kZWQ6IGRpYWdub3Npcy5kaWFnbm9zaXMuY29kZWQudXVpZCxcbiAgICAgICAgbm9uQ29kZWQ6IGRpYWdub3Npcy5kaWFnbm9zaXMubm9uQ29kZWRcbiAgICAgIH0sXG4gICAgICBjZXJ0YWludHk6IGRpYWdub3Npcy5jZXJ0YWludHksXG4gICAgICByYW5rOiBkaWFnbm9zaXMucmFuayxcbiAgICAgIHZvaWRlZDogZGlhZ25vc2lzLnZvaWRlZFxuICAgIH07XG4gIH1cblxuICBoYXNEaWFnbm9zaXNOb2RlQ2hhbmdlZChub2RlQXNHcm91cDogR3JvdXBOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hpbGRyZW5Ob2RlcyA9IE9iamVjdC52YWx1ZXMobm9kZUFzR3JvdXAuY2hpbGRyZW4pIGFzIEFycmF5PFxuICAgICAgTGVhZk5vZGVcbiAgICA+O1xuXG4gICAgZm9yIChsZXQgY2hpbGROb2RlIG9mIGNoaWxkcmVuTm9kZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hpbGROb2RlLmNvbnRyb2wudmFsdWUgIT09IG5vZGVBc0dyb3VwLmluaXRpYWxWYWx1ZT8ucHJpbWFyeURpYWdub3Npc0lkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc2lzIHtcbiAgdXVpZD86IHN0cmluZztcbiAgZGlzcGxheT86IHN0cmluZztcbiAgZW5jb3VudGVyPzogc3RyaW5nO1xuICBwYXRpZW50Pzogc3RyaW5nO1xuICBkaWFnbm9zaXM6IHtcbiAgICBjb2RlZD86IHtcbiAgICAgIHV1aWQ6IHN0cmluZztcbiAgICAgIGRpc3BsYXk/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBub25Db2RlZD86IHN0cmluZztcbiAgfTtcbiAgY2VydGFpbnR5OiAnQ09ORklSTUVEJyB8ICdQUk9WSVNJT05BTCc7XG4gIHJhbms6IG51bWJlcjtcbiAgdm9pZGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFnbm9zaXNQYXlsb2FkIHtcbiAgdXVpZD86IHN0cmluZztcbiAgZW5jb3VudGVyPzogc3RyaW5nO1xuICBwYXRpZW50Pzogc3RyaW5nO1xuICBkaWFnbm9zaXM6IHtcbiAgICBjb2RlZD86IHN0cmluZztcbiAgICBub25Db2RlZD86IHN0cmluZztcbiAgfTtcbiAgY2VydGFpbnR5OiAnQ09ORklSTUVEJyB8ICdQUk9WSVNJT05BTCc7XG4gIHJhbms6IG51bWJlcjtcbiAgdm9pZGVkPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -12712,6 +12712,7 @@ class DiagnosisValueAdapter {
12712
12712
  _createDiagnosesPayload(diagnosisNodes, existingDiagnoses) {
12713
12713
  const payload = [];
12714
12714
  let deletedDiagnoses = [];
12715
+ // Add new diagnosis to payload
12715
12716
  diagnosisNodes === null || diagnosisNodes === void 0 ? void 0 : diagnosisNodes.forEach((node) => {
12716
12717
  if (node instanceof ArrayNode) {
12717
12718
  node.control.value
@@ -12719,8 +12720,12 @@ class DiagnosisValueAdapter {
12719
12720
  .forEach((value) => {
12720
12721
  // Create Payload
12721
12722
  const payloadDiagnosis = this._createPayloadDiagnosis(value[node.question.key], node.question.extras);
12722
- // Validate if is new value
12723
- payload.push(payloadDiagnosis);
12723
+ const isNewDiagnosis = existingDiagnoses.every((d) => d.diagnosis.coded.uuid !== value[node.question.key] ||
12724
+ d.certainty !== 'CONFIRMED' ||
12725
+ d.rank !== node.question.extras.questionOptions.rank);
12726
+ if (isNewDiagnosis) {
12727
+ payload.push(payloadDiagnosis);
12728
+ }
12724
12729
  });
12725
12730
  }
12726
12731
  if (node instanceof ArrayNode) {
@@ -12776,17 +12781,26 @@ class DiagnosisValueAdapter {
12776
12781
  };
12777
12782
  return diagnosis;
12778
12783
  }
12779
- _getDeletedDiagnoses(payloadDiagnoses, existingDiagnoses) {
12780
- return existingDiagnoses === null || existingDiagnoses === void 0 ? void 0 : existingDiagnoses.filter((e) => {
12781
- return !payloadDiagnoses.find((p) => {
12782
- let isSame = !e.voided && p.diagnosis.coded === e.diagnosis.coded.uuid;
12783
- return isSame;
12784
- });
12785
- }).map((d) => {
12786
- let diagnosisPayload = this._convert(d);
12787
- diagnosisPayload.voided = true;
12788
- return diagnosisPayload;
12789
- });
12784
+ _getDeletedDiagnoses(diagnosisNodes, existingDiagnoses) {
12785
+ return existingDiagnoses
12786
+ .filter((existingDiagnosis) => {
12787
+ return !(diagnosisNodes === null || diagnosisNodes === void 0 ? void 0 : diagnosisNodes.some((node) => {
12788
+ if (node instanceof ArrayNode) {
12789
+ return node.control.value.some((value) => {
12790
+ return (value[node.question.key] ===
12791
+ existingDiagnosis.diagnosis.coded.uuid &&
12792
+ existingDiagnosis.rank ===
12793
+ node.question.extras.questionOptions.rank &&
12794
+ existingDiagnosis.certainty === 'CONFIRMED');
12795
+ });
12796
+ }
12797
+ return false;
12798
+ }));
12799
+ })
12800
+ .map((existingDiagnosis) => ({
12801
+ uuid: existingDiagnosis.uuid,
12802
+ voided: true
12803
+ }));
12790
12804
  }
12791
12805
  _updatedOldDiagnoses(payloadDiagnoses, existingDiagnoses) {
12792
12806
  payloadDiagnoses.forEach((p) => {
@@ -12900,9 +12914,10 @@ class DiagnosisValueAdapter {
12900
12914
  };
12901
12915
  }
12902
12916
  hasDiagnosisNodeChanged(nodeAsGroup) {
12917
+ var _a;
12903
12918
  const childrenNodes = Object.values(nodeAsGroup.children);
12904
12919
  for (let childNode of childrenNodes) {
12905
- if (childNode.control.value !== childNode.initialValue) {
12920
+ if (childNode.control.value !== ((_a = nodeAsGroup.initialValue) === null || _a === void 0 ? void 0 : _a.primaryDiagnosisId)) {
12906
12921
  return true;
12907
12922
  }
12908
12923
  }