@oneuptime/common 10.0.69 → 10.0.71

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.
Files changed (106) hide show
  1. package/Models/DatabaseModels/KubernetesCluster.ts +7 -0
  2. package/Models/DatabaseModels/Project.ts +5 -5
  3. package/Server/Infrastructure/Postgres/SchemaMigrations/1776865086264-MigrationName.ts +11 -8
  4. package/Server/Infrastructure/Postgres/SchemaMigrations/1776881254913-DedupeKubernetesClustersAndAddUniqueIndex.ts +137 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.ts +17 -0
  6. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  7. package/Server/Services/AIBillingService.ts +2 -2
  8. package/Server/Services/BillingService.ts +116 -48
  9. package/Server/Services/DatabaseService.ts +10 -27
  10. package/Server/Services/KubernetesResourceService.ts +33 -10
  11. package/Server/Services/NotificationService.ts +2 -2
  12. package/Server/Types/Database/QueryHelper.ts +127 -0
  13. package/Server/Types/Database/QueryUtil.ts +250 -0
  14. package/Server/Utils/Monitor/MonitorAlert.ts +79 -0
  15. package/Server/Utils/Monitor/MonitorIncident.ts +79 -0
  16. package/Types/BaseDatabase/EndsWith.ts +41 -0
  17. package/Types/BaseDatabase/IncludesAll.ts +45 -0
  18. package/Types/BaseDatabase/IncludesNone.ts +45 -0
  19. package/Types/BaseDatabase/NotContains.ts +41 -0
  20. package/Types/BaseDatabase/StartsWith.ts +41 -0
  21. package/Types/Email.ts +50 -0
  22. package/Types/JSON.ts +20 -0
  23. package/Types/SerializableObjectDictionary.ts +10 -0
  24. package/UI/Components/Filters/BooleanFilter.tsx +1 -0
  25. package/UI/Components/Filters/DateFilter.tsx +220 -25
  26. package/UI/Components/Filters/DropdownFilter.tsx +1 -0
  27. package/UI/Components/Filters/EntityFilter.tsx +229 -41
  28. package/UI/Components/Filters/FilterViewer.tsx +231 -147
  29. package/UI/Components/Filters/FilterViewerItem.tsx +1 -11
  30. package/UI/Components/Filters/FiltersForm.tsx +146 -97
  31. package/UI/Components/Filters/NumberFilter.tsx +220 -34
  32. package/UI/Components/Filters/OperatorSelector.tsx +91 -0
  33. package/UI/Components/Filters/TextFilter.tsx +183 -71
  34. package/UI/Components/Filters/Types/FilterOperator.ts +73 -0
  35. package/UI/Components/ModelTable/BaseModelTable.tsx +10 -0
  36. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +9 -1
  37. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  38. package/build/dist/Models/DatabaseModels/Project.js +5 -5
  39. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  40. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776865086264-MigrationName.js +1 -1
  41. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776865086264-MigrationName.js.map +1 -1
  42. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776881254913-DedupeKubernetesClustersAndAddUniqueIndex.js +125 -0
  43. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776881254913-DedupeKubernetesClustersAndAddUniqueIndex.js.map +1 -0
  44. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.js +12 -0
  45. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1776886248361-MigrationName.js.map +1 -0
  46. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  47. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  48. package/build/dist/Server/Services/AIBillingService.js +2 -2
  49. package/build/dist/Server/Services/AIBillingService.js.map +1 -1
  50. package/build/dist/Server/Services/BillingService.js +99 -39
  51. package/build/dist/Server/Services/BillingService.js.map +1 -1
  52. package/build/dist/Server/Services/DatabaseService.js +9 -6
  53. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  54. package/build/dist/Server/Services/KubernetesResourceService.js +4 -2
  55. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  56. package/build/dist/Server/Services/NotificationService.js +2 -2
  57. package/build/dist/Server/Services/NotificationService.js.map +1 -1
  58. package/build/dist/Server/Types/Database/QueryHelper.js +110 -0
  59. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  60. package/build/dist/Server/Types/Database/QueryUtil.js +186 -0
  61. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  62. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +68 -0
  63. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  64. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +68 -0
  65. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  66. package/build/dist/Types/BaseDatabase/EndsWith.js +31 -0
  67. package/build/dist/Types/BaseDatabase/EndsWith.js.map +1 -0
  68. package/build/dist/Types/BaseDatabase/IncludesAll.js +34 -0
  69. package/build/dist/Types/BaseDatabase/IncludesAll.js.map +1 -0
  70. package/build/dist/Types/BaseDatabase/IncludesNone.js +34 -0
  71. package/build/dist/Types/BaseDatabase/IncludesNone.js.map +1 -0
  72. package/build/dist/Types/BaseDatabase/NotContains.js +31 -0
  73. package/build/dist/Types/BaseDatabase/NotContains.js.map +1 -0
  74. package/build/dist/Types/BaseDatabase/StartsWith.js +31 -0
  75. package/build/dist/Types/BaseDatabase/StartsWith.js.map +1 -0
  76. package/build/dist/Types/Email.js +42 -0
  77. package/build/dist/Types/Email.js.map +1 -1
  78. package/build/dist/Types/JSON.js +5 -0
  79. package/build/dist/Types/JSON.js.map +1 -1
  80. package/build/dist/Types/SerializableObjectDictionary.js +10 -0
  81. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  82. package/build/dist/UI/Components/Filters/BooleanFilter.js +1 -1
  83. package/build/dist/UI/Components/Filters/BooleanFilter.js.map +1 -1
  84. package/build/dist/UI/Components/Filters/DateFilter.js +155 -14
  85. package/build/dist/UI/Components/Filters/DateFilter.js.map +1 -1
  86. package/build/dist/UI/Components/Filters/DropdownFilter.js +1 -1
  87. package/build/dist/UI/Components/Filters/DropdownFilter.js.map +1 -1
  88. package/build/dist/UI/Components/Filters/EntityFilter.js +181 -30
  89. package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
  90. package/build/dist/UI/Components/Filters/FilterViewer.js +188 -98
  91. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  92. package/build/dist/UI/Components/Filters/FilterViewerItem.js +1 -6
  93. package/build/dist/UI/Components/Filters/FilterViewerItem.js.map +1 -1
  94. package/build/dist/UI/Components/Filters/FiltersForm.js +46 -38
  95. package/build/dist/UI/Components/Filters/FiltersForm.js.map +1 -1
  96. package/build/dist/UI/Components/Filters/NumberFilter.js +164 -23
  97. package/build/dist/UI/Components/Filters/NumberFilter.js.map +1 -1
  98. package/build/dist/UI/Components/Filters/OperatorSelector.js +41 -0
  99. package/build/dist/UI/Components/Filters/OperatorSelector.js.map +1 -0
  100. package/build/dist/UI/Components/Filters/TextFilter.js +131 -53
  101. package/build/dist/UI/Components/Filters/TextFilter.js.map +1 -1
  102. package/build/dist/UI/Components/Filters/Types/FilterOperator.js +63 -0
  103. package/build/dist/UI/Components/Filters/Types/FilterOperator.js.map +1 -0
  104. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +9 -0
  105. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  106. package/package.json +1 -1
