Skip to content

feat(filters): add a Calendar date picker option to the Time range filter - #44527

Open
CodeWithPravinMaske wants to merge 26 commits into
apache:masterfrom
CodeWithPravinMaske:feat/date-range-native-filter
Open

CodeWithPravinMaske wants to merge 26 commits into
apache:masterfrom
CodeWithPravinMaske:feat/date-range-native-filter

Conversation

@CodeWithPravinMaske

@CodeWithPravinMaske CodeWithPravinMaske commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

SUMMARY

Adds a Calendar date picker option (a checkbox, off by default) to the existing Time range native filter, following the direction agreed in SIP-116 (#26651).

  • Off (default): unchanged behaviour.
  • On: the filter bar shows only an inline date-range picker. Picking dates gives a fixed range with the end date included; clearing means no filter. The default value is still set with the full control (the settings dialog always uses it), and expressions such as "Last week" are shown as the dates they resolve to. A default that carries a time of day is flagged with a warning and a tooltip.
  • A new Calendar Range type in the time range control (SIP Part 1) uses the same picker, so the Default Value field and Explore can choose dates from a calendar. Advanced is unchanged.
  • The calendar is a shared component (CalendarRangePicker) in DateFilterControl/components, so the SIP's Part 1 (a Calendar choice in the time range control, including Explore) can reuse it.

This replaces the earlier approach of a separate filter_date_range filter type, which is removed along with its Alerts & Reports handling.

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

(attach: the checkbox in the filter settings; the calendar in the filter bar; the filter with the option off)

TESTING INSTRUCTIONS

  1. Edit a dashboard > add filter > Time range. Under UI Configuration tick Calendar date picker and save.
  2. In the filter bar a plain date-range picker is shown. Pick two dates: the charts filter on whole days and the end date is included. Clear the picker: no filter.
  3. Set a default such as "Last week" (the Default Value field keeps the full control) with Calendar date picker ticked: the picker shows the real dates. A default with a time of day shows a warning and a tooltip.
  4. Leave Calendar date picker unticked (or open an existing filter): the filter looks and behaves as before.

ADDITIONAL INFORMATION

  • Changes UI
  • Includes DB Migration
  • Introduces new feature or API (Calendar date picker option)

@netlify

netlify Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for superset-docs-preview ready!

Name Link
🔨 Latest commit d9b8323
🔍 Latest deploy log https://app.netlify.com/projects/superset-docs-preview/deploys/6ae2dd5d2dbdde092e593ca8
😎 Deploy Preview https://deploy-preview-44527--superset-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@CodeWithPravinMaske
CodeWithPravinMaske force-pushed the feat/date-range-native-filter branch from e845571 to 0a66df4 Compare September 22, 2026 11:23

@bito-code-review bito-code-review Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Agent Run #2494c9

Actionable Suggestions - 4
  • superset-frontend/src/filters/components/DateRange/transformProps.ts - 1
  • superset-frontend/src/filters/components/DateRange/controlPanel.ts - 1
  • superset-frontend/src/filters/components/DateRange/utils.ts - 1
  • superset-frontend/src/constants.ts - 1
Additional Suggestions - 2
  • superset-frontend/src/constants.ts - 1
    • URL rison misses date range · Line 203-203
      `convertRisonToNativeValue` (risonFilters.ts:476-499) has no `filter_date_range` case, so URL rison filters targeting a DateRange filter fall to the default branch and produce a `filters` array data mask, whereas the DateRange plugin emits `extraFormData.time_range`. Add a case so URL-applied date-range filters bind correctly.
  • superset-frontend/src/filters/components/DateRange/types.ts - 1
    • Unused defaultValue field · Line 28-30
      `defaultValue` is declared in `PluginFilterDateRangeCustomizeProps` and set in `DEFAULT_FORM_DATA`, but `DateRangeFilterPlugin.tsx` never reads `formData.defaultValue` (it only uses `filterState.value`), and `controlPanel.ts` exposes no control for it. Unlike sibling plugins (`Time`, `TimeColumn`, `TimeGrain`, `Select`) that consume `defaultValue`, this field is dead — configuring it has no effect. Wire it up or drop it.
Review Details
  • Files reviewed - 10 · Commit Range: 0a66df4..0a66df4
    • superset-frontend/src/constants.ts
    • superset-frontend/src/filters/components/DateRange/DateRangeFilterPlugin.tsx
    • superset-frontend/src/filters/components/DateRange/controlPanel.ts
    • superset-frontend/src/filters/components/DateRange/index.ts
    • superset-frontend/src/filters/components/DateRange/transformProps.ts
    • superset-frontend/src/filters/components/DateRange/types.ts
    • superset-frontend/src/filters/components/DateRange/utils.test.ts
    • superset-frontend/src/filters/components/DateRange/utils.ts
    • superset-frontend/src/filters/components/index.ts
    • superset-frontend/src/visualizations/presets/MainPreset.ts
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • Eslint (Linter) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers an incremental AI Review.

  • /review full - Manually triggers a full AI Review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread superset-frontend/src/constants.ts Resolved
@CodeWithPravinMaske

Copy link
Copy Markdown
Contributor Author

Thanks for the review, @bito-code-review. Pushed a follow-up commit addressing feedback:

  • Fixed — parseTimeRange now rejects a value missing the " : " separator instead of silently defaulting the missing end date to "now" (dayjs(undefined) is valid). Added a regression test.
  • Fixed — added filter_date_range alongside filter_time in the Alerts & Reports scheduled-report filter serializer (superset/reports/models.py) and in AlertReportModal.tsx, so scheduled reports handle this filter the same way they already do Time Range.
  • Not applicable — the "unguarded queriesData destructure" and "dead enableEmptyFilter control" items match the existing filter_time plugin's pattern exactly (queriesData is always populated for UI-only filters with no buildQuery; enableEmptyFilter is consumed by the FilterControl wrapper, not the plugin component). Left as-is for consistency with that precedent.
  • Out of scope — the rison/URL deep-linking gap in risonFilters.ts (convertRisonToNativeValue) is a pre-existing issue that also affects filter_time today (its case there uses the wrong string, filter_time_range instead of filter_time, so it's dead code already). Fixing it properly means touching shared rison-injection logic used by every filter type — happy to file that separately rather than scope-creep this PR.
  • Left as-is — the unused defaultValue field mirrors the identical dead field already present in Time/types.ts; keeping it for consistency with that plugin's structure rather than diverging.

@codecov

codecov Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.63158% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.69%. Comparing base (0fff43f) to head (3af8c68).
⚠️ Report is 14 commits behind head on master.

Files with missing lines Patch % Lines
...d/src/filters/components/Time/TimeFilterPlugin.tsx 72.22% 5 Missing ⚠️
...ls/DateFilterControl/components/DateRangeFrame.tsx 66.66% 1 Missing ⚠️
.../controls/DateFilterControl/utils/calendarRange.ts 96.96% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master   #44527   +/-   ##
=======================================
  Coverage   84.68%   84.69%           
=======================================
  Files        3069     3072    +3     
  Lines      205463   205553   +90     
  Branches    48310    48346   +36     
=======================================
+ Hits       174004   174088   +84     
- Misses      28169    28176    +7     
+ Partials     3290     3289    -1     
Flag Coverage Δ
hive 34.53% <ø> (+<0.01%) ⬆️
javascript 80.93% <92.63%> (+<0.01%) ⬆️
mysql 52.55% <ø> (+<0.01%) ⬆️
postgres 52.56% <ø> (+<0.01%) ⬆️
presto 36.26% <ø> (+<0.01%) ⬆️
python 87.73% <ø> (+<0.01%) ⬆️
sqlite 52.32% <ø> (+<0.01%) ⬆️
unit 82.45% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@bito-code-review bito-code-review Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Agent Run #c6366a

Actionable Suggestions - 6
  • superset/reports/models.py - 1
  • superset-frontend/src/filters/components/DateRange/types.ts - 1
  • superset-frontend/src/filters/components/DateRange/DateRangeFilterPlugin.tsx - 1
  • superset-frontend/src/filters/components/DateRange/controlPanel.ts - 1
  • superset-frontend/src/features/alerts/AlertReportModal.tsx - 2
Additional Suggestions - 1
  • superset-frontend/src/filters/components/DateRange/utils.ts - 1
    • Magic number range count · Line 28-28
      `parts.length !== 2` hardcodes the range-endpoint count as a bare literal. Since `RANGE_SEPARATOR` and `DATE_FORMAT` are already named constants, the endpoint count should be too — a named constant documents that a range is exactly two parts and survives future edits (e.g. a separator appearing in a datetime).
Review Details
  • Files reviewed - 13 · Commit Range: 0a66df4..c937246
    • superset-frontend/src/constants.ts
    • superset-frontend/src/features/alerts/AlertReportModal.tsx
    • superset-frontend/src/filters/components/DateRange/DateRangeFilterPlugin.tsx
    • superset-frontend/src/filters/components/DateRange/controlPanel.ts
    • superset-frontend/src/filters/components/DateRange/index.ts
    • superset-frontend/src/filters/components/DateRange/transformProps.ts
    • superset-frontend/src/filters/components/DateRange/types.ts
    • superset-frontend/src/filters/components/DateRange/utils.test.ts
    • superset-frontend/src/filters/components/DateRange/utils.ts
    • superset-frontend/src/filters/components/index.ts
    • superset-frontend/src/visualizations/presets/MainPreset.ts
    • superset/reports/models.py
    • tests/unit_tests/reports/model_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • Eslint (Linter) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers an incremental AI Review.

  • /review full - Manually triggers a full AI Review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread superset/reports/models.py Resolved
@sfirke

sfirke commented Sep 22, 2026

Copy link
Copy Markdown
Member

Interesting idea, to add another filter instead of changing the existing one. I see this discussion about the need for this: #19798 but don't immediately see any other PRs. Could you include screenshots of the new filter UI in your PR description? And how does this work with Jinja templating?

@sadpandajoe

Copy link
Copy Markdown
Member

@CodeWithPravinMaske since this is a new feature, can we add screenshots to the PR?

@CodeWithPravinMaske

CodeWithPravinMaske commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor Author

Screenshots as requested:

Adding the new filter type — "Date range filter" shows up in the Filter Type dropdown alongside the existing filter types (Value, Time range, Time column, Time grain, Numerical range):

filter type dropdown

The rendered filter bar control — a plain calendar date-range picker, no time-of-day fields, no No filter/Advanced/Relative/Previous options — filtering a real dashboard (note the dependent chart's data has changed to the selected range):

filter bar

@sfirke re: Jinja templating — it works exactly like the Time Range filter, no special-casing needed. The filter emits extraFormData.time_range as a "YYYY-MM-DD : YYYY-MM-DD" string, the same shape the Time Range filter produces. Superset's get_time_filter() Jinja macro (superset/jinja_context.py) reads directly off form_data.get("time_range") regardless of which filter type produced it, so {{ get_time_filter(column).from_expr }} / .to_expr and any dataset-level Jinja using time_range work identically whether the value came from Time Range or this new Date range filter.

Thanks for flagging the discussion thread (#19798) — this PR takes the "additive new filter type" path discussed there rather than modifying the existing Time Range filter, specifically so it doesn't change behavior for anyone already using Time Range.

CodeWithPravinMaske and others added 4 commits September 23, 2026 08:40
Adds a new native filter plugin ("Date range filter") that renders a
plain AntD RangePicker (no time-of-day, no relative/advanced/previous
options) and emits a standard time_range extraFormData value, so it
works as a drop-in alternative to the Time Range filter for dashboards
that only need a calendar date picker.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Fix parseTimeRange to reject a value missing the " : " separator
  instead of silently defaulting the missing end date to "now"
  (dayjs(undefined) is valid).
- Add filter_date_range alongside filter_time in the Alerts & Reports
  scheduled-report filter serializer (superset/reports/models.py), so
  scheduled reports honor this filter the same way they do Time Range.
- Add matching filter_date_range handling in AlertReportModal.tsx
  (skip column-value fetching, render a RangePicker for manual value
  entry) so configuring a scheduled report with this filter attached
  doesn't try to query it as a column-backed filter.
…tive_filter

Codecov flagged the filter_date_range branch added in
superset/reports/models.py as uncovered (0% patch coverage). Add the
same normal-case and empty-values-warning tests already present for
filter_time.
- Store an empty filterValues array (not [undefined]) when the
  Alerts & Reports date-range picker is cleared, so a cleared filter
  doesn't get serialized with a null time_range.
- Use the exported DATE_FORMAT constant instead of a duplicated
  "YYYY-MM-DD" literal for the RangePicker format.
@CodeWithPravinMaske
CodeWithPravinMaske force-pushed the feat/date-range-native-filter branch from c937246 to 9929ef7 Compare September 23, 2026 06:01
export function formatTimeRange(dates: DateRangeValue): string | undefined {
const [start, end] = dates ?? [null, null];
if (!start || !end) return undefined;
return `${start.format(DATE_FORMAT)}${RANGE_SEPARATOR}${end.format(DATE_FORMAT)}`;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The selected end date is serialized at midnight, but Superset treats the upper time-range bound as exclusive, excluding the entire selected final calendar day.

Assessment: 🟠 Major · 🔁 Occurrence: Often · 🏷️ Logic error

Use CodeAnt Skill Fix in Cursor Fix in VSCode Claude

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** superset-frontend/src/filters/components/DateRange/utils.ts
**Line:** 40:40
**Comment:**
	*Logic Error: The selected end date is serialized at midnight, but Superset treats the upper time-range bound as exclusive, excluding the entire selected final calendar day.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of b547203.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of 975dd5b.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of 654ab2c.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of afd4ab9.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of e06eaeb.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of 64a75a1.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of fc37b3e.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of b12786c.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ CodeAnt verified this suggestion was addressed in subsequent commits and marked this thread resolved as of 878271e.

The formatter now adds one day to the selected end date before serializing it as the exclusive upper bound, and the parser subtracts one day when displaying it back.

If that's not right, unresolve this thread and CodeAnt will leave it open.

Superset's time_range filter treats the upper bound as exclusive
(col < end_dttm, see get_time_filter in superset/models/helpers.py) —
the same reason the built-in Custom time-range picker labels its
fields "Start (inclusive)" / "End (exclusive)". Our plain date-only
picker has no such labeling, so a user picking an end date expects
that whole day to be included.

Store the end bound as one day past the selected end date so the
entire selected day is covered, and reverse that offset on parse so
re-opening the filter displays the originally picked date.
@bito-code-review

bito-code-review Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Agent Run #7afa77

Actionable Suggestions - 0
Additional Suggestions - 3
  • superset-frontend/src/filters/components/DateRange/DateRangeFilterPlugin.tsx - 1
    • Missing validateStatus surfacing · Line 64-69
      `FilterControl` computes `validateStatus: 'error'` for required filters with a missing value and merges it into `filterState` (`FilterValue.tsx:391-396`), but this plugin never consumes it. Sibling `TimeFilterPlugin` styles its `ControlContainer` from `filterState.validateStatus`, so a required DateRange filter left empty shows no error indication on the control. Consider surfacing validation state (e.g. error border on `RangePicker`).
  • superset-frontend/src/features/alerts/AlertReportModal.tsx - 1
    • Duplicated filter onChange logic · Line 1710-1731
      The new `filter_date_range` branch duplicates the `setNativeFilterData(nativeFilterData.map(...))` onChange pattern already used by the `filter_time` (1695-1704) and `filter_range` (1741-1760) branches. Extracting one shared updater for a filter's `filterValues` would remove the triple duplication and reduce divergence risk when the update logic changes.
  • superset-frontend/src/filters/components/DateRange/transformProps.ts - 1
    • Unused extracted props · Line 42-45
      The extracted `data` (line 42) and returned `data`/`behaviors` (lines 45, 52) are never consumed: `DateRangeFilterPlugin` destructures only the hook setters, `width`, `height`, `filterState`, `inputRef`. This makes the unguarded `queriesData` extraction pure crash risk with no benefit. Remove the unused fields or use them.
Review Details
  • Files reviewed - 13 · Commit Range: 74bc3cf..b547203
    • superset-frontend/src/constants.ts
    • superset-frontend/src/features/alerts/AlertReportModal.tsx
    • superset-frontend/src/filters/components/DateRange/DateRangeFilterPlugin.tsx
    • superset-frontend/src/filters/components/DateRange/controlPanel.ts
    • superset-frontend/src/filters/components/DateRange/index.ts
    • superset-frontend/src/filters/components/DateRange/transformProps.ts
    • superset-frontend/src/filters/components/DateRange/types.ts
    • superset-frontend/src/filters/components/DateRange/utils.test.ts
    • superset-frontend/src/filters/components/DateRange/utils.ts
    • superset-frontend/src/filters/components/index.ts
    • superset-frontend/src/visualizations/presets/MainPreset.ts
    • superset/reports/models.py
    • tests/unit_tests/reports/model_test.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • Eslint (Linter) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers an incremental AI Review.

  • /review full - Manually triggers a full AI Review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@rusackas rusackas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heya @CodeWithPravinMaske, thanks for sticking with this through a couple rounds of review, most of the bot findings turned out to already be addressed and I went ahead and resolved those threads.

Two things left before this is mergeable. CI's actually red right now: messages.pot is out of sync since "Date range filter" and its description never got regenerated into the template, that's ./scripts/translations/babel_update.sh and a commit of the result.

The other one's real: enableEmptyFilter ("Filter value is required") is exposed in the control panel but nothing reads it, not DateRangeFilterPlugin.tsx, not transformProps.ts. A dashboard builder can toggle it on and get no enforcement at all, which is worse than not having the option since it looks like it's doing something. RangeFilterPlugin and SelectFilterPlugin both honor this flag already, might be worth mirroring one of those.

Everything else (the exclusive-end-date handling, report/alert integration) looks solid. Let me know once those two are sorted and I'll take another pass.

- Run ./scripts/translations/babel_update.sh to add "Date range filter"
  and its description to messages.pot and all language catalogs —
  these were never extracted after the filter was added.
- Pass filterState.validateStatus through to the RangePicker's status
  prop, so a required-and-empty filter shows a red border like
  RangeFilterPlugin/SelectFilterPlugin already do. Apply-blocking
  itself was already enforced generically by the filter bar framework
  (verified live); this only adds the missing visual feedback.
@github-actions github-actions Bot added i18n Namespace | Anything related to localization i18n:spanish Translation related to Spanish language i18n:italian Translation related to Italian language i18n:french Translation related to French language i18n:chinese Translation related to Chinese language i18n:japanese Translation related to Japanese language i18n:russian Translation related to Russian language labels Sep 24, 2026
@rusackas

Copy link
Copy Markdown
Member

I think this is REALLY close to appeasing #26651

It'd be good to see what the delta is between that SIP and this implementation. We can move that SIP to a vote once we see if I'm right about their potential alignment.

@CodeWithPravinMaske

Copy link
Copy Markdown
Contributor Author

@rusackas Took a look at SIP-116 (#26651) against this PR — here's the delta:

SIP-116 ask This PR
"Alternative time filter... commonly used calendar date picker" (cites an Airbnb-style picker) Date range filter — AntD RangePicker, a real calendar-range control
"Fast navigation through months and years" Built in — AntD's calendar header has month/year jump controls
Replace the "scroll columns" design ("a nightmare on desktop") No column-scroll UI at all, just the calendar
"New dependencies... probably some UI lib" None needed — AntD was already a dependency
Rejected: slider-based picker Not what we built
Doesn't specify new filter type vs. replacing the existing one Went additive — new filter_date_range type alongside Time Range, so existing dashboards/filters are untouched

So functionally this looks like a close match for the SIP's intent. The one gap: the SIP doesn't explicitly ask for removing time-of-day, but that fell out naturally from using a plain date picker rather than a datetime one — seems like a reasonable bonus simplification rather than a divergence.

Happy to adjust anything if you see this differently before it goes to a vote.

@rusackas rusackas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correcting myself from last pass: I called enableEmptyFilter a dead control, but that was wrong. Checked the framework layer this time, FilterControl.tsx/FilterBar enforce it centrally off controlValues.enableEmptyFilter regardless of whether the plugin component reads it, exactly like Time (which this PR explicitly mirrors) already does. Not a bug.

Everything else bot-flagged is resolved, and the pot-drift CI failure from last time is cleared. Approving!

The only thing standing between this and merge is hold:sip!, and that's a good thing to have blocking, not a code issue. Given the SIP-116 delta looks like a strong match, I'll leave a note on the SIP issue itself linking here so that conversation can move toward a vote.

@github-actions github-actions Bot added the requires:rebase Requires rebasing on top of current master label Sep 28, 2026
const [start, end] = dates ?? [null, null];
if (!start || !end) return undefined;
const exclusiveEnd = end.add(1, 'day');
return `${start.format(DATE_FORMAT)}${RANGE_SEPARATOR}${exclusiveEnd.format(DATE_FORMAT)}`;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this will stick to absolute dates only, won't it? i.e. if I leave a filter to "last 30", wont it freeze to those last 30 days forever?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@andy-clapson Good catch, and correct — this is absolute-dates-only by design, not a bug. The picker only ever produces literal calendar dates (YYYY-MM-DD : YYYY-MM-DD), never a relative expression, so a "last 30 days" selection freezes to those specific dates and won't roll forward. That's intentional: the whole point of this filter is to be the plain-calendar counterpart to the existing Time Range filter, which already covers relative/rolling windows via its Advanced tab. Anyone who needs a rolling "last N days" filter should use Time Range instead — this one's additive, not a replacement, so that option isn't going away. Happy to call this out explicitly in the docs/PR description if it'd help avoid confusion for future users.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we not have both advanced options and calendar picker in a single filter? The reason is if we need to provide advanced flexibility to end users, wouldn't it be easier to have a single filter than choosing between 2?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@krmmkr Fair question, and it was a real design fork.

Why this filter exists at all: the existing Time Range filter's multi-tab UI (No filter / Advanced / Relative / Previous / Custom with time) is flexible but overwhelming for the common case of "just pick a start and end date" — that's the whole motivation behind SIP-116 (#26651), which this PR is aiming to satisfy. So this filter is intentionally the plain-calendar counterpart: pick a date, pick a date, done.

Why no advanced options here: that functionality already exists in the Time Range filter — relative ranges, "No filter," previous-period comparison, advanced expressions, all of it. Duplicating that inside this filter wouldn't add any new capability, it'd just be two filters doing the same thing with more surface area to maintain, and it'd reintroduce the exact complexity/discoverability problem the SIP was trying to get away from. If a dashboard needs both simple and advanced audiences, the two filter types can sit side by side rather than merging into one.

We're not planning to change that in this PR. If there's real appetite for it later, that's a reasonable follow-up enhancement to scope separately (possibly via the SIP-116 thread) rather than something to fold in now.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @krmmkr I agree, and I just posted a new comment on SIP-116 suggesting we move toward that in the course of two PRs.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would also address what @andy-clapson writes above.

…ive-filter

# Conflicts:
#	superset/translations/ar/LC_MESSAGES/messages.po
#	superset/translations/ca/LC_MESSAGES/messages.po
#	superset/translations/cs/LC_MESSAGES/messages.po
#	superset/translations/de/LC_MESSAGES/messages.po
#	superset/translations/en/LC_MESSAGES/messages.po
#	superset/translations/es/LC_MESSAGES/messages.po
#	superset/translations/fa/LC_MESSAGES/messages.po
#	superset/translations/fi/LC_MESSAGES/messages.po
#	superset/translations/fr/LC_MESSAGES/messages.po
#	superset/translations/it/LC_MESSAGES/messages.po
#	superset/translations/ja/LC_MESSAGES/messages.po
#	superset/translations/ko/LC_MESSAGES/messages.po
#	superset/translations/lv/LC_MESSAGES/messages.po
#	superset/translations/messages.pot
#	superset/translations/mi/LC_MESSAGES/messages.po
#	superset/translations/nl/LC_MESSAGES/messages.po
#	superset/translations/pl/LC_MESSAGES/messages.po
#	superset/translations/pt/LC_MESSAGES/messages.po
#	superset/translations/pt_BR/LC_MESSAGES/messages.po
#	superset/translations/ro/LC_MESSAGES/messages.po
#	superset/translations/ru/LC_MESSAGES/messages.po
#	superset/translations/sk/LC_MESSAGES/messages.po
#	superset/translations/sl/LC_MESSAGES/messages.po
#	superset/translations/sr/LC_MESSAGES/messages.po
#	superset/translations/sr_Latn/LC_MESSAGES/messages.po
#	superset/translations/ta/LC_MESSAGES/messages.po
#	superset/translations/th/LC_MESSAGES/messages.po
#	superset/translations/tr/LC_MESSAGES/messages.po
#	superset/translations/uk/LC_MESSAGES/messages.po
#	superset/translations/zh/LC_MESSAGES/messages.po
#	superset/translations/zh_TW/LC_MESSAGES/messages.po
…ive-filter

# Conflicts:
#	superset/translations/ar/LC_MESSAGES/messages.po
#	superset/translations/ca/LC_MESSAGES/messages.po
#	superset/translations/cs/LC_MESSAGES/messages.po
#	superset/translations/de/LC_MESSAGES/messages.po
#	superset/translations/en/LC_MESSAGES/messages.po
#	superset/translations/es/LC_MESSAGES/messages.po
#	superset/translations/fa/LC_MESSAGES/messages.po
#	superset/translations/fi/LC_MESSAGES/messages.po
#	superset/translations/fr/LC_MESSAGES/messages.po
#	superset/translations/it/LC_MESSAGES/messages.po
#	superset/translations/ja/LC_MESSAGES/messages.po
#	superset/translations/ko/LC_MESSAGES/messages.po
#	superset/translations/lv/LC_MESSAGES/messages.po
#	superset/translations/messages.pot
#	superset/translations/mi/LC_MESSAGES/messages.po
#	superset/translations/nl/LC_MESSAGES/messages.po
#	superset/translations/pl/LC_MESSAGES/messages.po
#	superset/translations/pt/LC_MESSAGES/messages.po
#	superset/translations/pt_BR/LC_MESSAGES/messages.po
#	superset/translations/ro/LC_MESSAGES/messages.po
#	superset/translations/ru/LC_MESSAGES/messages.po
#	superset/translations/sk/LC_MESSAGES/messages.po
#	superset/translations/sl/LC_MESSAGES/messages.po
#	superset/translations/sr/LC_MESSAGES/messages.po
#	superset/translations/sr_Latn/LC_MESSAGES/messages.po
#	superset/translations/ta/LC_MESSAGES/messages.po
#	superset/translations/th/LC_MESSAGES/messages.po
#	superset/translations/tr/LC_MESSAGES/messages.po
#	superset/translations/uk/LC_MESSAGES/messages.po
#	superset/translations/zh/LC_MESSAGES/messages.po
#	superset/translations/zh_TW/LC_MESSAGES/messages.po
@CodeWithPravinMaske

Copy link
Copy Markdown
Contributor Author

@andy-clapson @krmmkr thanks for the feedback. I replied on your threads (absolute dates only by design; a relative/advanced mode could come later as an opt-in toggle). Does that answer your questions, or would you want something changed in this PR before it goes ahead? If you're fine with it, please resolve your threads.

@rusackas the branch is rebased on the latest master, the only open item is the hold:sip! label. Is there anything else you need from me on SIP-116 alignment?

@bito-code-review

bito-code-review Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Agent Run #d98d8f

Actionable Suggestions - 0
Additional Suggestions - 40
  • superset/translations/fa/LC_MESSAGES/messages.po - 3
    • Untranslated user-facing string · Line 5775-5776
      New user-facing string `Date range filter` (used via `t()` in `superset-frontend/src/filters/components/DateRange/index.ts:28`) is added with an empty `msgstr`, so Persian users will see untranslated English. Fill in the Persian translation per BITO rules 12743/13343.
    • Untranslated user-facing string · Line 11189-11190
      New user-facing string `No sort (original order)` (used via `t()` in `superset-frontend/plugins/plugin-chart-echarts/src/Heatmap/controlPanel.tsx:42`) is added with an empty `msgstr`, so Persian users see English. Fill in the Persian translation per BITO rules 12743/13343.
    • Untranslated user-facing string · Line 12195-12198
      New user-facing string `Plain calendar date-range filter, with no time-of-day or relative-range options` (used via `t()` in `superset-frontend/src/filters/components/DateRange/index.ts:30`) is added with an empty `msgstr`, so Persian users see English. Fill in the Persian translation per BITO rules 12743/13343.
  • superset/translations/lv/LC_MESSAGES/messages.po - 3
    • Missing translation · Line 5507-5508
      New user-facing string "Date range filter" (used in `DateRange` filter component) is added with an empty `msgstr`, so Latvian users see untranslated English. Per BITO.md adaptive rule 12743, fill in the Latvian translation before merging.
    • Missing translation · Line 10523-10524
      New user-facing string "No sort (original order)" is added with an empty `msgstr`, so Latvian users see untranslated English. Per BITO.md adaptive rule 12743, fill in the Latvian translation before merging.
    • Missing translation · Line 11489-11492
      New user-facing string "Plain calendar date-range filter..." (used in `DateRange` filter component) is added with an empty `msgstr`, so Latvian users see untranslated English. Per BITO.md adaptive rule 12743, fill in the Latvian translation before merging.
  • superset/translations/ru/LC_MESSAGES/messages.po - 3
    • Missing Russian translation · Line 5419-5420
      New user-facing string `Date range filter` (used in `DateRange/index.ts:28`) is added with an empty `msgstr ""`, so Russian users see untranslated English. Fill in the Russian translation per BITO.md rule 12743.
    • Missing Russian translation · Line 10362-10363
      New user-facing string `No sort (original order)` (used in `Heatmap/controlPanel.tsx:42`) is added with an empty `msgstr ""`, so Russian users see untranslated English. Fill in the Russian translation per BITO.md rule 12743.
    • Missing Russian translation · Line 11319-11322
      New user-facing string `Plain calendar date-range filter, with no time-of-day or relative-range options` (used in `DateRange/index.ts:30`) is added with an empty `msgstr ""`, so Russian users see untranslated English. Fill in the Russian translation per BITO.md rule 12743.
  • superset/translations/es/LC_MESSAGES/messages.po - 3
    • Missing Spanish translation · Line 5699-5700
      New user-facing string `Date range filter` (used via `t()` in `filters/components/DateRange/index.ts`) is added with an empty `msgstr`, so Spanish users see untranslated English. Per BITO.md rule 12743, fill the translation before merging.
    • Missing Spanish translation · Line 10997-10998
      New user-facing string `No sort (original order)` (used via `t()` in `plugin-chart-echarts/src/Heatmap/controlPanel.tsx`) is added with an empty `msgstr`, so Spanish users see untranslated English. Fill the translation per BITO.md rule 12743.
    • Missing Spanish translation · Line 12002-12005
      New user-facing description `Plain calendar date-range filter...` (used via `t()` in `filters/components/DateRange/index.ts`) is added with an empty `msgstr`, so Spanish users see untranslated English. Fill the translation per BITO.md rule 12743.
  • superset/translations/nl/LC_MESSAGES/messages.po - 3
    • Empty Dutch translation · Line 5913-5914
      New msgid "Date range filter" is added with an empty `msgstr ""`, so Dutch users will see the untranslated English string. Per BITO.md rule 12743, fill in the Dutch translation before merging.
    • Empty Dutch translation · Line 11430-11431
      New msgid "No sort (original order)" is added with an empty `msgstr ""`, so Dutch users see the untranslated English string. Per BITO.md rule 12743, fill in the Dutch translation before merging.
    • Empty Dutch translation · Line 12465-12468
      New msgid "Plain calendar date-range filter, with no time-of-day or relative-range options" is added with an empty `msgstr ""`, so Dutch users see the untranslated English string. Per BITO.md rule 12743, fill in the Dutch translation before merging.
  • superset/translations/ta/LC_MESSAGES/messages.po - 3
    • Missing Tamil translation · Line 5454-5455
      New msgid "Date range filter" has an empty msgstr, so Tamil users will see the untranslated English string. Fill in the Tamil translation before merging (BITO.md rule 12743).
    • Missing Tamil translation · Line 10372-10373
      New msgid "No sort (original order)" has an empty msgstr, so Tamil users will see the untranslated English string. Fill in the Tamil translation before merging (BITO.md rule 12743).
    • Missing Tamil translation · Line 11285-11288
      New msgid "Plain calendar date-range filter, with no time-of-day or relative-range options" has an empty msgstr, so Tamil users will see the untranslated English string. Fill in the Tamil translation before merging (BITO.md rule 12743).
  • superset/translations/ca/LC_MESSAGES/messages.po - 3
    • Missing Catalan translation · Line 5759-5760
      New `msgid "Date range filter"` is added with an empty `msgstr`, so Catalan users will see the untranslated English string. Fill in the Catalan translation per BITO rule 12743 (complete translation coverage).
    • Missing Catalan translation · Line 11109-11110
      New `msgid "No sort (original order)"` is added with an empty `msgstr`, leaving the string untranslated for Catalan users. Fill in the Catalan translation per BITO rule 12743.
    • Missing Catalan translation · Line 12114-12117
      New multi-line `msgid` "Plain calendar date-range filter..." is added with an empty `msgstr`, leaving the string untranslated for Catalan users. Fill in the Catalan translation per BITO rule 12743.
  • superset/translations/fr/LC_MESSAGES/messages.po - 3
    • Missing French translation · Line 5571-5572
      New entry `msgid "Date range filter"` (used in `superset-frontend/src/filters/components/DateRange/index.ts`) is added with an empty `msgstr ""`, so French users will see the untranslated English string. Fill in the French translation per BITO.md rule 12743.
    • Missing French translation · Line 10637-10638
      New entry `msgid "No sort (original order)"` (used in `superset-frontend/plugins/plugin-chart-echarts/src/Heatmap/controlPanel.tsx`) is added with an empty `msgstr ""`, leaving it untranslated for French users. Fill in the translation per BITO.md rule 12743.
    • Missing French translation · Line 11618-11621
      New entry `msgid "Plain calendar date-range filter, with no time-of-day or relative-range options"` (used in `superset-frontend/src/filters/components/DateRange/index.ts`) is added with an empty `msgstr ""`, leaving it untranslated for French users. Fill in the translation per BITO.md rule 12743.
  • superset/translations/pt/LC_MESSAGES/messages.po - 1
    • Missing Portuguese translations · Line 7033-7034
      Newly added entries leave `msgstr ""` empty, so pt users will see untranslated English for 'Date range filter' (used via `t()` in `DateRange/index.ts`), 'No sort (original order)', and the 'Plain calendar date-range filter' description. Fill in the Portuguese translations before merging (BITO.md rules 12743/13343).
  • superset/translations/pl/LC_MESSAGES/messages.po - 3
    • Missing Polish translation · Line 5994-5995
      New user-facing msgid `Date range filter` (from `DateRange/index.ts`) is added with an empty `msgstr`, so Polish users see untranslated English. Per BITO.md rule 12743, fill the translation before merge.
    • Missing Polish translation · Line 11599-11600
      New user-facing msgid `No sort (original order)` (from `Heatmap/controlPanel.tsx`) is added with an empty `msgstr`, leaving Polish users with untranslated English. Fill it per BITO.md rule 12743.
    • Missing Polish translation · Line 12638-12641
      New user-facing msgid `Plain calendar date-range filter...` (from `DateRange/index.ts`) is added with an empty `msgstr`, leaving Polish users with untranslated English. Fill it per BITO.md rule 12743.
  • superset/translations/ko/LC_MESSAGES/messages.po - 3
    • Missing Korean translation · Line 7990-7991
      Newly added msgid "Date range filter" has an empty `msgstr`, so Korean users will see the untranslated English string. Per BITO.md adaptive rules [12743]/[13343], fill in a Korean translation before merging.
    • Missing Korean translation · Line 15798-15799
      Newly added msgid "No sort (original order)" has an empty `msgstr`, so Korean users see the untranslated English string. Fill in a Korean translation per BITO.md adaptive rules [12743]/[13343] before merging.
    • Missing Korean translation · Line 17350-17353
      Newly added msgid "Plain calendar date-range filter, with no time-of-day or relative-range options" has an empty `msgstr`, so Korean users see the untranslated English string. Fill in a Korean translation per BITO.md adaptive rules [12743]/[13343] before merging.
  • superset/translations/cs/LC_MESSAGES/messages.po - 3
    • Missing Czech translation · Line 5570-5571
      New user-facing string `Date range filter` (from `src/filters/components/DateRange/index.ts`) is added with an empty `msgstr`, so Czech users see untranslated English. Per BITO rule [12743], fill the translation before merge.
    • Missing Czech translation · Line 10729-10730
      New user-facing option `No sort (original order)` (from `plugins/plugin-chart-echarts/src/Heatmap/controlPanel.tsx`) is added with an empty `msgstr`, so Czech users see untranslated English. Fill the translation per BITO rule [12743].
    • Missing Czech translation · Line 11709-11712
      New user-facing description `Plain calendar date-range filter...` (from `src/filters/components/DateRange/index.ts`) is added with an empty `msgstr`, so Czech users see untranslated English. Fill the translation per BITO rule [12743].
  • superset/translations/th/LC_MESSAGES/messages.po - 3
    • Untranslated new string · Line 8888-8889
      New user-facing string `Date range filter` was added with an empty `msgstr`, so Thai users will see untranslated English. Per BITO.md rule 12743 all user-facing messages need complete translations. Backfill via `scripts/translations/backfill_po.py --lang th` and have a translator verify.
    • Untranslated new string · Line 17386-17387
      New user-facing string `No sort (original order)` was added with an empty `msgstr`, so Thai users will see untranslated English. Per BITO.md rule 12743 all user-facing messages need complete translations. Backfill via `scripts/translations/backfill_po.py --lang th` and have a translator verify.
    • Untranslated new string · Line 19017-19020
      New user-facing string `Plain calendar date-range filter, with no time-of-day or relative-range options` was added with an empty `msgstr`, so Thai users will see untranslated English. Per BITO.md rule 12743 all user-facing messages need complete translations. Backfill via `scripts/translations/backfill_po.py --lang th` and have a translator verify.
  • superset/translations/ar/LC_MESSAGES/messages.po - 3
    • Missing Arabic translation · Line 5981-5982
      Newly added msgid "Date range filter" ships with an empty `msgstr`, so Arabic users will see the untranslated English string. Fill in the translation before merge (BITO adaptive rule 12743).
    • Missing Arabic translation · Line 11531-11532
      Newly added msgid "No sort (original order)" ships with an empty `msgstr`, so Arabic users will see the untranslated English string. Fill in the translation before merge (BITO adaptive rule 12743).
    • Missing Arabic translation · Line 12557-12560
      Newly added msgid "Plain calendar date-range filter, with no time-of-day or relative-range options" ships with an empty `msgstr`, so Arabic users will see the untranslated English string. Fill in the translation before merge (BITO adaptive rule 12743).
Filtered by Review Rules

Bito filtered these suggestions based on rules created automatically for your feedback. Manage rules.

Review Details
  • Files reviewed - 31 · Commit Range: afd4ab9..64a75a1
    • superset/translations/ar/LC_MESSAGES/messages.po
    • superset/translations/ca/LC_MESSAGES/messages.po
    • superset/translations/cs/LC_MESSAGES/messages.po
    • superset/translations/de/LC_MESSAGES/messages.po
    • superset/translations/en/LC_MESSAGES/messages.po
    • superset/translations/es/LC_MESSAGES/messages.po
    • superset/translations/fa/LC_MESSAGES/messages.po
    • superset/translations/fi/LC_MESSAGES/messages.po
    • superset/translations/fr/LC_MESSAGES/messages.po
    • superset/translations/it/LC_MESSAGES/messages.po
    • superset/translations/ja/LC_MESSAGES/messages.po
    • superset/translations/ko/LC_MESSAGES/messages.po
    • superset/translations/lv/LC_MESSAGES/messages.po
    • superset/translations/messages.pot
    • superset/translations/mi/LC_MESSAGES/messages.po
    • superset/translations/nl/LC_MESSAGES/messages.po
    • superset/translations/pl/LC_MESSAGES/messages.po
    • superset/translations/pt/LC_MESSAGES/messages.po
    • superset/translations/pt_BR/LC_MESSAGES/messages.po
    • superset/translations/ro/LC_MESSAGES/messages.po
    • superset/translations/ru/LC_MESSAGES/messages.po
    • superset/translations/sk/LC_MESSAGES/messages.po
    • superset/translations/sl/LC_MESSAGES/messages.po
    • superset/translations/sr/LC_MESSAGES/messages.po
    • superset/translations/sr_Latn/LC_MESSAGES/messages.po
    • superset/translations/ta/LC_MESSAGES/messages.po
    • superset/translations/th/LC_MESSAGES/messages.po
    • superset/translations/tr/LC_MESSAGES/messages.po
    • superset/translations/uk/LC_MESSAGES/messages.po
    • superset/translations/zh/LC_MESSAGES/messages.po
    • superset/translations/zh_TW/LC_MESSAGES/messages.po
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers an incremental AI Review.

  • /review full - Manually triggers a full AI Review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

…ive-filter

# Conflicts:
#	superset/translations/ar/LC_MESSAGES/messages.po
#	superset/translations/ca/LC_MESSAGES/messages.po
#	superset/translations/cs/LC_MESSAGES/messages.po
#	superset/translations/de/LC_MESSAGES/messages.po
#	superset/translations/en/LC_MESSAGES/messages.po
#	superset/translations/es/LC_MESSAGES/messages.po
#	superset/translations/fa/LC_MESSAGES/messages.po
#	superset/translations/fi/LC_MESSAGES/messages.po
#	superset/translations/fr/LC_MESSAGES/messages.po
#	superset/translations/it/LC_MESSAGES/messages.po
#	superset/translations/ja/LC_MESSAGES/messages.po
#	superset/translations/ko/LC_MESSAGES/messages.po
#	superset/translations/lv/LC_MESSAGES/messages.po
#	superset/translations/messages.pot
#	superset/translations/mi/LC_MESSAGES/messages.po
#	superset/translations/nl/LC_MESSAGES/messages.po
#	superset/translations/pl/LC_MESSAGES/messages.po
#	superset/translations/pt/LC_MESSAGES/messages.po
#	superset/translations/pt_BR/LC_MESSAGES/messages.po
#	superset/translations/ro/LC_MESSAGES/messages.po
#	superset/translations/ru/LC_MESSAGES/messages.po
#	superset/translations/sk/LC_MESSAGES/messages.po
#	superset/translations/sl/LC_MESSAGES/messages.po
#	superset/translations/sr/LC_MESSAGES/messages.po
#	superset/translations/sr_Latn/LC_MESSAGES/messages.po
#	superset/translations/ta/LC_MESSAGES/messages.po
#	superset/translations/th/LC_MESSAGES/messages.po
#	superset/translations/tr/LC_MESSAGES/messages.po
#	superset/translations/uk/LC_MESSAGES/messages.po
#	superset/translations/zh/LC_MESSAGES/messages.po
#	superset/translations/zh_TW/LC_MESSAGES/messages.po
…ive-filter

# Conflicts:
#	superset-frontend/src/features/alerts/AlertReportModal.tsx
#	superset/translations/messages.pot
@codeant-ai-for-open-source

codeant-ai-for-open-source Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

CodeAnt  CodeAnt PR Risk

🟢  Low Risk

  • The PR appears safe to merge; the calendar picker advances the selected end date for the exclusive backend bound and reverses that offset when displaying it.
  • Tests cover end-date inclusion and round-tripping selected dates.

Assessed commit: ceac122bf14d

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hold:sip! i18n:brazilian i18n:chinese Translation related to Chinese language i18n:czech i18n:dutch i18n:french Translation related to French language i18n:italian Translation related to Italian language i18n:japanese Translation related to Japanese language i18n:korean Translation related to Korean language i18n:latvian i18n:persian i18n:portuguese i18n:russian Translation related to Russian language i18n:slovak i18n:spanish Translation related to Spanish language i18n:traditional-chinese i18n:ukrainian i18n Namespace | Anything related to localization requires:rebase Requires rebasing on top of current master risk:chart-metadata size/XL size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants