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:
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",