app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit c4956a526a6bec1b4766ca3d8f6ba28284ec749f
parent 4f7d8940036d978e60500715b30cd9568810cd8e
Author: triesap <tyson@radroots.org>
Date:   Tue, 21 Apr 2026 21:01:26 +0000

app: widen pack day artifact action contract

Diffstat:
Mcrates/launchers/desktop/src/pack_day_host_handoff.rs | 14+++++++-------
Mcrates/launchers/desktop/src/source_guards.rs | 12++++++++++++
Mcrates/launchers/desktop/src/window.rs | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcrates/shared/i18n/src/keys.rs | 10++++++++++
Mcrates/shared/i18n/src/lib.rs | 32++++++++++++++++++++++++++++++++
Mcrates/shared/models/src/lib.rs | 22++++++++++++++++++++++
Mcrates/shared/state/src/lib.rs | 4++--
Mi18n/locales/en/messages.json | 10++++++++++
8 files changed, 159 insertions(+), 9 deletions(-)

diff --git a/crates/launchers/desktop/src/pack_day_host_handoff.rs b/crates/launchers/desktop/src/pack_day_host_handoff.rs @@ -184,18 +184,18 @@ pub fn plan_pack_day_host_handoff( }); } - let target_path = match kind { - PackDayHostHandoffKind::RevealBundle => bundle_directory.clone(), - PackDayHostHandoffKind::OpenPackSheet => { - resolve_bundle_artifact_path(bundle, PackDayExportArtifactKind::PackSheet, kind)? - } + let target_path = match kind.artifact_kind() { + None => bundle_directory.clone(), + Some(artifact_kind) => resolve_bundle_artifact_path(bundle, artifact_kind, kind)?, }; let command_args = match kind { PackDayHostHandoffKind::RevealBundle => { vec!["-R".to_owned(), target_path.to_string_lossy().into_owned()] } - PackDayHostHandoffKind::OpenPackSheet => { + PackDayHostHandoffKind::OpenPackSheet + | PackDayHostHandoffKind::OpenPickupRoster + | PackDayHostHandoffKind::OpenCustomerLabels => { vec![target_path.to_string_lossy().into_owned()] } }; @@ -307,8 +307,8 @@ fn run_macos_host_command( #[cfg(test)] mod tests { use super::{ - execute_pack_day_host_handoff_plan_with, plan_pack_day_host_handoff, PackDayHostHandoffCommandResult, PackDayHostHandoffError, + execute_pack_day_host_handoff_plan_with, plan_pack_day_host_handoff, }; use radroots_app_models::{ PackDayExportArtifact, PackDayExportArtifactKind, PackDayExportBundle, diff --git a/crates/launchers/desktop/src/source_guards.rs b/crates/launchers/desktop/src/source_guards.rs @@ -150,7 +150,9 @@ const ALLOWED_WINDOW_LITERALS: &[&str] = &[ "orders", "orders-reminders", "pack-day-export", + "pack-day-open-customer-labels", "pack-day-open-pack-sheet", + "pack-day-open-pickup-roster", "pack_day", "pack_day.host_handoff_failed", "pack_day.host_handoff_prepare_failed", @@ -481,12 +483,22 @@ const REQUIRED_WINDOW_COPY_KEYS: &[&str] = &[ "AppTextKey::PackDayHostHandoffRevealActionRunning", "AppTextKey::PackDayHostHandoffOpenPackSheetAction", "AppTextKey::PackDayHostHandoffOpenPackSheetActionRunning", + "AppTextKey::PackDayHostHandoffOpenPickupRosterAction", + "AppTextKey::PackDayHostHandoffOpenPickupRosterActionRunning", + "AppTextKey::PackDayHostHandoffOpenCustomerLabelsAction", + "AppTextKey::PackDayHostHandoffOpenCustomerLabelsActionRunning", "AppTextKey::PackDayHostHandoffRevealRunningTitle", "AppTextKey::PackDayHostHandoffRevealSucceededTitle", "AppTextKey::PackDayHostHandoffRevealFailedTitle", "AppTextKey::PackDayHostHandoffOpenPackSheetRunningTitle", "AppTextKey::PackDayHostHandoffOpenPackSheetSucceededTitle", "AppTextKey::PackDayHostHandoffOpenPackSheetFailedTitle", + "AppTextKey::PackDayHostHandoffOpenPickupRosterRunningTitle", + "AppTextKey::PackDayHostHandoffOpenPickupRosterSucceededTitle", + "AppTextKey::PackDayHostHandoffOpenPickupRosterFailedTitle", + "AppTextKey::PackDayHostHandoffOpenCustomerLabelsRunningTitle", + "AppTextKey::PackDayHostHandoffOpenCustomerLabelsSucceededTitle", + "AppTextKey::PackDayHostHandoffOpenCustomerLabelsFailedTitle", "AppTextKey::HomeTodayRemindersTitle", "AppTextKey::ReminderDeadlineLabel", "AppTextKey::ReminderUrgencyUpcoming", diff --git a/crates/launchers/desktop/src/window.rs b/crates/launchers/desktop/src/window.rs @@ -10028,6 +10028,22 @@ fn pack_day_export_card( ) .into_any_element() } + PackDayHostHandoffKind::OpenPickupRoster => { + action_button_disabled( + "pack-day-open-pickup-roster", + app_shared_text(action.label_key), + cx, + ) + .into_any_element() + } + PackDayHostHandoffKind::OpenCustomerLabels => { + action_button_disabled( + "pack-day-open-customer-labels", + app_shared_text(action.label_key), + cx, + ) + .into_any_element() + } }; button })), @@ -10080,6 +10096,18 @@ fn pack_day_host_handoff_action_label_key( (PackDayHostHandoffKind::OpenPackSheet, false) => { AppTextKey::PackDayHostHandoffOpenPackSheetAction } + (PackDayHostHandoffKind::OpenPickupRoster, true) => { + AppTextKey::PackDayHostHandoffOpenPickupRosterActionRunning + } + (PackDayHostHandoffKind::OpenPickupRoster, false) => { + AppTextKey::PackDayHostHandoffOpenPickupRosterAction + } + (PackDayHostHandoffKind::OpenCustomerLabels, true) => { + AppTextKey::PackDayHostHandoffOpenCustomerLabelsActionRunning + } + (PackDayHostHandoffKind::OpenCustomerLabels, false) => { + AppTextKey::PackDayHostHandoffOpenCustomerLabelsAction + } } } @@ -10103,6 +10131,18 @@ fn pack_day_host_handoff_status_presentation( title_key: AppTextKey::PackDayHostHandoffOpenPackSheetRunningTitle, } } + (PackDayHostHandoffStatus::Running, PackDayHostHandoffKind::OpenPickupRoster) => { + PackDayHostHandoffStatusPresentation { + indicator_color: APP_UI_THEME.foundation.text.accent, + title_key: AppTextKey::PackDayHostHandoffOpenPickupRosterRunningTitle, + } + } + (PackDayHostHandoffStatus::Running, PackDayHostHandoffKind::OpenCustomerLabels) => { + PackDayHostHandoffStatusPresentation { + indicator_color: APP_UI_THEME.foundation.text.accent, + title_key: AppTextKey::PackDayHostHandoffOpenCustomerLabelsRunningTitle, + } + } (PackDayHostHandoffStatus::Succeeded, PackDayHostHandoffKind::RevealBundle) => { PackDayHostHandoffStatusPresentation { indicator_color: APP_UI_THEME.components.app_status_indicator.online, @@ -10115,6 +10155,18 @@ fn pack_day_host_handoff_status_presentation( title_key: AppTextKey::PackDayHostHandoffOpenPackSheetSucceededTitle, } } + (PackDayHostHandoffStatus::Succeeded, PackDayHostHandoffKind::OpenPickupRoster) => { + PackDayHostHandoffStatusPresentation { + indicator_color: APP_UI_THEME.components.app_status_indicator.online, + title_key: AppTextKey::PackDayHostHandoffOpenPickupRosterSucceededTitle, + } + } + (PackDayHostHandoffStatus::Succeeded, PackDayHostHandoffKind::OpenCustomerLabels) => { + PackDayHostHandoffStatusPresentation { + indicator_color: APP_UI_THEME.components.app_status_indicator.online, + title_key: AppTextKey::PackDayHostHandoffOpenCustomerLabelsSucceededTitle, + } + } (PackDayHostHandoffStatus::Failed, PackDayHostHandoffKind::RevealBundle) => { PackDayHostHandoffStatusPresentation { indicator_color: APP_UI_THEME.components.app_status_indicator.attention, @@ -10127,6 +10179,18 @@ fn pack_day_host_handoff_status_presentation( title_key: AppTextKey::PackDayHostHandoffOpenPackSheetFailedTitle, } } + (PackDayHostHandoffStatus::Failed, PackDayHostHandoffKind::OpenPickupRoster) => { + PackDayHostHandoffStatusPresentation { + indicator_color: APP_UI_THEME.components.app_status_indicator.attention, + title_key: AppTextKey::PackDayHostHandoffOpenPickupRosterFailedTitle, + } + } + (PackDayHostHandoffStatus::Failed, PackDayHostHandoffKind::OpenCustomerLabels) => { + PackDayHostHandoffStatusPresentation { + indicator_color: APP_UI_THEME.components.app_status_indicator.attention, + title_key: AppTextKey::PackDayHostHandoffOpenCustomerLabelsFailedTitle, + } + } }; Some(status) diff --git a/crates/shared/i18n/src/keys.rs b/crates/shared/i18n/src/keys.rs @@ -245,12 +245,22 @@ define_app_text_keys! { PackDayHostHandoffRevealActionRunning => "pack_day.host_handoff.reveal.action.running", PackDayHostHandoffOpenPackSheetAction => "pack_day.host_handoff.open_pack_sheet.action", PackDayHostHandoffOpenPackSheetActionRunning => "pack_day.host_handoff.open_pack_sheet.action.running", + PackDayHostHandoffOpenPickupRosterAction => "pack_day.host_handoff.open_pickup_roster.action", + PackDayHostHandoffOpenPickupRosterActionRunning => "pack_day.host_handoff.open_pickup_roster.action.running", + PackDayHostHandoffOpenCustomerLabelsAction => "pack_day.host_handoff.open_customer_labels.action", + PackDayHostHandoffOpenCustomerLabelsActionRunning => "pack_day.host_handoff.open_customer_labels.action.running", PackDayHostHandoffRevealRunningTitle => "pack_day.host_handoff.reveal.running.title", PackDayHostHandoffRevealSucceededTitle => "pack_day.host_handoff.reveal.succeeded.title", PackDayHostHandoffRevealFailedTitle => "pack_day.host_handoff.reveal.failed.title", PackDayHostHandoffOpenPackSheetRunningTitle => "pack_day.host_handoff.open_pack_sheet.running.title", PackDayHostHandoffOpenPackSheetSucceededTitle => "pack_day.host_handoff.open_pack_sheet.succeeded.title", PackDayHostHandoffOpenPackSheetFailedTitle => "pack_day.host_handoff.open_pack_sheet.failed.title", + PackDayHostHandoffOpenPickupRosterRunningTitle => "pack_day.host_handoff.open_pickup_roster.running.title", + PackDayHostHandoffOpenPickupRosterSucceededTitle => "pack_day.host_handoff.open_pickup_roster.succeeded.title", + PackDayHostHandoffOpenPickupRosterFailedTitle => "pack_day.host_handoff.open_pickup_roster.failed.title", + PackDayHostHandoffOpenCustomerLabelsRunningTitle => "pack_day.host_handoff.open_customer_labels.running.title", + PackDayHostHandoffOpenCustomerLabelsSucceededTitle => "pack_day.host_handoff.open_customer_labels.succeeded.title", + PackDayHostHandoffOpenCustomerLabelsFailedTitle => "pack_day.host_handoff.open_customer_labels.failed.title", HomeTodayRemindersTitle => "home.today.reminders.title", ReminderDeadlineLabel => "reminder.deadline.label", ReminderUrgencyUpcoming => "reminder.urgency.upcoming", diff --git a/crates/shared/i18n/src/lib.rs b/crates/shared/i18n/src/lib.rs @@ -492,6 +492,22 @@ mod tests { "Opening pack sheet..." ); assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenPickupRosterAction), + "Open pickup roster" + ); + assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenPickupRosterActionRunning), + "Opening pickup roster..." + ); + assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenCustomerLabelsAction), + "Open customer labels" + ); + assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenCustomerLabelsActionRunning), + "Opening customer labels..." + ); + assert_eq!( app_text(AppTextKey::PackDayHostHandoffRevealSucceededTitle), "Shown in Finder" ); @@ -500,6 +516,14 @@ mod tests { "Opened pack sheet" ); assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenPickupRosterSucceededTitle), + "Opened pickup roster" + ); + assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenCustomerLabelsSucceededTitle), + "Opened customer labels" + ); + assert_eq!( app_text(AppTextKey::PackDayHostHandoffRevealFailedTitle), "Couldn't show in Finder" ); @@ -507,6 +531,14 @@ mod tests { app_text(AppTextKey::PackDayHostHandoffOpenPackSheetFailedTitle), "Couldn't open pack sheet" ); + assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenPickupRosterFailedTitle), + "Couldn't open pickup roster" + ); + assert_eq!( + app_text(AppTextKey::PackDayHostHandoffOpenCustomerLabelsFailedTitle), + "Couldn't open customer labels" + ); } #[test] diff --git a/crates/shared/models/src/lib.rs b/crates/shared/models/src/lib.rs @@ -1614,6 +1614,8 @@ impl PackDayExportArtifactKind { pub enum PackDayHostHandoffKind { RevealBundle, OpenPackSheet, + OpenPickupRoster, + OpenCustomerLabels, } impl PackDayHostHandoffKind { @@ -1625,6 +1627,8 @@ impl PackDayHostHandoffKind { match self { Self::RevealBundle => "reveal_bundle", Self::OpenPackSheet => "open_pack_sheet", + Self::OpenPickupRoster => "open_pickup_roster", + Self::OpenCustomerLabels => "open_customer_labels", } } @@ -1632,6 +1636,8 @@ impl PackDayHostHandoffKind { match self { Self::RevealBundle => None, Self::OpenPackSheet => Some(PackDayExportArtifactKind::PackSheet), + Self::OpenPickupRoster => Some(PackDayExportArtifactKind::PickupRoster), + Self::OpenCustomerLabels => Some(PackDayExportArtifactKind::CustomerLabels), } } } @@ -3034,12 +3040,28 @@ mod tests { PackDayHostHandoffKind::OpenPackSheet.storage_key(), "open_pack_sheet" ); + assert_eq!( + PackDayHostHandoffKind::OpenPickupRoster.storage_key(), + "open_pickup_roster" + ); + assert_eq!( + PackDayHostHandoffKind::OpenCustomerLabels.storage_key(), + "open_customer_labels" + ); assert_eq!(PackDayHostHandoffKind::RevealBundle.artifact_kind(), None); assert_eq!( PackDayHostHandoffKind::OpenPackSheet.artifact_kind(), Some(PackDayExportArtifactKind::PackSheet) ); assert_eq!( + PackDayHostHandoffKind::OpenPickupRoster.artifact_kind(), + Some(PackDayExportArtifactKind::PickupRoster) + ); + assert_eq!( + PackDayHostHandoffKind::OpenCustomerLabels.artifact_kind(), + Some(PackDayExportArtifactKind::CustomerLabels) + ); + assert_eq!( PackDayHostHandoffStatus::default(), PackDayHostHandoffStatus::Idle ); diff --git a/crates/shared/state/src/lib.rs b/crates/shared/state/src/lib.rs @@ -2561,7 +2561,7 @@ mod tests { let next_window_id = FulfillmentWindowId::new(); let request = sample_pack_day_host_handoff_request( fulfillment_window_id, - PackDayHostHandoffKind::OpenPackSheet, + PackDayHostHandoffKind::OpenPickupRoster, ); assert_eq!( @@ -2641,7 +2641,7 @@ mod tests { let next_window_id = FulfillmentWindowId::new(); let request = sample_pack_day_host_handoff_request( current_window_id, - PackDayHostHandoffKind::OpenPackSheet, + PackDayHostHandoffKind::OpenCustomerLabels, ); assert_eq!( diff --git a/i18n/locales/en/messages.json b/i18n/locales/en/messages.json @@ -225,12 +225,22 @@ "pack_day.host_handoff.reveal.action.running": "Showing in Finder...", "pack_day.host_handoff.open_pack_sheet.action": "Open pack sheet", "pack_day.host_handoff.open_pack_sheet.action.running": "Opening pack sheet...", + "pack_day.host_handoff.open_pickup_roster.action": "Open pickup roster", + "pack_day.host_handoff.open_pickup_roster.action.running": "Opening pickup roster...", + "pack_day.host_handoff.open_customer_labels.action": "Open customer labels", + "pack_day.host_handoff.open_customer_labels.action.running": "Opening customer labels...", "pack_day.host_handoff.reveal.running.title": "Showing in Finder", "pack_day.host_handoff.reveal.succeeded.title": "Shown in Finder", "pack_day.host_handoff.reveal.failed.title": "Couldn't show in Finder", "pack_day.host_handoff.open_pack_sheet.running.title": "Opening pack sheet", "pack_day.host_handoff.open_pack_sheet.succeeded.title": "Opened pack sheet", "pack_day.host_handoff.open_pack_sheet.failed.title": "Couldn't open pack sheet", + "pack_day.host_handoff.open_pickup_roster.running.title": "Opening pickup roster", + "pack_day.host_handoff.open_pickup_roster.succeeded.title": "Opened pickup roster", + "pack_day.host_handoff.open_pickup_roster.failed.title": "Couldn't open pickup roster", + "pack_day.host_handoff.open_customer_labels.running.title": "Opening customer labels", + "pack_day.host_handoff.open_customer_labels.succeeded.title": "Opened customer labels", + "pack_day.host_handoff.open_customer_labels.failed.title": "Couldn't open customer labels", "reminder.deadline.label": "Due", "reminder.urgency.upcoming": "Upcoming", "reminder.urgency.due_soon": "Due soon",