synapse-react-client 3.1.1 → 3.1.3
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/dist/containers/CardContainerLogic.d.ts +7 -0
- package/dist/containers/CardContainerLogic.js +12 -0
- package/dist/containers/CardContainerLogic.js.map +1 -1
- package/dist/containers/HasAccessV2.js +9 -6
- package/dist/containers/HasAccessV2.js.map +1 -1
- package/dist/containers/InfiniteQueryWrapper.d.ts +2 -2
- package/dist/containers/InfiniteQueryWrapper.js +24 -94
- package/dist/containers/InfiniteQueryWrapper.js.map +1 -1
- package/dist/containers/QueryContext.d.ts +6 -5
- package/dist/containers/QuerySortSelector.d.ts +8 -0
- package/dist/containers/QuerySortSelector.js +50 -0
- package/dist/containers/QuerySortSelector.js.map +1 -0
- package/dist/containers/QueryWrapper.d.ts +2 -2
- package/dist/containers/QueryWrapper.js +21 -106
- package/dist/containers/QueryWrapper.js.map +1 -1
- package/dist/containers/RssFeedCards.d.ts +2 -2
- package/dist/containers/RssFeedCards.js +4 -4
- package/dist/containers/RssFeedCards.js.map +1 -1
- package/dist/containers/SearchV2.d.ts +2 -2
- package/dist/containers/SearchV2.js +8 -8
- package/dist/containers/SearchV2.js.map +1 -1
- package/dist/containers/entity/annotations/CustomSelectWidget.d.ts +19 -0
- package/dist/containers/entity/annotations/CustomSelectWidget.js +4 -2
- package/dist/containers/entity/annotations/CustomSelectWidget.js.map +1 -1
- package/dist/containers/table/SynapseTable.js +10 -3
- package/dist/containers/table/SynapseTable.js.map +1 -1
- package/dist/containers/useImmutableTableQuery.d.ts +32 -0
- package/dist/containers/useImmutableTableQuery.js +102 -0
- package/dist/containers/useImmutableTableQuery.js.map +1 -0
- package/dist/containers/widgets/query-filter/FacetChip.d.ts +8 -0
- package/dist/containers/widgets/query-filter/FacetChip.js +21 -0
- package/dist/containers/widgets/query-filter/FacetChip.js.map +1 -0
- package/dist/containers/widgets/query-filter/QueryFilter.js +43 -15
- package/dist/containers/widgets/query-filter/QueryFilter.js.map +1 -1
- package/dist/style/bootstrap4_backports/_overrides.scss +1 -0
- package/dist/style/components/_all.scss +17 -16
- package/dist/style/components/_cards.scss +14 -0
- package/dist/style/components/_query-filter.scss +8 -0
- package/dist/style/components/_query-wrapper-plot-nav.scss +54 -46
- package/dist/style/components/query_filter/_facet-chip.scss +18 -0
- package/dist/style/main.css +95 -43
- package/dist/umd/synapse-react-client.development.css +92 -43
- package/dist/umd/synapse-react-client.development.css.map +2 -2
- package/dist/umd/synapse-react-client.development.js +2521 -2440
- package/dist/umd/synapse-react-client.development.js.map +3 -3
- package/dist/umd/synapse-react-client.production.min.css +1 -1
- package/dist/umd/synapse-react-client.production.min.js +90 -90
- package/dist/utils/functions/queryUtils.d.ts +3 -2
- package/dist/utils/functions/queryUtils.js +18 -2
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { KeyValue, SQLOperator } from '../utils/functions/sqlFunctions';
|
|
3
|
+
import { SortDirection } from '../utils/synapseTypes/';
|
|
3
4
|
import { GenericCardSchema, IconOptions } from './GenericCard';
|
|
4
5
|
import { IconSvgOptions } from './IconSvg';
|
|
5
6
|
/**
|
|
@@ -33,6 +34,11 @@ export declare type MarkdownLink = {
|
|
|
33
34
|
matchColumnName: string;
|
|
34
35
|
tooltipText?: string;
|
|
35
36
|
};
|
|
37
|
+
export declare type SortConfiguration = {
|
|
38
|
+
defaultColumn: string;
|
|
39
|
+
defaultDirection: SortDirection;
|
|
40
|
+
sortableColumns: string[];
|
|
41
|
+
};
|
|
36
42
|
export declare type CTACardLink = {
|
|
37
43
|
text: string;
|
|
38
44
|
link: string;
|
|
@@ -75,6 +81,7 @@ export declare type CardContainerLogicProps = {
|
|
|
75
81
|
isHeader?: boolean;
|
|
76
82
|
isAlignToLeftNav?: boolean;
|
|
77
83
|
sql: string;
|
|
84
|
+
sortConfig?: SortConfiguration;
|
|
78
85
|
} & CardConfiguration;
|
|
79
86
|
/**
|
|
80
87
|
* Class wraps around CardContainer and serves as a standalone logic container for rendering cards.
|
|
@@ -10,6 +10,7 @@ var ErrorBanner_1 = require("./ErrorBanner");
|
|
|
10
10
|
var QueryVisualizationWrapper_1 = require("./QueryVisualizationWrapper");
|
|
11
11
|
var QueryContext_1 = require("./QueryContext");
|
|
12
12
|
var InfiniteQueryWrapper_1 = require("./InfiniteQueryWrapper");
|
|
13
|
+
var QuerySortSelector_1 = tslib_1.__importDefault(require("./QuerySortSelector"));
|
|
13
14
|
var TargetEnum;
|
|
14
15
|
(function (TargetEnum) {
|
|
15
16
|
TargetEnum["CURRENT_WINDOW"] = "_self";
|
|
@@ -22,12 +23,22 @@ var TargetEnum;
|
|
|
22
23
|
*/
|
|
23
24
|
var CardContainerLogic = function (props) {
|
|
24
25
|
var sql = (0, sqlFunctions_1.insertConditionsFromSearchParams)(props.sql, props.searchParams, props.sqlOperator);
|
|
26
|
+
var sortConfig = props.sortConfig, facetAliases = props.facetAliases;
|
|
27
|
+
var defaultSortItems = sortConfig
|
|
28
|
+
? [
|
|
29
|
+
{
|
|
30
|
+
column: sortConfig.defaultColumn,
|
|
31
|
+
direction: sortConfig.defaultDirection,
|
|
32
|
+
},
|
|
33
|
+
]
|
|
34
|
+
: undefined;
|
|
25
35
|
var initQueryRequest = {
|
|
26
36
|
concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',
|
|
27
37
|
entityId: (0, sqlFunctions_1.parseEntityIdFromSqlStatement)(sql),
|
|
28
38
|
query: {
|
|
29
39
|
sql: sql,
|
|
30
40
|
limit: props.limit,
|
|
41
|
+
sort: defaultSortItems,
|
|
31
42
|
},
|
|
32
43
|
partMask: utils_1.SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |
|
|
33
44
|
utils_1.SynapseConstants.BUNDLE_MASK_QUERY_COUNT |
|
|
@@ -40,6 +51,7 @@ var CardContainerLogic = function (props) {
|
|
|
40
51
|
};
|
|
41
52
|
return (React.createElement(InfiniteQueryWrapper_1.InfiniteQueryWrapper, tslib_1.__assign({}, props, { initQueryRequest: initQueryRequest }),
|
|
42
53
|
React.createElement(QueryVisualizationWrapper_1.QueryVisualizationWrapper, { rgbIndex: props.rgbIndex, unitDescription: props.unitDescription, facetAliases: props.facetAliases },
|
|
54
|
+
sortConfig && (React.createElement(QuerySortSelector_1.default, { sortConfig: sortConfig, facetAliases: facetAliases })),
|
|
43
55
|
React.createElement(CardContainer_1.default, tslib_1.__assign({}, props)),
|
|
44
56
|
React.createElement(QueryContext_1.QueryContextConsumer, null, function (queryContext) { return React.createElement(ErrorBanner_1.ErrorBanner, { error: queryContext === null || queryContext === void 0 ? void 0 : queryContext.error }); }))));
|
|
45
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardContainerLogic.js","sourceRoot":"","sources":["../../src/lib/containers/CardContainerLogic.tsx"],"names":[],"mappings":";;;;AAAA,mDAA8B;AAC9B,kCAA2C;AAC3C,gEAKwC;AAExC,0EAA2C;AAC3C,6CAA2C;AAG3C,yEAAuE;AACvE,+CAAqD;AACrD,+DAA6D;
|
|
1
|
+
{"version":3,"file":"CardContainerLogic.js","sourceRoot":"","sources":["../../src/lib/containers/CardContainerLogic.tsx"],"names":[],"mappings":";;;;AAAA,mDAA8B;AAC9B,kCAA2C;AAC3C,gEAKwC;AAExC,0EAA2C;AAC3C,6CAA2C;AAG3C,yEAAuE;AACvE,+CAAqD;AACrD,+DAA6D;AAC7D,kFAAmD;AAgBnD,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,sCAAwB,CAAA;IACxB,mCAAqB,CAAA;IACrB,sCAAwB,CAAA;IACxB,uCAAyB,CAAA;AAC3B,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB;AA0FD;;GAEG;AACI,IAAM,kBAAkB,GAAG,UAAC,KAA8B;IAC/D,IAAM,GAAG,GAAG,IAAA,+CAAgC,EAC1C,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,WAAW,CAClB,CAAA;IACO,IAAA,UAAU,GAAmB,KAAK,WAAxB,EAAE,YAAY,GAAK,KAAK,aAAV,CAAU;IAC1C,IAAM,gBAAgB,GAAG,UAAU;QACjC,CAAC,CAAC;YACE;gBACE,MAAM,EAAE,UAAU,CAAC,aAAa;gBAChC,SAAS,EAAE,UAAU,CAAC,gBAAgB;aACvC;SACF;QACH,CAAC,CAAC,SAAS,CAAA;IACb,IAAM,gBAAgB,GAAuB;QAC3C,YAAY,EAAE,yDAAyD;QACvE,QAAQ,EAAE,IAAA,4CAA6B,EAAC,GAAG,CAAC;QAC5C,KAAK,EAAE;YACL,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,gBAAgB;SACvB;QACD,QAAQ,EACN,wBAAgB,CAAC,yBAAyB;YAC1C,wBAAgB,CAAC,uBAAuB;YACxC,wBAAgB,CAAC,gCAAgC;YACjD,wBAAgB,CAAC,mCAAmC;YACpD,wBAAgB,CAAC,+BAA+B;YAChD,wBAAgB,CAAC,wBAAwB;YACzC,wBAAgB,CAAC,gCAAgC;YACjD,wBAAgB,CAAC,2BAA2B;KAC/C,CAAA;IAED,OAAO,CACL,oBAAC,2CAAoB,uBAAK,KAAK,IAAE,gBAAgB,EAAE,gBAAgB;QACjE,oBAAC,qDAAyB,IACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,YAAY,EAAE,KAAK,CAAC,YAAY;YAE/B,UAAU,IAAI,CACb,oBAAC,2BAAiB,IAChB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,GAC1B,CACH;YACD,oBAAC,uBAAa,uBAAK,KAAK,EAAI;YAC5B,oBAAC,mCAAoB,QAClB,UAAA,YAAY,IAAI,OAAA,oBAAC,yBAAW,IAAC,KAAK,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,GAAI,EAA3C,CAA2C,CACvC,CACG,CACP,CACxB,CAAA;AACH,CAAC,CAAA;AAtDY,QAAA,kBAAkB,sBAsD9B;AAED,kBAAe,0BAAkB,CAAA"}
|
|
@@ -3,7 +3,7 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.HasAccessV2 = exports.useGetFileHandleDownloadType = exports.FileHandleDownloadTypeEnum = exports.GIGABYTE_SIZE = void 0;
|
|
5
5
|
var tslib_1 = require("tslib");
|
|
6
|
-
var react_1 = tslib_1.
|
|
6
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
7
|
var utils_1 = require("../utils");
|
|
8
8
|
var getEndpoint_1 = require("../utils/functions/getEndpoint");
|
|
9
9
|
var useGetAccessRequirement_1 = require("../utils/hooks/SynapseAPI/dataaccess/useGetAccessRequirement");
|
|
@@ -135,7 +135,6 @@ function HasAccessV2(props) {
|
|
|
135
135
|
}); }, [entityId]);
|
|
136
136
|
var restrictionInformation = (0, useGetAccessRequirement_1.useGetRestrictionInformation)(restrictionInformationRequest).data;
|
|
137
137
|
var handleGetAccess = function () {
|
|
138
|
-
var entityId = props.entityId;
|
|
139
138
|
// TODO: The fetch should really happen in the AR List component.
|
|
140
139
|
// If we need to open the AR page in synapse, the logic should be in the modal and it should just close itself right away
|
|
141
140
|
utils_1.SynapseClient.getAllAccessRequirements(accessToken, entityId).then(function (requirements) {
|
|
@@ -149,8 +148,7 @@ function HasAccessV2(props) {
|
|
|
149
148
|
});
|
|
150
149
|
};
|
|
151
150
|
// Show Access Requirements
|
|
152
|
-
var
|
|
153
|
-
var entityId = props.entityId;
|
|
151
|
+
var accessRequirementsJsx = (0, react_1.useMemo)(function () {
|
|
154
152
|
if (!restrictionInformation) {
|
|
155
153
|
// loading
|
|
156
154
|
return react_1.default.createElement(react_1.default.Fragment, null);
|
|
@@ -178,7 +176,12 @@ function HasAccessV2(props) {
|
|
|
178
176
|
displayAccessRequirement && (react_1.default.createElement(AccessRequirementList_1.default, { entityId: entityId, accessRequirementFromProps: accessRequirements, renderAsModal: true, onHide: function () {
|
|
179
177
|
setDisplayAccessRequirement(false);
|
|
180
178
|
} }))));
|
|
181
|
-
}
|
|
179
|
+
}, [
|
|
180
|
+
entityId,
|
|
181
|
+
restrictionInformation,
|
|
182
|
+
accessRequirements,
|
|
183
|
+
displayAccessRequirement,
|
|
184
|
+
]);
|
|
182
185
|
if (fileHandleDownloadType === undefined) {
|
|
183
186
|
// note, this can't be "if (!downloadType)" since DownloadTypeEnum has a 0 value (which is falsy)
|
|
184
187
|
// loading
|
|
@@ -208,7 +211,7 @@ function HasAccessV2(props) {
|
|
|
208
211
|
react_1.default.createElement(AccessIcon, { downloadType: fileHandleDownloadType }))) : (react_1.default.createElement(AccessIcon, { downloadType: fileHandleDownloadType }));
|
|
209
212
|
return (react_1.default.createElement("span", { style: { whiteSpace: 'nowrap' } },
|
|
210
213
|
iconContainer,
|
|
211
|
-
|
|
214
|
+
accessRequirementsJsx));
|
|
212
215
|
}
|
|
213
216
|
exports.HasAccessV2 = HasAccessV2;
|
|
214
217
|
//# sourceMappingURL=HasAccessV2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HasAccessV2.js","sourceRoot":"","sources":["../../src/lib/containers/HasAccessV2.tsx"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"HasAccessV2.js","sourceRoot":"","sources":["../../src/lib/containers/HasAccessV2.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { QueryBundleRequest } from '../utils/synapseTypes';
|
|
3
|
-
import {
|
|
3
|
+
import { LockedColumn } from './QueryContext';
|
|
4
4
|
export declare const QUERY_FILTERS_EXPANDED_CSS: string;
|
|
5
5
|
export declare const QUERY_FILTERS_COLLAPSED_CSS: string;
|
|
6
6
|
export declare type InfiniteQueryWrapperProps = {
|
|
@@ -10,7 +10,7 @@ export declare type InfiniteQueryWrapperProps = {
|
|
|
10
10
|
shouldDeepLink?: boolean;
|
|
11
11
|
onQueryChange?: (newQueryJson: string) => void;
|
|
12
12
|
onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void;
|
|
13
|
-
|
|
13
|
+
lockedColumn?: LockedColumn;
|
|
14
14
|
};
|
|
15
15
|
export declare type SearchQuery = {
|
|
16
16
|
columnName: string;
|
|
@@ -2,16 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InfiniteQueryWrapper = exports.QUERY_FILTERS_COLLAPSED_CSS = exports.QUERY_FILTERS_EXPANDED_CSS = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var lodash_es_1 = require("lodash-es");
|
|
6
5
|
var React = tslib_1.__importStar(require("react"));
|
|
7
6
|
var react_1 = require("react");
|
|
8
|
-
var use_deep_compare_effect_1 = tslib_1.__importDefault(require("use-deep-compare-effect"));
|
|
9
|
-
var DeepLinkingUtils = tslib_1.__importStar(require("../utils/functions/deepLinkingUtils"));
|
|
10
7
|
var queryUtils_1 = require("../utils/functions/queryUtils");
|
|
11
|
-
var sqlFunctions_1 = require("../utils/functions/sqlFunctions");
|
|
12
8
|
var useEntity_1 = require("../utils/hooks/SynapseAPI/entity/useEntity");
|
|
13
9
|
var useGetQueryResultBundle_1 = require("../utils/hooks/SynapseAPI/entity/useGetQueryResultBundle");
|
|
14
10
|
var QueryContext_1 = require("./QueryContext");
|
|
11
|
+
var useImmutableTableQuery_1 = tslib_1.__importDefault(require("./useImmutableTableQuery"));
|
|
15
12
|
exports.QUERY_FILTERS_EXPANDED_CSS = 'isShowingFacetFilters';
|
|
16
13
|
exports.QUERY_FILTERS_COLLAPSED_CSS = 'isHidingFacetFilters';
|
|
17
14
|
/**
|
|
@@ -19,19 +16,29 @@ exports.QUERY_FILTERS_COLLAPSED_CSS = 'isHidingFacetFilters';
|
|
|
19
16
|
* either `useQueryContext` or `QueryContextConsumer`.
|
|
20
17
|
*/
|
|
21
18
|
function InfiniteQueryWrapper(props) {
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
var initQueryRequest = props.initQueryRequest, onQueryChange = props.onQueryChange, onQueryResultBundleChange = props.onQueryResultBundleChange, lockedColumn = props.lockedColumn, componentIndex = props.componentIndex, shouldDeepLink = props.shouldDeepLink;
|
|
20
|
+
var _a = (0, react_1.useState)(undefined), currentAsyncStatus = _a[0], setCurrentAsyncStatus = _a[1];
|
|
21
|
+
var _b = (0, useImmutableTableQuery_1.default)({
|
|
22
|
+
initQueryRequest: initQueryRequest,
|
|
23
|
+
componentIndex: componentIndex,
|
|
24
|
+
shouldDeepLink: shouldDeepLink,
|
|
25
|
+
onQueryChange: onQueryChange,
|
|
26
|
+
}), entityId = _b.entityId, versionNumber = _b.versionNumber, getInitQueryRequest = _b.getInitQueryRequest, getLastQueryRequest = _b.getLastQueryRequest, setQuery = _b.setQuery;
|
|
27
|
+
var lastQueryRequest = (0, react_1.useMemo)(function () {
|
|
28
|
+
return getLastQueryRequest();
|
|
29
|
+
}, [getLastQueryRequest]);
|
|
30
|
+
var _c = (0, useGetQueryResultBundle_1.useInfiniteQueryResultBundle)(lastQueryRequest, {
|
|
27
31
|
// We use `keepPreviousData` because we don't want to clear out the current data when the query is modified via the UI
|
|
28
32
|
keepPreviousData: true,
|
|
29
|
-
}, setCurrentAsyncStatus), infiniteData =
|
|
33
|
+
}, setCurrentAsyncStatus), infiniteData = _c.data, hasNextPage = _c.hasNextPage, fetchPreviousPage = _c.fetchPreviousPage, fetchNextPage = _c.fetchNextPage, isFetchingNextPage = _c.isFetchingNextPage, queryIsLoading = _c.isLoading, error = _c.error, newQueryIsFetching = _c.isPreviousData;
|
|
30
34
|
// Indicate if we're fetching data for the first time (queryIsLoading) or if we're fetching data for a brand new query (newQueryIsFetching)
|
|
31
35
|
var isLoadingNewBundle = queryIsLoading || newQueryIsFetching;
|
|
32
|
-
var _f = (0, sqlFunctions_1.parseEntityIdAndVersionFromSqlStatement)(lastQueryRequest.query.sql), entityId = _f.entityId, versionNumber = _f.versionNumber;
|
|
33
36
|
var entity = (0, useEntity_1.useGetEntity)(entityId, versionNumber).data;
|
|
34
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Since we're showing an infinite list of data, use custom pagination handling instead of pagination utils provided by
|
|
39
|
+
* useImmutableTableQuery
|
|
40
|
+
*/
|
|
41
|
+
var _d = (0, react_1.useState)(0), currentPage = _d[0], setCurrentPage = _d[1];
|
|
35
42
|
function appendNextPageToResults() {
|
|
36
43
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
37
44
|
return tslib_1.__generator(this, function (_a) {
|
|
@@ -103,101 +110,24 @@ function InfiniteQueryWrapper(props) {
|
|
|
103
110
|
}
|
|
104
111
|
return infiniteData === null || infiniteData === void 0 ? void 0 : infiniteData.pages[currentPage].responseBody;
|
|
105
112
|
}, [currentPage, infiniteData]);
|
|
106
|
-
(0, use_deep_compare_effect_1.default)(function () {
|
|
107
|
-
if (onQueryChange) {
|
|
108
|
-
onQueryChange(JSON.stringify(lastQueryRequest.query));
|
|
109
|
-
}
|
|
110
|
-
}, [onQueryChange, lastQueryRequest.query]);
|
|
111
113
|
(0, react_1.useEffect)(function () {
|
|
112
114
|
if (data && onQueryResultBundleChange) {
|
|
113
115
|
onQueryResultBundleChange(JSON.stringify(data));
|
|
114
116
|
}
|
|
115
117
|
}, [data, onQueryResultBundleChange]);
|
|
116
|
-
var componentIndex = (_a = props.componentIndex) !== null && _a !== void 0 ? _a : 0;
|
|
117
118
|
var isFacetsAvailable = data
|
|
118
119
|
? (0, queryUtils_1.isFacetAvailable)(data.facets, data.selectColumns)
|
|
119
120
|
: true;
|
|
120
|
-
/**
|
|
121
|
-
* Inspect the URL to see if we have a particular query request that we must show.
|
|
122
|
-
*/
|
|
123
|
-
(0, react_1.useEffect)(function () {
|
|
124
|
-
var query = DeepLinkingUtils.getQueryRequestFromLink('QueryWrapper', componentIndex);
|
|
125
|
-
if (query) {
|
|
126
|
-
setLastQueryRequest(query);
|
|
127
|
-
}
|
|
128
|
-
}, []);
|
|
129
|
-
/**
|
|
130
|
-
* Pass down a deep clone (so no side affects on the child's part) of the
|
|
131
|
-
* last query request made
|
|
132
|
-
*
|
|
133
|
-
* @returns
|
|
134
|
-
* @memberof QueryWrapper
|
|
135
|
-
*/
|
|
136
|
-
var getLastQueryRequest = React.useCallback(function () {
|
|
137
|
-
return (0, lodash_es_1.cloneDeep)(lastQueryRequest);
|
|
138
|
-
}, [lastQueryRequest]);
|
|
139
|
-
/**
|
|
140
|
-
* Pass down a deep clone (so no side affects on the child's part) of the
|
|
141
|
-
* first query request made
|
|
142
|
-
*
|
|
143
|
-
* @returns
|
|
144
|
-
* @memberof QueryWrapper
|
|
145
|
-
*/
|
|
146
|
-
function getInitQueryRequest() {
|
|
147
|
-
return (0, lodash_es_1.cloneDeep)(props.initQueryRequest);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Execute the given query request, updating all of the data in the QueryContext to match the new query
|
|
151
|
-
* @param {*} queryRequest Query request as specified by
|
|
152
|
-
* https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Query.html
|
|
153
|
-
*/
|
|
154
|
-
function executeQueryRequest(queryRequest) {
|
|
155
|
-
var clonedQueryRequest = (0, lodash_es_1.cloneDeep)(queryRequest);
|
|
156
|
-
setLastQueryRequest(clonedQueryRequest);
|
|
157
|
-
setCurrentPage(0);
|
|
158
|
-
if (clonedQueryRequest.query) {
|
|
159
|
-
var clonedQueryRequestJson = JSON.stringify(clonedQueryRequest.query);
|
|
160
|
-
var stringifiedQuery = encodeURIComponent(clonedQueryRequestJson);
|
|
161
|
-
if (props.shouldDeepLink) {
|
|
162
|
-
if (props.onQueryChange) {
|
|
163
|
-
props.onQueryChange(clonedQueryRequestJson);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
DeepLinkingUtils.updateUrlWithNewSearchParam('QueryWrapper', componentIndex, stringifiedQuery);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* TODO: We remove the cached data because it can interfere with user controls, such as the QueryFilter.
|
|
172
|
-
* For example, if you filter on a facet with value ["a"], then value ["a", "b"], then value ["a"] again,
|
|
173
|
-
* we'll have a cache hit on the last query, so we won't get a loading state, but the controls haven't been updated
|
|
174
|
-
* to handle cache hits. Forcing a cache miss here fixes this, but ideally the controls should handle this case.
|
|
175
|
-
*/
|
|
176
|
-
remove();
|
|
177
|
-
// end TODO
|
|
178
|
-
}
|
|
179
121
|
/**
|
|
180
122
|
* remove a particular facet name (e.g. study) and its all possible values based on the parameter specified in the url
|
|
181
123
|
* this is to remove the facet from the charts, search and filter.
|
|
182
124
|
* @return data: QueryResultBundle
|
|
183
125
|
*/
|
|
184
|
-
var
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
if (lockedFacet && data) {
|
|
188
|
-
// for details page, return data without the "locked" facet
|
|
189
|
-
var dataCopy = (0, lodash_es_1.cloneDeep)(data);
|
|
190
|
-
var facets = (_b = dataCopy.facets) === null || _b === void 0 ? void 0 : _b.filter(function (item) { return item.columnName.toLowerCase() !== lockedFacet.toLowerCase(); });
|
|
191
|
-
dataCopy.facets = facets;
|
|
192
|
-
return dataCopy;
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
// for other pages, just return the data
|
|
196
|
-
return data;
|
|
197
|
-
}
|
|
198
|
-
}, [data, (_b = props.lockedFacet) === null || _b === void 0 ? void 0 : _b.facet]);
|
|
126
|
+
var dataWithLockedColumnFacetRemoved = (0, react_1.useMemo)(function () {
|
|
127
|
+
return (0, queryUtils_1.removeLockedColumnFromFacetData)(data, lockedColumn);
|
|
128
|
+
}, [data, lockedColumn]);
|
|
199
129
|
var context = {
|
|
200
|
-
data:
|
|
130
|
+
data: dataWithLockedColumnFacetRemoved,
|
|
201
131
|
isLoadingNewPage: isFetchingNextPage,
|
|
202
132
|
hasNextPage: !!hasNextPage,
|
|
203
133
|
hasPreviousPage: !!hasPreviousPage,
|
|
@@ -206,7 +136,7 @@ function InfiniteQueryWrapper(props) {
|
|
|
206
136
|
getInitQueryRequest: getInitQueryRequest,
|
|
207
137
|
error: error,
|
|
208
138
|
entity: entity,
|
|
209
|
-
executeQueryRequest:
|
|
139
|
+
executeQueryRequest: setQuery,
|
|
210
140
|
isFacetsAvailable: isFacetsAvailable,
|
|
211
141
|
asyncJobStatus: currentAsyncStatus,
|
|
212
142
|
appendNextPageToResults: appendNextPageToResults,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfiniteQueryWrapper.js","sourceRoot":"","sources":["../../src/lib/containers/InfiniteQueryWrapper.tsx"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"InfiniteQueryWrapper.js","sourceRoot":"","sources":["../../src/lib/containers/InfiniteQueryWrapper.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { SynapseClientError } from '../utils/SynapseClientError';
|
|
|
3
3
|
import { AsynchronousJobStatus, QueryBundleRequest, QueryResultBundle, Table } from '../utils/synapseTypes';
|
|
4
4
|
export declare const QUERY_FILTERS_EXPANDED_CSS: string;
|
|
5
5
|
export declare const QUERY_FILTERS_COLLAPSED_CSS: string;
|
|
6
|
-
export declare type
|
|
7
|
-
|
|
6
|
+
export declare type LockedColumn = {
|
|
7
|
+
columnName?: string;
|
|
8
8
|
value?: string;
|
|
9
9
|
};
|
|
10
10
|
export declare type QueryContextType = {
|
|
@@ -27,10 +27,11 @@ export declare type QueryContextType = {
|
|
|
27
27
|
/** Whether or not facets are available to be filtered upon based on the current data */
|
|
28
28
|
isFacetsAvailable: boolean;
|
|
29
29
|
/**
|
|
30
|
-
* A
|
|
31
|
-
*
|
|
30
|
+
* A column name may be "locked" so that it is both (1) not shown to the user that the filter is active, and (2) not modifiable by the user.
|
|
31
|
+
* For example, we may show only the data matching a particular facet value on a Details Page without implying that the shown data is part of a larger table.
|
|
32
|
+
* The presence of a locked filter will result in a client-side modification of the active query and result bundle data.
|
|
32
33
|
*/
|
|
33
|
-
|
|
34
|
+
lockedColumn?: LockedColumn;
|
|
34
35
|
};
|
|
35
36
|
export declare type PaginatedQueryContextType = QueryContextType & {
|
|
36
37
|
/** Navigates to a particular page, where the first page has value 1 */
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SortConfiguration } from './CardContainerLogic';
|
|
3
|
+
export declare type QuerySortSelectorProps = {
|
|
4
|
+
sortConfig: SortConfiguration;
|
|
5
|
+
facetAliases?: Record<string, string>;
|
|
6
|
+
};
|
|
7
|
+
declare const QuerySortSelector: React.FunctionComponent<QuerySortSelectorProps>;
|
|
8
|
+
export default QuerySortSelector;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
+
var QueryContext_1 = require("./QueryContext");
|
|
6
|
+
var unCamelCase_1 = require("../utils/functions/unCamelCase");
|
|
7
|
+
var Typography_1 = tslib_1.__importDefault(require("../utils/typography/Typography"));
|
|
8
|
+
var react_select_1 = tslib_1.__importDefault(require("react-select"));
|
|
9
|
+
var CustomSelectWidget_1 = require("./entity/annotations/CustomSelectWidget");
|
|
10
|
+
var QuerySortSelector = function (_a) {
|
|
11
|
+
var sortConfig = _a.sortConfig, facetAliases = _a.facetAliases;
|
|
12
|
+
var defaultColumn = sortConfig.defaultColumn, defaultDirection = sortConfig.defaultDirection, sortableColumns = sortConfig.sortableColumns;
|
|
13
|
+
var queryContext = (0, QueryContext_1.useQueryContext)();
|
|
14
|
+
var getLastQueryRequest = queryContext.getLastQueryRequest, executeQueryRequest = queryContext.executeQueryRequest;
|
|
15
|
+
var _b = (0, react_1.useState)(defaultColumn), sortColumn = _b[0], setSortColumn = _b[1];
|
|
16
|
+
var _c = (0, react_1.useState)(defaultDirection), sortDirection = _c[0], setSortDirection = _c[1];
|
|
17
|
+
var enumOptions = sortableColumns.map(function (sortableColumn) {
|
|
18
|
+
return {
|
|
19
|
+
value: sortableColumn,
|
|
20
|
+
label: (0, unCamelCase_1.unCamelCase)(sortableColumn, facetAliases),
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
var onChange = function (value) {
|
|
24
|
+
var lastQueryRequestDeepClone = getLastQueryRequest();
|
|
25
|
+
var newSortDirection = 'ASC';
|
|
26
|
+
if (value === sortColumn) {
|
|
27
|
+
// flip sort direction
|
|
28
|
+
newSortDirection = sortDirection === 'ASC' ? 'DESC' : 'ASC';
|
|
29
|
+
}
|
|
30
|
+
var newSortItems = value
|
|
31
|
+
? [
|
|
32
|
+
{
|
|
33
|
+
column: value,
|
|
34
|
+
direction: newSortDirection,
|
|
35
|
+
},
|
|
36
|
+
]
|
|
37
|
+
: undefined;
|
|
38
|
+
lastQueryRequestDeepClone.query.sort = newSortItems;
|
|
39
|
+
executeQueryRequest(lastQueryRequestDeepClone);
|
|
40
|
+
setSortColumn(value);
|
|
41
|
+
setSortDirection(newSortDirection);
|
|
42
|
+
};
|
|
43
|
+
return (react_1.default.createElement("div", { className: "QuerySortSelector bootstrap-4-backport" },
|
|
44
|
+
react_1.default.createElement(Typography_1.default, { variant: "label", className: "sort-by-label SRC-inlineBlock" }, "Sort by"),
|
|
45
|
+
react_1.default.createElement(react_select_1.default, { className: "react-select-container SRC-inlineBlock", value: (0, CustomSelectWidget_1.findValueOption)(sortColumn, enumOptions), options: enumOptions, onChange: function (option) { return onChange(option === null || option === void 0 ? void 0 : option.value); }, components: { Control: CustomSelectWidget_1.Control }, styles: {
|
|
46
|
+
control: function (provided) { return (tslib_1.__assign(tslib_1.__assign({}, provided), { marginLeft: '15px' })); },
|
|
47
|
+
} })));
|
|
48
|
+
};
|
|
49
|
+
exports.default = QuerySortSelector;
|
|
50
|
+
//# sourceMappingURL=QuerySortSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuerySortSelector.js","sourceRoot":"","sources":["../../src/lib/containers/QuerySortSelector.tsx"],"names":[],"mappings":";;;AAAA,qDAAuC;AAEvC,+CAAgD;AAEhD,8DAA4D;AAC5D,sFAAuD;AACvD,sEAAiC;AACjC,8EAIgD;AAOhD,IAAM,iBAAiB,GAAoD,UAAC,EAG3E;QAFC,UAAU,gBAAA,EACV,YAAY,kBAAA;IAEJ,IAAA,aAAa,GAAwC,UAAU,cAAlD,EAAE,gBAAgB,GAAsB,UAAU,iBAAhC,EAAE,eAAe,GAAK,UAAU,gBAAf,CAAe;IACvE,IAAM,YAAY,GAAG,IAAA,8BAAe,GAAE,CAAA;IAC9B,IAAA,mBAAmB,GAA0B,YAAY,oBAAtC,EAAE,mBAAmB,GAAK,YAAY,oBAAjB,CAAiB;IAC3D,IAAA,KAA8B,IAAA,gBAAQ,EAC1C,aAAa,CACd,EAFM,UAAU,QAAA,EAAE,aAAa,QAE/B,CAAA;IACK,IAAA,KAAoC,IAAA,gBAAQ,EAAC,gBAAgB,CAAC,EAA7D,aAAa,QAAA,EAAE,gBAAgB,QAA8B,CAAA;IAEpE,IAAM,WAAW,GAAiB,eAAe,CAAC,GAAG,CAAC,UAAA,cAAc;QAClE,OAAO;YACL,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,IAAA,yBAAW,EAAC,cAAc,EAAE,YAAY,CAAE;SAClD,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAM,QAAQ,GAAG,UAAC,KAAc;QAC9B,IAAM,yBAAyB,GAAG,mBAAmB,EAAE,CAAA;QACvD,IAAI,gBAAgB,GAAkB,KAAK,CAAA;QAC3C,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,sBAAsB;YACtB,gBAAgB,GAAG,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;SAC5D;QAED,IAAM,YAAY,GAA2B,KAAK;YAChD,CAAC,CAAC;gBACE;oBACE,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,gBAAgB;iBAC5B;aACF;YACH,CAAC,CAAC,SAAS,CAAA;QACb,yBAAyB,CAAC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;QACnD,mBAAmB,CAAC,yBAAyB,CAAC,CAAA;QAC9C,aAAa,CAAC,KAAK,CAAC,CAAA;QACpB,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;IACpC,CAAC,CAAA;IAED,OAAO,CACL,uCAAK,SAAS,EAAC,wCAAwC;QACrD,8BAAC,oBAAU,IAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,+BAA+B,cAExD;QACb,8BAAC,sBAAM,IACL,SAAS,EAAC,wCAAwC,EAClD,KAAK,EAAE,IAAA,oCAAe,EAAC,UAAU,EAAE,WAAW,CAAC,EAC/C,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,UAAA,MAAM,IAAI,OAAA,QAAQ,CAAE,MAA4B,aAA5B,MAAM,uBAAN,MAAM,CAAwB,KAAK,CAAC,EAA9C,CAA8C,EAClE,UAAU,EAAE,EAAE,OAAO,8BAAA,EAAE,EACvB,MAAM,EAAE;gBACN,OAAO,EAAE,UAAA,QAAQ,IAAI,OAAA,uCAChB,QAAQ,KACX,UAAU,EAAE,MAAM,IAClB,EAHmB,CAGnB;aACH,GACD,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,iBAAiB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { QueryBundleRequest } from '../utils/synapseTypes';
|
|
3
|
-
import {
|
|
3
|
+
import { LockedColumn } from './QueryContext';
|
|
4
4
|
export declare const QUERY_FILTERS_EXPANDED_CSS: string;
|
|
5
5
|
export declare const QUERY_FILTERS_COLLAPSED_CSS: string;
|
|
6
6
|
export declare type QueryWrapperProps = {
|
|
@@ -10,7 +10,7 @@ export declare type QueryWrapperProps = {
|
|
|
10
10
|
shouldDeepLink?: boolean;
|
|
11
11
|
onQueryChange?: (newQueryJson: string) => void;
|
|
12
12
|
onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void;
|
|
13
|
-
|
|
13
|
+
lockedColumn?: LockedColumn;
|
|
14
14
|
};
|
|
15
15
|
export declare type SearchQuery = {
|
|
16
16
|
columnName: string;
|