Skip to content

Feature/fnb ordering widgets tapin2 strict - #178

Draft
BNanda99 wants to merge 8 commits into
adobe:devfrom
BNanda99:feature/fnb-ordering-widgets-tapin2-strict
Draft

BNanda99 wants to merge 8 commits into
adobe:devfrom
BNanda99:feature/fnb-ordering-widgets-tapin2-strict

Conversation

@BNanda99

Copy link
Copy Markdown
Member

Description

Related Issue

Motivation and Context

How Has This Been Tested?

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • I have signed the Adobe Open Source CLA.
  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

Biswajit Nanda and others added 8 commits September 28, 2026 12:07
- Concierge.sendMessage(message, completion) sends a user turn into the
  active chat session (rendered as a user bubble, composer draft
  untouched). Rejects blank/oversized messages, no active session, and
  CHAT_IN_PROGRESS instead of queueing. Routed through
  ActiveConciergeMessageSender, registered alongside the data handoff
  forwarder.
- CSSKeyMapper retains unrecognized `--` theme keys in
  ConciergeThemeTokens.cssVariables (capped at 256 keys / 512-char
  values) so custom renderers can read their own theme values.
- Docs: implementation guide "Send a message" section; style guide note
  on custom theme keys.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Portable, public-API-only Compose widgets under conciergetestapp/fnb:
- Menu renderer for BCOS catalogItemCard + cartBar elements: category
  tabs, 2-column tiles, INCREMENT quick-add vs OPEN_SHEET Customize
  sheet (option groups, special instructions, quantity rules), local
  saveable cart, single SUBMIT_CART turn via Concierge.sendMessage.
- Cart renderer for the BCOS cartView element: server-priced lines
  across stands, Remove (REMOVE_LINE), Show more restaurants, checkout
  opened by the host after an https *.tapin2.co allowlist check.
- Theme via --fnb-* keys with placeholder defaults (Figma TBD).
- Debug gallery and an end-to-end happy-path flow screen backed by a
  simulated BC/tapin2, using stage-derived fixtures.
- Docs: fnb-tapin2-mapping.md, fnb-theme-keys.md.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The tapin2/BCOS mapping and placeholder theme-key notes are working
design documents, not SDK documentation; keep them out of the branch.
Drop their README links and the code comment pointing at them.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Element entity_info is now a verbatim subset of tapin2 objects, with
tapin2's field names, nesting and integer ids:
- catalogItemCard = a products entry (product, category, orderId, ...);
  the Customize sheet is built from product.modifierGroups
  (minQuantity/maxQuantity/maxOnePerSelection, modifiers[].priceDiff).
- cartBar carries the tapin2 location once (orderingEnabled, isPaused,
  waitTime) plus the venueId/eventId request ids.
- cartView = the cart/add order (id, idLast3, guid, items[],
  distinctLocations, *Net totals); the checkout Review URL is built from
  venueId, eventId and guid instead of receiptUrl.

[ORDER_DETAILS] is the tapin2 cart/add request body
(products[{locationId, quantity, note, product{Id, modifierGroups}}]);
BC adds orderId/deliveryMethod and strips submitId. Cart actions use
orderId/itemId. Widget copy, limits and currency move to
MenuOptions/CartOptions. Fixtures are regenerated from the stage
responses; the simulator parses the widget's user-turn text and answers
with a tapin2-shaped order.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
get_section_locations results are shown with the SDK's out-of-the-box
product-card carousel; no custom renderer is involved:
- BCOS maps each tapin2 location to a productCard (title, description +
  wait time, section/paused/closed badge). Orderable stands link to
  {scheme}://fnb/location?locationId=&title= via productPageURL and the
  primary CTA.
- FnbLinks (portable) turns those links, received through the host's
  ConciergeChat(handleLink), into FnbAction.SelectLocation, sent as a
  "Show me the menu at …" turn with a [CART_ACTION] showMenu block.
- The E2E demo opens with the stands carousel (dummy tapin2 locations
  around the real stage stand 19289); picking one shows that stand's
  menu, "Show more restaurants" returns to the stands, and one order
  spans stands.
- concierge debug source set: DemoMultimodalCards renders a raw
  multimodalElements payload through the production parser and
  RecommendationCards so the non-ConciergeChat demo shows the real cards.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…feature/fnb-ordering-widgets-tapin2-strict
Follow the BC envelope contract: each F&B UI element is one
multimodal element {id, entityId, rendererId, entity_info} whose
payload is the tapin2 response body passed through untouched, and the
customer-owned renderer interprets it.

- FnbElement is the envelope (payload read from entity_info, or
  payload). FnbRendererRegistry resolves renderers by rendererId:
  "fnb.menu" -> MenuFnbRenderer (payload = the GET .../products array),
  "fnb.cart" -> CartFnbRenderer (payload = the cart/add order).
  Replaces the type-based, multi-card grouping.
- CatalogMenuMapper/CartSummaryMapper read the raw tapin2 bodies
  directly; the cart uses the envelope entityId when the order has no id.
- venueId/eventId are read from the menu payload when tapin2 provides
  them and sent in ORDER_DETAILS only then; otherwise BC takes them from
  the conversation session.
- Demo, gallery and tests wrap the raw stage responses in envelopes; the
  element-shaped fixtures are removed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Drop the `payload` alias; `entity_info` is the envelope's payload field.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@codecov

codecov Bot commented Sep 29, 2026

Copy link
Copy Markdown

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.

1 participant