@malloydata/malloy-explorer 0.0.277-dev250515002611 → 0.0.278-dev250515234639
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/cjs/index.cjs +214 -94
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +214 -94
- package/dist/esm/index.js.map +1 -1
- package/dist/types/components/QueryPanel/FilterLiteralEditor.d.ts +10 -0
- package/dist/types/components/QueryPanel/LiteralValueEditor.d.ts +4 -2
- package/dist/types/components/utils/filters.d.ts +5 -0
- package/package.json +6 -6
package/dist/cjs/index.cjs
CHANGED
|
@@ -19,6 +19,7 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
19
19
|
const React = require("react");
|
|
20
20
|
const QB = require("@malloydata/malloy-query-builder");
|
|
21
21
|
const malloyTag = require("@malloydata/malloy-tag");
|
|
22
|
+
const malloyFilter = require("@malloydata/malloy-filter");
|
|
22
23
|
require("@malloydata/render/webcomponent");
|
|
23
24
|
const ReactDOM = require("react-dom");
|
|
24
25
|
function _interopNamespaceDefault(e) {
|
|
@@ -33272,94 +33273,6 @@ class ErrorElement extends React__namespace.Component {
|
|
|
33272
33273
|
return this.props.children;
|
|
33273
33274
|
}
|
|
33274
33275
|
}
|
|
33275
|
-
function FilterOperations({
|
|
33276
|
-
rootQuery,
|
|
33277
|
-
filters
|
|
33278
|
-
}) {
|
|
33279
|
-
const {
|
|
33280
|
-
setQuery
|
|
33281
|
-
} = React.useContext(QueryEditorContext);
|
|
33282
|
-
if (filters.length === 0) {
|
|
33283
|
-
return null;
|
|
33284
|
-
}
|
|
33285
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
33286
|
-
children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
33287
|
-
..._stylex.props(styles$s.title),
|
|
33288
|
-
children: "filter by"
|
|
33289
|
-
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
33290
|
-
..._stylex.props(styles$s.tokenContainer),
|
|
33291
|
-
children: filters.map((filterOperation, key2) => {
|
|
33292
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ErrorElement, {
|
|
33293
|
-
fallback: /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
33294
|
-
children: ["Invalid filter", /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
33295
|
-
onClick: () => {
|
|
33296
|
-
filterOperation.delete();
|
|
33297
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
33298
|
-
}
|
|
33299
|
-
})]
|
|
33300
|
-
}),
|
|
33301
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(SingleFilterOperation, {
|
|
33302
|
-
filterOperation,
|
|
33303
|
-
rootQuery
|
|
33304
|
-
})
|
|
33305
|
-
}, key2);
|
|
33306
|
-
})
|
|
33307
|
-
})]
|
|
33308
|
-
});
|
|
33309
|
-
}
|
|
33310
|
-
function SingleFilterOperation({
|
|
33311
|
-
rootQuery,
|
|
33312
|
-
filterOperation
|
|
33313
|
-
}) {
|
|
33314
|
-
const {
|
|
33315
|
-
fieldReference,
|
|
33316
|
-
filterString
|
|
33317
|
-
} = filterOperation.filter;
|
|
33318
|
-
const filter = filterOperation.filter.getFilter();
|
|
33319
|
-
const fieldInfo = fieldReference.getFieldInfo();
|
|
33320
|
-
const {
|
|
33321
|
-
setQuery
|
|
33322
|
-
} = React.useContext(QueryEditorContext);
|
|
33323
|
-
if (fieldInfo.kind !== "dimension" && fieldInfo.kind !== "measure") {
|
|
33324
|
-
throw new Error(`Invalid filter field kind: ${fieldInfo.kind}`);
|
|
33325
|
-
}
|
|
33326
|
-
const setFilter = React.useCallback((filter2) => {
|
|
33327
|
-
filterOperation.filter.setFilter(filter2);
|
|
33328
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
33329
|
-
}, [filterOperation.filter, rootQuery, setQuery]);
|
|
33330
|
-
const {
|
|
33331
|
-
op,
|
|
33332
|
-
value
|
|
33333
|
-
} = parsedToLabels(filter, filterString);
|
|
33334
|
-
const label = `${fieldInfo.name} ${op} ${value}`;
|
|
33335
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
33336
|
-
..._stylex.props(hoverStyles.main),
|
|
33337
|
-
children: [/* @__PURE__ */ jsxRuntime.jsx(FilterPopover, {
|
|
33338
|
-
fieldInfo,
|
|
33339
|
-
path: fieldReference.path ?? [],
|
|
33340
|
-
filter,
|
|
33341
|
-
setFilter,
|
|
33342
|
-
trigger: /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
33343
|
-
icon: "filter",
|
|
33344
|
-
color: "cyan",
|
|
33345
|
-
label
|
|
33346
|
-
}),
|
|
33347
|
-
layoutProps: {
|
|
33348
|
-
align: "start",
|
|
33349
|
-
side: "bottom",
|
|
33350
|
-
sideOffset: 1
|
|
33351
|
-
}
|
|
33352
|
-
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
33353
|
-
..._stylex.props(hoverStyles.hoverActions),
|
|
33354
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
33355
|
-
onClick: () => {
|
|
33356
|
-
filterOperation.delete();
|
|
33357
|
-
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
33358
|
-
}
|
|
33359
|
-
})
|
|
33360
|
-
})]
|
|
33361
|
-
});
|
|
33362
|
-
}
|
|
33363
33276
|
const parsedToLabels = (parsed, filterString) => {
|
|
33364
33277
|
if (parsed.parsed === null) {
|
|
33365
33278
|
return {
|
|
@@ -33539,6 +33452,94 @@ function displayTimeFromMoment(momentObj) {
|
|
|
33539
33452
|
}
|
|
33540
33453
|
return momentObj.moment;
|
|
33541
33454
|
}
|
|
33455
|
+
function FilterOperations({
|
|
33456
|
+
rootQuery,
|
|
33457
|
+
filters
|
|
33458
|
+
}) {
|
|
33459
|
+
const {
|
|
33460
|
+
setQuery
|
|
33461
|
+
} = React.useContext(QueryEditorContext);
|
|
33462
|
+
if (filters.length === 0) {
|
|
33463
|
+
return null;
|
|
33464
|
+
}
|
|
33465
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
33466
|
+
children: [/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
33467
|
+
..._stylex.props(styles$s.title),
|
|
33468
|
+
children: "filter by"
|
|
33469
|
+
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
33470
|
+
..._stylex.props(styles$s.tokenContainer),
|
|
33471
|
+
children: filters.map((filterOperation, key2) => {
|
|
33472
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ErrorElement, {
|
|
33473
|
+
fallback: /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
33474
|
+
children: ["Invalid filter", /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
33475
|
+
onClick: () => {
|
|
33476
|
+
filterOperation.delete();
|
|
33477
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
33478
|
+
}
|
|
33479
|
+
})]
|
|
33480
|
+
}),
|
|
33481
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(SingleFilterOperation, {
|
|
33482
|
+
filterOperation,
|
|
33483
|
+
rootQuery
|
|
33484
|
+
})
|
|
33485
|
+
}, key2);
|
|
33486
|
+
})
|
|
33487
|
+
})]
|
|
33488
|
+
});
|
|
33489
|
+
}
|
|
33490
|
+
function SingleFilterOperation({
|
|
33491
|
+
rootQuery,
|
|
33492
|
+
filterOperation
|
|
33493
|
+
}) {
|
|
33494
|
+
const {
|
|
33495
|
+
fieldReference,
|
|
33496
|
+
filterString
|
|
33497
|
+
} = filterOperation.filter;
|
|
33498
|
+
const filter = filterOperation.filter.getFilter();
|
|
33499
|
+
const fieldInfo = fieldReference.getFieldInfo();
|
|
33500
|
+
const {
|
|
33501
|
+
setQuery
|
|
33502
|
+
} = React.useContext(QueryEditorContext);
|
|
33503
|
+
if (fieldInfo.kind !== "dimension" && fieldInfo.kind !== "measure") {
|
|
33504
|
+
throw new Error(`Invalid filter field kind: ${fieldInfo.kind}`);
|
|
33505
|
+
}
|
|
33506
|
+
const setFilter = React.useCallback((filter2) => {
|
|
33507
|
+
filterOperation.filter.setFilter(filter2);
|
|
33508
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
33509
|
+
}, [filterOperation.filter, rootQuery, setQuery]);
|
|
33510
|
+
const {
|
|
33511
|
+
op,
|
|
33512
|
+
value
|
|
33513
|
+
} = parsedToLabels(filter, filterString);
|
|
33514
|
+
const label = `${fieldInfo.name} ${op} ${value}`;
|
|
33515
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
33516
|
+
..._stylex.props(hoverStyles.main),
|
|
33517
|
+
children: [/* @__PURE__ */ jsxRuntime.jsx(FilterPopover, {
|
|
33518
|
+
fieldInfo,
|
|
33519
|
+
path: fieldReference.path ?? [],
|
|
33520
|
+
filter,
|
|
33521
|
+
setFilter,
|
|
33522
|
+
trigger: /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
33523
|
+
icon: "filter",
|
|
33524
|
+
color: "cyan",
|
|
33525
|
+
label
|
|
33526
|
+
}),
|
|
33527
|
+
layoutProps: {
|
|
33528
|
+
align: "start",
|
|
33529
|
+
side: "bottom",
|
|
33530
|
+
sideOffset: 1
|
|
33531
|
+
}
|
|
33532
|
+
}), /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
33533
|
+
..._stylex.props(hoverStyles.hoverActions),
|
|
33534
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ClearButton, {
|
|
33535
|
+
onClick: () => {
|
|
33536
|
+
filterOperation.delete();
|
|
33537
|
+
setQuery == null ? void 0 : setQuery(rootQuery.build());
|
|
33538
|
+
}
|
|
33539
|
+
})
|
|
33540
|
+
})]
|
|
33541
|
+
});
|
|
33542
|
+
}
|
|
33542
33543
|
function LimitOperation({
|
|
33543
33544
|
rootQuery,
|
|
33544
33545
|
limit
|
|
@@ -34644,8 +34645,128 @@ const styles$a = {
|
|
|
34644
34645
|
$$css: true
|
|
34645
34646
|
}
|
|
34646
34647
|
};
|
|
34648
|
+
function FilterLiteralEditor({
|
|
34649
|
+
filterType,
|
|
34650
|
+
value,
|
|
34651
|
+
setValue
|
|
34652
|
+
}) {
|
|
34653
|
+
let filter = null;
|
|
34654
|
+
switch (filterType) {
|
|
34655
|
+
case "string_type":
|
|
34656
|
+
{
|
|
34657
|
+
const {
|
|
34658
|
+
parsed
|
|
34659
|
+
} = malloyFilter.StringFilterExpression.parse(value.filter_expression_value);
|
|
34660
|
+
filter = {
|
|
34661
|
+
kind: "string",
|
|
34662
|
+
parsed
|
|
34663
|
+
};
|
|
34664
|
+
}
|
|
34665
|
+
break;
|
|
34666
|
+
case "number_type":
|
|
34667
|
+
{
|
|
34668
|
+
const {
|
|
34669
|
+
parsed
|
|
34670
|
+
} = malloyFilter.NumberFilterExpression.parse(value.filter_expression_value);
|
|
34671
|
+
filter = {
|
|
34672
|
+
kind: "number",
|
|
34673
|
+
parsed
|
|
34674
|
+
};
|
|
34675
|
+
}
|
|
34676
|
+
break;
|
|
34677
|
+
case "boolean_type":
|
|
34678
|
+
{
|
|
34679
|
+
const {
|
|
34680
|
+
parsed
|
|
34681
|
+
} = malloyFilter.BooleanFilterExpression.parse(value.filter_expression_value);
|
|
34682
|
+
filter = {
|
|
34683
|
+
kind: "boolean",
|
|
34684
|
+
parsed
|
|
34685
|
+
};
|
|
34686
|
+
}
|
|
34687
|
+
break;
|
|
34688
|
+
case "date_type":
|
|
34689
|
+
{
|
|
34690
|
+
const {
|
|
34691
|
+
parsed
|
|
34692
|
+
} = malloyFilter.TemporalFilterExpression.parse(value.filter_expression_value);
|
|
34693
|
+
filter = {
|
|
34694
|
+
kind: "date",
|
|
34695
|
+
parsed
|
|
34696
|
+
};
|
|
34697
|
+
}
|
|
34698
|
+
break;
|
|
34699
|
+
case "timestamp_type":
|
|
34700
|
+
{
|
|
34701
|
+
const {
|
|
34702
|
+
parsed
|
|
34703
|
+
} = malloyFilter.TemporalFilterExpression.parse(value.filter_expression_value);
|
|
34704
|
+
filter = {
|
|
34705
|
+
kind: "timestamp",
|
|
34706
|
+
parsed
|
|
34707
|
+
};
|
|
34708
|
+
}
|
|
34709
|
+
break;
|
|
34710
|
+
}
|
|
34711
|
+
const {
|
|
34712
|
+
op,
|
|
34713
|
+
value: filterValue
|
|
34714
|
+
} = parsedToLabels(filter, value.filter_expression_value);
|
|
34715
|
+
const label = `${op} ${filterValue}`;
|
|
34716
|
+
const fieldInfo = {
|
|
34717
|
+
kind: "dimension",
|
|
34718
|
+
name: "parameter",
|
|
34719
|
+
type: {
|
|
34720
|
+
kind: filterType
|
|
34721
|
+
}
|
|
34722
|
+
};
|
|
34723
|
+
const setFilter = (parsed) => {
|
|
34724
|
+
switch (parsed.kind) {
|
|
34725
|
+
case "string":
|
|
34726
|
+
setValue({
|
|
34727
|
+
kind: "filter_expression_literal",
|
|
34728
|
+
filter_expression_value: malloyFilter.StringFilterExpression.unparse(parsed.parsed)
|
|
34729
|
+
});
|
|
34730
|
+
break;
|
|
34731
|
+
case "boolean":
|
|
34732
|
+
setValue({
|
|
34733
|
+
kind: "filter_expression_literal",
|
|
34734
|
+
filter_expression_value: malloyFilter.BooleanFilterExpression.unparse(parsed.parsed)
|
|
34735
|
+
});
|
|
34736
|
+
break;
|
|
34737
|
+
case "number":
|
|
34738
|
+
setValue({
|
|
34739
|
+
kind: "filter_expression_literal",
|
|
34740
|
+
filter_expression_value: malloyFilter.NumberFilterExpression.unparse(parsed.parsed)
|
|
34741
|
+
});
|
|
34742
|
+
break;
|
|
34743
|
+
case "date":
|
|
34744
|
+
case "timestamp":
|
|
34745
|
+
setValue({
|
|
34746
|
+
kind: "filter_expression_literal",
|
|
34747
|
+
filter_expression_value: malloyFilter.TemporalFilterExpression.unparse(parsed.parsed)
|
|
34748
|
+
});
|
|
34749
|
+
break;
|
|
34750
|
+
}
|
|
34751
|
+
};
|
|
34752
|
+
return /* @__PURE__ */ jsxRuntime.jsx(FilterPopover, {
|
|
34753
|
+
fieldInfo,
|
|
34754
|
+
path: [],
|
|
34755
|
+
filter,
|
|
34756
|
+
setFilter,
|
|
34757
|
+
trigger: /* @__PURE__ */ jsxRuntime.jsx(Token, {
|
|
34758
|
+
label
|
|
34759
|
+
}),
|
|
34760
|
+
layoutProps: {
|
|
34761
|
+
align: "start",
|
|
34762
|
+
side: "bottom",
|
|
34763
|
+
sideOffset: 1
|
|
34764
|
+
}
|
|
34765
|
+
});
|
|
34766
|
+
}
|
|
34647
34767
|
function LiteralValueEditor({
|
|
34648
34768
|
value,
|
|
34769
|
+
filterType,
|
|
34649
34770
|
setValue,
|
|
34650
34771
|
customStyle
|
|
34651
34772
|
}) {
|
|
@@ -34700,12 +34821,10 @@ function LiteralValueEditor({
|
|
|
34700
34821
|
customStyle
|
|
34701
34822
|
});
|
|
34702
34823
|
case "filter_expression_literal":
|
|
34703
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
34704
|
-
value
|
|
34705
|
-
|
|
34706
|
-
|
|
34707
|
-
filter_expression_value: value2
|
|
34708
|
-
}),
|
|
34824
|
+
return /* @__PURE__ */ jsxRuntime.jsx(FilterLiteralEditor, {
|
|
34825
|
+
value,
|
|
34826
|
+
filterType,
|
|
34827
|
+
setValue,
|
|
34709
34828
|
customStyle
|
|
34710
34829
|
});
|
|
34711
34830
|
}
|
|
@@ -34736,6 +34855,7 @@ function Parameters({
|
|
|
34736
34855
|
icon: atomicTypeToIcon(parameter.type.kind),
|
|
34737
34856
|
label: parameter.name
|
|
34738
34857
|
}), /* @__PURE__ */ jsxRuntime.jsx(LiteralValueEditor, {
|
|
34858
|
+
filterType: parameter.type.kind === "filter_expression_type" ? parameter.type.filter_type.kind : "string_type",
|
|
34739
34859
|
value: ((_a2 = source.tryGetParameter(parameter.name)) == null ? void 0 : _a2.parameter.value) ?? parameter.default_value,
|
|
34740
34860
|
setValue: (value) => {
|
|
34741
34861
|
source.setParameter(parameter.name, value);
|