@@ -1,23 +1,164 @@
1
- import StartAndEndDate, { StartAndEndDateType } from "../Date/StartAndEndDate";
1
+ import Input, { InputType } from "../Input/Input";
2
2
  import FieldType from "../Types/FieldType";
3
- import React from "react";
3
+ import FilterOperator from "./Types/FilterOperator";
4
+ import OperatorSelector from "./OperatorSelector";
5
+ import InBetween from "../../../Types/BaseDatabase/InBetween";
6
+ import GreaterThan from "../../../Types/BaseDatabase/GreaterThan";
7
+ import LessThan from "../../../Types/BaseDatabase/LessThan";
8
+ import EqualTo from "../../../Types/BaseDatabase/EqualTo";
9
+ import IsNull from "../../../Types/BaseDatabase/IsNull";
10
+ import NotNull from "../../../Types/BaseDatabase/NotNull";
11
+ import OneUptimeDate from "../../../Types/Date";
12
+ import React, { useEffect, useState } from "react";
13
+ const DATE_OPERATORS = [
14
+ FilterOperator.Is,
15
+ FilterOperator.Before,
16
+ FilterOperator.After,
17
+ FilterOperator.Between,
18
+ FilterOperator.IsEmpty,
19
+ FilterOperator.IsNotEmpty,
20
+ ];
21
+ const toDate = (value) => {
22
+ if (!value) {
23
+ return null;
24
+ }
25
+ if (value instanceof Date) {
26
+ return value;
27
+ }
28
+ try {
29
+ return OneUptimeDate.fromString(value);
30
+ }
31
+ catch (_a) {
32
+ return null;
33
+ }
34
+ };
35
+ const detectState = (rawValue) => {
36
+ if (rawValue instanceof InBetween) {
37
+ const start = toDate(rawValue.startValue);
38
+ const end = toDate(rawValue.endValue);
39
+ // If start/end match the bounds of a single day, treat as "Is".
40
+ if (start && end) {
41
+ const startOfDay = OneUptimeDate.getStartOfDay(start);
42
+ const endOfDay = OneUptimeDate.getEndOfDay(start);
43
+ if (start.getTime() === startOfDay.getTime() &&
44
+ end.getTime() === endOfDay.getTime()) {
45
+ return { operator: FilterOperator.Is, start, end: null };
46
+ }
47
+ }
48
+ return { operator: FilterOperator.Between, start, end };
49
+ }
50
+ if (rawValue instanceof GreaterThan) {
51
+ return {
52
+ operator: FilterOperator.After,
53
+ start: toDate(rawValue.value),
54
+ end: null,
55
+ };
56
+ }
57
+ if (rawValue instanceof LessThan) {
58
+ return {
59
+ operator: FilterOperator.Before,
60
+ start: toDate(rawValue.value),
61
+ end: null,
62
+ };
63
+ }
64
+ if (rawValue instanceof EqualTo) {
65
+ return {
66
+ operator: FilterOperator.Is,
67
+ start: toDate(rawValue.value),
68
+ end: null,
69
+ };
70
+ }
71
+ if (rawValue instanceof IsNull) {
72
+ return { operator: FilterOperator.IsEmpty, start: null, end: null };
73
+ }
74
+ if (rawValue instanceof NotNull) {
75
+ return { operator: FilterOperator.IsNotEmpty, start: null, end: null };
76
+ }
77
+ return { operator: FilterOperator.Is, start: null, end: null };
78
+ };
79
+ const buildValue = (state, isDateTime) => {
80
+ switch (state.operator) {
81
+ case FilterOperator.Is: {
82
+ if (!state.start) {
83
+ return undefined;
84
+ }
85
+ if (isDateTime) {
86
+ return new EqualTo(state.start);
87
+ }
88
+ return new InBetween(OneUptimeDate.getStartOfDay(state.start), OneUptimeDate.getEndOfDay(state.start));
89
+ }
90
+ case FilterOperator.Before:
91
+ return state.start ? new LessThan(state.start) : undefined;
92
+ case FilterOperator.After:
93
+ return state.start ? new GreaterThan(state.start) : undefined;
94
+ case FilterOperator.Between: {
95
+ if (!state.start || !state.end) {
96
+ return undefined;
97
+ }
98
+ return new InBetween((isDateTime
99
+ ? state.start
100
+ : OneUptimeDate.getStartOfDay(state.start)), (isDateTime ? state.end : OneUptimeDate.getEndOfDay(state.end)));
101
+ }
102
+ case FilterOperator.IsEmpty:
103
+ return new IsNull();
104
+ case FilterOperator.IsNotEmpty:
105
+ return new NotNull();
106
+ default:
107
+ return undefined;
108
+ }
109
+ };
4
110
  const DateFilter = (props) => {
5
111
  const filter = props.filter;
6
- const filterData = Object.assign({}, props.filterData);
7
112
  if (filter.type !== FieldType.Date && filter.type !== FieldType.DateTime) {
8
113
  return React.createElement(React.Fragment, null);
9
114
  }
10
- return (React.createElement(StartAndEndDate, { value: filterData[filter.key], onValueChanged: (inBetween) => {
11
- filterData[filter.key] = inBetween;
12
- if (!filterData[filter.key]) {
13
- delete filterData[filter.key];
14
- }
15
- if (props.onFilterChanged) {
16
- props.onFilterChanged(filterData);
17
- }
18
- }, type: filter.type === FieldType.DateTime
19
- ? StartAndEndDateType.DateTime
20
- : StartAndEndDateType.Date }));
115
+ const isDateTime = filter.type === FieldType.DateTime;
116
+ const detected = detectState(props.filterData[filter.key]);
117
+ const [localOperator, setLocalOperator] = useState(detected.operator);
118
+ useEffect(() => {
119
+ const raw = props.filterData[filter.key];
120
+ if (raw !== undefined && raw !== null) {
121
+ setLocalOperator(detected.operator);
122
+ }
123
+ }, [props.filterData[filter.key]]);
124
+ const state = Object.assign(Object.assign({}, detected), { operator: localOperator });
125
+ const valuelessOperator = state.operator === FilterOperator.IsEmpty ||
126
+ state.operator === FilterOperator.IsNotEmpty;
127
+ const isBetween = state.operator === FilterOperator.Between;
128
+ const apply = (nextState) => {
129
+ var _a;
130
+ if (!filter.key) {
131
+ return;
132
+ }
133
+ setLocalOperator(nextState.operator);
134
+ const next = Object.assign({}, props.filterData);
135
+ const built = buildValue(nextState, isDateTime);
136
+ if (built === undefined) {
137
+ delete next[filter.key];
138
+ }
139
+ else {
140
+ next[filter.key] = built;
141
+ }
142
+ (_a = props.onFilterChanged) === null || _a === void 0 ? void 0 : _a.call(props, next);
143
+ };
144
+ const inputType = isDateTime
145
+ ? InputType.DATETIME_LOCAL
146
+ : InputType.DATE;
147
+ return (React.createElement("div", { className: "flex gap-2 items-start" },
148
+ React.createElement(OperatorSelector, { value: state.operator, options: DATE_OPERATORS, onChange: (nextOperator) => {
149
+ apply(Object.assign(Object.assign({}, state), { operator: nextOperator }));
150
+ } }),
151
+ !valuelessOperator && (React.createElement("div", { className: isBetween ? "flex-1 flex gap-2 min-w-0" : "flex-1 min-w-0" },
152
+ React.createElement("div", { className: "flex-1 min-w-0" },
153
+ React.createElement(Input, { key: `${filter.key}-start-${state.operator}`, onChange: (changed) => {
154
+ const parsed = toDate(changed);
155
+ apply(Object.assign(Object.assign({}, state), { start: parsed }));
156
+ }, value: state.start || "", placeholder: isBetween ? "From" : `Filter by ${filter.title}`, type: inputType, outerDivClassName: "relative rounded-md w-full" })),
157
+ isBetween && (React.createElement("div", { className: "flex-1 min-w-0" },
158
+ React.createElement(Input, { key: `${filter.key}-end-${state.operator}`, onChange: (changed) => {
159
+ const parsed = toDate(changed);
160
+ apply(Object.assign(Object.assign({}, state), { end: parsed }));
161
+ }, value: state.end || "", placeholder: "To", type: inputType, outerDivClassName: "relative rounded-md w-full" })))))));
21
162
  };
