From d1ee69355763e6cfdae406e4d605e8df2b15ff70 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 17 Mar 2024 16:16:28 +0000 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=A4=AE=E6=99=82=E4=B8=89=E6=AE=B5?= =?UTF-8?q?=E6=B4=BB=E7=94=A8=E5=8F=AF=E8=83=BD=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=80=81=E3=83=80=E3=82=A4=E3=83=A4=E6=83=85=E5=A0=B1=E3=81=AE?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EachTrainInfoCore.js | 174 ++++++++++-------- lib/webViewInjectjavascript.js | 51 ++++- stateBox/useBusAndTrainData.js | 53 +++++- 3 files changed, 185 insertions(+), 93 deletions(-) diff --git a/components/ActionSheetComponents/EachTrainInfoCore.js b/components/ActionSheetComponents/EachTrainInfoCore.js index 3317c65..cade5b9 100644 --- a/components/ActionSheetComponents/EachTrainInfoCore.js +++ b/components/ActionSheetComponents/EachTrainInfoCore.js @@ -71,10 +71,10 @@ export const EachTrainInfoCore = ({ }, []); //bconst insets = useSafeAreaInsets(); - const [headStation, setHeadStation] = useState(); - const [tailStation, setTailStation] = useState(); - const [isConcatNear, setIsConcatNear] = useState(false); - const [showNearTrain, setShowNearTrain] = useState([]); + const [headStation, setHeadStation] = useState([]); + const [tailStation, setTailStation] = useState([]); + const [showHeadStation, setShowHeadStation] = useState([]); + const [showTailStation, setShowTailStation] = useState([]); const [nearTrainIDList, setNearTrainIDList] = useState([]); const { getInfluencedTrainData } = useBusAndTrainData(); const [trainPositionSwitch, setTrainPositionSwitch] = useState("false"); @@ -120,9 +120,8 @@ export const EachTrainInfoCore = ({ useEffect(() => { if (!data.trainNum) return; const TD = trainList[data.trainNum]; - setIsConcatNear(false); - setHeadStation(); - setTailStation(); + setHeadStation([]); + setTailStation([]); if (!TD) { const specialTrainActualID = searchSpecialTrain(data.trainNum, trainList); setTrueTrainID(specialTrainActualID || undefined); @@ -134,27 +133,38 @@ export const EachTrainInfoCore = ({ //裏列車探索 useEffect(() => { if (!data.trainNum) return; - const [returnArray, TDArray] = getInfluencedTrainData(data.trainNum); + const NearTrainList = getInfluencedTrainData(data.trainNum); + if (NearTrainList.length == 0) return; + const returnArray = NearTrainList.map((d) => d.id); + const TDArray = NearTrainList.map((d) => d.TrainData); setNearTrainIDList(returnArray); - setShowNearTrain(TDArray); if (trainData.length == 0) return; if (TDArray.length == 0) return; - let head; - let tail; - TDArray.forEach((d) => { - const [station, se, time] = d.split(","); - - if (station == trainData[0].split(",")[0]) { - head = trainData[0].split(",")[0]; - } - if (station == trainData[trainData.length - 1].split(",")[0]) { - tail = trainData[trainData.length - 1].split(",")[0]; - } - }); + let head = []; + let tail = []; + TDArray.forEach((data, i) => + data.forEach((d) => { + const [station, se, time] = d.split(","); + if (station == trainData[0].split(",")[0]) { + head.push({ + station: trainData[0].split(",")[0], + dia: data, + id: nearTrainIDList[i], + }); + } + if (station == trainData[trainData.length - 1].split(",")[0]) { + tail.push({ + station: trainData[trainData.length - 1].split(",")[0], + dia: data, + id: nearTrainIDList[i], + }); + } + }) + ); if (head) setHeadStation(head); - else setHeadStation(); + else setHeadStation([]); if (tail) setTailStation(tail); - else setTailStation(); + else setTailStation([]); }, [trainData, data]); useEffect(() => { @@ -256,8 +266,9 @@ export const EachTrainInfoCore = ({ + {showHeadStation.map((d) => `${headStation[d].id} + `)} {data.trainNum} - {isConcatNear ? ` + ${nearTrainIDList}` : ""} + {showTailStation.map((d) => ` + ${tailStation[d].id}`)} {data.limited != undefined && @@ -331,33 +342,36 @@ export const EachTrainInfoCore = ({ } > - {headStation && !isConcatNear && ( - { - const array = openBackTrainInfo( - headStation, - trainData, - showNearTrain - ); - if (!array) return; - setTrainData(array); - setIsConcatNear(true); - }} - style={{ - padding: 10, - flexDirection: "row", - borderColor: "blue", - borderWidth: 1, - margin: 10, - borderRadius: 5, - alignItems: "center", - }} - > - - 「本当の始発駅」を表示 - - - )} + {headStation.length != 0 && + headStation.map((i, index) => + showHeadStation.findIndex((d) => d == index) == -1 ? ( + { + const array = openBackTrainInfo(i.station, trainData, i.dia); + if (!array) return; + setTrainData(array); + setShowHeadStation([...showHeadStation, index]); + }} + style={{ + padding: 10, + flexDirection: "row", + borderColor: "blue", + borderWidth: 1, + margin: 10, + borderRadius: 5, + alignItems: "center", + }} + > + + 「本当の始発駅」を表示 + + + ) : ( + <> + ) + )} {/* ) )} - {tailStation && !isConcatNear && ( - { - const array = openBackTrainInfo( - tailStation, - trainData, - showNearTrain - ); + {tailStation.length != 0 && + tailStation.map((i, index) => + showTailStation.findIndex((d) => d == index) == -1 ? ( + { + const array = openBackTrainInfo(i.station, trainData, i.dia); - if (!array) return; - setTrainData(array); - setIsConcatNear(true); - }} - style={{ - padding: 10, - flexDirection: "row", - borderColor: "blue", - borderWidth: 1, - margin: 10, - borderRadius: 5, - alignItems: "center", - }} - > - - 「本当の終着駅」を表示 - - - )} + if (!array) return; + setTrainData(array); + + setShowTailStation([...showTailStation, index]); + }} + style={{ + padding: 10, + flexDirection: "row", + borderColor: "blue", + borderWidth: 1, + margin: 10, + borderRadius: 5, + alignItems: "center", + }} + > + + 「本当の終着駅」を表示 + + + ) : ( + <> + ) + )} { switch(num){ @@ -535,7 +565,7 @@ const getJRF = num =>{ const data = getJRF(列番データ); 行き先情報.innerText = data != null ? data+行き先情報.innerText : 行き先情報.innerText; -` + JRF_icon; +`; const TKT_name = ` //安芸行と併結列車を個別に表示、それ以外をdefaultで下りなら既定の行き先を、上りなら奈半利行を設定 @@ -548,9 +578,10 @@ const data = getJRF(列番データ); return "ごめん・なはり線直通\\n快速 安芸行"; case "5874D": case "5882D": + case "5878D": return "ごめん・なはり線直通\\n各停 安芸行"; - case "742D": - case "746D": + case "246D": + case "750D": return "土佐山田/奈半利行\\n(後免にて解結)\\nごめん・なはり線快速"; default: if(new RegExp(/^58[1-3][1,3,5,7,9][DM]$/).test(列番データ)){ diff --git a/stateBox/useBusAndTrainData.js b/stateBox/useBusAndTrainData.js index c1b6d8d..8a5cc58 100644 --- a/stateBox/useBusAndTrainData.js +++ b/stateBox/useBusAndTrainData.js @@ -63,11 +63,51 @@ export const BusAndTrainDataProvider = ({ children }) => { const getInfluencedTrainData = (trainNum) => { const trainPairList = initializeTrainPairList(); + // 9253M ラマル + // 9256M ラマル + + // 4125m-545M + //143M-147M + // 1261M-4261M + // 3621DWANMAN + //8091D-IYO-OZU + //8093D-IYO-YAWA + //8092D-IYO-FUTAMI + //8094-IYO-DOGO + const returnArray = []; if (!trainNum) return; if (trainPairList[trainNum]) { returnArray.push(Object.keys(trainPairList[trainNum])[0]); } + switch (trainNum) { + case "4125M": + returnArray.push("545M"); + break; + case "545M": + returnArray.push("4125M"); + break; + case "143M": + returnArray.push("147M"); + break; + case "147M": + returnArray.push("143M"); + break; + case "1261M": + returnArray.push("4261M"); + break; + case "4261M": + returnArray.push("1261M"); + break; + case new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum): + if (trainList["5" + trainNum.substring(1)]) + returnArray.push("5" + trainNum.substring(1)); + break; + case new RegExp(/^5[1-7]\d\d[DM]$/).test(trainNum): + if (trainList["4" + trainNum.substring(1)]) + returnArray.push("4" + trainNum.substring(1)); + break; + } if ( // 列番が4xxDまたは5xxDの場合はxxDの列番を検索 new RegExp(/^4[1-9]\d\d[DM]$/).test(trainNum) || @@ -82,11 +122,14 @@ export const BusAndTrainDataProvider = ({ children }) => { if (trainList["4" + trainNum]) returnArray.push("4" + trainNum); if (trainList["5" + trainNum]) returnArray.push("5" + trainNum); } - if (!returnArray[0]) return [[], []]; - const TD = trainList[returnArray[0]]; - if (!TD) return [[], []]; - const TDArray = TD.split("#").filter((d) => d != ""); - return [returnArray, TDArray]; + + if (!returnArray.length) return []; + const TDArray = returnArray.map((d) => { + const TD = trainList[d]; + if (!TD) return; + return { id: d, TrainData: TD.split("#").filter((d) => d != "") }; + }); + return TDArray; }; return (