暫定的に投稿機能新型を実装

This commit is contained in:
harukin-expo-dev-env 2025-08-12 16:47:35 +00:00
parent 5d97ab2f87
commit d412941635
6 changed files with 114 additions and 57 deletions

View File

@ -26,19 +26,27 @@ export const TrainDataView = ({
const [mapsStationData, setMapsStationData] = useState(undefined);
const [platformNumber, setPlatformNumber] = useState();
const [lineNumber, setLineNumber] = useState();
const [platformDescription, setPlatformDescription] = useState();
useEffect(() => {
//currentTrainData.Pos = "鴨川~端岡"; //test
if (!currentTrainData) return;
fetch(
`https://n8n.haruk.in/webhook/JR-shikoku-PosID?PosNum=${currentTrainData?.PosNum}&Line=${currentTrainData?.Line}`
`https://n8n.haruk.in/webhook/JR-shikoku-PosID-v3?PosId=${currentTrainData?.PosNum}&lineName=${currentTrainData?.Line}&StationName=${currentTrainData?.Pos}`
)
.then((res) => res.json())
.then((data) => {
setPlatformNumber(data?.type == "Station" ? data?.platform : undefined);
setPlatformDescription(
data?.type == "Station" ? data?.description : undefined
);
if (!data) return;
const {type, stationName, lineNumber, platformNumber, position, description} = data;
if (type == "Station") {
setLineNumber(lineNumber);
setPlatformNumber(platformNumber);
setPlatformDescription(description);
} else {
setLineNumber(undefined);
setPlatformNumber(undefined);
setPlatformDescription(undefined);
}
});
}, [currentTrainData]);
useEffect(() => {
@ -50,7 +58,8 @@ export const TrainDataView = ({
const { from, to, Pos } = PosData;
if (isBetween === true) return `${from}${to}`;
if (Pos == "") return "";
return `${Pos}${platformNumber ? ` ${platformNumber}番線` : ""}`;
if (platformNumber) return `${Pos} ${platformNumber}番乗り場`;
if (lineNumber) return `${Pos} ${lineNumber}番線`;
};
const [dialog, setDialog] = useState(false);
const [deleteDialog, setDeleteDialog] = useState(false);
@ -58,6 +67,7 @@ export const TrainDataView = ({
const [descInput, setDescInput] = useState("");
const [stationInput, setStationInput] = useState("");
const [stationNumberInput, setStationNumberInput] = useState("");
const [lineInput, setLineInput] = useState("");
return (
<>
<TrainPositionDataPush
@ -70,8 +80,10 @@ export const TrainDataView = ({
descInput={descInput}
setPosInput={setPosInput}
setDescInput={setDescInput}
lineInput={lineInput}
setLineInput={setLineInput}
station={{
Station_JP: trainPositionText(currentTrainData),
Station_JP: currentTrainData?.Pos,
StationNumber: currentPosition[0],
}}
/>
@ -100,6 +112,7 @@ export const TrainDataView = ({
getStationID(currentTrainData?.Pos, stationList)
);
setPosInput(platformNumber?.toString() || "");
setLineInput(lineNumber?.toString() || "");
setDeleteDialog(true);
} else {
setStationInput(Pos.Pos);
@ -108,6 +121,7 @@ export const TrainDataView = ({
);
setDescInput(platformDescription || "");
setPosInput(platformNumber?.toString() || "");
setLineInput(lineNumber?.toString() || "");
setDialog(true);
}
}}

View File

@ -50,45 +50,62 @@ export const HeaderText: FC<Props> = ({
const { expoPushToken } = useNotification();
// 列車名、種別、フォントの取得
const [typeName, trainName, fontAvailable, isOneMan, infogram, isEdit] =
useMemo(() => {
const { type, trainName, trainNumDistance, infogram, isEdit } =
customTrainDataDetector(trainNum, allCustomTrainData);
const [typeString, fontAvailable, isOneMan] = getStringConfig(
type,
trainNum
);
switch (true) {
case trainName !== "":
// 特急の場合は、列車名を取得
// 列番対称データがある場合はそれから列車番号を取得
return [
typeString,
trainName +
(trainNumDistance !== null
? ` ${parseInt(trainNum) - trainNumDistance}`
: ""),
fontAvailable,
isOneMan,
infogram,
isEdit,
];
case trainData[trainData.length - 1] === undefined:
return [typeString, "", fontAvailable, isOneMan, infogram, isEdit];
default:
// 行先がある場合は、行先を取得
return [
typeString,
migrateTrainName(
trainData[trainData.length - 1].split(",")[0] + "行き"
),
fontAvailable,
isOneMan,
infogram,
isEdit
];
}
}, [trainData]);
const [
typeName,
trainName,
fontAvailable,
isOneMan,
infogram,
isEdit,
uwasa,
] = useMemo(() => {
const { type, trainName, trainNumDistance, infogram, isEdit, uwasa } =
customTrainDataDetector(trainNum, allCustomTrainData);
const [typeString, fontAvailable, isOneMan] = getStringConfig(
type,
trainNum
);
switch (true) {
case trainName !== "":
// 特急の場合は、列車名を取得
// 列番対称データがある場合はそれから列車番号を取得
return [
typeString,
trainName +
(trainNumDistance !== null
? ` ${parseInt(trainNum) - trainNumDistance}`
: ""),
fontAvailable,
isOneMan,
infogram,
isEdit,
uwasa,
];
case trainData[trainData.length - 1] === undefined:
return [
typeString,
"",
fontAvailable,
isOneMan,
infogram,
isEdit,
uwasa,
];
default:
// 行先がある場合は、行先を取得
return [
typeString,
migrateTrainName(
trainData[trainData.length - 1].split(",")[0] + "行き"
),
fontAvailable,
isOneMan,
infogram,
isEdit,
uwasa,
];
}
}, [trainData]);
return (
<View
@ -121,7 +138,19 @@ export const HeaderText: FC<Props> = ({
{isOneMan && <OneManText />}
<Text style={textConfig}>{trainName}</Text>
<InfogramText infogram={infogram} />
{isEdit &&<FontAwesome name="commenting-o" size={20} color="white" style={{ marginLeft: 5 }} onPress={()=>alert("このアイコン、列車データはコミュニティによってリアルタイム追加されています。")} />}
{isEdit && (
<FontAwesome
name="commenting-o"
size={20}
color="white"
style={{ marginLeft: 5 }}
onPress={() =>
alert(
`[このアイコン、列車データはコミュニティによってリアルタイム追加されています。]\n↓投稿者メモ↓\n${uwasa}`
)
}
/>
)}
</TouchableOpacity>
<View style={{ flex: 1 }} />

View File

@ -121,6 +121,7 @@ export const EachData: FC<Props> = (props) => {
const [dialog, setDialog] = useState(false);
const [deleteDialog, setDeleteDialog] = useState(false);
const [posInput, setPosInput] = useState("");
const [lineInput, setLineInput] = useState("");
const [descInput, setDescInput] = useState("");
const [stationInput, setStationInput] = useState("");
const [stationNumberInput, setStationNumberInput] = useState("");
@ -164,6 +165,8 @@ export const EachData: FC<Props> = (props) => {
setPosInput,
setDescInput,
station,
lineInput,
setLineInput,
}}
/>
<TouchableOpacity

View File

@ -49,7 +49,7 @@ export const TrainPosition: FC<Props> = ({
useEffect(() => {
fetch(
`https://n8n.haruk.in/webhook/JR-shikoku-PosID?PosNum=${currentTrainData?.PosNum}&Line=${currentTrainData?.Line}`
`https://n8n.haruk.in/webhook/JR-shikoku-PosID-v3?PosId=${currentTrainData?.PosNum}&lineName=${currentTrainData?.Line}&StationName=${currentTrainData?.Pos}`
)
.then((res) => res.json())
.then((data: { type: string; platform: number; description: string }) => {

View File

@ -17,7 +17,7 @@ export const TrainPositionDataDelete: FC<Props> = ({
stationNumberInput,
}) => {
const sendPlatformData = () => {
fetch(`https://n8n.haruk.in/webhook/JR-shikoku-PosID`, {
fetch(`https://n8n.haruk.in/webhook/JR-shikoku-PosID-v3`, {
method: "DELETE",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({

View File

@ -11,8 +11,10 @@ type Props = {
stationNumberInput: string;
posInput: string;
descInput: string;
lineInput: string;
setPosInput: (pos: string) => void;
setDescInput: (desc: string) => void;
setLineInput: (line: string) => void;
station: {
Station_JP: string;
StationNumber: string;
@ -24,6 +26,8 @@ export const TrainPositionDataPush: FC<Props> = ({
currentTrainData,
stationInput,
stationNumberInput,
lineInput,
setLineInput,
posInput,
descInput,
setPosInput,
@ -31,16 +35,17 @@ export const TrainPositionDataPush: FC<Props> = ({
station,
}) => {
const sendPlatformData = () => {
fetch(`https://n8n.haruk.in/webhook/JR-shikoku-PosID`, {
fetch(`https://n8n.haruk.in/webhook/JR-shikoku-PosID-v3`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
PosId: currentTrainData?.PosNum,
lineName: currentTrainData?.Line,
PlatformNum: parseInt(posInput),
Description: descInput,
StationName: station.Station_JP,
StationId: station.StationNumber,
PosId: currentTrainData?.PosNum,//自動位置情報ID
StationId: station.StationNumber,//自動駅ID
StationName: station.Station_JP,//自動:駅名、漢字
lineName: currentTrainData?.Line,//自動位置情報路線ID(koutoku/yosan)
Description: descInput,//手動入力、参考情報
platformNumber: parseInt(posInput),//手動入力、乗り場表記
lineNumber: parseInt(lineInput),//手動入力、番線表記
}),
})
.then(() => {
@ -60,11 +65,17 @@ export const TrainPositionDataPush: FC<Props> = ({
<Text>: {stationInput}</Text>
<Text>: {stationNumberInput}</Text>
<Input
label="番線"
label="乗り場"
inputMode="numeric"
value={posInput}
onChangeText={setPosInput}
/>
<Input
label="番線"
inputMode="numeric"
value={lineInput}
onChangeText={setLineInput}
/>
<Input
label="参考情報"
inputMode="text"