Skip to content

chore: updates dev with main 2026 03 27 19 10#3252

Merged
eduardoformiga merged 4 commits intodevfrom
chore/updates-dev-with-main-2026-03-27-19-10
Mar 27, 2026
Merged

chore: updates dev with main 2026 03 27 19 10#3252
eduardoformiga merged 4 commits intodevfrom
chore/updates-dev-with-main-2026-03-27-19-10

Conversation

@eduardoformiga
Copy link
Copy Markdown
Member

@eduardoformiga eduardoformiga commented Mar 27, 2026

What's the purpose of this pull request?

How it works?

How to test it?

Starters Deploy Preview

References

Checklist

You may erase this after checking them all 😉

PR Title and Commit Messages

  • PR title and commit messages follow the Conventional Commits specification
    • Available prefixes: feat, fix, chore, docs, style, refactor, ci and test

PR Description

  • Added a label according to the PR goal - breaking change, bug, contributing, performance, documentation..

Dependencies

  • Committed the pnpm-lock.yaml file when there were changes to the packages

Documentation

  • PR description
  • For documentation changes, ping @Mariana-Caetano to review and update (Or submit a doc request)

Summary by CodeRabbit

Release Notes

  • New Features

    • Added CSV file upload and parsing for bulk product ordering
    • Introduced Quick Order Drawer component for managing multiple products
    • Added Dropzone and FileUploadCard components for file uploads
    • Added search ID tracking for improved search analytics
    • Integrated Shopping Assistant third-party feature
  • Bug Fixes

    • Fixed after attribute type handling in pagination

lucasfp13 and others added 3 commits March 27, 2026 14:58
## What's the purpose of this pull request?

This PR changes the way base json schemas treat the `after` attribute to
ensure stores migrating from hCMS to the new CMS (Content Platform)
don't have type mismatch.

This should be treated as a **hotfix** given the urgency: we need to
ensure that store migrations (which will begin early next week) occur
without type errors. We should release a new stable version (merge in
`main`) containing this fix and make this version the minimum required
for the migration to take place.

## How it works?

From now on the `after` attribute will be sent to the hCMS and CMS as
`string`, not as `integer`, matching the type is sent to VTEX APIs
(GraphQL queries from `@faststore/api`).

### Starters Deploy Preview


## References

Field validation error on CMS (Content Platform):

<img width="377" height="173" alt="Screenshot 2026-03-25 at 16 53 25"
src="https://github.com/user-attachments/assets/34eef93c-c3ab-4406-a4b3-36a83865f0bc"
/>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Pagination cursor for product shelf and product tiles now accepts
string values and uses "0" as the normalized default. This improves
pagination consistency across the storefront, reduces type-related
errors when configuring or navigating paginated product lists, and
ensures more predictable behavior for loading additional product pages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Mateus Pontes <mateuspo10@gmail.com>
## What's the purpose of this pull request?

<!--- Considering the context, what is the problem we'll solve? Where in
VTEX's big picture our issue fits in? Write a tweet about the context
and the problem itself. --->

## How it works?

<!--- Tell us the role of the new feature, or component, in its context.
Provide details about what you have implemented and screenshots if
applicable. --->

## How to test it?

<!--- Describe the steps with bullet points. Is there any external link
that can be used to better test it or an example? --->

### Starters Deploy Preview

<!--- Add a link to a deploy preview from `starter.store` with this
branch being used. --->

<!--- Tip: You can get an installable version of this branch from the
CodeSandbox generated when this PR is created. --->

## References

<!--- Spread the knowledge: is there any content you used to create this
PR that is worth sharing? --->

<!--- Extra tip: adding references to related issues or mentioning
people important to this PR may be good for the documentation and
reviewing process --->

## Checklist

<em>You may erase this after checking them all 😉</em>

**PR Title and Commit Messages**

