Skip to content

Release v3.21.28 beta#16275

Merged
gsmithun4 merged 22 commits into
mainfrom
release/v3.21.28-beta
May 2, 2026
Merged

Release v3.21.28 beta#16275
gsmithun4 merged 22 commits into
mainfrom
release/v3.21.28-beta

Conversation

@gsmithun4
Copy link
Copy Markdown
Collaborator

No description provided.

shaurya-sharma064 and others added 19 commits April 28, 2026 17:50
Added CollapseOnHide to Image component
Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>
…preview (#15892)

* chore: enhance table column context for improved autocomplete and preview resolution

* chore: improve base custom variables retrieval logic in SingleLineCodeEditor
* feat: integrate form validation context into various widgets
Added the  hook to multiple widgets including Checkbox, Datepicker, DropDown, ToggleV2, and others to enhance form validation handling on submission. This change ensures that user interaction states are properly tracked and validation feedback is provided across the form components.

* perf: memoize FormValidationContext.Provider value to prevent unnecessary re-renders

Agent-Logs-Url: https://github.com/ToolJet/ToolJet/sessions/b274e103-dbff-496d-b75c-2361298610fd

Co-authored-by: kavinvenkatachalam <50441969+kavinvenkatachalam@users.noreply.github.com>

* fix: reset submit attempt count on component mount and simplify context value

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: kavinvenkatachalam <50441969+kavinvenkatachalam@users.noreply.github.com>
Co-authored-by: kavinvenkatachalam <kavin.saratha@gmail.com>
* Added CollapseOnHide to Image component

* Added collapseOnHide migration for rest of components
* refresh token flow

* new auth with error standardisation

* Sbowflake improvements

* Snowflake invoke method made accessible

* snowflake improvement update

* dev testing bug fixes

* removed context file

* list tables and columns now use respective users token

* Snowflake bearer token field adding empty key value pair while editing

* PAT token flow authenticator updated

* Username for PAT token flow

* snowflake sdk version updated

* Updated placeholder for automation

* chore: update version to 3.20.152-lts

---------

Co-authored-by: Srimanitejas123 <mani@tooljet.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
…ySQL (#16072)

* migration for Postgresql and MySQL primary key column variable name update

* Batch size updated
Co-authored-by: gsmithun4 <3417097+gsmithun4@users.noreply.github.com>
* feat: add auto-sort feature to AI queries and update related components

* feat: add Generate Query button and update selected query handling in data query slice

* chore: update subproject commits for frontend and server

* support to build modules with prompt

* module ai chat bug fix

* submodule update

* AI message bug fix

* module description added in ai metadata

* submodule update: update example prompts and icons

* submodule update: sync frontend and server submodules to latest commits

* submodule update: sync frontend and server submodules to latest commits

* submodule update: sync frontend and server submodules to latest commits

---------

Co-authored-by: Avinash <vavinash992@gmail.com>
Co-authored-by: johnsoncherian <johnsonc.dev@gmail.com>
Co-authored-by: johnsoncherian <johnsonc.dev@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Release bump to v3.21.28-beta, expanding datasource/plugin capabilities (Snowflake + BigQuery), adding new widget properties, and improving Form validation UX and layout reflow behavior.

Changes:

  • Added/expanded datasource support and plugin functionality (Snowflake GUI mode + auth options, BigQuery OAuth + GUI/SQL mode, whitelist updates).
  • Introduced new widget properties/migrations (MultiselectV2 maxLimit, Image collapseWhenHidden) and updated import/export migrations.
  • Improved frontend builder behavior (Form validation-on-submit context, Accordion reflow handling, editor preview context hints).

Reviewed changes

Copilot reviewed 69 out of 69 changed files in this pull request and generated no comments.

Show a summary per file
File Description
server/src/modules/data-sources/util.service.ts Treat BigQuery as a plugin-backed datasource for token fetch flow.
server/src/modules/data-sources/service.ts Pass additional datasource details into plugin execution context.
server/src/modules/data-sources/guards/whitelist-plugin.guard.ts Allow Snowflake (and BigQuery comma fix) in plugin whitelist.
server/src/modules/apps/util.service.ts Include ButtonGroupV2 in array-based property normalization list.
server/src/modules/apps/services/widget-config/multiselectV2.js Add maxLimit property to MultiselectV2 widget config (server-side).
server/src/modules/apps/services/widget-config/image.js Add collapseWhenHidden property to Image widget config (server-side).
server/src/modules/apps/services/component.service.ts Include ButtonGroupV2 in array-based property normalization list.
server/src/modules/apps/services/app-import-export.service.ts Expand dynamic-height component types + migrate new properties during import/export.
server/src/entities/app.entity.ts Add moduleDescription metadata field on App entity options.
server/ee Update EE submodule pointer.
server/data-migrations/1777461183598-BackfillMaxLimitForMultiselectV2.ts Backfill maxLimit for existing MultiselectV2 components.
server/data-migrations/1777319937510-BackfillCollapseWhenHiddenForRemainingComponents.ts Backfill collapseWhenHidden on multiple component types.
server/data-migrations/1776977100104-UpdatePostgresqlAndMySQLPrimaryKeyColumnVariableToPrimaryKeyColumns.ts Rename stored query option primary_key_columnprimary_key_columns.
server/data-migrations/1776667054251-BackFillBigQueryType.ts Backfill BigQuery authentication_type to service_account for existing records.
server/.version Bump server version to 3.21.28-beta.
plugins/packages/snowflake/package.json Upgrade snowflake-sdk dependency.
plugins/packages/snowflake/lib/types.ts Add auth fields + introduce GUI mode query option shape.
plugins/packages/snowflake/lib/operations.json Add GUI mode operations + dynamic connection parameter fields.
plugins/packages/snowflake/lib/manifest.json Add bearer token auth, encrypted fields, dynamic connection params toggle, and copy tweaks.
plugins/packages/snowflake/lib/index.ts Implement GUI mode execution, dynamic connection params, token refresh, and method invocations.
plugins/packages/common/lib/queryBuilder.ts Add Snowflake dialect + Snowflake upsert + DEFAULT VALUES insert handling.
plugins/packages/bigquery/lib/types.ts Extend query options for mode + params + bulk operations inputs.
plugins/packages/bigquery/lib/operations.json Add SQL/GUI mode split and new bulk operations UI schema.
plugins/packages/bigquery/lib/manifest.json Move to new manifest structure + add OAuth/service-account credential UI.
plugins/packages/bigquery/lib/index.ts Major rewrite: OAuth support, caching, SQL params, bulk operations, and method invocations.
plugins/package.json Add snowflake-sdk dependency at plugins root.
frontend/src/modules/dataSources/components/DataSourceManager/DataSourceManager.jsx Treat BigQuery like Sheets for “private key required” UI logic when service account is selected.
frontend/src/modules/common/components/DataSourceComponents/index.js Add Snowflake to “commonly used” datasources and ordering.
frontend/src/modules/AiBuilder/components/CreateModuleWithPrompt/index.js Export CreateModuleWithPrompt component entry point.
frontend/src/modules/AiBuilder/components/CreateModuleWithPrompt/CreateModuleWithPrompt.jsx Add edition-specific wrapper stub for module creation with prompt.
frontend/src/HomePage/HomePage.jsx Render CreateModuleWithPrompt for module appType.
frontend/src/AppBuilder/_stores/utils/dynamicHeightReflow.js Fix Accordion-specific reflow math to respect collapsed height behavior.
frontend/src/AppBuilder/_hooks/useAppData.js Prevent AI conversation initialization in module mode and avoid duplicate prompt sends.
frontend/src/AppBuilder/Widgets/TreeSelect/useTreeSelect.js Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/ToggleV2.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/TagsInput/TagsInput.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/NewTable/_components/DataTypes/adapters/ButtonColumnAdapter.jsx Adjust borderColor assignment logic for table button column rendering.
frontend/src/AppBuilder/Widgets/MultiselectV2/MultiselectV2.jsx Add maxLimit support + validation-on-submit handling.
frontend/src/AppBuilder/Widgets/Form/FormValidationContext.jsx Introduce submit-attempt counter context + hook for child widgets.
frontend/src/AppBuilder/Widgets/Form/Form.jsx Provide FormValidationContext and track submit attempts/reset.
frontend/src/AppBuilder/Widgets/FilePicker/hooks/useFilePicker.js Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/DropdownV2/DropdownV2.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/DropDown.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/Datepicker.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/Date/TimePicker.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/Date/DatetimePickerV2.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/Date/DaterangePicker.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/Date/DatePickerV2.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/ColorPicker/ColorPicker.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/Checkbox.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/ButtonGroupV2/ButtonGroupV2.jsx Show validation errors on form submit via new context hook.
frontend/src/AppBuilder/Widgets/BaseComponents/hooks/useInput.js Integrate validation-on-submit behavior into shared input hook.
frontend/src/AppBuilder/WidgetManager/widgets/multiselectV2.js Add maxLimit to MultiselectV2 widget config (frontend).
frontend/src/AppBuilder/WidgetManager/widgets/image.js Add collapseWhenHidden to Image widget config (frontend).
frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/TableColumnContext.js Expand context semantics (tableId + columnKey).
frontend/src/AppBuilder/RightSideBar/Inspector/Components/Table/ColumnManager/ColumnPopover.jsx Provide memoized TableColumnContext value object.
frontend/src/AppBuilder/RightSideBar/Inspector/Components/Select.jsx Render maxLimit control when Multiselect in inspector.
frontend/src/AppBuilder/LeftSidebar/LeftSidebar.jsx Show AI sidebar trigger in module editor mode.
frontend/src/AppBuilder/CodeEditor/utils.js Improve preview resolution for ListView component arrays by flattening to row 0.
frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx Improve custom variable resolution for ListView + Table column preview context.
frontend/src/AppBuilder/CodeEditor/MultiLineCodeEditor.jsx Update TableColumnContext consumption to match new value shape.
frontend/src/AppBuilder/AppCanvas/Grid/helpers/dragEnd.js Detect ModuleContainer by walking up DOM ancestors.
frontend/src/AppBuilder/AppCanvas/Grid/Grid.jsx Prioritize “modules cannot be edited inside an app” drag-drop toast.
frontend/src/AppBuilder/AppCanvas/Container.jsx Prevent dropping/hover logic when container is read-only.
frontend/ee Update EE submodule pointer.
frontend/.version Bump frontend version to 3.21.28-beta.
cypress-tests/cypress/constants/constants/marketplace/datasources/snowflake.js Update Snowflake UI placeholder strings to match manifest copy.
.version Bump repo version to 3.21.28-beta.
.github/workflows/render-preview-deploy-v2.yml Add ignore-error on build cache export to reduce workflow failures.
Comments suppressed due to low confidence (11)

plugins/packages/snowflake/lib/index.ts:1

  • The arguments passed to getConnection are mis-ordered: the third parameter is already checkCache, but true is being passed there and the real checkCache is being passed as dataSourceId. This will force caching on, corrupt the cache key, and shift dataSourceId/dataSourceUpdatedAt/context into the wrong slots. Pass checkCache as the 3rd argument and move dataSourceId to the 4th argument.
    server/src/modules/data-sources/service.ts:1
  • The new dataSourceDetails contract uses inconsistent casing/keys (datasourceId, datasourcekind, datasourceUpdatedAt vs dataSourceOptionsEnvironmentId). This makes plugin consumers brittle and increases the chance of runtime mismatches. Standardize on a single naming convention (e.g., dataSourceId, dataSourceKind, dataSourceUpdatedAt, dataSourceOptionsEnvironmentId) and keep it consistent across all fields.
    plugins/packages/common/lib/queryBuilder.ts:1
  • Fix typo in comment: 'Emtpy' → 'Empty'.
    plugins/packages/common/lib/queryBuilder.ts:1
  • Snowflake upsert treats the row as a MERGE whenever any PK value is present. If only a subset of composite PK columns are provided, the MERGE ON condition will include NULL/empty binds for missing PK parts, which will never match and may lead to unintended inserts with NULL PK fields (or constraint failures). Consider enforcing either: (a) all PK values are absent → INSERT, or (b) all PK values are present → MERGE; otherwise throw a QueryBuilderError indicating which PK columns are missing.
    plugins/packages/bigquery/lib/index.ts:1
  • In the refreshToken catch block, error.response.statusCode is accessed without guarding error.response, which can throw and mask the original failure. Also, OAuthUnauthorizedClientError is being constructed with error (an object) where a string message is expected. Use optional chaining/guards for error.response and pass a string message (e.g., error.message or a formatted response body) consistently.
    plugins/packages/bigquery/lib/index.ts:1
  • QueryError appears to be constructed as (title, message, details), but the message argument is {} here. This will produce an unhelpful message (or a type mismatch) and makes error handling inconsistent. Replace the {} with a descriptive string (e.g., 'BigQuery refresh response did not include access_token').
    plugins/packages/bigquery/lib/index.ts:1
  • When oauth_type is tooljet_app, other codepaths (authUrl/accessDetailsFrom/refreshToken) switch to env-based client ID/secret, but buildConnection always uses sourceOptions.client_id/client_secret. This can create an OAuth client with missing/incorrect credentials. Align buildConnection with the same oauth_type branching to use process.env.GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET for the ToolJet app flow.
    plugins/packages/bigquery/lib/index.ts:1
  • When datasetId is not provided, this fetches tables for every dataset in parallel and then paginates in-memory. This can be very slow and can hit API rate limits on projects with many datasets/tables. Prefer requiring a datasetId for table listing, or implement server-side pagination (where possible) and/or concurrency limiting (e.g., a small pool) to avoid unbounded parallel requests.
    plugins/packages/bigquery/lib/index.ts:1
  • This uses global fetch, which may not be available depending on the Node runtime used for plugins. Since this file already depends on got, consider using got here (or importing a fetch polyfill) to avoid runtime failures in environments without global fetch.
    frontend/src/AppBuilder/Widgets/MultiselectV2/MultiselectV2.jsx:1
  • With maxLimit set, selecting the 'Select all' pseudo-option no longer selects all items—it selects only the first N via applyLimit(selectOptions), but the UI label still reads 'Select all …'. This is confusing and can lead to incorrect user expectations. Consider disabling the 'Select all' option whenever maxSelectionLimit is set, or change the label/behavior to clearly indicate it will only select up to the configured limit.
    frontend/src/AppBuilder/Widgets/NewTable/_components/DataTypes/adapters/ButtonColumnAdapter.jsx:1
  • This change removes the previous defaulting logic for outline buttons (where a default border color was applied when using the default border settings). Now borders will only render if borderColor is explicitly provided, which can regress styling for outline buttons relying on defaults. Consider restoring the computed default border-color behavior (especially for isOutline) while still honoring an explicit borderColor override.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 1, 2026

✅ License Compliance Check Passed

All new packages added in this PR use permitted licenses (MIT or Apache-2.0).

Package License File
snowflake-sdk Apache-2.0 plugins/package.json
snowflake-sdk Apache-2.0 plugins/packages/snowflake/package.json

@gsmithun4 gsmithun4 merged commit 1d0505c into main May 2, 2026
113 of 114 checks passed
@gsmithun4 gsmithun4 deleted the release/v3.21.28-beta branch May 2, 2026 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants