From 068270d75867f5dc3c455c2e5b74ab6c7d0f7c06 Mon Sep 17 00:00:00 2001 From: Tsubasa SEKIGUCHI Date: Sat, 28 Mar 2026 18:23:15 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E5=B0=8F=E7=94=B0=E6=80=A5=E3=83=86?= =?UTF-8?q?=E3=83=BC=E3=83=9E=E3=81=AB=E6=AC=A1=E5=81=9C=E8=BB=8A=E9=A7=85?= =?UTF-8?q?=E6=A1=88=E5=86=85=E3=83=90=E3=83=8A=E3=83=BC=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=20(#5709)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 小田急テーマのタブレット表示で通過駅がある場合に「○○のつぎは○○にとまります」バナーを表示 Co-Authored-By: Claude Opus 4.6 (1M context) * useNextStationとuseAfterNextStationのモックをテストに追加 Co-Authored-By: Claude Opus 4.6 (1M context) * 次停車駅バナーのbottomを0に修正 Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) --- src/components/LineBoardEast.test.tsx | 8 +++++ src/components/LineBoardEast.tsx | 44 +++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/components/LineBoardEast.test.tsx b/src/components/LineBoardEast.test.tsx index 1552b1cb4..39e573f96 100644 --- a/src/components/LineBoardEast.test.tsx +++ b/src/components/LineBoardEast.test.tsx @@ -16,6 +16,14 @@ jest.mock('~/hooks', () => ({ useTransferLinesFromStation: jest.fn(() => []), })); +jest.mock('~/hooks/useAfterNextStation', () => ({ + useAfterNextStation: jest.fn(() => undefined), +})); + +jest.mock('~/hooks/useNextStation', () => ({ + useNextStation: jest.fn(() => undefined), +})); + jest.mock('~/hooks/useScale', () => ({ useScale: jest.fn(() => ({ widthScale: jest.fn((val) => val) })), })); diff --git a/src/components/LineBoardEast.tsx b/src/components/LineBoardEast.tsx index 4b55d9e30..1d7493838 100644 --- a/src/components/LineBoardEast.tsx +++ b/src/components/LineBoardEast.tsx @@ -8,6 +8,8 @@ import { useInterval, useTransferLinesFromStation, } from '~/hooks'; +import { useAfterNextStation } from '~/hooks/useAfterNextStation'; +import { useNextStation } from '~/hooks/useNextStation'; import { useScale } from '~/hooks/useScale'; import { isEnAtom } from '~/store/selectors/isEn'; import lineState from '../store/atoms/line'; @@ -17,6 +19,7 @@ import isTablet from '../utils/isTablet'; import { BarTerminalEast } from './BarTerminalEast'; import { BarTerminalOdakyu } from './BarTerminalOdakyu'; import { type ChevronColor, ChevronTY } from './ChevronTY'; +import { Heading } from './Heading'; import { EmptyStationNameCell, LineDot, @@ -45,6 +48,17 @@ const localStyles = StyleSheet.create({ alignItems: 'center', overflow: 'visible', }, + nextStopBanner: { + position: 'absolute', + bottom: 0, + left: '12.5%', + right: '12.5%', + }, + nextStopBannerText: { + color: '#212121', + fontWeight: 'bold', + textAlign: 'center', + }, }); const NumberingIconView: React.FC<{ station: Station }> = ({ station }) => { @@ -446,6 +460,8 @@ const LineBoardEast: React.FC = ({ ); const { selectedLine } = useAtomValue(lineState); const currentLine = useCurrentLine(); + const nextStation = useNextStation(); + const afterNextStation = useAfterNextStation(); const dim = useWindowDimensions(); @@ -454,6 +470,21 @@ const LineBoardEast: React.FC = ({ [currentLine, selectedLine] ); + const hasPassStation = useMemo( + () => stations.some((s) => getIsPass(s)), + [stations] + ); + + const showNextStopBanner = useMemo( + () => + isOdakyu && + isTablet && + hasPassStation && + !!nextStation?.name && + !!afterNextStation?.name, + [isOdakyu, hasPassStation, nextStation?.name, afterNextStation?.name] + ); + const intervalStep = useCallback( () => setChevronColor((prev) => @@ -523,6 +554,19 @@ const LineBoardEast: React.FC = ({ ]} > {stationsWithEmpty.map(stationNameCellForMap)} + {showNextStopBanner ? ( + + + {`${nextStation?.name}のつぎは${afterNextStation?.name}にとまります`} + + + ) : null} ); }; From 660a4dc71648c39ed7a2e27b33ece7da1317f6eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 18:26:55 +0900 Subject: [PATCH 2/2] Bump version for canary release (#5711) Co-authored-by: TinyKitten <32848922+TinyKitten@users.noreply.github.com> --- android/app/build.gradle | 4 +-- app.config.ts | 5 ++-- ios/TrainLCD.xcodeproj/project.pbxproj | 36 +++++++++++++------------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 4f415fa40..76820723b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -141,12 +141,12 @@ android { dimension "environment" applicationId "me.tinykitten.trainlcd.dev" versionNameSuffix "-dev" - versionCode 100000353 + versionCode 100000354 versionName "10.3.1" } prod { dimension "environment" - versionCode 100000353 + versionCode 100000354 versionName "10.3.1" } } diff --git a/app.config.ts b/app.config.ts index d801184f7..66e285689 100644 --- a/app.config.ts +++ b/app.config.ts @@ -53,7 +53,7 @@ export default ({ config }: ConfigContext) => ({ }, }, ios: { - buildNumber: '2566', + buildNumber: '2567', bundleIdentifier: process.env.EAS_BUILD_PROFILE === 'production' ? 'me.tinykitten.trainlcd' @@ -70,7 +70,7 @@ export default ({ config }: ConfigContext) => ({ ? 'me.tinykitten.trainlcd' : 'me.tinykitten.trainlcd.dev', permissions: [], - versionCode: 100000353, + versionCode: 100000354, }, owner: 'trainlcd', }); @@ -129,5 +129,6 @@ export default ({ config }: ConfigContext) => ({ + diff --git a/ios/TrainLCD.xcodeproj/project.pbxproj b/ios/TrainLCD.xcodeproj/project.pbxproj index 0a19a5cb7..d5913fc1f 100644 --- a/ios/TrainLCD.xcodeproj/project.pbxproj +++ b/ios/TrainLCD.xcodeproj/project.pbxproj @@ -2419,7 +2419,7 @@ CODE_SIGN_ENTITLEMENTS = ProdTrainLCD.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = E6R2G33Z36; INFOPLIST_FILE = TrainLCD/Schemes/Prod/Info.plist; @@ -2458,7 +2458,7 @@ CODE_SIGN_ENTITLEMENTS = ProdTrainLCD.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEVELOPMENT_TEAM = E6R2G33Z36; INFOPLIST_FILE = TrainLCD/Schemes/Prod/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = TrainLCD; @@ -2517,7 +2517,7 @@ CODE_SIGN_ENTITLEMENTS = TrainLCD/trainlcd.entitlements; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; CXX = "$(REACT_NATIVE_PATH)/scripts/xcode/ccache-clang++.sh"; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -2623,7 +2623,7 @@ CODE_SIGN_ENTITLEMENTS = TrainLCD/trainlcd.entitlements; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; CXX = "$(REACT_NATIVE_PATH)/scripts/xcode/ccache-clang++.sh"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -2702,7 +2702,7 @@ CODE_SIGN_ENTITLEMENTS = CanaryTrainLCD.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = E6R2G33Z36; INFOPLIST_FILE = TrainLCD/Schemes/Dev/Info.plist; @@ -2741,7 +2741,7 @@ CODE_SIGN_ENTITLEMENTS = CanaryTrainLCD.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; INFOPLIST_FILE = TrainLCD/Schemes/Dev/Info.plist; @@ -2952,7 +2952,7 @@ CODE_SIGN_ENTITLEMENTS = RideSessionActivity/CanaryRideSessionActivity.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = E6R2G33Z36; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -3003,7 +3003,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -3054,7 +3054,7 @@ CODE_SIGN_ENTITLEMENTS = WatchWidget/ProdWatchWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -3112,7 +3112,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -3163,7 +3163,7 @@ CODE_SIGN_ENTITLEMENTS = WatchWidget/CanaryWatchWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -3220,7 +3220,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -3268,7 +3268,7 @@ CODE_SIGN_ENTITLEMENTS = RideSessionActivity/ProdRideSessionActivity.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = E6R2G33Z36; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -3319,7 +3319,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -3538,7 +3538,7 @@ CODE_SIGN_ENTITLEMENTS = ProdAppClip/ProdAppClip.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -3594,7 +3594,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -3644,7 +3644,7 @@ CODE_SIGN_ENTITLEMENTS = CanaryAppClip/CanaryAppClip.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -3702,7 +3702,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2566; + CURRENT_PROJECT_VERSION = 2567; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = E6R2G33Z36; ENABLE_USER_SCRIPT_SANDBOXING = NO;