Skip to content
Snippets Groups Projects
Unverified Commit 3769a44e authored by Kyle Doherty's avatar Kyle Doherty Committed by GitHub
Browse files

Add segments convenience method to help get at currently applied segments (#7149)

* add segments method [ci skip]

* update test + prettier

* add segment and metric metadata methods

* prettier
parent 964c8059
No related merge requests found
......@@ -44,6 +44,14 @@ export default class Metadata extends Base {
return (Object.values(this.segments): Segment[]);
}
segment(segmentId): ?Segment {
return (segmentId != null && this.segments[segmentId]) || null;
}
metric(metricId): ?Metric {
return (metricId != null && this.metrics[metricId]) || null;
}
database(databaseId): ?Database {
return (databaseId != null && this.databases[databaseId]) || null;
}
......
......@@ -49,6 +49,8 @@ import AggregationWrapper from "./Aggregation";
import AggregationOption from "metabase-lib/lib/metadata/AggregationOption";
import Utils from "metabase/lib/utils";
import { isSegmentFilter } from "metabase/lib/query/filter";
export const STRUCTURED_QUERY_TEMPLATE = {
database: null,
type: "query",
......@@ -478,6 +480,20 @@ export default class StructuredQuery extends AtomicQuery {
return this.table().segments.filter(sgmt => sgmt.is_active === true);
}
/**
* @returns @type {Segment}s that are currently applied to the question
*/
segments() {
return this.filters()
.filter(f => isSegmentFilter(f))
.map(segmentFilter => {
// segment id is stored as the second part of the filter clause
// e.x. ["SEGMENT", 1]
const segmentId = segmentFilter[1];
return this.metadata().segment(segmentId);
});
}
/**
* @returns whether a new filter can be added or not
*/
......
......@@ -14,6 +14,7 @@ import {
PRODUCT_TILE_FIELD_ID,
} from "__support__/sample_dataset_fixture";
import Segment from "metabase-lib/lib/metadata/Segment";
import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
function makeDatasetQuery(query) {
......@@ -380,6 +381,16 @@ describe("StructuredQuery unit tests", () => {
pending();
});
describe("segments", () => {
it("should list any applied segments that are currently active filters", () => {
const queryWithSegmentFilter = query.addFilter(["SEGMENT", 1]);
// expect there to be segments
expect(queryWithSegmentFilter.segments().length).toBe(1);
// and they should actually be segments
expect(queryWithSegmentFilter.segments()[0]).toBeInstanceOf(Segment);
});
});
describe("canAddFilter", () => {
pending();
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment