@teselagen/ui 0.10.19 → 0.10.21
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/PromptUnsavedChanges/index.d.ts +3 -3
- package/index.cjs.js +22 -7
- package/index.es.js +22 -7
- package/index.umd.js +22 -7
- package/package.json +5 -4
- package/src/DataTable/FilterAndSortMenu.js +2 -2
- package/src/DataTable/utils/filterLocalEntitiesToHasura.js +17 -0
- package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +199 -0
- package/src/FormComponents/Uploader.js +4 -1
- package/src/PromptUnsavedChanges/index.js +1 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const defaultMessagge: "Are you sure you want to leave? There are unsaved changes.";
|
|
2
|
+
export default PromptUnsavedChanges;
|
|
3
|
+
declare function PromptUnsavedChanges({ message, when }: {
|
|
2
4
|
message?: string | undefined;
|
|
3
5
|
when?: boolean | undefined;
|
|
4
6
|
}): import("react/jsx-runtime").JSX.Element | null;
|
|
5
|
-
export const defaultMessagge: "Are you sure you want to leave? There are unsaved changes.";
|
|
6
|
-
export default PromptUnsavedChanges;
|
package/index.cjs.js
CHANGED
|
@@ -20132,6 +20132,23 @@ function applyWhereClause(records, where) {
|
|
|
20132
20132
|
if (!isString$1(value) || !new RegExp(conditionValue.replace(/%/g, ".*")).test(value))
|
|
20133
20133
|
return false;
|
|
20134
20134
|
break;
|
|
20135
|
+
case "_in":
|
|
20136
|
+
if (!some(conditionValue, (item) => isEqual(value, item)))
|
|
20137
|
+
return false;
|
|
20138
|
+
break;
|
|
20139
|
+
case "_nin":
|
|
20140
|
+
if (some(conditionValue, (item) => isEqual(value, item)))
|
|
20141
|
+
return false;
|
|
20142
|
+
break;
|
|
20143
|
+
case "_regex": {
|
|
20144
|
+
try {
|
|
20145
|
+
if (!isString$1(value) || !new RegExp(conditionValue).test(value))
|
|
20146
|
+
return false;
|
|
20147
|
+
} catch (e) {
|
|
20148
|
+
return false;
|
|
20149
|
+
}
|
|
20150
|
+
break;
|
|
20151
|
+
}
|
|
20135
20152
|
default:
|
|
20136
20153
|
if (operator.startsWith("_")) {
|
|
20137
20154
|
console.warn(`Unsupported operator: ${operator}`);
|
|
@@ -51110,7 +51127,7 @@ const FilterAndSortMenu = /* @__PURE__ */ __name(({
|
|
|
51110
51127
|
filterValToUse = false;
|
|
51111
51128
|
} else if (ccSelectedFilter2 === "inList" || ccSelectedFilter2 === "notInList") {
|
|
51112
51129
|
if (dataType === "number") {
|
|
51113
|
-
filterValToUse = filterValue && filterValue.map((val) => parseFloat(val
|
|
51130
|
+
filterValToUse = filterValue && filterValue.map((val) => parseFloat(`${val}`.replaceAll(",", "")));
|
|
51114
51131
|
}
|
|
51115
51132
|
}
|
|
51116
51133
|
if (isInvalidFilterValue(filterValToUse)) {
|
|
@@ -51216,7 +51233,7 @@ const FilterInput = /* @__PURE__ */ __name(({
|
|
|
51216
51233
|
multi: true,
|
|
51217
51234
|
creatable: true,
|
|
51218
51235
|
value: (filterValue || []).map((val) => ({
|
|
51219
|
-
label: val
|
|
51236
|
+
label: `${val}`,
|
|
51220
51237
|
value: val
|
|
51221
51238
|
})),
|
|
51222
51239
|
onChange: /* @__PURE__ */ __name((selectedOptions) => {
|
|
@@ -67015,6 +67032,7 @@ const Uploader = /* @__PURE__ */ __name(({
|
|
|
67015
67032
|
style: { fontSize: 11, marginBottom: 5 }
|
|
67016
67033
|
},
|
|
67017
67034
|
advancedAccept && !acceptLoading ? /* @__PURE__ */ React.createElement("div", null, "Accepts ", /* @__PURE__ */ React.createElement("span", null, advancedAccept.map((acc, i2) => {
|
|
67035
|
+
var _a2;
|
|
67018
67036
|
const disabled2 = !(acc.description || acc.exampleFile || acc.exampleFiles);
|
|
67019
67037
|
const PopOrTooltip = acc.exampleFiles ? core.Popover : core.Tooltip;
|
|
67020
67038
|
const hasDownload = acc.exampleFile || acc.exampleFiles;
|
|
@@ -67024,7 +67042,7 @@ const Uploader = /* @__PURE__ */ __name(({
|
|
|
67024
67042
|
{
|
|
67025
67043
|
key: i2,
|
|
67026
67044
|
interactionKind: "hover",
|
|
67027
|
-
disabled: disabled2,
|
|
67045
|
+
disabled: disabled2 || !!((_a2 = window.Cypress) == null ? void 0 : _a2.tg_disableDownloadExampleHover),
|
|
67028
67046
|
modifiers: popoverOverflowModifiers,
|
|
67029
67047
|
content: acc.exampleFiles ? /* @__PURE__ */ React.createElement(core.Menu, null, acc.exampleFiles.map(
|
|
67030
67048
|
({ description, subtext, exampleFile, icon }, i22) => /* @__PURE__ */ React.createElement(
|
|
@@ -67662,10 +67680,7 @@ const warnBeforeLeave = /* @__PURE__ */ __name((e) => {
|
|
|
67662
67680
|
(e || window.event).returnValue = defaultMessagge;
|
|
67663
67681
|
return defaultMessagge;
|
|
67664
67682
|
}, "warnBeforeLeave");
|
|
67665
|
-
function PromptUnsavedChanges({
|
|
67666
|
-
message = defaultMessagge,
|
|
67667
|
-
when = false
|
|
67668
|
-
}) {
|
|
67683
|
+
function PromptUnsavedChanges({ message = defaultMessagge, when = false }) {
|
|
67669
67684
|
React.useEffect(() => {
|
|
67670
67685
|
if (when) {
|
|
67671
67686
|
window.addEventListener("beforeunload", warnBeforeLeave);
|
package/index.es.js
CHANGED
|
@@ -20114,6 +20114,23 @@ function applyWhereClause(records, where) {
|
|
|
20114
20114
|
if (!isString$1(value) || !new RegExp(conditionValue.replace(/%/g, ".*")).test(value))
|
|
20115
20115
|
return false;
|
|
20116
20116
|
break;
|
|
20117
|
+
case "_in":
|
|
20118
|
+
if (!some(conditionValue, (item) => isEqual(value, item)))
|
|
20119
|
+
return false;
|
|
20120
|
+
break;
|
|
20121
|
+
case "_nin":
|
|
20122
|
+
if (some(conditionValue, (item) => isEqual(value, item)))
|
|
20123
|
+
return false;
|
|
20124
|
+
break;
|
|
20125
|
+
case "_regex": {
|
|
20126
|
+
try {
|
|
20127
|
+
if (!isString$1(value) || !new RegExp(conditionValue).test(value))
|
|
20128
|
+
return false;
|
|
20129
|
+
} catch (e) {
|
|
20130
|
+
return false;
|
|
20131
|
+
}
|
|
20132
|
+
break;
|
|
20133
|
+
}
|
|
20117
20134
|
default:
|
|
20118
20135
|
if (operator.startsWith("_")) {
|
|
20119
20136
|
console.warn(`Unsupported operator: ${operator}`);
|
|
@@ -51092,7 +51109,7 @@ const FilterAndSortMenu = /* @__PURE__ */ __name(({
|
|
|
51092
51109
|
filterValToUse = false;
|
|
51093
51110
|
} else if (ccSelectedFilter2 === "inList" || ccSelectedFilter2 === "notInList") {
|
|
51094
51111
|
if (dataType === "number") {
|
|
51095
|
-
filterValToUse = filterValue && filterValue.map((val) => parseFloat(val
|
|
51112
|
+
filterValToUse = filterValue && filterValue.map((val) => parseFloat(`${val}`.replaceAll(",", "")));
|
|
51096
51113
|
}
|
|
51097
51114
|
}
|
|
51098
51115
|
if (isInvalidFilterValue(filterValToUse)) {
|
|
@@ -51198,7 +51215,7 @@ const FilterInput = /* @__PURE__ */ __name(({
|
|
|
51198
51215
|
multi: true,
|
|
51199
51216
|
creatable: true,
|
|
51200
51217
|
value: (filterValue || []).map((val) => ({
|
|
51201
|
-
label: val
|
|
51218
|
+
label: `${val}`,
|
|
51202
51219
|
value: val
|
|
51203
51220
|
})),
|
|
51204
51221
|
onChange: /* @__PURE__ */ __name((selectedOptions) => {
|
|
@@ -66997,6 +67014,7 @@ const Uploader = /* @__PURE__ */ __name(({
|
|
|
66997
67014
|
style: { fontSize: 11, marginBottom: 5 }
|
|
66998
67015
|
},
|
|
66999
67016
|
advancedAccept && !acceptLoading ? /* @__PURE__ */ React__default.createElement("div", null, "Accepts ", /* @__PURE__ */ React__default.createElement("span", null, advancedAccept.map((acc, i2) => {
|
|
67017
|
+
var _a2;
|
|
67000
67018
|
const disabled2 = !(acc.description || acc.exampleFile || acc.exampleFiles);
|
|
67001
67019
|
const PopOrTooltip = acc.exampleFiles ? Popover : Tooltip;
|
|
67002
67020
|
const hasDownload = acc.exampleFile || acc.exampleFiles;
|
|
@@ -67006,7 +67024,7 @@ const Uploader = /* @__PURE__ */ __name(({
|
|
|
67006
67024
|
{
|
|
67007
67025
|
key: i2,
|
|
67008
67026
|
interactionKind: "hover",
|
|
67009
|
-
disabled: disabled2,
|
|
67027
|
+
disabled: disabled2 || !!((_a2 = window.Cypress) == null ? void 0 : _a2.tg_disableDownloadExampleHover),
|
|
67010
67028
|
modifiers: popoverOverflowModifiers,
|
|
67011
67029
|
content: acc.exampleFiles ? /* @__PURE__ */ React__default.createElement(Menu, null, acc.exampleFiles.map(
|
|
67012
67030
|
({ description, subtext, exampleFile, icon }, i22) => /* @__PURE__ */ React__default.createElement(
|
|
@@ -67644,10 +67662,7 @@ const warnBeforeLeave = /* @__PURE__ */ __name((e) => {
|
|
|
67644
67662
|
(e || window.event).returnValue = defaultMessagge;
|
|
67645
67663
|
return defaultMessagge;
|
|
67646
67664
|
}, "warnBeforeLeave");
|
|
67647
|
-
function PromptUnsavedChanges({
|
|
67648
|
-
message = defaultMessagge,
|
|
67649
|
-
when = false
|
|
67650
|
-
}) {
|
|
67665
|
+
function PromptUnsavedChanges({ message = defaultMessagge, when = false }) {
|
|
67651
67666
|
useEffect(() => {
|
|
67652
67667
|
if (when) {
|
|
67653
67668
|
window.addEventListener("beforeunload", warnBeforeLeave);
|
package/index.umd.js
CHANGED
|
@@ -44789,6 +44789,23 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
44789
44789
|
if (!isString$1(value) || !new RegExp(conditionValue.replace(/%/g, ".*")).test(value))
|
|
44790
44790
|
return false;
|
|
44791
44791
|
break;
|
|
44792
|
+
case "_in":
|
|
44793
|
+
if (!some(conditionValue, (item) => isEqual(value, item)))
|
|
44794
|
+
return false;
|
|
44795
|
+
break;
|
|
44796
|
+
case "_nin":
|
|
44797
|
+
if (some(conditionValue, (item) => isEqual(value, item)))
|
|
44798
|
+
return false;
|
|
44799
|
+
break;
|
|
44800
|
+
case "_regex": {
|
|
44801
|
+
try {
|
|
44802
|
+
if (!isString$1(value) || !new RegExp(conditionValue).test(value))
|
|
44803
|
+
return false;
|
|
44804
|
+
} catch (e) {
|
|
44805
|
+
return false;
|
|
44806
|
+
}
|
|
44807
|
+
break;
|
|
44808
|
+
}
|
|
44792
44809
|
default:
|
|
44793
44810
|
if (operator.startsWith("_")) {
|
|
44794
44811
|
console.warn(`Unsupported operator: ${operator}`);
|
|
@@ -78545,7 +78562,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
78545
78562
|
filterValToUse = false;
|
|
78546
78563
|
} else if (ccSelectedFilter2 === "inList" || ccSelectedFilter2 === "notInList") {
|
|
78547
78564
|
if (dataType === "number") {
|
|
78548
|
-
filterValToUse = filterValue && filterValue.map((val) => parseFloat(val
|
|
78565
|
+
filterValToUse = filterValue && filterValue.map((val) => parseFloat(`${val}`.replaceAll(",", "")));
|
|
78549
78566
|
}
|
|
78550
78567
|
}
|
|
78551
78568
|
if (isInvalidFilterValue(filterValToUse)) {
|
|
@@ -78651,7 +78668,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
78651
78668
|
multi: true,
|
|
78652
78669
|
creatable: true,
|
|
78653
78670
|
value: (filterValue || []).map((val) => ({
|
|
78654
|
-
label: val
|
|
78671
|
+
label: `${val}`,
|
|
78655
78672
|
value: val
|
|
78656
78673
|
})),
|
|
78657
78674
|
onChange: /* @__PURE__ */ __name((selectedOptions) => {
|
|
@@ -94450,6 +94467,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
94450
94467
|
style: { fontSize: 11, marginBottom: 5 }
|
|
94451
94468
|
},
|
|
94452
94469
|
advancedAccept && !acceptLoading ? /* @__PURE__ */ React.createElement("div", null, "Accepts ", /* @__PURE__ */ React.createElement("span", null, advancedAccept.map((acc, i2) => {
|
|
94470
|
+
var _a3;
|
|
94453
94471
|
const disabled2 = !(acc.description || acc.exampleFile || acc.exampleFiles);
|
|
94454
94472
|
const PopOrTooltip = acc.exampleFiles ? Popover : Tooltip;
|
|
94455
94473
|
const hasDownload = acc.exampleFile || acc.exampleFiles;
|
|
@@ -94459,7 +94477,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
94459
94477
|
{
|
|
94460
94478
|
key: i2,
|
|
94461
94479
|
interactionKind: "hover",
|
|
94462
|
-
disabled: disabled2,
|
|
94480
|
+
disabled: disabled2 || !!((_a3 = window.Cypress) == null ? void 0 : _a3.tg_disableDownloadExampleHover),
|
|
94463
94481
|
modifiers: popoverOverflowModifiers,
|
|
94464
94482
|
content: acc.exampleFiles ? /* @__PURE__ */ React.createElement(Menu, null, acc.exampleFiles.map(
|
|
94465
94483
|
({ description, subtext, exampleFile, icon }, i22) => /* @__PURE__ */ React.createElement(
|
|
@@ -95097,10 +95115,7 @@ ${latestSubscriptionCallbackError.current.stack}
|
|
|
95097
95115
|
(e || window.event).returnValue = defaultMessagge;
|
|
95098
95116
|
return defaultMessagge;
|
|
95099
95117
|
}, "warnBeforeLeave");
|
|
95100
|
-
function PromptUnsavedChanges({
|
|
95101
|
-
message = defaultMessagge,
|
|
95102
|
-
when = false
|
|
95103
|
-
}) {
|
|
95118
|
+
function PromptUnsavedChanges({ message = defaultMessagge, when = false }) {
|
|
95104
95119
|
reactExports.useEffect(() => {
|
|
95105
95120
|
if (when) {
|
|
95106
95121
|
window.addEventListener("beforeunload", warnBeforeLeave);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teselagen/ui",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.21",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": "https://github.com/TeselaGen/tg-oss",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
},
|
|
12
12
|
"./style.css": "./style.css"
|
|
13
13
|
},
|
|
14
|
-
"devDependencies": {},
|
|
15
14
|
"dependencies": {
|
|
16
15
|
"@blueprintjs/core": "3.54.0",
|
|
17
16
|
"@blueprintjs/datetime": "^3.24.1",
|
|
@@ -20,7 +19,6 @@
|
|
|
20
19
|
"@dnd-kit/modifiers": "^7.0.0",
|
|
21
20
|
"@dnd-kit/sortable": "^8.0.0",
|
|
22
21
|
"@teselagen/react-table": "6.10.18",
|
|
23
|
-
"chance": "1.1.11",
|
|
24
22
|
"classnames": "^2.3.2",
|
|
25
23
|
"color": "^3.2.1",
|
|
26
24
|
"copy-to-clipboard": "^3.3.1",
|
|
@@ -48,7 +46,6 @@
|
|
|
48
46
|
"recompose": "npm:react-recompose@0.31.1",
|
|
49
47
|
"redux": "^4.1.2",
|
|
50
48
|
"redux-form": "^8.3.10",
|
|
51
|
-
"redux-thunk": "2.4.1",
|
|
52
49
|
"remark-gfm": "^4.0.0",
|
|
53
50
|
"reselect": "^4.1.7",
|
|
54
51
|
"tippy.js": "^6.3.7",
|
|
@@ -58,5 +55,9 @@
|
|
|
58
55
|
"@dnd-kit/utilities": "3.2.2",
|
|
59
56
|
"@teselagen/file-utils": "0.3.23",
|
|
60
57
|
"@blueprintjs/icons": "3.33.0"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"chance": "1.1.11",
|
|
61
|
+
"redux-thunk": "2.4.1"
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -106,7 +106,7 @@ const FilterAndSortMenu = ({
|
|
|
106
106
|
if (dataType === "number") {
|
|
107
107
|
filterValToUse =
|
|
108
108
|
filterValue &&
|
|
109
|
-
filterValue.map(val => parseFloat(val
|
|
109
|
+
filterValue.map(val => parseFloat(`${val}`.replaceAll(",", "")));
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -234,7 +234,7 @@ const FilterInput = ({
|
|
|
234
234
|
multi={true}
|
|
235
235
|
creatable={true}
|
|
236
236
|
value={(filterValue || []).map(val => ({
|
|
237
|
-
label: val
|
|
237
|
+
label: `${val}`,
|
|
238
238
|
value: val
|
|
239
239
|
}))}
|
|
240
240
|
onChange={selectedOptions => {
|
|
@@ -205,6 +205,23 @@ function applyWhereClause(records, where) {
|
|
|
205
205
|
)
|
|
206
206
|
return false;
|
|
207
207
|
break;
|
|
208
|
+
case "_in":
|
|
209
|
+
if (!some(conditionValue, item => isEqual(value, item)))
|
|
210
|
+
return false;
|
|
211
|
+
break;
|
|
212
|
+
case "_nin":
|
|
213
|
+
if (some(conditionValue, item => isEqual(value, item)))
|
|
214
|
+
return false;
|
|
215
|
+
break;
|
|
216
|
+
case "_regex": {
|
|
217
|
+
try {
|
|
218
|
+
if (!isString(value) || !new RegExp(conditionValue).test(value))
|
|
219
|
+
return false;
|
|
220
|
+
} catch (e) {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
208
225
|
default:
|
|
209
226
|
if (operator.startsWith("_")) {
|
|
210
227
|
console.warn(`Unsupported operator: ${operator}`);
|
|
@@ -1282,4 +1282,203 @@ describe("filterLocalEntitiesToHasura", () => {
|
|
|
1282
1282
|
]);
|
|
1283
1283
|
expect(result.entityCount).toBe(5);
|
|
1284
1284
|
});
|
|
1285
|
+
|
|
1286
|
+
it("should filter protein features correctly", () => {
|
|
1287
|
+
const proteinFeatureEntities = [
|
|
1288
|
+
{
|
|
1289
|
+
type: "CDS",
|
|
1290
|
+
strand: 1,
|
|
1291
|
+
name: "araC",
|
|
1292
|
+
start: 3,
|
|
1293
|
+
end: 5,
|
|
1294
|
+
annotationTypePlural: "features",
|
|
1295
|
+
id: "WWBalzQw01Oq",
|
|
1296
|
+
forward: true,
|
|
1297
|
+
color: "#EF6500",
|
|
1298
|
+
size: 3
|
|
1299
|
+
},
|
|
1300
|
+
{
|
|
1301
|
+
type: "protein_bind",
|
|
1302
|
+
strand: 1,
|
|
1303
|
+
name: "Operator I2 and I1",
|
|
1304
|
+
start: 3,
|
|
1305
|
+
end: 8,
|
|
1306
|
+
annotationTypePlural: "features",
|
|
1307
|
+
id: "yOsnjK_GkeAv",
|
|
1308
|
+
forward: true,
|
|
1309
|
+
color: "#2E2E2E",
|
|
1310
|
+
size: 6
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
type: "CDS",
|
|
1314
|
+
strand: 1,
|
|
1315
|
+
name: "signal_peptide",
|
|
1316
|
+
start: 3,
|
|
1317
|
+
end: 11,
|
|
1318
|
+
annotationTypePlural: "features",
|
|
1319
|
+
id: "aPKESKXj0qUR",
|
|
1320
|
+
forward: true,
|
|
1321
|
+
color: "#EF6500",
|
|
1322
|
+
size: 9
|
|
1323
|
+
}
|
|
1324
|
+
];
|
|
1325
|
+
const result_equal = filterLocalEntitiesToHasura(proteinFeatureEntities, {
|
|
1326
|
+
where: {
|
|
1327
|
+
_and: [
|
|
1328
|
+
{
|
|
1329
|
+
size: {
|
|
1330
|
+
_eq: 3
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
]
|
|
1334
|
+
}
|
|
1335
|
+
});
|
|
1336
|
+
expect(result_equal.entities).toEqual([proteinFeatureEntities[0]]);
|
|
1337
|
+
|
|
1338
|
+
const result_in_list = filterLocalEntitiesToHasura(proteinFeatureEntities, {
|
|
1339
|
+
where: {
|
|
1340
|
+
_and: [
|
|
1341
|
+
{
|
|
1342
|
+
size: {
|
|
1343
|
+
_in: [3, 6]
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
]
|
|
1347
|
+
}
|
|
1348
|
+
});
|
|
1349
|
+
expect(result_in_list.entities).toEqual([
|
|
1350
|
+
proteinFeatureEntities[0],
|
|
1351
|
+
proteinFeatureEntities[1]
|
|
1352
|
+
]);
|
|
1353
|
+
|
|
1354
|
+
const result_not_in_list = filterLocalEntitiesToHasura(
|
|
1355
|
+
proteinFeatureEntities,
|
|
1356
|
+
{
|
|
1357
|
+
where: {
|
|
1358
|
+
_and: [
|
|
1359
|
+
{
|
|
1360
|
+
size: {
|
|
1361
|
+
_nin: [3, 6]
|
|
1362
|
+
}
|
|
1363
|
+
}
|
|
1364
|
+
]
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
);
|
|
1368
|
+
expect(result_not_in_list.entities).toEqual([proteinFeatureEntities[2]]);
|
|
1369
|
+
|
|
1370
|
+
const result_valid_regex = filterLocalEntitiesToHasura(
|
|
1371
|
+
proteinFeatureEntities,
|
|
1372
|
+
{
|
|
1373
|
+
where: {
|
|
1374
|
+
_and: [
|
|
1375
|
+
{
|
|
1376
|
+
name: {
|
|
1377
|
+
_regex: "^signal_"
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
]
|
|
1381
|
+
}
|
|
1382
|
+
}
|
|
1383
|
+
);
|
|
1384
|
+
expect(result_valid_regex.entities).toEqual([proteinFeatureEntities[2]]);
|
|
1385
|
+
|
|
1386
|
+
const result_invalid_regex = filterLocalEntitiesToHasura(
|
|
1387
|
+
proteinFeatureEntities,
|
|
1388
|
+
{
|
|
1389
|
+
where: {
|
|
1390
|
+
_and: [
|
|
1391
|
+
{
|
|
1392
|
+
name: {
|
|
1393
|
+
_regex: "["
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
]
|
|
1397
|
+
}
|
|
1398
|
+
}
|
|
1399
|
+
);
|
|
1400
|
+
expect(result_invalid_regex.entities).toEqual([]);
|
|
1401
|
+
});
|
|
1402
|
+
|
|
1403
|
+
it("should filter DNA features correctly", () => {
|
|
1404
|
+
const dnaFeatureEntities = [
|
|
1405
|
+
{
|
|
1406
|
+
type: "CDS",
|
|
1407
|
+
strand: 1,
|
|
1408
|
+
name: "araC",
|
|
1409
|
+
start: 3,
|
|
1410
|
+
end: 5,
|
|
1411
|
+
annotationTypePlural: "features",
|
|
1412
|
+
id: "WWBalzQw01Oq",
|
|
1413
|
+
forward: true,
|
|
1414
|
+
color: "#EF6500",
|
|
1415
|
+
size: 3
|
|
1416
|
+
},
|
|
1417
|
+
{
|
|
1418
|
+
type: "protein_bind",
|
|
1419
|
+
strand: 1,
|
|
1420
|
+
name: "Operator I2 and I1",
|
|
1421
|
+
start: 3,
|
|
1422
|
+
end: 8,
|
|
1423
|
+
annotationTypePlural: "features",
|
|
1424
|
+
id: "yOsnjK_GkeAv",
|
|
1425
|
+
forward: true,
|
|
1426
|
+
color: "#2E2E2E",
|
|
1427
|
+
size: 6
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
type: "CDS",
|
|
1431
|
+
strand: 1,
|
|
1432
|
+
name: "signal_peptide",
|
|
1433
|
+
start: 3,
|
|
1434
|
+
end: 11,
|
|
1435
|
+
annotationTypePlural: "features",
|
|
1436
|
+
id: "aPKESKXj0qUR",
|
|
1437
|
+
forward: true,
|
|
1438
|
+
color: "#EF6500",
|
|
1439
|
+
size: 9
|
|
1440
|
+
}
|
|
1441
|
+
];
|
|
1442
|
+
const result_equal = filterLocalEntitiesToHasura(dnaFeatureEntities, {
|
|
1443
|
+
where: {
|
|
1444
|
+
_and: [
|
|
1445
|
+
{
|
|
1446
|
+
size: {
|
|
1447
|
+
_eq: 3
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
]
|
|
1451
|
+
}
|
|
1452
|
+
});
|
|
1453
|
+
expect(result_equal.entities).toEqual([dnaFeatureEntities[0]]);
|
|
1454
|
+
|
|
1455
|
+
const result_in_list = filterLocalEntitiesToHasura(dnaFeatureEntities, {
|
|
1456
|
+
where: {
|
|
1457
|
+
_and: [
|
|
1458
|
+
{
|
|
1459
|
+
size: {
|
|
1460
|
+
_in: [3, 6]
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
]
|
|
1464
|
+
}
|
|
1465
|
+
});
|
|
1466
|
+
expect(result_in_list.entities).toEqual([
|
|
1467
|
+
dnaFeatureEntities[0],
|
|
1468
|
+
dnaFeatureEntities[1]
|
|
1469
|
+
]);
|
|
1470
|
+
|
|
1471
|
+
const result_not_in_list = filterLocalEntitiesToHasura(dnaFeatureEntities, {
|
|
1472
|
+
where: {
|
|
1473
|
+
_and: [
|
|
1474
|
+
{
|
|
1475
|
+
size: {
|
|
1476
|
+
_nin: [3, 6]
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
]
|
|
1480
|
+
}
|
|
1481
|
+
});
|
|
1482
|
+
expect(result_not_in_list.entities).toEqual([dnaFeatureEntities[2]]);
|
|
1483
|
+
});
|
|
1285
1484
|
});
|
|
@@ -658,7 +658,10 @@ const Uploader = ({
|
|
|
658
658
|
<PopOrTooltip
|
|
659
659
|
key={i}
|
|
660
660
|
interactionKind="hover"
|
|
661
|
-
disabled={
|
|
661
|
+
disabled={
|
|
662
|
+
disabled ||
|
|
663
|
+
!!window.Cypress?.tg_disableDownloadExampleHover
|
|
664
|
+
}
|
|
662
665
|
modifiers={popoverOverflowModifiers}
|
|
663
666
|
content={
|
|
664
667
|
acc.exampleFiles ? (
|
|
@@ -17,10 +17,7 @@ const warnBeforeLeave = e => {
|
|
|
17
17
|
return defaultMessagge; //Webkit, Safari, Chrome
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
message = defaultMessagge,
|
|
22
|
-
when = false
|
|
23
|
-
}) {
|
|
20
|
+
function PromptUnsavedChanges({ message = defaultMessagge, when = false }) {
|
|
24
21
|
useEffect(() => {
|
|
25
22
|
if (when) {
|
|
26
23
|
window.addEventListener("beforeunload", warnBeforeLeave);
|