@malloydata/malloy-explorer 0.0.257-dev250410160631 → 0.0.257-dev250412010850
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/@flowtypes/components/ResultPanel/ResultPanel.flow.js +6 -1
- package/babel.config.mjs +1 -0
- package/dist/cjs/index.cjs +358 -210
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +359 -211
- package/dist/esm/index.js.map +1 -1
- package/dist/malloy-explorer.css +1 -1
- package/dist/types/components/QueryPanel/AddMenu/AddAggregate.d.ts +4 -3
- package/dist/types/components/QueryPanel/AddMenu/AddEmptyNest.d.ts +4 -3
- package/dist/types/components/QueryPanel/AddMenu/AddFieldItem.d.ts +4 -4
- package/dist/types/components/QueryPanel/AddMenu/AddGroupBy.d.ts +4 -3
- package/dist/types/components/QueryPanel/AddMenu/AddLimit.d.ts +4 -3
- package/dist/types/components/QueryPanel/AddMenu/AddMenu.d.ts +3 -2
- package/dist/types/components/QueryPanel/AddMenu/AddOrderBy.d.ts +4 -3
- package/dist/types/components/QueryPanel/AddMenu/AddView.d.ts +4 -4
- package/dist/types/components/QueryPanel/AddMenu/AddWhere.d.ts +4 -3
- package/dist/types/components/QueryPanel/AddMenu/FieldList.d.ts +4 -4
- package/dist/types/components/QueryPanel/AddMenu/FieldMenu.d.ts +4 -4
- package/dist/types/components/QueryPanel/Operations.d.ts +3 -1
- package/dist/types/components/QueryPanel/ViewDefinition.d.ts +3 -1
- package/dist/types/components/QueryPanel/operations/AggregateOperations.d.ts +4 -3
- package/dist/types/components/QueryPanel/operations/GroupByOperations.d.ts +4 -3
- package/dist/types/components/QueryPanel/operations/LimitOperation.d.ts +1 -2
- package/dist/types/components/QueryPanel/operations/NestOperation.d.ts +1 -2
- package/dist/types/components/QueryPanel/operations/OperationActionTitle.d.ts +4 -3
- package/dist/types/components/QueryPanel/operations/OrderByOperations.d.ts +1 -2
- package/dist/types/components/QueryPanel/operations/WhereOperations.d.ts +1 -2
- package/dist/types/components/ResultPanel/DebugPane.d.ts +11 -0
- package/dist/types/components/ResultPanel/ResultPanel.d.ts +2 -0
- package/dist/types/components/primitives/CollapsibleListItem.d.ts +5 -1
- package/dist/types/components/utils/fields.d.ts +6 -0
- package/dist/types/components/utils/segment.d.ts +2 -0
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -3611,6 +3611,15 @@ const tooltipStyles = {
|
|
|
3611
3611
|
}
|
|
3612
3612
|
};
|
|
3613
3613
|
const fontStyles = {
|
|
3614
|
+
largeBody: {
|
|
3615
|
+
fontFamily: "x1rj5sg5",
|
|
3616
|
+
color: "x1dhlylr",
|
|
3617
|
+
fontWeight: "xo1l8bm",
|
|
3618
|
+
fontSize: "x1j61zf2",
|
|
3619
|
+
lineHeight: "x1fc57z9",
|
|
3620
|
+
letterSpacing: "x12oo3zp",
|
|
3621
|
+
$$css: true
|
|
3622
|
+
},
|
|
3614
3623
|
emphasized: {
|
|
3615
3624
|
fontFamily: "x1rj5sg5",
|
|
3616
3625
|
color: "x1dhlylr",
|
|
@@ -8160,16 +8169,17 @@ const styles$o = {
|
|
|
8160
8169
|
function CollapsibleListItem({
|
|
8161
8170
|
label,
|
|
8162
8171
|
sublabel,
|
|
8163
|
-
children
|
|
8172
|
+
children,
|
|
8173
|
+
isInitiallyExpanded = false
|
|
8164
8174
|
}) {
|
|
8165
|
-
const [isExpanded, setIsExpanded] = React__namespace.useState(
|
|
8175
|
+
const [isExpanded, setIsExpanded] = React__namespace.useState(isInitiallyExpanded);
|
|
8166
8176
|
const handleToggle = () => {
|
|
8167
8177
|
setIsExpanded((prev) => !prev);
|
|
8168
8178
|
};
|
|
8169
8179
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
8170
8180
|
children: [/* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
8171
8181
|
...{
|
|
8172
|
-
className: "
|
|
8182
|
+
className: "xrvj5dj x1mt1orb x6s0dn4 xlqzeqv xe8ttls x167g77z xur7f20 x1ypdohk x1haqvef"
|
|
8173
8183
|
},
|
|
8174
8184
|
onClick: handleToggle,
|
|
8175
8185
|
children: [isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(Icon, {
|
|
@@ -8180,7 +8190,7 @@ function CollapsibleListItem({
|
|
|
8180
8190
|
color: "secondary"
|
|
8181
8191
|
}), /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
8182
8192
|
...{
|
|
8183
|
-
className: "x78zum5 xdt5ytf x1iyjqo2"
|
|
8193
|
+
className: "x78zum5 xdt5ytf x1iyjqo2 xb3r6kr"
|
|
8184
8194
|
},
|
|
8185
8195
|
children: [/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
8186
8196
|
..._stylex.props(fontStyles.body, styles$n.label),
|
|
@@ -8202,11 +8212,19 @@ const styles$n = {
|
|
|
8202
8212
|
label: {
|
|
8203
8213
|
flexGrow: "x1iyjqo2",
|
|
8204
8214
|
fontWeight: "x1xlr1w8",
|
|
8215
|
+
overflow: "xb3r6kr",
|
|
8216
|
+
overflowX: null,
|
|
8217
|
+
overflowY: null,
|
|
8218
|
+
textOverflow: "xlyipyv",
|
|
8205
8219
|
$$css: true
|
|
8206
8220
|
},
|
|
8207
8221
|
sublabel: {
|
|
8208
8222
|
flexGrow: "x1iyjqo2",
|
|
8209
8223
|
color: "x12ohj93",
|
|
8224
|
+
overflow: "xb3r6kr",
|
|
8225
|
+
overflowX: null,
|
|
8226
|
+
overflowY: null,
|
|
8227
|
+
textOverflow: "xlyipyv",
|
|
8210
8228
|
$$css: true
|
|
8211
8229
|
}
|
|
8212
8230
|
};
|
|
@@ -25898,6 +25916,46 @@ function ClearButton({
|
|
|
25898
25916
|
onClick
|
|
25899
25917
|
});
|
|
25900
25918
|
}
|
|
25919
|
+
function sortFieldInfoOrder(field) {
|
|
25920
|
+
if (field.kind === "join") {
|
|
25921
|
+
return 3;
|
|
25922
|
+
} else if (field.kind === "view") {
|
|
25923
|
+
return 2;
|
|
25924
|
+
} else if (field.kind === "dimension") {
|
|
25925
|
+
return 1;
|
|
25926
|
+
} else {
|
|
25927
|
+
return 0;
|
|
25928
|
+
}
|
|
25929
|
+
}
|
|
25930
|
+
function sortFieldInfos(fields) {
|
|
25931
|
+
return fields.sort((a, b2) => {
|
|
25932
|
+
const orderA = sortFieldInfoOrder(a);
|
|
25933
|
+
const orderB = sortFieldInfoOrder(b2);
|
|
25934
|
+
return orderA === orderB ? a.name.localeCompare(b2.name) : orderB - orderA;
|
|
25935
|
+
});
|
|
25936
|
+
}
|
|
25937
|
+
const INDEX_FIELDS = ["fieldName", "fieldPath", "fieldValue", "fieldType", "fieldRange", "weight"];
|
|
25938
|
+
function isIndexView(field) {
|
|
25939
|
+
const allFields = /* @__PURE__ */ new Set([...INDEX_FIELDS, ...field.schema.fields.map((field2) => field2.name)]);
|
|
25940
|
+
return allFields.size === INDEX_FIELDS.length;
|
|
25941
|
+
}
|
|
25942
|
+
function getViewDefinition(parent) {
|
|
25943
|
+
return parent instanceof QB.ASTArrowQueryDefinition ? parent.view : parent.definition;
|
|
25944
|
+
}
|
|
25945
|
+
function getInputSchemaFromViewParent(parent) {
|
|
25946
|
+
const definition = getViewDefinition(parent);
|
|
25947
|
+
return definition.getInputSchema();
|
|
25948
|
+
}
|
|
25949
|
+
function viewParentHasField(parent, field, path) {
|
|
25950
|
+
const definition = getViewDefinition(parent);
|
|
25951
|
+
if (definition instanceof QB.ASTSegmentViewDefinition) {
|
|
25952
|
+
return definition.hasField(field.name, path);
|
|
25953
|
+
}
|
|
25954
|
+
return false;
|
|
25955
|
+
}
|
|
25956
|
+
function viewParentDoesNotHaveField(parent, field, path) {
|
|
25957
|
+
return !viewParentHasField(parent, field, path);
|
|
25958
|
+
}
|
|
25901
25959
|
function segmentHasLimit(segment) {
|
|
25902
25960
|
return segment.operations.items.find((operation) => operation instanceof QB.ASTLimitViewOperation) !== void 0;
|
|
25903
25961
|
}
|
|
@@ -25923,11 +25981,21 @@ function segmentNestNo(segment, name) {
|
|
|
25923
25981
|
function addGroupBy(rootQuery, segment, field, path, setQuery) {
|
|
25924
25982
|
segment.addGroupBy(field.name, path);
|
|
25925
25983
|
if (!segmentHasLimit(segment)) {
|
|
25926
|
-
segment.setLimit(
|
|
25984
|
+
segment.setLimit(1e3);
|
|
25927
25985
|
}
|
|
25928
|
-
segment.addOrderBy(field.name);
|
|
25929
25986
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
25930
25987
|
}
|
|
25988
|
+
function getSegmentIfPresent(parent) {
|
|
25989
|
+
const definition = getViewDefinition(parent);
|
|
25990
|
+
if (definition instanceof QB.ASTSegmentViewDefinition) {
|
|
25991
|
+
return definition;
|
|
25992
|
+
} else if (definition instanceof QB.ASTRefinementViewDefinition) {
|
|
25993
|
+
if (definition.refinement instanceof QB.ASTSegmentViewDefinition) {
|
|
25994
|
+
return definition.refinement;
|
|
25995
|
+
}
|
|
25996
|
+
}
|
|
25997
|
+
return void 0;
|
|
25998
|
+
}
|
|
25931
25999
|
const addMenuStyles = {
|
|
25932
26000
|
content: {
|
|
25933
26001
|
background: "x82tljd",
|
|
@@ -26018,29 +26086,6 @@ const addMenuStyles = {
|
|
|
26018
26086
|
$$css: true
|
|
26019
26087
|
}
|
|
26020
26088
|
};
|
|
26021
|
-
function sortFieldInfoOrder(field) {
|
|
26022
|
-
if (field.kind === "join") {
|
|
26023
|
-
return 3;
|
|
26024
|
-
} else if (field.kind === "view") {
|
|
26025
|
-
return 2;
|
|
26026
|
-
} else if (field.kind === "dimension") {
|
|
26027
|
-
return 1;
|
|
26028
|
-
} else {
|
|
26029
|
-
return 0;
|
|
26030
|
-
}
|
|
26031
|
-
}
|
|
26032
|
-
function sortFieldInfos(fields) {
|
|
26033
|
-
return fields.sort((a, b2) => {
|
|
26034
|
-
const orderA = sortFieldInfoOrder(a);
|
|
26035
|
-
const orderB = sortFieldInfoOrder(b2);
|
|
26036
|
-
return orderA === orderB ? a.name.localeCompare(b2.name) : orderB - orderA;
|
|
26037
|
-
});
|
|
26038
|
-
}
|
|
26039
|
-
const INDEX_FIELDS = ["fieldName", "fieldPath", "fieldValue", "fieldType", "fieldRange", "weight"];
|
|
26040
|
-
function isIndexView(field) {
|
|
26041
|
-
const allFields = /* @__PURE__ */ new Set([...INDEX_FIELDS, ...field.schema.fields.map((field2) => field2.name)]);
|
|
26042
|
-
return allFields.size === INDEX_FIELDS.length;
|
|
26043
|
-
}
|
|
26044
26089
|
function atomicTypeToIcon(type) {
|
|
26045
26090
|
return atomicTypeMap[type];
|
|
26046
26091
|
}
|
|
@@ -26482,7 +26527,7 @@ const styles$d = {
|
|
|
26482
26527
|
}
|
|
26483
26528
|
};
|
|
26484
26529
|
function FieldList({
|
|
26485
|
-
|
|
26530
|
+
view,
|
|
26486
26531
|
fields,
|
|
26487
26532
|
onClick,
|
|
26488
26533
|
search,
|
|
@@ -26492,7 +26537,7 @@ function FieldList({
|
|
|
26492
26537
|
const groups = React.useMemo(() => {
|
|
26493
26538
|
const groups2 = [];
|
|
26494
26539
|
const buildGroups = (types22, path, name, fields2) => {
|
|
26495
|
-
const filteredFields = sortFieldInfos(fields2).filter((field) => field.kind !== "join").filter((field) => field.name.includes(search) && types22.includes(field.kind)).filter((field) => filter ? filter(
|
|
26540
|
+
const filteredFields = sortFieldInfos(fields2).filter((field) => field.kind !== "join").filter((field) => field.name.includes(search) && types22.includes(field.kind)).filter((field) => filter ? filter(view, field, path) : true);
|
|
26496
26541
|
const joins = fields2.filter((field) => field.kind === "join");
|
|
26497
26542
|
if (filteredFields.length) {
|
|
26498
26543
|
groups2.push({
|
|
@@ -26513,7 +26558,7 @@ function FieldList({
|
|
|
26513
26558
|
};
|
|
26514
26559
|
buildGroups(types2, [], "Source", fields);
|
|
26515
26560
|
return groups2;
|
|
26516
|
-
}, [fields, filter, search,
|
|
26561
|
+
}, [fields, filter, search, view, types2]);
|
|
26517
26562
|
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
26518
26563
|
children: groups.length ? groups.map((group) => /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
26519
26564
|
children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
@@ -26536,7 +26581,8 @@ function FieldList({
|
|
|
26536
26581
|
tooltipProps: {
|
|
26537
26582
|
side: "right",
|
|
26538
26583
|
align: "start",
|
|
26539
|
-
sideOffset: 4
|
|
26584
|
+
sideOffset: 4,
|
|
26585
|
+
alignOffset: 24
|
|
26540
26586
|
}
|
|
26541
26587
|
})
|
|
26542
26588
|
}, group.name + ":" + field.name))]
|
|
@@ -26556,7 +26602,7 @@ const styles$c = {
|
|
|
26556
26602
|
}
|
|
26557
26603
|
};
|
|
26558
26604
|
function FieldMenu({
|
|
26559
|
-
|
|
26605
|
+
view,
|
|
26560
26606
|
fields,
|
|
26561
26607
|
types: types2,
|
|
26562
26608
|
filter,
|
|
@@ -26581,7 +26627,7 @@ function FieldMenu({
|
|
|
26581
26627
|
flex: 1
|
|
26582
26628
|
},
|
|
26583
26629
|
children: /* @__PURE__ */ jsxRuntime.jsx(FieldList, {
|
|
26584
|
-
|
|
26630
|
+
view,
|
|
26585
26631
|
fields,
|
|
26586
26632
|
search,
|
|
26587
26633
|
types: types2,
|
|
@@ -26593,7 +26639,7 @@ function FieldMenu({
|
|
|
26593
26639
|
}
|
|
26594
26640
|
function OperationActionTitle({
|
|
26595
26641
|
actionTitle,
|
|
26596
|
-
|
|
26642
|
+
view,
|
|
26597
26643
|
fields,
|
|
26598
26644
|
title,
|
|
26599
26645
|
types: types2,
|
|
@@ -26620,10 +26666,10 @@ function OperationActionTitle({
|
|
|
26620
26666
|
align: "start",
|
|
26621
26667
|
alignOffset: -16,
|
|
26622
26668
|
children: /* @__PURE__ */ jsxRuntime.jsx(FieldMenu, {
|
|
26623
|
-
|
|
26669
|
+
view,
|
|
26624
26670
|
fields,
|
|
26625
26671
|
types: types2,
|
|
26626
|
-
filter:
|
|
26672
|
+
filter: viewParentDoesNotHaveField,
|
|
26627
26673
|
onClick
|
|
26628
26674
|
})
|
|
26629
26675
|
})
|
|
@@ -26657,7 +26703,7 @@ function FieldHover({
|
|
|
26657
26703
|
}
|
|
26658
26704
|
function GroupByOperations({
|
|
26659
26705
|
rootQuery,
|
|
26660
|
-
|
|
26706
|
+
view,
|
|
26661
26707
|
groupBys
|
|
26662
26708
|
}) {
|
|
26663
26709
|
const {
|
|
@@ -26668,16 +26714,17 @@ function GroupByOperations({
|
|
|
26668
26714
|
}
|
|
26669
26715
|
const {
|
|
26670
26716
|
fields
|
|
26671
|
-
} =
|
|
26717
|
+
} = getInputSchemaFromViewParent(view);
|
|
26672
26718
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
26673
26719
|
children: [/* @__PURE__ */ jsxRuntime.jsx(OperationActionTitle, {
|
|
26674
26720
|
title: "group by",
|
|
26675
26721
|
actionTitle: "Add group by",
|
|
26676
26722
|
rootQuery,
|
|
26677
|
-
|
|
26723
|
+
view,
|
|
26678
26724
|
fields,
|
|
26679
26725
|
types: ["dimension"],
|
|
26680
26726
|
onClick: (field, path) => {
|
|
26727
|
+
const segment = view.getOrAddDefaultSegment();
|
|
26681
26728
|
addGroupBy(rootQuery, segment, field, path, setQuery);
|
|
26682
26729
|
}
|
|
26683
26730
|
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
@@ -27854,6 +27901,28 @@ function dateTimeFilterChangeType(filter, type) {
|
|
|
27854
27901
|
return filter;
|
|
27855
27902
|
}
|
|
27856
27903
|
}
|
|
27904
|
+
class ErrorElement extends React__namespace.Component {
|
|
27905
|
+
constructor(props2) {
|
|
27906
|
+
super(props2);
|
|
27907
|
+
this.state = {
|
|
27908
|
+
hasError: false
|
|
27909
|
+
};
|
|
27910
|
+
}
|
|
27911
|
+
static getDerivedStateFromError(_error) {
|
|
27912
|
+
return {
|
|
27913
|
+
hasError: true
|
|
27914
|
+
};
|
|
27915
|
+
}
|
|
27916
|
+
componentDidCatch(error, info) {
|
|
27917
|
+
console.error(error, info);
|
|
27918
|
+
}
|
|
27919
|
+
render() {
|
|
27920
|
+
if (this.state.hasError) {
|
|
27921
|
+
return this.props.fallback;
|
|
27922
|
+
}
|
|
27923
|
+
return this.props.children;
|
|
27924
|
+
}
|
|
27925
|
+
}
|
|
27857
27926
|
function WhereOperations({
|
|
27858
27927
|
rootQuery,
|
|
27859
27928
|
wheres
|
|
@@ -27871,117 +27940,139 @@ function WhereOperations({
|
|
|
27871
27940
|
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
27872
27941
|
..._stylex.props(styles$h.tokenContainer),
|
|
27873
27942
|
children: wheres.map((where, key2) => {
|
|
27874
|
-
|
|
27875
|
-
|
|
27876
|
-
|
|
27877
|
-
} = where.filter;
|
|
27878
|
-
const fieldInfo = fieldReference.getFieldInfo();
|
|
27879
|
-
if (fieldInfo.kind !== "dimension" && fieldInfo.kind !== "measure") {
|
|
27880
|
-
return null;
|
|
27881
|
-
}
|
|
27882
|
-
const icon = atomicTypeToIcon(fieldInfo.type.kind);
|
|
27883
|
-
const color = fieldKindToColor(fieldInfo.kind);
|
|
27884
|
-
const filter = where.filter.getFilter();
|
|
27885
|
-
let rhsToken = null;
|
|
27886
|
-
if (filter.kind === "string") {
|
|
27887
|
-
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(StringFilterToken, {
|
|
27888
|
-
fieldInfo,
|
|
27889
|
-
path: where.filter.fieldReference.path ?? [],
|
|
27890
|
-
filter: filter.parsed,
|
|
27891
|
-
setFilter: (filter2) => {
|
|
27892
|
-
where.filter.setFilter({
|
|
27893
|
-
kind: "string",
|
|
27894
|
-
parsed: filter2
|
|
27895
|
-
});
|
|
27896
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27897
|
-
}
|
|
27898
|
-
}, key2);
|
|
27899
|
-
}
|
|
27900
|
-
if (filter.kind === "boolean" && filter.parsed) {
|
|
27901
|
-
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(BooleanFilterToken, {
|
|
27902
|
-
fieldInfo,
|
|
27903
|
-
filter: filter.parsed,
|
|
27904
|
-
setFilter: (filter2) => {
|
|
27905
|
-
where.filter.setFilter({
|
|
27906
|
-
kind: "boolean",
|
|
27907
|
-
parsed: filter2
|
|
27908
|
-
});
|
|
27909
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27910
|
-
}
|
|
27911
|
-
}, key2);
|
|
27912
|
-
}
|
|
27913
|
-
if (filter.kind === "number" && filter.parsed) {
|
|
27914
|
-
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(NumberFilterToken, {
|
|
27915
|
-
fieldInfo,
|
|
27916
|
-
filter: filter.parsed,
|
|
27917
|
-
setFilter: (filter2) => {
|
|
27918
|
-
where.filter.setFilter({
|
|
27919
|
-
kind: "number",
|
|
27920
|
-
parsed: filter2
|
|
27921
|
-
});
|
|
27922
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27923
|
-
}
|
|
27924
|
-
}, key2);
|
|
27925
|
-
}
|
|
27926
|
-
if (filter.kind === "date" && filter.parsed) {
|
|
27927
|
-
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(DateTimeFilterToken, {
|
|
27928
|
-
fieldInfo,
|
|
27929
|
-
filter: filter.parsed,
|
|
27930
|
-
setFilter: (filter2) => {
|
|
27931
|
-
where.filter.setFilter({
|
|
27932
|
-
kind: "date",
|
|
27933
|
-
parsed: filter2
|
|
27934
|
-
});
|
|
27935
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27936
|
-
}
|
|
27937
|
-
}, key2);
|
|
27938
|
-
}
|
|
27939
|
-
if (filter.kind === "timestamp" && filter.parsed) {
|
|
27940
|
-
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(DateTimeFilterToken, {
|
|
27941
|
-
fieldInfo,
|
|
27942
|
-
filter: filter.parsed,
|
|
27943
|
-
setFilter: (filter2) => {
|
|
27944
|
-
where.filter.setFilter({
|
|
27945
|
-
kind: "timestamp",
|
|
27946
|
-
parsed: filter2
|
|
27947
|
-
});
|
|
27948
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27949
|
-
}
|
|
27950
|
-
}, key2);
|
|
27951
|
-
}
|
|
27952
|
-
const {
|
|
27953
|
-
op,
|
|
27954
|
-
value
|
|
27955
|
-
} = parsedToLabels(filter, filterString);
|
|
27956
|
-
if (!rhsToken) {
|
|
27957
|
-
rhsToken = /* @__PURE__ */ jsxRuntime.jsxs(TokenGroup, {
|
|
27958
|
-
color,
|
|
27959
|
-
children: [/* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
27960
|
-
icon,
|
|
27961
|
-
label: fieldInfo.name
|
|
27962
|
-
}), /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
27963
|
-
label: op
|
|
27964
|
-
}), /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
27965
|
-
label: value
|
|
27966
|
-
})]
|
|
27967
|
-
});
|
|
27968
|
-
}
|
|
27969
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
27970
|
-
..._stylex.props(hoverStyles.main),
|
|
27971
|
-
children: [rhsToken, /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
27972
|
-
..._stylex.props(hoverStyles.hoverActions),
|
|
27973
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
27943
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ErrorElement, {
|
|
27944
|
+
fallback: /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
27945
|
+
children: ["Invalid filter", /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
27974
27946
|
onClick: () => {
|
|
27975
27947
|
where.delete();
|
|
27976
27948
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27977
27949
|
}
|
|
27978
|
-
})
|
|
27979
|
-
})
|
|
27950
|
+
})]
|
|
27951
|
+
}),
|
|
27952
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(SingleWhereOperation, {
|
|
27953
|
+
where,
|
|
27954
|
+
rootQuery
|
|
27955
|
+
})
|
|
27980
27956
|
}, key2);
|
|
27981
27957
|
})
|
|
27982
27958
|
})]
|
|
27983
27959
|
});
|
|
27984
27960
|
}
|
|
27961
|
+
function SingleWhereOperation({
|
|
27962
|
+
rootQuery,
|
|
27963
|
+
where
|
|
27964
|
+
}) {
|
|
27965
|
+
const {
|
|
27966
|
+
fieldReference,
|
|
27967
|
+
filterString
|
|
27968
|
+
} = where.filter;
|
|
27969
|
+
const fieldInfo = fieldReference.getFieldInfo();
|
|
27970
|
+
const {
|
|
27971
|
+
setQuery
|
|
27972
|
+
} = React.useContext(QueryEditorContext);
|
|
27973
|
+
if (fieldInfo.kind !== "dimension" && fieldInfo.kind !== "measure") {
|
|
27974
|
+
return null;
|
|
27975
|
+
}
|
|
27976
|
+
const icon = atomicTypeToIcon(fieldInfo.type.kind);
|
|
27977
|
+
const color = fieldKindToColor(fieldInfo.kind);
|
|
27978
|
+
const filter = where.filter.getFilter();
|
|
27979
|
+
let rhsToken = null;
|
|
27980
|
+
if (filter.kind === "string") {
|
|
27981
|
+
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(StringFilterToken, {
|
|
27982
|
+
fieldInfo,
|
|
27983
|
+
path: where.filter.fieldReference.path ?? [],
|
|
27984
|
+
filter: filter.parsed,
|
|
27985
|
+
setFilter: (filter2) => {
|
|
27986
|
+
where.filter.setFilter({
|
|
27987
|
+
kind: "string",
|
|
27988
|
+
parsed: filter2
|
|
27989
|
+
});
|
|
27990
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
27991
|
+
}
|
|
27992
|
+
});
|
|
27993
|
+
}
|
|
27994
|
+
if (filter.kind === "boolean" && filter.parsed) {
|
|
27995
|
+
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(BooleanFilterToken, {
|
|
27996
|
+
fieldInfo,
|
|
27997
|
+
filter: filter.parsed,
|
|
27998
|
+
setFilter: (filter2) => {
|
|
27999
|
+
where.filter.setFilter({
|
|
28000
|
+
kind: "boolean",
|
|
28001
|
+
parsed: filter2
|
|
28002
|
+
});
|
|
28003
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28004
|
+
}
|
|
28005
|
+
});
|
|
28006
|
+
}
|
|
28007
|
+
if (filter.kind === "number" && filter.parsed) {
|
|
28008
|
+
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(NumberFilterToken, {
|
|
28009
|
+
fieldInfo,
|
|
28010
|
+
filter: filter.parsed,
|
|
28011
|
+
setFilter: (filter2) => {
|
|
28012
|
+
where.filter.setFilter({
|
|
28013
|
+
kind: "number",
|
|
28014
|
+
parsed: filter2
|
|
28015
|
+
});
|
|
28016
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28017
|
+
}
|
|
28018
|
+
});
|
|
28019
|
+
}
|
|
28020
|
+
if (filter.kind === "date" && filter.parsed) {
|
|
28021
|
+
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(DateTimeFilterToken, {
|
|
28022
|
+
fieldInfo,
|
|
28023
|
+
filter: filter.parsed,
|
|
28024
|
+
setFilter: (filter2) => {
|
|
28025
|
+
where.filter.setFilter({
|
|
28026
|
+
kind: "date",
|
|
28027
|
+
parsed: filter2
|
|
28028
|
+
});
|
|
28029
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28030
|
+
}
|
|
28031
|
+
});
|
|
28032
|
+
}
|
|
28033
|
+
if (filter.kind === "timestamp" && filter.parsed) {
|
|
28034
|
+
rhsToken = /* @__PURE__ */ jsxRuntime.jsx(DateTimeFilterToken, {
|
|
28035
|
+
fieldInfo,
|
|
28036
|
+
filter: filter.parsed,
|
|
28037
|
+
setFilter: (filter2) => {
|
|
28038
|
+
where.filter.setFilter({
|
|
28039
|
+
kind: "timestamp",
|
|
28040
|
+
parsed: filter2
|
|
28041
|
+
});
|
|
28042
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28043
|
+
}
|
|
28044
|
+
});
|
|
28045
|
+
}
|
|
28046
|
+
const {
|
|
28047
|
+
op,
|
|
28048
|
+
value
|
|
28049
|
+
} = parsedToLabels(filter, filterString);
|
|
28050
|
+
if (!rhsToken) {
|
|
28051
|
+
rhsToken = /* @__PURE__ */ jsxRuntime.jsxs(TokenGroup, {
|
|
28052
|
+
color,
|
|
28053
|
+
children: [/* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
28054
|
+
icon,
|
|
28055
|
+
label: fieldInfo.name
|
|
28056
|
+
}), /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
28057
|
+
label: op
|
|
28058
|
+
}), /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
28059
|
+
label: value
|
|
28060
|
+
})]
|
|
28061
|
+
});
|
|
28062
|
+
}
|
|
28063
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
28064
|
+
..._stylex.props(hoverStyles.main),
|
|
28065
|
+
children: [rhsToken, /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
28066
|
+
..._stylex.props(hoverStyles.hoverActions),
|
|
28067
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
28068
|
+
onClick: () => {
|
|
28069
|
+
where.delete();
|
|
28070
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28071
|
+
}
|
|
28072
|
+
})
|
|
28073
|
+
})]
|
|
28074
|
+
});
|
|
28075
|
+
}
|
|
27985
28076
|
const parsedToLabels = (parsed, filterString) => {
|
|
27986
28077
|
if (parsed.parsed === null) {
|
|
27987
28078
|
return {
|
|
@@ -28188,7 +28279,7 @@ function LimitOperation({
|
|
|
28188
28279
|
}
|
|
28189
28280
|
function AggregateOperations({
|
|
28190
28281
|
rootQuery,
|
|
28191
|
-
|
|
28282
|
+
view,
|
|
28192
28283
|
aggregates
|
|
28193
28284
|
}) {
|
|
28194
28285
|
const {
|
|
@@ -28199,16 +28290,17 @@ function AggregateOperations({
|
|
|
28199
28290
|
}
|
|
28200
28291
|
const {
|
|
28201
28292
|
fields
|
|
28202
|
-
} =
|
|
28293
|
+
} = getInputSchemaFromViewParent(view);
|
|
28203
28294
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
28204
28295
|
children: [/* @__PURE__ */ jsxRuntime.jsx(OperationActionTitle, {
|
|
28205
28296
|
title: "aggregate",
|
|
28206
28297
|
actionTitle: "Add aggregate",
|
|
28207
28298
|
rootQuery,
|
|
28208
|
-
|
|
28299
|
+
view,
|
|
28209
28300
|
fields,
|
|
28210
28301
|
types: ["measure"],
|
|
28211
28302
|
onClick: (field, path) => {
|
|
28303
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28212
28304
|
segment.addAggregate(field.name, path);
|
|
28213
28305
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28214
28306
|
}
|
|
@@ -28319,6 +28411,7 @@ function View({
|
|
|
28319
28411
|
view
|
|
28320
28412
|
}), /* @__PURE__ */ jsxRuntime.jsx(ViewDefinition, {
|
|
28321
28413
|
rootQuery,
|
|
28414
|
+
view,
|
|
28322
28415
|
viewDef: view.definition
|
|
28323
28416
|
})]
|
|
28324
28417
|
});
|
|
@@ -28423,12 +28516,13 @@ function AddItem({
|
|
|
28423
28516
|
}
|
|
28424
28517
|
function AddLimit({
|
|
28425
28518
|
rootQuery,
|
|
28426
|
-
|
|
28519
|
+
view
|
|
28427
28520
|
}) {
|
|
28428
28521
|
const {
|
|
28429
28522
|
setQuery
|
|
28430
28523
|
} = React.useContext(QueryEditorContext);
|
|
28431
|
-
const
|
|
28524
|
+
const segment = getSegmentIfPresent(view);
|
|
28525
|
+
const hasLimit = segment ? segmentHasLimit(segment) : false;
|
|
28432
28526
|
return /* @__PURE__ */ jsxRuntime.jsx(AddItem, {
|
|
28433
28527
|
icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, {
|
|
28434
28528
|
name: "limit"
|
|
@@ -28436,32 +28530,34 @@ function AddLimit({
|
|
|
28436
28530
|
label: "Limit",
|
|
28437
28531
|
disable: () => hasLimit,
|
|
28438
28532
|
onClick: () => {
|
|
28439
|
-
|
|
28533
|
+
const segment2 = view.getOrAddDefaultSegment();
|
|
28534
|
+
segment2.setLimit(10);
|
|
28440
28535
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28441
28536
|
}
|
|
28442
28537
|
});
|
|
28443
28538
|
}
|
|
28444
28539
|
function AddEmptyNest({
|
|
28445
28540
|
rootQuery,
|
|
28446
|
-
|
|
28541
|
+
view
|
|
28447
28542
|
}) {
|
|
28448
28543
|
const {
|
|
28449
28544
|
setQuery
|
|
28450
28545
|
} = React.useContext(QueryEditorContext);
|
|
28451
|
-
const nestNo = segmentNestNo(segment, `Nest`);
|
|
28452
28546
|
return /* @__PURE__ */ jsxRuntime.jsx(AddItem, {
|
|
28453
28547
|
icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, {
|
|
28454
28548
|
name: "nest"
|
|
28455
28549
|
}),
|
|
28456
28550
|
label: "Add blank nested query",
|
|
28457
28551
|
onClick: () => {
|
|
28552
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28553
|
+
const nestNo = segmentNestNo(segment, `Nest`);
|
|
28458
28554
|
segment.addEmptyNest(nestNo > 1 ? `Nest ${nestNo}` : `Nest`);
|
|
28459
28555
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28460
28556
|
}
|
|
28461
28557
|
});
|
|
28462
28558
|
}
|
|
28463
28559
|
function AddFieldItem({
|
|
28464
|
-
|
|
28560
|
+
view,
|
|
28465
28561
|
fields,
|
|
28466
28562
|
icon,
|
|
28467
28563
|
label,
|
|
@@ -28523,7 +28619,7 @@ function AddFieldItem({
|
|
|
28523
28619
|
}), /* @__PURE__ */ jsxRuntime.jsx(FieldMenu, {
|
|
28524
28620
|
types: types2,
|
|
28525
28621
|
filter,
|
|
28526
|
-
|
|
28622
|
+
view,
|
|
28527
28623
|
fields,
|
|
28528
28624
|
onClick
|
|
28529
28625
|
})]
|
|
@@ -28533,21 +28629,23 @@ function AddFieldItem({
|
|
|
28533
28629
|
}
|
|
28534
28630
|
function AddOrderBy({
|
|
28535
28631
|
rootQuery,
|
|
28536
|
-
|
|
28632
|
+
view
|
|
28537
28633
|
}) {
|
|
28538
28634
|
const {
|
|
28539
28635
|
setQuery
|
|
28540
28636
|
} = React.useContext(QueryEditorContext);
|
|
28541
|
-
const outputSchemaFields =
|
|
28542
|
-
const
|
|
28637
|
+
const outputSchemaFields = view.getOutputSchema().fields;
|
|
28638
|
+
const segment = getSegmentIfPresent(view);
|
|
28639
|
+
const fields = React.useMemo(() => outputSchemaFields.filter((field) => field.kind === "dimension").filter((field) => ORDERABLE_TYPES$1.includes(field.type.kind)).filter((field) => segment ? !segmentHasOrderBy(segment, field.name) : true), [outputSchemaFields, segment]);
|
|
28543
28640
|
return /* @__PURE__ */ jsxRuntime.jsx(AddFieldItem, {
|
|
28544
28641
|
label: "Add order by",
|
|
28545
28642
|
icon: "orderBy",
|
|
28546
|
-
|
|
28643
|
+
view,
|
|
28547
28644
|
fields,
|
|
28548
28645
|
types: ["dimension"],
|
|
28549
28646
|
onClick: (field) => {
|
|
28550
|
-
|
|
28647
|
+
const segment2 = view.getOrAddDefaultSegment();
|
|
28648
|
+
segment2.addOrderBy(field.name, "asc");
|
|
28551
28649
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28552
28650
|
},
|
|
28553
28651
|
disabledMessage: "There must be at least one field in the output to order by."
|
|
@@ -28556,44 +28654,46 @@ function AddOrderBy({
|
|
|
28556
28654
|
const ORDERABLE_TYPES$1 = ["string_type", "number_type", "boolean_type", "date_type", "timestamp_type"];
|
|
28557
28655
|
function AddGroupBy({
|
|
28558
28656
|
rootQuery,
|
|
28559
|
-
|
|
28657
|
+
view
|
|
28560
28658
|
}) {
|
|
28561
28659
|
const {
|
|
28562
28660
|
setQuery
|
|
28563
28661
|
} = React.useContext(QueryEditorContext);
|
|
28564
28662
|
const {
|
|
28565
28663
|
fields
|
|
28566
|
-
} =
|
|
28664
|
+
} = getInputSchemaFromViewParent(view);
|
|
28567
28665
|
return /* @__PURE__ */ jsxRuntime.jsx(AddFieldItem, {
|
|
28568
28666
|
label: "Add group by",
|
|
28569
28667
|
icon: "groupBy",
|
|
28570
|
-
|
|
28668
|
+
view,
|
|
28571
28669
|
fields,
|
|
28572
28670
|
types: ["dimension"],
|
|
28573
|
-
filter:
|
|
28671
|
+
filter: viewParentDoesNotHaveField,
|
|
28574
28672
|
onClick: (field, path) => {
|
|
28673
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28575
28674
|
addGroupBy(rootQuery, segment, field, path, setQuery);
|
|
28576
28675
|
}
|
|
28577
28676
|
});
|
|
28578
28677
|
}
|
|
28579
28678
|
function AddAggregate({
|
|
28580
28679
|
rootQuery,
|
|
28581
|
-
|
|
28680
|
+
view
|
|
28582
28681
|
}) {
|
|
28583
28682
|
const {
|
|
28584
28683
|
setQuery
|
|
28585
28684
|
} = React.useContext(QueryEditorContext);
|
|
28586
28685
|
const {
|
|
28587
28686
|
fields
|
|
28588
|
-
} =
|
|
28687
|
+
} = getInputSchemaFromViewParent(view);
|
|
28589
28688
|
return /* @__PURE__ */ jsxRuntime.jsx(AddFieldItem, {
|
|
28590
28689
|
label: "Add aggregate",
|
|
28591
28690
|
icon: "aggregate",
|
|
28592
|
-
|
|
28691
|
+
view,
|
|
28593
28692
|
fields,
|
|
28594
28693
|
types: ["measure"],
|
|
28595
|
-
filter:
|
|
28694
|
+
filter: viewParentDoesNotHaveField,
|
|
28596
28695
|
onClick: (field, path) => {
|
|
28696
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28597
28697
|
segment.addAggregate(field.name, path);
|
|
28598
28698
|
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
28599
28699
|
}
|
|
@@ -28601,22 +28701,23 @@ function AddAggregate({
|
|
|
28601
28701
|
}
|
|
28602
28702
|
function AddWhere({
|
|
28603
28703
|
rootQuery,
|
|
28604
|
-
|
|
28704
|
+
view
|
|
28605
28705
|
}) {
|
|
28606
28706
|
const {
|
|
28607
28707
|
setQuery
|
|
28608
28708
|
} = React.useContext(QueryEditorContext);
|
|
28609
28709
|
const {
|
|
28610
28710
|
fields
|
|
28611
|
-
} =
|
|
28711
|
+
} = getInputSchemaFromViewParent(view);
|
|
28612
28712
|
return /* @__PURE__ */ jsxRuntime.jsx(AddFieldItem, {
|
|
28613
28713
|
label: "Add filter",
|
|
28614
28714
|
icon: "filter",
|
|
28615
|
-
|
|
28715
|
+
view,
|
|
28616
28716
|
fields,
|
|
28617
28717
|
types: ["measure", "dimension"],
|
|
28618
28718
|
filter: (_segment, field) => (field.kind === "dimension" || field.kind === "measure") && FILTERABLE_TYPES$1.has(field.type.kind),
|
|
28619
28719
|
onClick: (field, path) => {
|
|
28720
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28620
28721
|
if (field.kind === "dimension" || field.kind === "measure") {
|
|
28621
28722
|
if (field.type.kind === "string_type") {
|
|
28622
28723
|
segment.addWhere(field.name, path, "-null");
|
|
@@ -28637,24 +28738,24 @@ function AddWhere({
|
|
|
28637
28738
|
const FILTERABLE_TYPES$1 = /* @__PURE__ */ new Set(["string_type", "boolean_type", "number_type", "date_type", "timestamp_type"]);
|
|
28638
28739
|
function AddView({
|
|
28639
28740
|
rootQuery,
|
|
28640
|
-
view
|
|
28641
|
-
segment
|
|
28741
|
+
view
|
|
28642
28742
|
}) {
|
|
28643
28743
|
const {
|
|
28644
28744
|
setQuery
|
|
28645
28745
|
} = React.useContext(QueryEditorContext);
|
|
28646
|
-
const allFields =
|
|
28746
|
+
const allFields = getInputSchemaFromViewParent(view).fields;
|
|
28647
28747
|
const fields = React.useMemo(() => allFields.filter((field) => field.kind === "view" && !isIndexView(field)), [allFields]);
|
|
28648
28748
|
return /* @__PURE__ */ jsxRuntime.jsx(AddFieldItem, {
|
|
28649
28749
|
label: "Add view",
|
|
28650
28750
|
icon: "view",
|
|
28651
|
-
|
|
28751
|
+
view,
|
|
28652
28752
|
fields,
|
|
28653
28753
|
types: ["view"],
|
|
28654
28754
|
onClick: (field) => {
|
|
28655
|
-
if (
|
|
28755
|
+
if (rootQuery.isEmpty()) {
|
|
28656
28756
|
rootQuery.setView(field.name);
|
|
28657
28757
|
} else {
|
|
28758
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28658
28759
|
const nestNo = segmentNestNo(segment, field.name);
|
|
28659
28760
|
segment.addNest(field.name, nestNo > 1 ? `${field.name} ${nestNo}` : void 0);
|
|
28660
28761
|
}
|
|
@@ -28749,7 +28850,6 @@ function AddMenu({
|
|
|
28749
28850
|
setQuery
|
|
28750
28851
|
} = React.useContext(QueryEditorContext);
|
|
28751
28852
|
const [search, setSearch] = React.useState("");
|
|
28752
|
-
const segment = view.getOrAddDefaultSegment();
|
|
28753
28853
|
return /* @__PURE__ */ jsxRuntime.jsxs(Root2$2, {
|
|
28754
28854
|
open,
|
|
28755
28855
|
onOpenChange: (open2) => {
|
|
@@ -28789,16 +28889,16 @@ function AddMenu({
|
|
|
28789
28889
|
flex: 1
|
|
28790
28890
|
},
|
|
28791
28891
|
children: [/* @__PURE__ */ jsxRuntime.jsx(FieldList, {
|
|
28792
|
-
|
|
28793
|
-
fields:
|
|
28892
|
+
view,
|
|
28893
|
+
fields: getInputSchemaFromViewParent(view).fields,
|
|
28794
28894
|
types: ["dimension", "measure", "view"],
|
|
28795
28895
|
onClick: function(field, path) {
|
|
28896
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28796
28897
|
if (field.kind === "dimension") {
|
|
28797
28898
|
segment.addGroupBy(field.name, path);
|
|
28798
28899
|
if (!segmentHasLimit(segment)) {
|
|
28799
|
-
segment.setLimit(
|
|
28900
|
+
segment.setLimit(1e3);
|
|
28800
28901
|
}
|
|
28801
|
-
segment.addOrderBy(field.name);
|
|
28802
28902
|
} else if (field.kind === "measure") {
|
|
28803
28903
|
segment.addAggregate(field.name, path);
|
|
28804
28904
|
} else {
|
|
@@ -28813,6 +28913,7 @@ function AddMenu({
|
|
|
28813
28913
|
onClick: (value) => {
|
|
28814
28914
|
const path = value.fieldName.split(".");
|
|
28815
28915
|
const name = path.pop();
|
|
28916
|
+
const segment = view.getOrAddDefaultSegment();
|
|
28816
28917
|
segment.addWhere(name, path, {
|
|
28817
28918
|
kind: "string",
|
|
28818
28919
|
parsed: {
|
|
@@ -28826,26 +28927,25 @@ function AddMenu({
|
|
|
28826
28927
|
}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
28827
28928
|
children: [/* @__PURE__ */ jsxRuntime.jsx(AddGroupBy, {
|
|
28828
28929
|
rootQuery,
|
|
28829
|
-
|
|
28930
|
+
view
|
|
28830
28931
|
}), /* @__PURE__ */ jsxRuntime.jsx(AddAggregate, {
|
|
28831
28932
|
rootQuery,
|
|
28832
|
-
|
|
28933
|
+
view
|
|
28833
28934
|
}), /* @__PURE__ */ jsxRuntime.jsx(AddWhere, {
|
|
28834
28935
|
rootQuery,
|
|
28835
|
-
|
|
28936
|
+
view
|
|
28836
28937
|
}), /* @__PURE__ */ jsxRuntime.jsx(AddView, {
|
|
28837
28938
|
rootQuery,
|
|
28838
|
-
view
|
|
28839
|
-
segment
|
|
28939
|
+
view
|
|
28840
28940
|
}), /* @__PURE__ */ jsxRuntime.jsx(Divider, {}), /* @__PURE__ */ jsxRuntime.jsx(AddLimit, {
|
|
28841
28941
|
rootQuery,
|
|
28842
|
-
|
|
28942
|
+
view
|
|
28843
28943
|
}), /* @__PURE__ */ jsxRuntime.jsx(AddOrderBy, {
|
|
28844
28944
|
rootQuery,
|
|
28845
|
-
|
|
28945
|
+
view
|
|
28846
28946
|
}), /* @__PURE__ */ jsxRuntime.jsx(AddEmptyNest, {
|
|
28847
28947
|
rootQuery,
|
|
28848
|
-
|
|
28948
|
+
view
|
|
28849
28949
|
})]
|
|
28850
28950
|
})]
|
|
28851
28951
|
})
|
|
@@ -28917,6 +29017,7 @@ function NestOperations({
|
|
|
28917
29017
|
}
|
|
28918
29018
|
function Operations({
|
|
28919
29019
|
rootQuery,
|
|
29020
|
+
view,
|
|
28920
29021
|
viewDef
|
|
28921
29022
|
}) {
|
|
28922
29023
|
const groupBys = [];
|
|
@@ -28925,7 +29026,10 @@ function Operations({
|
|
|
28925
29026
|
const orderBys = [];
|
|
28926
29027
|
const nests = [];
|
|
28927
29028
|
let limit;
|
|
28928
|
-
|
|
29029
|
+
if (!(viewDef instanceof QB.ASTSegmentViewDefinition)) {
|
|
29030
|
+
return null;
|
|
29031
|
+
}
|
|
29032
|
+
const segment = viewDef;
|
|
28929
29033
|
segment.operations.items.forEach((operation) => {
|
|
28930
29034
|
if (operation instanceof QB.ASTGroupByViewOperation) {
|
|
28931
29035
|
groupBys.push(operation);
|
|
@@ -28947,53 +29051,54 @@ function Operations({
|
|
|
28947
29051
|
},
|
|
28948
29052
|
children: [/* @__PURE__ */ jsxRuntime.jsx(GroupByOperations, {
|
|
28949
29053
|
rootQuery,
|
|
28950
|
-
|
|
29054
|
+
view,
|
|
28951
29055
|
groupBys
|
|
28952
29056
|
}), /* @__PURE__ */ jsxRuntime.jsx(AggregateOperations, {
|
|
28953
29057
|
rootQuery,
|
|
28954
|
-
|
|
29058
|
+
view,
|
|
28955
29059
|
aggregates
|
|
28956
29060
|
}), /* @__PURE__ */ jsxRuntime.jsx(WhereOperations, {
|
|
28957
29061
|
rootQuery,
|
|
28958
|
-
segment,
|
|
28959
29062
|
wheres
|
|
28960
29063
|
}), /* @__PURE__ */ jsxRuntime.jsx(OrderByOperations, {
|
|
28961
29064
|
rootQuery,
|
|
28962
|
-
segment,
|
|
28963
29065
|
orderBys
|
|
28964
29066
|
}), /* @__PURE__ */ jsxRuntime.jsx(NestOperations, {
|
|
28965
29067
|
rootQuery,
|
|
28966
|
-
segment,
|
|
28967
29068
|
nests
|
|
28968
29069
|
}), /* @__PURE__ */ jsxRuntime.jsx(LimitOperation, {
|
|
28969
29070
|
rootQuery,
|
|
28970
|
-
segment,
|
|
28971
29071
|
limit
|
|
28972
29072
|
})]
|
|
28973
29073
|
});
|
|
28974
29074
|
}
|
|
28975
29075
|
function ViewDefinition({
|
|
28976
29076
|
rootQuery,
|
|
29077
|
+
view,
|
|
28977
29078
|
viewDef
|
|
28978
29079
|
}) {
|
|
28979
29080
|
if (viewDef instanceof QB.ASTArrowViewDefinition) {
|
|
28980
29081
|
return /* @__PURE__ */ jsxRuntime.jsx(ViewDefinition, {
|
|
28981
29082
|
rootQuery,
|
|
29083
|
+
view,
|
|
28982
29084
|
viewDef: viewDef.view
|
|
28983
29085
|
});
|
|
28984
29086
|
} else if (viewDef instanceof QB.ASTRefinementViewDefinition) {
|
|
28985
29087
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
28986
29088
|
children: [/* @__PURE__ */ jsxRuntime.jsx(ViewDefinition, {
|
|
28987
29089
|
rootQuery,
|
|
29090
|
+
view,
|
|
28988
29091
|
viewDef: viewDef.base
|
|
28989
29092
|
}), /* @__PURE__ */ jsxRuntime.jsx(ViewDefinition, {
|
|
28990
29093
|
rootQuery,
|
|
29094
|
+
view,
|
|
28991
29095
|
viewDef: viewDef.refinement
|
|
28992
29096
|
})]
|
|
28993
29097
|
});
|
|
28994
29098
|
} else if (viewDef instanceof QB.ASTSegmentViewDefinition) {
|
|
28995
29099
|
return /* @__PURE__ */ jsxRuntime.jsx(Operations, {
|
|
28996
29100
|
rootQuery,
|
|
29101
|
+
view,
|
|
28997
29102
|
viewDef
|
|
28998
29103
|
});
|
|
28999
29104
|
} else {
|
|
@@ -29106,10 +29211,10 @@ function Query({
|
|
|
29106
29211
|
},
|
|
29107
29212
|
disabled: rootQuery.isEmpty()
|
|
29108
29213
|
}) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {})
|
|
29109
|
-
}), /* @__PURE__ */ jsxRuntime.jsx(AddMenu, {
|
|
29214
|
+
}), query.definition instanceof QB.ASTArrowQueryDefinition ? /* @__PURE__ */ jsxRuntime.jsx(AddMenu, {
|
|
29110
29215
|
rootQuery,
|
|
29111
|
-
view: query
|
|
29112
|
-
})]
|
|
29216
|
+
view: query.definition
|
|
29217
|
+
}) : null]
|
|
29113
29218
|
}),
|
|
29114
29219
|
collapsedControls: /* @__PURE__ */ jsxRuntime.jsx(VisualizationIcon, {
|
|
29115
29220
|
view: query
|
|
@@ -29125,6 +29230,7 @@ function Query({
|
|
|
29125
29230
|
view: query
|
|
29126
29231
|
}), /* @__PURE__ */ jsxRuntime.jsx(ViewDefinition, {
|
|
29127
29232
|
rootQuery,
|
|
29233
|
+
view: query.definition,
|
|
29128
29234
|
viewDef: query.definition.view
|
|
29129
29235
|
})]
|
|
29130
29236
|
}) : null, query.isEmpty() ? /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
@@ -29256,7 +29362,7 @@ function Parameters({
|
|
|
29256
29362
|
title: "Source parameters",
|
|
29257
29363
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
29258
29364
|
...{
|
|
29259
|
-
className: "x78zum5
|
|
29365
|
+
className: "x78zum5 xdt5ytf x1jnr06f xnm25rq"
|
|
29260
29366
|
},
|
|
29261
29367
|
children: sourceParameters.map((parameter) => {
|
|
29262
29368
|
var _a2;
|
|
@@ -29656,11 +29762,6 @@ function ResponseDisplay({
|
|
|
29656
29762
|
title: "Empty Response",
|
|
29657
29763
|
variant: "critical"
|
|
29658
29764
|
};
|
|
29659
|
-
} else if (!response.result) {
|
|
29660
|
-
bannerProps = {
|
|
29661
|
-
title: "Empty Result",
|
|
29662
|
-
variant: "critical"
|
|
29663
|
-
};
|
|
29664
29765
|
} else if (response.error && !response.error.customRenderer) {
|
|
29665
29766
|
const e = response.error;
|
|
29666
29767
|
let variant;
|
|
@@ -29685,6 +29786,11 @@ function ResponseDisplay({
|
|
|
29685
29786
|
children: e.content,
|
|
29686
29787
|
variant
|
|
29687
29788
|
};
|
|
29789
|
+
} else if (!response.result) {
|
|
29790
|
+
bannerProps = {
|
|
29791
|
+
title: "Empty Result",
|
|
29792
|
+
variant: "critical"
|
|
29793
|
+
};
|
|
29688
29794
|
}
|
|
29689
29795
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
29690
29796
|
children: [bannerProps && /* @__PURE__ */ jsxRuntime.jsx(Banner, {
|
|
@@ -29775,6 +29881,38 @@ const styles$4 = {
|
|
|
29775
29881
|
$$css: true
|
|
29776
29882
|
}
|
|
29777
29883
|
};
|
|
29884
|
+
function DebugPane({
|
|
29885
|
+
query,
|
|
29886
|
+
debug
|
|
29887
|
+
}) {
|
|
29888
|
+
const [selectedDebugger, setSelectedDebugger] = React.useState();
|
|
29889
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
29890
|
+
children: [debug && /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
29891
|
+
...{
|
|
29892
|
+
className: "x78zum5 x167g77z x6s0dn4"
|
|
29893
|
+
},
|
|
29894
|
+
children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
29895
|
+
..._stylex.props(fontStyles.largeBody),
|
|
29896
|
+
children: "Debug with:"
|
|
29897
|
+
}), /* @__PURE__ */ jsxRuntime.jsx(SelectDropdown, {
|
|
29898
|
+
options: debug.debuggers.map((d) => ({
|
|
29899
|
+
label: d,
|
|
29900
|
+
value: d
|
|
29901
|
+
})),
|
|
29902
|
+
value: selectedDebugger,
|
|
29903
|
+
onChange: (v2) => setSelectedDebugger(v2)
|
|
29904
|
+
}), /* @__PURE__ */ jsxRuntime.jsx(Button, {
|
|
29905
|
+
variant: "default",
|
|
29906
|
+
label: "Run",
|
|
29907
|
+
isDisabled: !selectedDebugger,
|
|
29908
|
+
onClick: () => selectedDebugger && debug.onDebugQuery(query, selectedDebugger)
|
|
29909
|
+
})]
|
|
29910
|
+
}), /* @__PURE__ */ jsxRuntime.jsx(CodeBlock, {
|
|
29911
|
+
code: JSON.stringify(query, null, 2),
|
|
29912
|
+
language: "json"
|
|
29913
|
+
})]
|
|
29914
|
+
});
|
|
29915
|
+
}
|
|
29778
29916
|
function ResultPanel({
|
|
29779
29917
|
source,
|
|
29780
29918
|
draftQuery,
|
|
@@ -29917,9 +30055,12 @@ function ResultPanel({
|
|
|
29917
30055
|
...{
|
|
29918
30056
|
className: "xwp4ipm xh8yej3 x5yr21d x9f619"
|
|
29919
30057
|
},
|
|
29920
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29921
|
-
|
|
29922
|
-
|
|
30058
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(DebugPane, {
|
|
30059
|
+
query: draftQuery,
|
|
30060
|
+
debug: options.debugOptions ? {
|
|
30061
|
+
debuggers: options.debugOptions.debuggers,
|
|
30062
|
+
onDebugQuery: options.debugOptions.onDebugQuery
|
|
30063
|
+
} : void 0
|
|
29923
30064
|
})
|
|
29924
30065
|
})]
|
|
29925
30066
|
})]
|
|
@@ -30539,9 +30680,10 @@ function FieldGroupList({
|
|
|
30539
30680
|
..._stylex.props(fontStyles.body, styles$1.title),
|
|
30540
30681
|
children: title
|
|
30541
30682
|
}), /* @__PURE__ */ jsxRuntime.jsx(List$1, {
|
|
30542
|
-
children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(CollapsibleListItem, {
|
|
30683
|
+
children: items.map((item, index2) => /* @__PURE__ */ jsxRuntime.jsx(CollapsibleListItem, {
|
|
30543
30684
|
label: getLabelFromPath(source, item.groupPath),
|
|
30544
30685
|
sublabel: getSublabelFromPath(source, item.groupPath),
|
|
30686
|
+
isInitiallyExpanded: index2 === 0,
|
|
30545
30687
|
children: item.items.map(({
|
|
30546
30688
|
field,
|
|
30547
30689
|
path
|
|
@@ -30617,12 +30759,17 @@ function SourcePanel({
|
|
|
30617
30759
|
},
|
|
30618
30760
|
children: [subpanelType == null ? /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
30619
30761
|
...{
|
|
30620
|
-
className: "x78zum5 x6s0dn4 x167g77z xdqdrvq"
|
|
30762
|
+
className: "x78zum5 x6s0dn4 x167g77z xdqdrvq xb3r6kr"
|
|
30621
30763
|
},
|
|
30622
30764
|
children: [/* @__PURE__ */ jsxRuntime.jsx(Icon, {
|
|
30623
30765
|
name: "database",
|
|
30624
30766
|
color: "gray"
|
|
30625
|
-
}),
|
|
30767
|
+
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
30768
|
+
...{
|
|
30769
|
+
className: "xb3r6kr xlyipyv"
|
|
30770
|
+
},
|
|
30771
|
+
children: source.name
|
|
30772
|
+
})]
|
|
30626
30773
|
}) : /* @__PURE__ */ jsxRuntime.jsx(Button, {
|
|
30627
30774
|
icon: "chevronLeft",
|
|
30628
30775
|
label: "Back",
|
|
@@ -30633,7 +30780,8 @@ function SourcePanel({
|
|
|
30633
30780
|
children: /* @__PURE__ */ jsxRuntime.jsx(Button, {
|
|
30634
30781
|
icon: "chevronLeft",
|
|
30635
30782
|
tooltip: "Close the source panel",
|
|
30636
|
-
onClick: () => setIsSourcePanelOpen(false)
|
|
30783
|
+
onClick: () => setIsSourcePanelOpen(false),
|
|
30784
|
+
size: "compact"
|
|
30637
30785
|
})
|
|
30638
30786
|
})]
|
|
30639
30787
|
}), /* @__PURE__ */ jsxRuntime.jsx(TextInput, {
|