Conversation
Add a new "Discrete Picking" Dashboard entry that lists all open orders ready for picking across every queue type, with real-time search and queue-type filter chips. Tapping an order seeds the picking session and reuses the existing Pick Location flow, one order at a time. - apis/picking: allow getPickTasksApi to run unfiltered; add getOpenPickTasksApi for all open (PENDING/PICKING) tasks - redux: add getOpenPickTasksAction + saga + watcher - types: add DiscretePickingOrder view model - PickingContext: add startOrderSession(requisitionId) to seed a single-order session via getPickTasksByRequisitionAction - screens/Picking: add DiscretePickingListScreen, order card, skeleton, styles, and grouping/sort/filter helpers - wire route in Main and add Dashboard entry The multi-field filter panel (Destination/Queue Type/Assignee/Status) is intentionally deferred to a follow-up. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
Build an APK and deploy it to Appetize for every pull request targeting develop, so reviewers can preview changes in the browser. - Enable the pull_request_target_branch: develop trigger (was disabled), routing PR builds through the existing android-only workflow - Point appetize-deploy at a stable shared preview app via APPETIZE_APP_ID so the preview URL stays constant across builds (falls back to creating a new app per build when the var is unset) Requires (Bitrise dashboard, one-time): enable Pull Request builds for the app, and set APPETIZE_APP_ID to a preview app's public key. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
The appetize-deploy step's input is public_key, not app_id; the previous key was ignored, so every build created a new Appetize app. Use public_key: $APPETIZE_PUBLIC_KEY so builds update one stable preview app. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
Remove the public_key input added earlier. With APPETIZE_PUBLIC_KEY unset it resolved to empty, and this appetize-deploy version may mishandle an empty public_key. Match the proven develop config (no public_key input), which creates a new preview app per build. The stable shared-app key can be reintroduced once the pipeline is green and a key exists. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
PR builds now deploy to a dedicated PR preview Appetize app instead of overwriting the main app used by develop. A script selects the target public key by build type ($BITRISE_PULL_REQUEST distinguishes PR from push builds) and appetize-deploy uses it. A run_if guard skips the deploy entirely when no key is configured, so it never falls back to creating a new app. Requires two Bitrise env vars: APPETIZE_DEVELOP_PUBLIC_KEY (main app) and APPETIZE_PR_PUBLIC_KEY (PR preview app). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
Set APPETIZE_DEVELOP_PUBLIC_KEY to the main app used by develop. Leave APPETIZE_PR_PUBLIC_KEY empty until the PR preview app is created; the appetize-deploy run_if guard skips the deploy while it is empty, so PR builds cannot overwrite the main app in the meantime. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
The select-app script runs under set -u, so referencing an unset
APPETIZE_*_PUBLIC_KEY aborted the step (as happened before the keys were
defined, and would recur if Bitrise omits an empty-valued env var). Use
${VAR:-} defaults so the script tolerates unset or empty keys; the
run_if guard on appetize-deploy still skips the deploy when the resolved
key is empty.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
On PR builds only, append "(Experimental)" to the Android app_name after branding runs, so the PR preview app is clearly distinguishable from the stable build in Appetize (which shows the app name from the APK manifest). Guarded by BITRISE_PULL_REQUEST so stable/develop builds keep the plain name. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
Appetize keys apps by applicationId, so a same-package PR APK merged into the stable app instead of creating a separate one. On PR builds, suffix the applicationId with .experimental (alongside the app-name tag) so the PR build uploads as its own Appetize app with its own URL. No package-tied services (Firebase/Maps/google-services) exist, so the suffix is safe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
Set APPETIZE_PR_PUBLIC_KEY to the PR preview app's key so PR builds now deploy the experimental APK to their own Appetize app instead of skipping the deploy. For the v1 API the appetize-deploy step uses, the build id and public key are interchangeable. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
After deploying, POST a note to the Appetize v1 API for the deployed app with PR number, branch, short commit, and build number, so each preview is self-documenting in the dashboard. The appetize-deploy step can't set notes itself. The v1 API has no tags field, so tags stay manual. The call is non-fatal so a note failure never reds the build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011zmhJ6yv58QsHzj8EwAnZb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a new Discrete Picking entry to the Dashboard that lists all open orders ready for picking across every queue type, with real-time search and queue-type filter chips. Tapping an order seeds the picking session and reuses the existing Pick Location → … → Staging flow, one order at a time. This is the "one order at a time" counterpart to the existing batch Picking flow.
Implements OBLS-837.
Changes
Feature
getPickTasksApinow runs unfiltered (params optional); addedgetOpenPickTasksApito fetch all open (PENDING/PICKING) pick tasks across all queue types, plusgetOpenPickTasksActionaction/saga/watcher.DiscretePickingOrderview model.PickingContext.startOrderSession(requisitionId)seeds a single-order session via the existinggetPickTasksByRequisitionAction, then navigation continues into the existing Pick Location flow.src/screens/Picking/) —DiscretePickingListScreen,DiscretePickingOrderCard,DiscretePickingCardSkeleton,discretePickingStyles, anddiscretePickingLib(group-by-requisition, priority sort, real-time filter, chip counts). ReusesBarcodeSearchHeader,ListLoadingSkeleton,EmptyView,emptyStateMessage.Main.tsx; entry indashboardData.ts.CI / preview
pull_request_target_branch: developtrigger so PRs build an APK and deploy to Appetize for preview.appetize-deployat a stable shared preview app via$APPETIZE_PUBLIC_KEY(falls back to creating a new app per build when unset).Notes / follow-ups
pick-tasksendpoint returning all open tasks whendeliveryTypeCode/ordersCountare omitted (filtered here tostatus=PENDING&status=PICKING). Confirm this behavior on the backend.PickingPickType/staging on completion; adjusting the return destination for discrete picks is a possible follow-up.Testing
yarn lintclean; app-leveltscclean (remainingtscerrors are pre-existing@react-navigationlib-def parse issues undernode_modules, unrelated to this change).🤖 Generated with Claude Code
Generated by Claude Code