diff --git a/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt b/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt index 736f7cd3019f0..7e1fb2c0ac6ea 100644 --- a/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt +++ b/apps/mobile/modules/t3-native-controls/android/src/main/java/expo/modules/t3nativecontrols/T3WorkspaceNavigationModule.kt @@ -72,6 +72,12 @@ class T3WorkspaceNavigationModule : Module() { Prop("selectedTab") { view: T3WorkspaceNavigationView, value: String -> view.selectedTab = value } + Prop("pullRequestsTitle") { view: T3WorkspaceNavigationView, value: String -> + view.pullRequestsTitle = value + } + Prop("pullRequestsExpandedTitle") { view: T3WorkspaceNavigationView, value: String -> + view.pullRequestsExpandedTitle = value + } Prop("floating") { view: T3WorkspaceNavigationView, value: Boolean -> view.floating = value view.clipToPadding = !value @@ -128,6 +134,8 @@ class T3WorkspaceNavigationView( private val onOverlayChange by EventDispatcher() var tabs by mutableStateOf(listOf("threads", "pullRequests", "usage", "settings")) var selectedTab by mutableStateOf("threads") + var pullRequestsTitle by mutableStateOf("Pulls") + var pullRequestsExpandedTitle by mutableStateOf("Pull Requests") var rail by mutableStateOf(false) var floating by mutableStateOf(false) var dark by mutableStateOf(false) @@ -414,13 +422,13 @@ class T3WorkspaceNavigationView( private fun tabTitle(tab: String) = when (tab) { "threads" -> "Chats" - "pullRequests" -> "Pulls" + "pullRequests" -> pullRequestsTitle "usage" -> "Usage" else -> "Settings" } private fun expandedTabTitle(tab: String) = - if (tab == "pullRequests") "Pull Requests" else tabTitle(tab) + if (tab == "pullRequests") pullRequestsExpandedTitle else tabTitle(tab) @Composable private fun tabIconPainter(tab: String) = painterResource( diff --git a/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift b/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift index af67e80afebb4..483b7b863aafd 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3NativeControlsModule.swift @@ -38,6 +38,7 @@ public final class T3NativeControlsModule: Module { Events("onSelectionChange", "onCompose") Prop("tabs") { (view: T3SidebarTabBarView, value: [String]) in view.tabs = value } Prop("selectedTab") { (view: T3SidebarTabBarView, value: String) in view.selectedTab = value } + Prop("pullRequestsTitle") { (view: T3SidebarTabBarView, value: String) in view.pullRequestsTitle = value } Prop("selectedColor") { (view: T3SidebarTabBarView, value: UIColor) in view.selectedColor = value } Prop("showsCompose") { (view: T3SidebarTabBarView, value: Bool) in view.showsCompose = value } Prop("compact") { (view: T3SidebarTabBarView, value: Bool) in view.compact = value } diff --git a/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift b/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift index 243490678c530..493793a29c84a 100644 --- a/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift +++ b/apps/mobile/modules/t3-native-controls/ios/T3SidebarTabBarView.swift @@ -43,6 +43,9 @@ final class T3SidebarTabBarView: ExpoView, UITabBarDelegate { var tabs = ["threads", "pullRequests", "usage", "settings"] { didSet { if tabs != oldValue { updateItems() } } } + var pullRequestsTitle = "PRs" { + didSet { itemsByTab["pullRequests"]?.accessibilityLabel = pullRequestsTitle } + } var selectedTab = "threads" { didSet { updateSelection() } } var selectedColor: UIColor = .systemBlue { didSet { tabBar.tintColor = selectedColor } } var compact = false { @@ -106,7 +109,7 @@ final class T3SidebarTabBarView: ExpoView, UITabBarDelegate { private func prepareItems() { let iconBundle = Bundle(for: Self.self).url(forResource: "T3NativeControlIcons", withExtension: "bundle").flatMap(Bundle.init(url:)) let pullRequestIcon = UIImage(named: "pull-request", in: iconBundle, compatibleWith: nil)?.withRenderingMode(.alwaysTemplate) - let labels = ["threads": "Chats", "pullRequests": "PRs", "usage": "Usage", "settings": "Settings"] + let labels = ["threads": "Chats", "pullRequests": pullRequestsTitle, "usage": "Usage", "settings": "Settings"] let symbols = ["threads": "text.bubble", "usage": "chart.bar.xaxis", "settings": "gearshape"] for (tab, label) in labels { let icon = tab == "pullRequests" ? pullRequestIcon : UIImage(systemName: symbols[tab] ?? "circle") diff --git a/apps/mobile/src/App.tsx b/apps/mobile/src/App.tsx index 6287a05956519..a2530997e755e 100644 --- a/apps/mobile/src/App.tsx +++ b/apps/mobile/src/App.tsx @@ -74,6 +74,7 @@ import { } from "./lib/foundation-fast-refresh"; import { useMobileNavigationTheme } from "./lib/useMobileNavigationTheme"; import { installUiRuntimeMemoryWarningGc } from "./lib/useUiRuntimeMemoryWarningGc"; +import { installChangeRequestTerminologyRuntime } from "./state/change-request-terminology"; import { SubscriptionUsageCoordinator } from "./widgets/SubscriptionUsageCoordinator"; import { installSubscriptionUsageRefresh } from "./widgets/useSubscriptionUsage"; import { GlobalVoiceInputControl } from "./features/voice-input/GlobalVoiceInputControl"; @@ -190,6 +191,7 @@ const appServiceDisposers = [ pendingThreadIdsAtom: threadEnvironment.pendingThreadIdsAtom, }), installAppearanceRuntime(), + installChangeRequestTerminologyRuntime(), installSubscriptionUsageRefresh(), installPermissionUpdateNotice(), installThreadOutboxDelivery(), diff --git a/apps/mobile/src/components/ComposerContextSheet.tsx b/apps/mobile/src/components/ComposerContextSheet.tsx index 8836662df1ff0..c99587a4e42bf 100644 --- a/apps/mobile/src/components/ComposerContextSheet.tsx +++ b/apps/mobile/src/components/ComposerContextSheet.tsx @@ -1,3 +1,4 @@ +import { useChangeRequestTerms } from "../state/change-request-terminology"; import { Button } from "./ui/Button"; import * as Dialog from "./ui/Dialog"; import { useOpenPullRequest } from "../native/useOpenPullRequest"; @@ -11,7 +12,6 @@ import type { ScopedThreadRef, } from "@t3tools/contracts"; import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; -import { sourceControlClients } from "@t3tools/client-runtime/source-control-clients"; import { videoMimeType } from "@t3tools/shared/video"; import { Pressable, ScrollView, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; @@ -98,6 +98,7 @@ export function ComposerContextSheet(props: { }); const reviewColors = useReviewCommentColors(); const insets = useSafeAreaInsets(); + const changeRequestTerm = useChangeRequestTerms().singular; const { themeId, themeAppearance } = useAppearancePreferences(); const terminalTheme = getMobileTerminalTheme(themeId, themeAppearance); const record = props.record; @@ -183,10 +184,6 @@ export function ComposerContextSheet(props: { record?.kind === "review-comment" && "pullRequest" in record ? record.pullRequest?.url : undefined; - const changeRequestTerm = ( - (pullRequestUrl ? sourceControlClients.findByChangeRequestUrl(pullRequestUrl) : undefined) ?? - sourceControlClients.get(undefined) - ).changeRequest.singular; const terminal = record?.kind === "terminal" && !("payload" in record) ? record : null; return ( diff --git a/apps/mobile/src/features/connection/PullRequestRoutingSettings.tsx b/apps/mobile/src/features/connection/PullRequestRoutingSettings.tsx index 44383db74b2ad..a83df7212eced 100644 --- a/apps/mobile/src/features/connection/PullRequestRoutingSettings.tsx +++ b/apps/mobile/src/features/connection/PullRequestRoutingSettings.tsx @@ -1,3 +1,5 @@ +import { useChangeRequestTerms } from "../../state/change-request-terminology"; +import { capitalizeTerm } from "@t3tools/client-runtime/source-control-clients"; import { ListChoiceRow } from "../../components/ui/ListChoiceRow"; import * as Dialog from "../../components/ui/Dialog"; import { useAtomValue } from "@effect/atom-react"; @@ -16,26 +18,31 @@ import { environmentCatalog } from "../../connection/catalog"; import { useAtomCommand } from "../../state/use-atom-command"; import { SettingsSection } from "../settings/components/SettingsSection"; -const options: ReadonlyArray<{ - value: PullRequestRoutingPermission; - label: string; - description: string; -}> = [ - { value: "off", label: "Off", description: "Keep source control requests on this environment." }, - { - value: "read", - label: "Read PRs", - description: "Share PR data with other enabled environments.", - }, - { - value: "read-write", - label: "Read and act", - description: - "Actions may use broader source control permissions than the original environment.", - }, -]; - export function PullRequestRoutingSettings() { + const terms = useChangeRequestTerms(); + const options: ReadonlyArray<{ + value: PullRequestRoutingPermission; + label: string; + description: string; + }> = [ + { + value: "off", + label: "Off", + description: "Keep source control requests on this environment.", + }, + { + value: "read", + label: `Read ${terms.shortLabel}s`, + description: `Share ${terms.shortLabel} data with other enabled environments.`, + }, + { + value: "read-write", + label: "Read and act", + description: + "Actions may use broader source control permissions than the original environment.", + }, + ]; + const catalog = useAtomValue(environmentCatalog.catalogValueAtom); const permissions = useAtomValue(environmentCatalog.pullRequestRoutingPermissionsValueAtom); const update = useAtomCommand(environmentCatalog.setPullRequestRoutingPermission); @@ -45,7 +52,7 @@ export function PullRequestRoutingSettings() { return ( - + {[...catalog.entries.values()].map((entry) => { const environmentId = entry.target.environmentId; const selected = pullRequestRoutingPermissionFor(entry, permissions); @@ -55,7 +62,7 @@ export function PullRequestRoutingSettings() { setExpanded(expanded === environmentId ? null : environmentId)} @@ -91,7 +98,7 @@ export function PullRequestRoutingSettings() { setSaving(false); if (result._tag === "Failure") Dialog.alert( - "Could not save pull request routing permission", + `Could not save ${terms.singular} routing permission`, "Try again before leaving this screen.", ); }); @@ -104,8 +111,8 @@ export function PullRequestRoutingSettings() { })} - Choose environments you trust to share PR data and use each other's source control access. - Enable both environments. This applies only to this client. + Choose environments you trust to share {terms.shortLabel} data and use each other's source + control access. Enable both environments. This applies only to this client. ); diff --git a/apps/mobile/src/features/keyboard/CommandPalette.tsx b/apps/mobile/src/features/keyboard/CommandPalette.tsx index 198ac724f526c..71f7a05e23181 100644 --- a/apps/mobile/src/features/keyboard/CommandPalette.tsx +++ b/apps/mobile/src/features/keyboard/CommandPalette.tsx @@ -1,3 +1,5 @@ +import { useChangeRequestTerms } from "../../state/change-request-terminology"; +import { formatChangeRequestText } from "@t3tools/client-runtime/source-control-clients"; import { useAtomValue } from "@effect/atom-react"; import { uuidv4 } from "../../lib/uuid"; import { useNavigation } from "@react-navigation/native"; @@ -113,6 +115,7 @@ function PaletteRow(props: { readonly searchQuery: string; readonly onSelect: () => void; }) { + const terms = useChangeRequestTerms(); const foregroundClassName = props.selected ? "text-thread-selected-foreground" : "text-foreground"; @@ -190,7 +193,7 @@ function PaletteRow(props: { /> ) : props.item.matchHint ? ( - {props.item.matchHint.label}:{" "} + {formatChangeRequestText(props.item.matchHint.label, terms)}:{" "} {splitSearchText(props.item.matchHint.text, props.item.matchHint.ranges).map((part) => ( {part.text} @@ -220,6 +223,7 @@ export function CommandPalette(props: { readonly onClose: () => void; readonly onCommand: (command: HardwareKeyboardCommand) => void; }) { + const terms = useChangeRequestTerms(); const navigation = useNavigation(); const selectTab = useSelectWorkspaceTab(); const { themeVariables } = useAppearancePreferences(); @@ -388,8 +392,12 @@ export function CommandPalette(props: { const threadActions = [ ["files", "Go to file", ["open", "files", "browse", "search"]], ["terminal", "Open terminal", ["shell", "console"]], - ["review", "Review changes", ["diff", "git", "pull request"]], - ["copyThreadReference", "Copy PR link or thread", ["reference", "clipboard"]], + ["review", "Review changes", ["diff", "git", "pull request", "merge request"]], + [ + "copyThreadReference", + `Copy ${terms.shortLabel} link or thread`, + ["reference", "clipboard"], + ], ] as const; actions.push( ...threadActions.map(([command, title, searchTerms]) => ({ @@ -461,6 +469,7 @@ export function CommandPalette(props: { ); return [...actions, ...projectItems, ...threadItems]; }, [ + terms.shortLabel, selectTab, activeThread, activeThreadRef, diff --git a/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx b/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx index e04b72cb9685d..7aa9ac93ded4f 100644 --- a/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx +++ b/apps/mobile/src/features/layout/WorkspaceEmptyDetail.tsx @@ -1,3 +1,4 @@ +import { useChangeRequestTerms } from "../../state/change-request-terminology"; import { SymbolView } from "../../components/ui/AppSymbol"; import { Platform, Pressable, View } from "react-native"; @@ -13,6 +14,7 @@ export function WorkspaceEmptyDetail(props: { readonly onStartNewTask?: () => void; readonly onAddConnection?: () => void; }) { + const terms = useChangeRequestTerms(); const pullRequests = props.tab === "pullRequests"; const settings = props.tab === "settings"; if (props.tab === "usage") return ; @@ -54,14 +56,14 @@ export function WorkspaceEmptyDetail(props: { {settings ? "Select a setting" : pullRequests - ? "Select a pull request" + ? `Select a ${terms.singular}` : "Select a thread"} {settings ? "Choose a page from the sidebar." : pullRequests - ? "Choose a pull request from the sidebar to review it." + ? `Choose a ${terms.singular} from the sidebar to review it.` : Platform.OS === "android" ? "Choose a thread from the sidebar or start a new thread." : "Choose a thread from the sidebar or start a new task."} diff --git a/apps/mobile/src/features/layout/workspace/AndroidWorkspaceNavigation.android.tsx b/apps/mobile/src/features/layout/workspace/AndroidWorkspaceNavigation.android.tsx index 382336367e2fd..12ae0ba05b389 100644 --- a/apps/mobile/src/features/layout/workspace/AndroidWorkspaceNavigation.android.tsx +++ b/apps/mobile/src/features/layout/workspace/AndroidWorkspaceNavigation.android.tsx @@ -1,5 +1,6 @@ import { selectedNavigationTab, visibleNavigationTabs } from "./navigation-tab-order"; import { requireNativeView } from "expo"; +import { capitalizeTerm } from "@t3tools/client-runtime/source-control-clients"; import { CommonActions, useNavigation } from "@react-navigation/native"; import { Keyboard, @@ -15,6 +16,7 @@ import { useAndroidControlSizing } from "../../../components/ui/useAndroidContro import { useToolbarLayout } from "../../../components/ui/useToolbarLayout"; import { rootNavigationRef } from "../../../lib/rootNavigation"; import { useWorkspaceConnectionState } from "../../../state/workspace"; +import { useChangeRequestTerms } from "../../../state/change-request-terminology"; import { androidWorkspaceNavigationColors } from "./android-workspace-navigation-colors"; import { androidWorkspaceTabNavigationState, @@ -36,6 +38,8 @@ interface NativeNavigationProps extends ViewProps { readonly floating: boolean; readonly tabs: readonly string[]; readonly selectedTab: AndroidWorkspaceNavigationTab; + readonly pullRequestsTitle: string; + readonly pullRequestsExpandedTitle: string; readonly dark: boolean; readonly textScale: number; readonly newEnabled: boolean; @@ -73,6 +77,7 @@ export function AndroidWorkspaceNavigation(props: { readonly onOverlayChange?: (overlay: boolean) => void; }) { const workspace = useWorkspaceTabs()!; + const terms = useChangeRequestTerms(); const order = useNavigationTabOrder(); const hidden = useHiddenNavigationTabs(); const root = useAndroidWorkspaceRoot(); @@ -121,6 +126,8 @@ export function AndroidWorkspaceNavigation(props: { floating={floating} tabs={tabs} selectedTab={selectedTab} + pullRequestsTitle={terms.shortLabel === "MR" ? "MRs" : "Pulls"} + pullRequestsExpandedTitle={capitalizeTerm(terms.plural)} dark={themeAppearance === "dark"} textScale={scale} newEnabled={connectionState.hasConnections} diff --git a/apps/mobile/src/features/layout/workspace/PullRequestToolbar.android.tsx b/apps/mobile/src/features/layout/workspace/PullRequestToolbar.android.tsx index 332c1befe18ba..22709a04ac96d 100644 --- a/apps/mobile/src/features/layout/workspace/PullRequestToolbar.android.tsx +++ b/apps/mobile/src/features/layout/workspace/PullRequestToolbar.android.tsx @@ -1,3 +1,4 @@ +import { useChangeRequestTerms } from "../../../state/change-request-terminology"; import { useNavigation } from "@react-navigation/native"; import { useEffect } from "react"; import { BackHandler, Keyboard } from "react-native"; @@ -14,6 +15,7 @@ export function PullRequestToolbar(props: { readonly filters: PullRequestFilterMenu | null; readonly onRequestVisibility?: () => void; }) { + const terms = useChangeRequestTerms(); const navigation = useNavigation(); const { filters } = props; const workspace = useWorkspaceTabs()!; @@ -57,14 +59,14 @@ export function PullRequestToolbar(props: { title="T3 Code" titleContent={ openSettings(navigation, "SettingsEnvironments")} /> } search={{ value: tab.query, onChangeText: (query) => dispatch({ type: "query", tab: "pullRequests", query }), - placeholder: "Search pull requests", + placeholder: `Search ${terms.plural}`, active: searching, onOpen: openSearch, onClose: closeSearch, @@ -73,7 +75,7 @@ export function PullRequestToolbar(props: { filters ? [ { - title: "Filter pull requests", + title: `Filter ${terms.plural}`, icon: filters.customized ? "line.3.horizontal.decrease.circle.fill" : "line.3.horizontal.decrease.circle", diff --git a/apps/mobile/src/features/layout/workspace/WorkspaceNativeTabs.ios.tsx b/apps/mobile/src/features/layout/workspace/WorkspaceNativeTabs.ios.tsx index 2247ea50c9a4a..944d9770124b4 100644 --- a/apps/mobile/src/features/layout/workspace/WorkspaceNativeTabs.ios.tsx +++ b/apps/mobile/src/features/layout/workspace/WorkspaceNativeTabs.ios.tsx @@ -1,5 +1,5 @@ import { - WORKSPACE_TAB_LABELS, + useWorkspaceTabLabels, NAVIGATION_TAB_ICONS, useEnabledNavigationTabs, } from "./navigation-tabs"; @@ -76,6 +76,7 @@ export function WorkspaceNativeTabs(props: { /** The sidebar column draws the tabs itself, so they leave with it. */ readonly tabsInSidebarColumn?: boolean; }) { + const tabLabels = useWorkspaceTabLabels(); const workspace = useWorkspaceTabs()!; const order = useEnabledNavigationTabs(); const primaryTabs = order.slice(0, 4); @@ -134,7 +135,7 @@ export function WorkspaceNativeTabs(props: { key={slot} screenKey={slot} title="" - tabBarItemAccessibilityLabel={settings ? "Settings" : WORKSPACE_TAB_LABELS[tab]} + tabBarItemAccessibilityLabel={settings ? "Settings" : tabLabels[tab]} ios={{ icon: settings ? { type: "sfSymbol", name: "gearshape" } diff --git a/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.android.tsx b/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.android.tsx index a03a36bc94762..3aeb81909184f 100644 --- a/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.android.tsx +++ b/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.android.tsx @@ -1,3 +1,5 @@ +import { capitalizeTerm } from "@t3tools/client-runtime/source-control-clients"; +import { useChangeRequestTerms } from "../../../state/change-request-terminology"; import { useAndroidFloatingTabs } from "../../settings/appearance/AppearancePreferencesProvider"; import { WorkspaceNoTabs } from "./WorkspaceNoTabs"; import { useEnabledNavigationTabs } from "./navigation-tabs"; @@ -32,6 +34,7 @@ export function WorkspaceRootScreen() { } function WorkspaceRoot() { + const terms = useChangeRequestTerms(); const floatingTabsEnabled = useAndroidFloatingTabs(); const { layout, startNewTask, workspacePageWidth } = useAdaptiveWorkspaceLayout(); const workspace = useWorkspaceTabs()!; @@ -88,7 +91,7 @@ function WorkspaceRoot() { ) : layout.usesSplitView ? ( <> - + ) : ( diff --git a/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.tsx b/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.tsx index e8e7c0d325983..d52a6d6fc57f8 100644 --- a/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.tsx +++ b/apps/mobile/src/features/layout/workspace/WorkspaceRootScreen.tsx @@ -1,5 +1,5 @@ import { WorkspaceNoTabs } from "./WorkspaceNoTabs"; -import { WORKSPACE_TAB_LABELS, useEnabledNavigationTabs } from "./navigation-tabs"; +import { useWorkspaceTabLabels, useEnabledNavigationTabs } from "./navigation-tabs"; import { WorkspaceExtraTab } from "./WorkspaceExtraTab"; import { WorkspaceSettingsList } from "../../settings/SettingsRouteScreen"; import { WorkspaceSectionToolbar } from "./WorkspaceSectionToolbar"; @@ -39,8 +39,6 @@ import { } from "./useSystemWorkspaceTabBar"; import { openSettings } from "../../settings/settings-navigation"; -const TAB_TITLES = WORKSPACE_TAB_LABELS; - function WorkspaceRootTitle(props: { readonly columnWidth: number; readonly onOpenEnvironments: () => void; @@ -48,10 +46,11 @@ function WorkspaceRootTitle(props: { const { state, settingsOpen } = useWorkspaceTabs()!; const maxWidth = Math.max(0, props.columnWidth - (use(HeaderItemsWidthContext) ?? 160)); const enabled = useEnabledNavigationTabs(); + const tabLabels = useWorkspaceTabLabels(); const tabTitle = settingsOpen ? "Settings" : enabled.length - ? TAB_TITLES[state.selectedTab] + ? tabLabels[state.selectedTab] : "Navigation"; return ( @@ -65,6 +64,7 @@ function WorkspaceRootTitle(props: { } function WorkspaceRootContent() { + const tabLabels = useWorkspaceTabLabels(); const navigation = useNavigation(); const { width: windowWidth } = useWindowDimensions(); const { layout, startNewTask } = useAdaptiveWorkspaceLayout(); @@ -128,7 +128,7 @@ function WorkspaceRootContent() { title: settingsOpen ? "Settings" : enabled.length - ? TAB_TITLES[state.selectedTab] + ? tabLabels[state.selectedTab] : "Navigation", headerShown: true, headerTransparent: NATIVE_LIQUID_GLASS_SUPPORTED, diff --git a/apps/mobile/src/features/layout/workspace/WorkspaceSectionToolbar.tsx b/apps/mobile/src/features/layout/workspace/WorkspaceSectionToolbar.tsx index 1676a927ecc6f..5abfca8478d99 100644 --- a/apps/mobile/src/features/layout/workspace/WorkspaceSectionToolbar.tsx +++ b/apps/mobile/src/features/layout/workspace/WorkspaceSectionToolbar.tsx @@ -4,7 +4,7 @@ import { useControlTheme } from "../../../components/ui/useControlTheme"; import { useDeviceType } from "../../../native/native-layout-metrics"; import { NAVIGATION_TAB_ICONS, - WORKSPACE_TAB_LABELS, + useWorkspaceTabLabels, useNavigationTabOrder, useHiddenNavigationTabs, } from "./navigation-tabs"; @@ -15,6 +15,7 @@ import { useCompactWorkspaceTabs, useSidebarWorkspaceTabs } from "./useSystemWor const PULL_REQUEST_ICON = require("../../../../assets/icons/pull-request.png"); export function WorkspaceTabToolbarButtons() { + const tabLabels = useWorkspaceTabLabels(); const order = useNavigationTabOrder(); const hidden = useHiddenNavigationTabs(); const workspace = useWorkspaceTabs()!; @@ -32,7 +33,7 @@ export function WorkspaceTabToolbarButtons() {