LED表示機能第二弾リファクタリング

This commit is contained in:
harukin-DeskMini 2023-01-28 06:51:52 +09:00
parent 7321f6d514
commit 052c121179
2 changed files with 66 additions and 49 deletions

View File

@ -64,7 +64,7 @@ export default function LED_vision(props) {
}; };
useEffect(() => { useEffect(() => {
//全列車リストを生成する副作用 //全列車リストを生成する副作用[無条件初回実行]
fetch( fetch(
"https://train.jr-shikoku.co.jp/g?arg1=station&arg2=traintimeinfo&arg3=dia", "https://train.jr-shikoku.co.jp/g?arg1=station&arg2=traintimeinfo&arg3=dia",
HeaderConfig HeaderConfig
@ -81,7 +81,7 @@ export default function LED_vision(props) {
}, []); }, []);
useEffect(() => { useEffect(() => {
//駅の情報を作成する副作用 // 現在の駅に停車するダイヤを作成する副作用[列車ダイヤと現在駅情報]
if (!trainDiagram) { if (!trainDiagram) {
setStationDiagram({}); setStationDiagram({});
return; return;
@ -110,12 +110,11 @@ export default function LED_vision(props) {
console.log(e); console.log(e);
}); });
useEffect(getCurrentTrain, []); useEffect(getCurrentTrain, []); //初回だけ現在の全在線列車取得
useInterval(getCurrentTrain, 15000); useInterval(getCurrentTrain, 15000); //15秒毎に全在線列車取得
const getTime = (stationDiagram, station) => { const getTime = (stationDiagram, station) => {
console.log(stationDiagram);
const returnData = Object.keys(stationDiagram).map((d) => { const returnData = Object.keys(stationDiagram).map((d) => {
let a = {}; let a = {};
stationDiagram[d].split("#").forEach((data) => { stationDiagram[d].split("#").forEach((data) => {
@ -149,7 +148,9 @@ export default function LED_vision(props) {
}; };
const [trainTimeAndNumber, setTrainTimeAndNumber] = useState(null); const [trainTimeAndNumber, setTrainTimeAndNumber] = useState(null);
useEffect(() => { useEffect(() => {
//現在の駅に停車する列車から時刻を切り出してLEDベースにフォーマット
if (objectIsEmpty(stationDiagram)) return () => {}; if (objectIsEmpty(stationDiagram)) return () => {};
console.log(stationDiagram); console.log(stationDiagram);
const getTimeData = getTime(stationDiagram, props.station); const getTimeData = getTime(stationDiagram, props.station);
@ -184,6 +185,16 @@ export default function LED_vision(props) {
return { color: "white", name: "普通列車" }; return { color: "white", name: "普通列車" };
} }
}; };
const [selectedTrain, setSelectedTrain] = useState([]);
useEffect(() => {
if (!trainTimeAndNumber) return () => {};
if (!currentTrain) return () => {};
const data = trainTimeAndNumber
.filter((d) => currentTrain.map((m) => m.num).includes(d.train))
.filter(timeFiltering)
.filter((d) => !!finalSwitch || d.lastStation != "当駅止");
setSelectedTrain(data);
}, [trainTimeAndNumber, currentTrain]);
return ( return (
<View <View
style={{ style={{
@ -195,49 +206,17 @@ export default function LED_vision(props) {
}} }}
> >
<Header /> <Header />
{trainTimeAndNumber {selectedTrain.map((d, index) => (
? currentTrain && <EachData
trainTimeAndNumber d={d}
.filter((d) => currentTrain.map((m) => m.num).includes(d.train))
.filter(timeFiltering)
.filter((d) => !!finalSwitch || d.lastStation != "当駅止")
.map((d, index) => {
const train = customTrainDataDetector(d.train);
return (
<>
<View
style={{
alignContent: "center",
alignItems: "center",
width: "94%",
marginVertical: 5,
marginHorizontal: "3%",
backgroundColor: "#000",
flexDirection: "row",
}}
key={d.train}
>
<TrainName
train={train}
trainIDSwitch={trainIDSwitch} trainIDSwitch={trainIDSwitch}
d={d} trainDescriptionSwitch={trainDescriptionSwitch}
getTrainType={getTrainType(train.type)}
/>
<LastStation d={d} />
<DependTime d={d} />
<StatusAndDelay
currentTrain={currentTrain}
d={d}
props={props} props={props}
currentTrain={currentTrain}
getTrainType={getTrainType}
customTrainDataDetector={customTrainDataDetector}
/> />
</View> ))}
{trainDescriptionSwitch && !!train.info && (
<Description train={train} key={d.train + "Description"} />
)}
</>
);
})
: null}
<Footer <Footer
trainIDSwitch={trainIDSwitch} trainIDSwitch={trainIDSwitch}
setTrainIDSwitch={setTrainIDSwitch} setTrainIDSwitch={setTrainIDSwitch}
@ -325,6 +304,44 @@ const Footer = ({
); );
}; };
const EachData = ({
d,
trainIDSwitch,
trainDescriptionSwitch,
props,
currentTrain,
getTrainType,
customTrainDataDetector,
}) => {
const train = customTrainDataDetector(d.train);
return (
<>
<View
style={{
alignContent: "center",
alignItems: "center",
width: "94%",
marginVertical: 5,
marginHorizontal: "3%",
backgroundColor: "#000",
flexDirection: "row",
}}
>
<TrainName
train={train}
trainIDSwitch={trainIDSwitch}
d={d}
getTrainType={getTrainType(train.type)}
/>
<LastStation d={d} />
<DependTime d={d} />
<StatusAndDelay currentTrain={currentTrain} d={d} props={props} />
</View>
{trainDescriptionSwitch && !!train.info && <Description train={train} />}
</>
);
};
const TrainName = ({ train, trainIDSwitch, d, getTrainType }) => { const TrainName = ({ train, trainIDSwitch, d, getTrainType }) => {
const { trainName, trainNumDistance } = train; const { trainName, trainNumDistance } = train;
let TrainNumber = ""; let TrainNumber = "";
@ -395,7 +412,6 @@ const StatusAndDelay = ({ currentTrain, d, props }) => {
setStatus("発車前"); setStatus("発車前");
break; break;
} }
case isNaN(delay): case isNaN(delay):
setStatus(delay); setStatus(delay);
break; break;

View File

@ -39,6 +39,7 @@ export default function Sign(props) {
}, [currentStation]); }, [currentStation]);
useEffect(() => { useEffect(() => {
if (!currentStation[nexPrePosition]) return () => {};
LayoutAnimation.easeInEaseOut(); LayoutAnimation.easeInEaseOut();
getPreNextStation(currentStation[nexPrePosition]); getPreNextStation(currentStation[nexPrePosition]);
}, [nexPrePosition]); }, [nexPrePosition]);