22
163
  export default DateFilter;
23
164
  //# sourceMappingURL=DateFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateFilter.js","sourceRoot":"","sources":["../../../../../UI/Components/Filters/DateFilter.tsx"],"names":[],"mappings":"AACA,OAAO,eAAe,EAAE,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAK3C,OAAO,KAAuB,MAAM,OAAO,CAAC;AAY5C,MAAM,UAAU,GAAuB,CACrC,KAAwB,EACV,EAAE;IAChB,MAAM,MAAM,GAAc,KAAK,CAAC,MAAM,CAAC;IACvC,MAAM,UAAU,qBAAuB,KAAK,CAAC,UAAU,CAAE,CAAC;IAE1D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;QACzE,OAAO,yCAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,oBAAC,eAAe,IACd,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAoB,EAChD,cAAc,EAAE,CAAC,SAAiC,EAAE,EAAE;YACpD,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAExB,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,EACD,IAAI,EACF,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ;YAChC,CAAC,CAAC,mBAAmB,CAAC,QAAQ;YAC9B,CAAC,CAAC,mBAAmB,CAAC,IAAI,GAE9B,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"DateFilter.js","sourceRoot":"","sources":["../../../../../UI/Components/Filters/DateFilter.tsx"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ const DropdownFilter = (props) => {