- [ ] PR title and commit messages follow the [Conventional
Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification
- Available prefixes: `feat`, `fix`, `chore`, `docs`, `style`,
`refactor`, `ci` and `test`

**PR Description**

- [ ] Added a label according to the PR goal - `breaking change`, `bug`,
`contributing`, `performance`, `documentation`..

**Dependencies**

- [ ] Committed the `pnpm-lock.yaml` file when there were changes to the
packages

**Documentation**

- [ ] PR description
- [ ] For documentation changes, ping `@Mariana-Caetano` to review and
update (Or submit a doc request)

---------

Co-authored-by: Larícia Mota <laricia.mota@vtex.com.br>
Co-authored-by: Matheus P. Silva <cout.matheusps@gmail.com>
Co-authored-by: Leandro Rodrigues <leandro.swf@gmail.com>
Co-authored-by: vtexgithubbot <vtexgithubbot@github.com>
Co-authored-by: Lucas Feijó <lucas.portela@vtex.com>
Co-authored-by: Luiz Falcão <39093175+llfalcao@users.noreply.github.com>
Co-authored-by: Artur Santiago <artur.santiago@cubos.io>
Co-authored-by: Sahan Jayawardana <sahan@clouda.io>
Co-authored-by: Mateus Pontes <mateuspo10@gmail.com>
Co-authored-by: Matheus Martins <mathews_2010@outlook.com>
Co-authored-by: renatomaurovtex <167437775+renatomaurovtex@users.noreply.github.com>
Co-authored-by: Leandro Rodrigues <leandro.rodrigues@vtex.com>
Co-authored-by: Fanny Chien <fanny.chien@vtex.com>
Co-authored-by: Arthur Andrade <arthurfelandrade@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Thiago Pereira <thiago.pereira@vtex.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Giuliana Rigaud <62848434+giurigaud@users.noreply.github.com>
Co-authored-by: renato <renato.neto@cubos.io>
Co-authored-by: Bruna Santos <brunassdev@gmail.com>
Co-authored-by: BrunaCubos <104789782+BrunaCubos@users.noreply.github.com>
Co-authored-by: Ícaro Oliveira <icarovinici@gmail.com>
Co-authored-by: Bruna Santos <bruna.santos@cubos.io>
Co-authored-by: Everton Ataide <everton.ataide@vtex.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@eduardoformiga eduardoformiga requested a review from a team as a code owner March 27, 2026 22:11
@eduardoformiga eduardoformiga requested review from emersonlaurentino and hellofanny and removed request for a team March 27, 2026 22:11
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 27, 2026

Walkthrough

Version 3.98.0 release introducing Quick Order full feature with CSV file upload, Dropzone, and drawer components; adding SearchId for analytics tracking; implementing MPN field for products; replacing cookie-based with session-based cache busting; and adding Shopping Assistant third-party script integration.

Changes

Cohort / File(s) Summary
Version Bumps & Changelogs
packages/api/package.json, packages/api/CHANGELOG.md, packages/cli/package.json, packages/cli/CHANGELOG.md, packages/components/package.json, packages/components/CHANGELOG.md, packages/core/package.json, packages/graphql-utils/package.json, packages/graphql-utils/CHANGELOG.md, packages/lighthouse/package.json, packages/lighthouse/CHANGELOG.md, packages/sdk/package.json, packages/sdk/CHANGELOG.md, packages/storybook/package.json, packages/storybook/CHANGELOG.md, packages/ui/package.json, packages/ui/CHANGELOG.md
All packages bumped to 3.98.0; CLI and components also updated dependency versions; Storybook now uses workspace links and SWC compiler addon.
CSV Parsing & File Upload Hooks
packages/components/src/hooks/useCSVParser.ts, packages/components/src/hooks/useFileUpload.ts, packages/components/src/hooks/index.ts
Introduced new hooks for CSV file parsing (with worker support, delimiter detection, progress tracking, validation) and file upload error handling; exported types and barrel exports updated.
Dropzone Component
packages/ui/src/components/molecules/Dropzone/Dropzone.tsx, packages/ui/src/components/molecules/Dropzone/index.ts, packages/ui/src/components/molecules/Dropzone/styles.scss
New drag-and-drop component with react-dropzone integration, state management, file rejection handling, and comprehensive theming (hover, drag-active, disabled states, dark mode).
FileUploadCard & FileUploadStatus Components
packages/components/src/molecules/FileUploadCard/*, packages/components/src/molecules/FileUploadStatus/*, packages/ui/src/components/molecules/FileUpload.../styles.scss
FileUploadCard manages file selection/upload state with hidden input, dropzone, and FileUploadStatus display; FileUploadStatus shows uploading/completed/error states with configurable messages and action buttons; comprehensive SCSS styling for both.
QuickOrderDrawer Component & Provider
packages/components/src/organisms/QuickOrderDrawer/*, packages/ui/src/components/organisms/QuickOrderDrawer/styles.scss
Complete quick-order drawer feature: header with title truncation, product table with quantity/availability/pricing, footer with cart button, and context provider managing products, totals, alerts, and cart integration; includes table styling, state enums, and hook exports.
SearchId Integration
packages/api/src/platforms/vtex/clients/search/types/ProductSearchResult.ts, packages/api/src/platforms/vtex/resolvers/searchResult.ts, packages/api/src/typeDefs/query.graphql, packages/core/src/components/search/SearchDropdown/SearchDropdown.tsx, packages/core/src/components/search/SearchInput/SearchInput.tsx, packages/core/src/components/product/ProductGrid/ProductGrid.tsx, packages/core/src/components/sections/Navbar/Navbar.tsx, packages/core/src/sdk/product/usePageProductsQuery.ts, packages/core/src/sdk/search/useSuggestions.ts, packages/core/src/components/ui/ProductGallery/ProductGalleryPage.tsx
Added searchId field to ProductSearchResult, StoreSearchResult GraphQL types, and resolvers; integrated into SearchProvider and SearchInput with analytics attributes (data-af-*); ProductGrid supports buildExtraProductProps callback for adding search analytics; updated GraphQL queries and components.
MPN (Manufacturer Part Number) Field
packages/api/src/platforms/vtex/clients/search/types/ProductSearchResult.ts, packages/api/src/platforms/vtex/resolvers/product.ts, packages/api/src/typeDefs/product.graphql, packages/core/src/pages/[slug]/p.tsx
Added manufacturerCode to Product interface, mpn resolver extracting it, StoreProduct GraphQL field, and product page integration with ProductJsonLd.
Session-Based Cache Busting
packages/core/src/utils/cookieCacheBusting.ts, packages/core/src/sdk/graphql/useQuery.ts, packages/core/src/components/account/MyAccountDrawer/OrganizationDrawer/OrganizationDrawer.tsx, packages/core/src/components/account/MyAccountDrawer/OrganizationDrawer/useReloadAfterLogoutReturn.ts, packages/core/test/utils/cookieCacheBusting.test.ts
Replaced cookie-based auth with session person ID detection; updated SWR cache key with session suffix; refactored logout flow with session storage clearing and reload-after-logout mechanism.
Product Bulk Query & Conversion
packages/core/src/sdk/product/useBulkProductsQuery.ts, packages/core/src/sdk/product/convertProductToQuickOrder.ts
Added hook for batch SKU fetching with rate limiting; utility to convert product details into quick-order format with inventory/availability validation and quantity updates.
Shopping Assistant Third-Party Script
packages/core/src/components/ThirdPartyScripts/useShoppingAssistant.tsx, packages/core/src/components/ThirdPartyScripts/index.ts, packages/core/src/components/sections/ShoppingAssistant/*, packages/core/src/components/cms/global/Components.ts
New hook to inject Weni Agentic CX script conditionally; ShoppingAssistant component with provider registration and SCSS styling.
CMS Schema & Config Updates
packages/core/cms/faststore/base.jsonc, packages/core/cms/faststore/components/cms_component__productshelf.jsonc, packages/core/cms/faststore/components/cms_component__producttiles.jsonc, packages/core/cms/faststore/sections.json, packages/core/discovery.config.default.js, packages/core/next.config.js
Changed pagination after property type from integer to string; extended Navbar schema with quick-order settings (attachmentButton, drawer, toastMessages, accessibilityLabels, fileUploadCard); added ShoppingAssistant section; added experimental transpilePackages config.
SearchInputField Enhancement
packages/components/src/molecules/SearchInputField/SearchInputField.tsx, packages/ui/src/components/molecules/SearchInputField/styles.scss
Added attachment button for file upload, updated props with submitButtonAriaLabel and attachment-related config; CSS updated for wrapper, actions layout, separator styling, and button positioning.
SearchInput & Navbar Quick Order Integration
packages/core/src/components/search/SearchInput/SearchInput.tsx, packages/core/src/components/sections/Navbar/Navbar.tsx, packages/core/src/components/sections/Navbar/section.module.scss
SearchInput now handles file upload via useCSVParser, integrates QuickOrderDrawer, manages SKU lookup, and dispatches faststore:file-search event; Navbar passes quickOrderSettings and imports component styles.
Component Type & Export Updates
packages/components/src/atoms/Link/Link.tsx, packages/components/src/atoms/List/List.tsx, packages/components/src/molecules/Accordion/AccordionItem.tsx, packages/components/src/molecules/SearchProducts/SearchProductItem.tsx, packages/components/src/molecules/SearchProvider/SearchProvider.tsx, packages/components/src/organisms/SearchInput/SearchInput.tsx, packages/components/src/index.ts, packages/ui/src/index.ts
Updated forwardRef type signatures to explicit generic parameters (HTMLElement ref target and prop shape); SearchProvider/SearchInput now carry searchId prop; SearchProductItemProps now extends HTMLLIElement; consolidated barrel exports with new FileUploadCard, FileUploadStatus, Dropzone, QuickOrderDrawer exports.
Testing & Config
packages/core/cypress/tsconfig.json, packages/core/jest.config.js, packages/core/test/tsconfig.json, packages/core/test/utils/cookieCacheBusting.test.ts
Added TypeScript configs for Cypress and Jest test directories; added ts-jest transform for .ts/.tsx files; updated cache-busting tests to use session mocks instead of cookie mocks.
Utility Functions
packages/core/src/utils/utilities.ts, packages/core/src/sdk/graphql/request.ts
Added formatFileName (truncates with preserved extension) and formatFileSize (human-readable byte formatting); updated comment describing cache-busting value source.
Storybook Stories
packages/storybook/stories/dropzone.stories.tsx, packages/storybook/stories/fileupload.stories.tsx, packages/storybook/stories/quick-order-drawer.stories.tsx, packages/storybook/stories/upload-file-dropdown.stories.tsx, packages/storybook/.storybook/main.js
Added comprehensive Storybook stories for Dropzone (5 variants), FileUpload (6 story views), QuickOrderDrawer (5 configurations), and UploadFileDropdown (5 reference stories); added SWC compiler addon.
Product Detail Fragment
packages/core/src/components/sections/ProductDetails/ProductDetails.tsx
Extended GraphQL fragment to include quantity field in offer selection set.
App-Level Hooks
packages/core/src/pages/_app.tsx
Integrated useReloadAfterLogoutReturn hook for post-logout reload behavior.
Style Imports
packages/core/src/styles/global/index.scss, packages/ui/src/styles/components.scss
Updated global and component SCSS to import FileUploadCard, FileUploadStatus, Dropzone, and QuickOrderDrawer styles.
Package Dependencies
packages/components/package.json, packages/core/package.json, packages/storybook/package.json
Added papaparse, react-dropzone, idb-keyval dependencies; updated @faststore/graphql-utils; pinned/updated @types/react deps; switched component/ui deps to workspace links in storybook.

Sequence Diagrams

sequenceDiagram
    participant User
    participant SearchInput
    participant FileUploadCard
    participant useCSVParser
    participant useBulkProductsQuery
    participant QuickOrderDrawer
    participant CartStore

    User->>SearchInput: Click attachment button
    SearchInput->>FileUploadCard: Show upload card
    User->>FileUploadCard: Select CSV file
    FileUploadCard->>useCSVParser: Parse file
    useCSVParser->>useCSVParser: Detect delimiter & headers
    useCSVParser->>useCSVParser: Extract SKUs & quantities
    useCSVParser-->>FileUploadCard: Return parsed CSV data
    FileUploadCard->>SearchInput: Trigger search with SKUs
    SearchInput->>useBulkProductsQuery: Fetch products by SKU (batched)
    useBulkProductsQuery-->>SearchInput: Return products
    SearchInput->>SearchInput: Convert to quick-order products
    SearchInput->>QuickOrderDrawer: Open with products
    User->>QuickOrderDrawer: Adjust quantities & select items
    User->>QuickOrderDrawer: Click "Add to cart"
    QuickOrderDrawer->>CartStore: Add selected items
    CartStore-->>User: Cart updated
Loading
sequenceDiagram
    participant API as FastStore API
    participant Search as Search Component
    participant Provider as SearchProvider
    participant ProductGrid as ProductGrid
    participant Analytics as Analytics Platform

    API->>API: Generate searchId in resolver
    API-->>Search: Return search results + searchId
    Search->>Provider: Pass searchId to context
    Provider-->>Search: Expose via useSearch hook
    Search->>ProductGrid: Forward searchId + buildExtraProductProps
    ProductGrid->>ProductGrid: Add data-af-* attributes per product
    ProductGrid-->>Analytics: Render with analytics attributes
    Analytics->>Analytics: Track impressions & interactions
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • vtex/faststore#3117: Implements CSV upload worker, useCSVParser/useFileUpload hooks, and Dropzone/FileUploadCard/FileUploadStatus components—same core feature set.
  • vtex/faststore#3105: Adds searchId propagation through ProductSearchResult, GraphQL types, SearchProvider, and ProductGrid analytics attributes—same analytics integration.
  • vtex/faststore#3230: Refactors session-based cache busting and logout reload flow via getClientCacheBustingValue, useQuery cache key suffix, and useReloadAfterLogoutReturn—overlapping session/auth changes.

Suggested labels

enhancement

Suggested reviewers

  • hellofanny
  • emersonlaurentino
  • ommeirelles

Poem

📦 Version 3.98.0 takes flight,
Quick Order CSV dreams in sight,
SearchIds track where users roam,
New components find their home,
Session caches stay secure and tight. ✨

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/updates-dev-with-main-2026-03-27-19-10

@codesandbox-ci
Copy link
Copy Markdown

codesandbox-ci Bot commented Mar 27, 2026

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

@eduardoformiga eduardoformiga changed the title Chore/updates dev with main 2026 03 27 19 10 chore: updates dev with main 2026 03 27 19 10 Mar 27, 2026
@eduardoformiga eduardoformiga merged commit ae2ab33 into dev Mar 27, 2026
4 of 6 checks passed
@eduardoformiga eduardoformiga deleted the chore/updates-dev-with-main-2026-03-27-19-10 branch March 27, 2026 22:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants