Repos that we’ll change
Whitelabel App: https://github.com/rbilabs/intl-whitelabel-app
Figma:
Solution proposal
In the Sanity went can set images of the product by Restaurant, Delivery or Kiosk
The White Label must show images of accord selected channel, Restaurant with delivered, Restaurant selected or without restaurant.
Restaurant selected.
Delivery
Acceptance Criteria
Overall goal:
The platform must allow assigning specific images to the products on the menu according to the purchase channel.
The configuration of the images must be done from Sanity.
Platforms: Web, Android and IOS
Brands: all - PLK ES, BK ES and BK PT
Service modes: Home Delivery, Pick-up, Dine-in and Table Service
It also includes “Public Letter” → Public Menu → It means the menu NOT linked with any selected restaurant / delivery.
Regarding kiosk, impacts on kiosk app are out-of-scope, but we can add a slot image in Sanity for it (to be used in the future, although it’s not mandatory for development).
Images in scope:
Menu: Picker Combo and Item (also in the check-out and in the customization/extra)
Items.
Combo.
Items inside the Combo must show the changed images
Picker.
Items and Combos inside the Picker must show the changed images
In Section should not change image, example “Top Sales”
It should show correct image in Recent Order.
It should not change after the order ends.
It should show correct image in Checkout.
if a product is at the checkout and you change restaurants (Delivery → Restaurant), the image should change.
When you finish the order, it must show the correct image in the Add On section.
Should change image in Add Extra as well
Catalog Update: existing image configuration as fallback option and include new ones per channel in order to override it optionally.
Out of scope: localization and language
Task summary
Intl Whitelabel App:
Task 1 - Create a Feature Flag
Task 2 - Add imagesByChannels in Graphql
Task 3 - Add new interfaces and update.
Task 4 - Create a new hook for show image by channel
Task 5 - Implement calls hook image by channel
Task 6 - Implement calls hook in the add-on section and add extra (Ketchup)
Task 7 - Replicate to menu legacy (To analyze) - SPIKE
Tasks breakdown
Intl Whitelabel APP
Task 1 - Create a Feature Flag
New feature flag for front-end:
ENABLE_IMAGES_BY_CHANNELS
src/utils/launchdarkly/flags.ts
The flag should be created in
intl-guest-app
in LaunchDarkly
Task 2 - Add imagesByChannels in Graphql
Should create a new graphql file to imagesByChannel
Update Combo Graphql to add imagesByChannel
workspaces/frontend/src/queries/sanity/fragments/combo.graphql
Update Item Graphql to add imagesByChannel
workspaces/frontend/src/queries/sanity/fragments/item.graphql
Update Picker Graphql to add imagesByChannel
workspaces/frontend/src/queries/sanity/fragments/picker-availability.graphql
Update Product List Graphql to add imagesByChannel
workspaces/frontend/src/queries/sanity/fragments/product-list-section.graphql
DOD-LIKE
Update Sanity Graphql with command yarn apollo-generate.
Task 3 - Add new interfaces and update
Link reference: https://github.com/rbilabs/intl-whitelabel-app/pull/1841/files#diff-3c5a6dd1f32b86cde31b8257a1e8332e9f8ccd97ae8931f47c64ad105103601c
File: workspaces/frontend/src/types/menu.d.ts
Should add new imagesByChannels interface with
imageDelivery
,imageKiosk
andimageRestaurant
.Should add imagesByChannel in
IPickerItem
Should add imagesByChannel in
IBasePicker
Should add imagesByChannel in
IBaseCombo
Should add imagesByChannel in
IBaseItem
Should add imagesByChannel in
IMainMenuPickerView
Task 4 - Create a new hook for show image by channel
Poc reference: https://github.com/rbilabs/intl-whitelabel-app/pull/1841/files#diff-4516aec29cee97c67b42f2b6e7ebb3e2a78da046f48149a0002e9cb815c0e505
Creation of a new generic hook in the folder:
app/workspaces/frontend/src/hooks
Folder name suggestion: use-images-by-channel
index.ts → only used to export the hook
use-images-by-channel.ts
__tests__ folder
use-images-by-channel.unit.test.ts OR use-images-by-channel.test.ts
Following the POC exemple we’ll need to pass in the hook the request data (if necessary) to be converted for what we need. Here’s an example:
interface ImagesByChannelResult { convertedData?: ImagesByChannelProps; } interface ImagesByChannelProps { requestData?: ImagesByChannelProps; } export const useImagesByChannel = ({ requestData, }: ImagesByChannelProps): ImagesByChannelResult => { const [data, setData] = useState(requestData); // ... other functions here useEffect(() => { if (requestData && flagON) { const convertedData = converterFunction(requestData); setData(convertedData); } }, [requestData, flagON]); return { convertedData: data }; };
The
getImagesByChannel
,changeImageByChannel
andpreparedImages
function examples will be placed inside our hookFor the
changeImageByChannel
example, one suggestion is to use generics (type overload can be used too, if needed) for the approachTake a look where the functions are used to define the better generic/overload approach
DOD-LIKE
Implement the unit tests
Follow good practices (SOLID, etc etc)
Task 5 - Implement calls hook image by channel
Call the new hook inside the
workspaces/frontend/src/state/main-menu/new-main-menu.tsx
Pass the
data
fromuseGetMenuSectionsLazyQuery
to the hook paramThe
data
returned by the hook will be used as the data returned fromMainMenuProvider
Looking to the POC reference call the desired function in:
src/state/menu-options/legacy-menu-options.tsx
src/state/product-wizard/index.tsx
src/components/product-detail/product-overview/product-overview.tsx
src/components/product-detail/order-summary/order-summary.tsx
src/components/menu-tile-grid/menu-tile/menu-tile.tsx
Check if any existent unit test is broken for the changed files
DOD-LIKE
All the legacy tests working
Check in the Whitelabel app if the correct image is shown for each point of change
Task 6 - Implement calls hook in the add-on section and add extra (Ketchup)
Links reference:
Add Ons
Add Extra
Looking to the POC reference call the desired function in:
src/pages/cart/addons-item-container/addons-item-container.tsx
src/components/add-extras-modal/add-extras-content.tsx
Check if any existent unit test is broken for the changed files
DOD-LIKE
All the legacy tests working
Check in the Whitelabel app if the correct image is shown for each point of change (Add extras modal)
Task 7 - Replicate to menu legacy (To analyze)
We should verify if it needs to replicate this functionality to Legacy Menu
POC:
https://github.com/rbilabs/intl-whitelabel-app/pull/1841
Add Comment