32
32
  if (props.onFilterChanged) {
33
33
  props.onFilterChanged(filterData);
34
34
  }
35
- }, value: dropdownValues, isMultiSelect: props.isMultiSelect || false, placeholder: `Filter by ${filter.title}` }));
35
+ }, value: dropdownValues, isMultiSelect: props.isMultiSelect || false, placeholder: `Filter by ${filter.title}`, className: "relative rounded-md w-full overflow-visible" }));
36
36
  }
37
37
  return React.createElement(React.Fragment, null);
38
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilter.js","sourceRoot":"","sources":["../../../../../UI/Components/Filters/DropdownFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,QAA2C,MAAM,sBAAsB,CAAC;AAC/E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAI3C,OAAO,KAAuB,MAAM,OAAO,CAAC;AAa5C,MAAM,cAAc,GAA2B,CAC7C,KAAwB,EACV,EAAE;;IAChB,MAAM,MAAM,GAAc,KAAK,CAAC,MAAM,CAAC;IACvC,MAAM,UAAU,qBAAuB,KAAK,CAAC,UAAU,CAAE,CAAC;IAE1D,MAAM,cAAc,GAClB,CAAA,MAAA,KAAK,CAAC,MAAM,CAAC,qBAAqB,0CAAE,MAAM,CAAC,CAAC,MAAsB,EAAE,EAAE;;QACpE,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC;YAC5C,OAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,CAAmB;iBAC7C,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE;gBACrB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,CAAC,CAAC;iBACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAK,MAAA,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,0CAAE,QAAQ,EAAE,CAAA,CAAC;IACxE,CAAC,CAAC,KAAI,EAAE,CAAC;IAEX,IACE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;QAChC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW;QACrC,MAAM,CAAC,qBAAqB,EAC5B,CAAC;QACD,OAAO,CACL,oBAAC,QAAQ,IACP,OAAO,EAAE,MAAM,CAAC,qBAAqB,EACrC,QAAQ,EAAE,CAAC,KAAkD,EAAE,EAAE;gBAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjC,CAAC;gBAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;oBAC1B,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,EACD,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,EAC3C,WAAW,EAAE,aAAa,MAAM,CAAC,KAAK,EAAE,GACxC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,yCAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"DropdownFilter.js","sourceRoot":"","sources":["../../../../../UI/Components/Filters/DropdownFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,QAA2C,MAAM,sBAAsB,CAAC;AAC/E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAI3C,OAAO,KAAuB,MAAM,OAAO,CAAC;AAa5C,MAAM,cAAc,GAA2B,CAC7C,KAAwB,EACV,EAAE;;IAChB,MAAM,MAAM,GAAc,KAAK,CAAC,MAAM,CAAC;IACvC,MAAM,UAAU,qBAAuB,KAAK,CAAC,UAAU,CAAE,CAAC;IAE1D,MAAM,cAAc,GAClB,CAAA,MAAA,KAAK,CAAC,MAAM,CAAC,qBAAqB,0CAAE,MAAM,CAAC,CAAC,MAAsB,EAAE,EAAE;;QACpE,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC;YAC5C,OAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,CAAmB;iBAC7C,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE;gBACrB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,CAAC,CAAC;iBACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAK,MAAA,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,0CAAE,QAAQ,EAAE,CAAA,CAAC;IACxE,CAAC,CAAC,KAAI,EAAE,CAAC;IAEX,IACE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;QAChC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW;QACrC,MAAM,CAAC,qBAAqB,EAC5B,CAAC;QACD,OAAO,CACL,oBAAC,QAAQ,IACP,OAAO,EAAE,MAAM,CAAC,qBAAqB,EACrC,QAAQ,EAAE,CAAC,KAAkD,EAAE,EAAE;gBAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjC,CAAC;gBAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;oBAC1B,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,EACD,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,EAC3C,WAAW,EAAE,aAAa,MAAM,CAAC,KAAK,EAAE,EACxC,SAAS,EAAC,6CAA6C,GACvD,CACH,CAAC;IACJ,CAAC;IAED,OAAO,yCAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1,40 +1,191 @@
1
1
  import Dropdown from "../Dropdown/Dropdown";
2
2
  import FieldType from "../Types/FieldType";
3
- import React from "react";
3
+ import FilterOperator from "./Types/FilterOperator";
4
+ import OperatorSelector from "./OperatorSelector";
5
+ import Includes from "../../../Types/BaseDatabase/Includes";
6
+ import IncludesAll from "../../../Types/BaseDatabase/IncludesAll";
7
+ import IncludesNone from "../../../Types/BaseDatabase/IncludesNone";
8
+ import IsNull from "../../../Types/BaseDatabase/IsNull";
9
+ import NotNull from "../../../Types/BaseDatabase/NotNull";
10
+ import React, { useEffect, useState } from "react";
11
+ const ENTITY_ARRAY_OPERATORS = [
12
+ FilterOperator.HasAnyOf,
13
+ FilterOperator.HasAllOf,
14
+ FilterOperator.HasNoneOf,
15
+ FilterOperator.IsEmpty,
16
+ FilterOperator.IsNotEmpty,
17
+ ];
18
+ const ENTITY_OPERATORS = [
19
+ FilterOperator.Is,
20
+ FilterOperator.IsNot,
21
+ FilterOperator.IsEmpty,
22
+ FilterOperator.IsNotEmpty,
23
+ ];
24
+ const detectArrayState = (rawValue) => {
25
+ if (rawValue instanceof IncludesAll) {
26
+ return {
27
+ operator: FilterOperator.HasAllOf,
28
+ values: rawValue.values.map((v) => {
29
+ return v.toString();
30
+ }),
31
+ };
32
+ }
33
+ if (rawValue instanceof IncludesNone) {
34
+ return {
35
+ operator: FilterOperator.HasNoneOf,
36
+ values: rawValue.values.map((v) => {
37
+ return v.toString();
38
+ }),
39
+ };
40
+ }
41
+ if (rawValue instanceof Includes) {
42
+ return {
43
+ operator: FilterOperator.HasAnyOf,
44
+ values: rawValue.values.map((v) => {
45
+ return v.toString();
46
+ }),
47
+ };
48
+ }
49
+ if (Array.isArray(rawValue)) {
50
+ return {
51
+ operator: FilterOperator.HasAnyOf,
52
+ values: rawValue.map((v) => {
53
+ return v.toString();
54
+ }),
55
+ };
56
+ }
57
+ if (rawValue instanceof IsNull) {
58
+ return { operator: FilterOperator.IsEmpty, values: [] };
59
+ }
60
+ if (rawValue instanceof NotNull) {
61
+ return { operator: FilterOperator.IsNotEmpty, values: [] };
62
+ }
63
+ return { operator: FilterOperator.HasAnyOf, values: [] };
64
+ };
65
+ const detectSingleState = (rawValue) => {
66
+ if (rawValue instanceof IsNull) {
67
+ return { operator: FilterOperator.IsEmpty, values: [] };
68
+ }
69
+ if (rawValue instanceof NotNull) {
70
+ return { operator: FilterOperator.IsNotEmpty, values: [] };
71
+ }
72
+ if (typeof rawValue === "string" && rawValue) {
73
+ return { operator: FilterOperator.Is, values: [rawValue] };
74
+ }
75
+ return { operator: FilterOperator.Is, values: [] };
76
+ };
77
+ const buildArrayValue = (state) => {
78
+ switch (state.operator) {
79
+ case FilterOperator.HasAllOf:
80
+ return state.values.length > 0
81
+ ? new IncludesAll(state.values)
82
+ : undefined;
83
+ case FilterOperator.HasNoneOf:
84
+ return state.values.length > 0
85
+ ? new IncludesNone(state.values)
86
+ : undefined;
87
+ case FilterOperator.HasAnyOf:
88
+ return state.values.length > 0 ? state.values : undefined;
89
+ case FilterOperator.IsEmpty:
90
+ return new IsNull();
91
+ case FilterOperator.IsNotEmpty:
92
+ return new NotNull();
93
+ default:
94
+ return undefined;
95
+ }
96
+ };
97
+ const buildSingleValue = (state) => {
98
+ switch (state.operator) {
99
+ case FilterOperator.Is:
100
+ return state.values[0] || undefined;
101
+ case FilterOperator.IsNot:
102
+ // Use IncludesNone with single-item array to represent "is not".
103
+ return state.values[0] ? new IncludesNone([state.values[0]]) : undefined;
104
+ case FilterOperator.IsEmpty:
105
+ return new IsNull();
106
+ case FilterOperator.IsNotEmpty:
107
+ return new NotNull();
108
+ default:
109
+ return undefined;
110
+ }
111
+ };
4
112
  const EntityFilter = (props) => {
5
113
  var _a;
6
114
  const filter = props.filter;
7
- const filterData = Object.assign({}, props.filterData);
8
- const dropdownValues = ((_a = props.filter.filterDropdownOptions) === null || _a === void 0 ? void 0 : _a.filter((option) => {
9
- var _a;
10
- if (filterData[filter.key] instanceof Array) {
11
- return filterData[filter.key]
12
- .map((value) => {
13
- return value.toString();
14
- })
15
- .includes(option.value.toString());
115
+ if (filter.type !== FieldType.Entity &&
116
+ filter.type !== FieldType.EntityArray) {
117
+ return React.createElement(React.Fragment, null);
118
+ }
119
+ if (!filter.filterDropdownOptions) {
120
+ return React.createElement(React.Fragment, null);
121
+ }
122
+ const isArray = filter.type === FieldType.EntityArray;
123
+ const detectedState = isArray
124
+ ? detectArrayState(props.filterData[filter.key])
125
+ : detectSingleState(props.filterData[filter.key]);
126
+ /*
127
+ * Hold the operator locally so the user's choice persists even when no
128
+ * values are selected yet (otherwise `buildArrayValue` would return
129
+ * undefined, filterData wouldn't carry the operator, and the next render
130
+ * would reset back to the default).
131
+ */
132
+ const [localOperator, setLocalOperator] = useState(detectedState.operator);
133
+ /*
134
+ * When the external filter data changes and can unambiguously tell us
135
+ * which operator it represents, sync local state.
136
+ */
137
+ useEffect(() => {
138
+ const raw = props.filterData[filter.key];
139
+ if (raw !== undefined && raw !== null) {
140
+ setLocalOperator(detectedState.operator);
16
141
  }
17
- return option.value.toString() === ((_a = filterData[filter.key]) === null || _a === void 0 ? void 0 : _a.toString());
142
+ /*
143
+ * Intentionally only re-run when the underlying filter data reference
144
+ * changes — not on every detectedState re-computation.
145
+ */
146
+ }, [props.filterData[filter.key]]);
147
+ const operator = localOperator;
148
+ const state = Object.assign(Object.assign({}, detectedState), { operator });
149
+ const valuelessOperator = operator === FilterOperator.IsEmpty ||
150
+ operator === FilterOperator.IsNotEmpty;
151
+ const dropdownValues = ((_a = filter.filterDropdownOptions) === null || _a === void 0 ? void 0 : _a.filter((option) => {
152
+ return state.values.includes(option.value.toString());
18
153
  })) || [];
19
- if ((filter.type === FieldType.Entity ||
20
- filter.type === FieldType.EntityArray) &&
21
- filter.filterDropdownOptions) {
22
- return (React.createElement(Dropdown, { options: filter.filterDropdownOptions, onChange: (value) => {
23
- if (!filter.key) {
24
- return;
25
- }
26
- if (!value || (Array.isArray(value) && value.length === 0)) {
27
- delete filterData[filter.key];
28
- }
29
- else {
30
- filterData[filter.key] = value;
31
- }
32
- if (props.onFilterChanged) {
33
- props.onFilterChanged(filterData);
34
- }
35
- }, value: dropdownValues, isMultiSelect: filter.type === FieldType.EntityArray, placeholder: `Filter by ${filter.title}` }));
36
- }
37
- return React.createElement(React.Fragment, null);
154
+ const apply = (nextState) => {
155
+ var _a;
156
+ if (!filter.key) {
157
+ return;
158
+ }
159
+ setLocalOperator(nextState.operator);
160
+ const next = Object.assign({}, props.filterData);
161
+ const built = isArray
162
+ ? buildArrayValue(nextState)
163
+ : buildSingleValue(nextState);
164
+ if (built === undefined) {
165
+ delete next[filter.key];
166
+ }
167
+ else {
168
+ next[filter.key] = built;
169
+ }
170
+ (_a = props.onFilterChanged) === null || _a === void 0 ? void 0 : _a.call(props, next);
171
+ };
172
+ return (React.createElement("div", { className: "flex gap-2 items-start" },
173
+ React.createElement(OperatorSelector, { value: operator, options: isArray ? ENTITY_ARRAY_OPERATORS : ENTITY_OPERATORS, onChange: (nextOperator) => {
174
+ apply(Object.assign(Object.assign({}, state), { operator: nextOperator }));
175
+ } }),
176
+ !valuelessOperator && (React.createElement("div", { className: "flex-1 min-w-0" },
177
+ React.createElement(Dropdown, { options: filter.filterDropdownOptions, onChange: (value) => {
178
+ if (!value || (Array.isArray(value) && value.length === 0)) {
179
+ apply(Object.assign(Object.assign({}, state), { values: [] }));
180
+ return;
181
+ }
182
+ const nextValues = Array.isArray(value)
183
+ ? value.map((v) => {
184
+ return v.toString();
185
+ })
186
+ : [value.toString()];
187
+ apply(Object.assign(Object.assign({}, state), { values: nextValues }));
188
+ }, value: dropdownValues, isMultiSelect: isArray, placeholder: `Filter by ${filter.title}`, className: "relative rounded-md w-full overflow-visible" })))));
38
189
  };
39
190
  export default EntityFilter;
40
191
  //# sourceMappingURL=EntityFilter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFilter.js","sourceRoot":"","sources":["../../../../../UI/Components/Filters/EntityFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,QAA2C,MAAM,sBAAsB,CAAC;AAC/E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAI3C,OAAO,KAAuB,MAAM,OAAO,CAAC;AAY5C,MAAM,YAAY,GAAyB,CACzC,KAAwB,EACV,EAAE;;IAChB,MAAM,MAAM,GAAc,KAAK,CAAC,MAAM,CAAC;IACvC,MAAM,UAAU,qBAAuB,KAAK,CAAC,UAAU,CAAE,CAAC;IAE1D,MAAM,cAAc,GAClB,CAAA,MAAA,KAAK,CAAC,MAAM,CAAC,qBAAqB,0CAAE,MAAM,CAAC,CAAC,MAAsB,EAAE,EAAE;;QACpE,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC;YAC5C,OAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,CAAmB;iBAC7C,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE;gBACrB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1B,CAAC,CAAC;iBACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAK,MAAA,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,0CAAE,QAAQ,EAAE,CAAA,CAAC;IACxE,CAAC,CAAC,KAAI,EAAE,CAAC;IAEX,IACE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;QAC/B,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW,CAAC;QACxC,MAAM,CAAC,qBAAqB,EAC5B,CAAC;QACD,OAAO,CACL,oBAAC,QAAQ,IACP,OAAO,EAAE,MAAM,CAAC,qBAAqB,EACrC,QAAQ,EAAE,CAAC,KAAkD,EAAE,EAAE;gBAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjC,CAAC;gBAED,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;oBAC1B,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,EACD,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,WAAW,EACpD,WAAW,EAAE,aAAa,MAAM,CAAC,KAAK,EAAE,GACxC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,yCAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"EntityFilter.js","sourceRoot":"","sources":["../../../../../UI/Components/Filters/EntityFilter.tsx"],"names":[],"mappings":"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"}