{"version":3,"sources":["actions/userAction.js","common/requestClient.js","components/buttons/BasicButton.js","components/buttons/GreenButton.js","components/Input.js","components/AlertDialog.js","workers/notificationWorker.js","workers/NotificationWorkerControl.js","workers/createWorker.js","common/LocalStorageContext.js","common/PersistentContext.js","common/NotificationConfig.js","workers/NotificationAgent.js","common/NotifiedSchedules.js","common/DateTimeUtil.js","common/ArrivedVehicles.js","common/NotificationView.js","common/AreaMap.js","common/AuthUtil.js","pages/Login.js","conf/urlInfo.js","actions/systemAction.js","components/PointSelectDialog.js","components/icons/BasicIcon.js","components/ConfirmDialog.js","components/Navigation.js","components/icons/ArrowIconForListItem.js","pages/reservations/ReservationListPage.js","components/BackButton.js","components/icons/VehicleIcon.js","components/icons/EnableArrowIcon.js","components/icons/DisableArrowIcon.js","components/TargetPoints/TargetPoint.js","components/TargetPoints/EnableTargetPoint.js","components/TargetPoints/DisableTargetPoint.js","pages/reservations/ReservationCancelConfirmPage.js","components/Loading.js","components/icons/SuccessIcon.js","components/buttons/WhiteButton.js","components/icons/CautionIcon.js","components/SimpleMsges.js","pages/reservations/ReservationCancelCompletePage.js","pages/reservations/ReservationPage.js","pages/schedules/SchedulesPage.js","components/icons/CautionIconColorRed.js","pages/vehicle_run/VehicleRunConfirmPage.js","pages/vehicle_run/VehicleRunCompletePage.js","pages/schedules/SchedulePage.js","pages/TopPage.js","components/VehicleSelectDialog.js","components/QuestionMsgDialog.js","components/icons/PullDownIcon.js","components/VehiclePulldown.js","components/icons/QuestionIcon.js","components/Question.js","common/AreaMapUtil.js","pages/return/ReturnSelectVehiclePage.js","pages/return/ReturnConfirmPage.js","pages/return/ReturnCompletePage.js","pages/return/ReturnPage.js","components/DestinationList.js","pages/call/CallSelectDestinationPage.js","pages/call/CallConfirmPage.js","pages/call/CallCompletePage.js","pages/call/CallPage.js","pages/send/SendSelectVehiclePage.js","pages/send/SendSelectDestinationPage.js","pages/send/SendConfirmPage.js","pages/send/SendCompletePage.js","pages/send/SendPage.js","pages/OneTripPage.js","components/icons/HomeIcon.js","pages/settings/home/SettingsVehicleListPage.js","pages/settings/home/SettingsSelectHomePage.js","pages/settings/home/SettingsHomeConfirmPage.js","pages/settings/home/SettingsHomeCompletePage.js","pages/settings/SettingsMenuPage.js","pages/settings/admin_password/SettingsAdminPasswordCompletePage.js","components/InputPassword.js","pages/settings/admin_password/SettingsAdminPasswordInputPage.js","pages/settings/admin_password/SettingsAdminPasswordPage.js","pages/settings/password/SettingsPasswordCompletePage.js","pages/settings/password/SettingsPasswordInputPage.js","pages/settings/password/SettingsPasswordPage.js","pages/settings/sync/SettingsSyncVehiclesInputPage.js","pages/settings/sync/SettingsSyncVehiclesCompletePage.js","pages/settings/sync/SettingsSyncVehiclesPage.js","components/InputRange.js","components/notifications/NotificationSwitch.js","components/notifications/NotificationVolumeControl.js","components/notifications/NotificationVolumeMute.js","components/notifications/NotificationVolumeMax.js","common/AudioPlayer.js","components/notifications/NotificationForVehicles.js","pages/settings/notification/SettingsNotificationPage.js","pages/settings/SettingsPage.js","components/notifications/getNotificationDetail.js","components/icons/LoadingIcon.js","components/icons/ArrivalIcon.js","components/icons/DepartureIcon.js","components/notifications/NotificationDetailDialog.js","components/notifications/NotificationPresentation.js","pages/PrivatePage.js","pages/Error.js","App.js","reportWebVitals.js","reducers/userReducer.js","reducers/systemReducer.js","reducers/reducer.js","index.js"],"names":["IS_LOGGED_IN","ENABLE_RUN_VIEW","updateLoginStatus","dispatch","jwt","localStorage","getItem","type","is_LoggedIn","updateRunViewStatus","auth","enableRunView","request","url","data","method","process","itemName","headers","fetch","body","JSON","stringify","RequestClient","get","post","patch","BasicButton","props","className","onClick","buttonName","GreenButton","Input","title","id","autoComplete","onChange","handleChange","placeholder","AlertDialog","children","open","setOpen","Dialog","onClose","DialogTitle","DialogContent","DialogActions","variant","intervalId","undefined","intervalCallback","point_id","departure","arrival","requestURL","encodeURIComponent","Request","then","response","status","json","console","debug","postMessage","msg","schedules","Object","keys","length","catch","reason","self","addEventListener","ev","action","e","Error","setInterval","interval","start","clearInterval","stop","err","message","workerControl","ConsecutiveErrors","limit","this","push","stopListener","consecutiveErrors","clear","incr","isOverLimit","defaultListener","NotificationWorkerControl","workerFunc","code","toString","substring","indexOf","lastIndexOf","blob","Blob","Worker","URL","createObjectURL","createWorker","notificationWorker","isRunning","config","checkConfig","newListener","name","currentListener","removeEventListener","replaceListener","LocalStorageContext","save","parse","getName","setItem","key","value","restore","SWITCH_KEY_NAME","VOLUME_KEY_NAME","SWITCH_ARRIVAL_KEY_NAME","isDepartureOn","isArrivalOn","getByKey","update","volume","getNotificationConfig","initialize","setArrivalOff","getNotificationAgent","notificationAgent","getWorkerConfig","isAllOff","getStatus","safe_start","listener","removeListener","notifiedSchedules","foundNewKey","db","entries","val","found","forEach","newDb","currentDb","scheduleId","getNotifiedSchedules","parseISOString","s","Date","formatHourMin","d","getHours","getMinutes","arrivedVehicles","vehicle","schedule_id","now","getTime","arrived_time","arrival_time","shown","getArrivedVehicles","ICON_KEY_NAME","view","setIcon","isIcon","getNotificationView","VERSION_ID_KEY_NAME","area_map","versionId","getAreaMap","login","current_version","getVersionId","setVersionId","updateMapVersion","logout","removeItem","quit","Login","handleSubmit","bind","setAlertOpen","state","workspace_cd","password","alertOpen","alertMsg","alert","history","isOpen","setState","setAlertMsg","dispatchLogin","dispatchRunView","error","pathname","preventDefault","validation","target","breakedText","split","map","line","src","React","Component","connect","userReducer","tabInfos","getTabIndex","tabname","index","i","TAB_INDEX","POINT_ID","IS_LOADING","POINT_LIST","setTabIndex","tabIndex","setIsLoading","isLoading","CarStopList","event","handleListItemClick","pointId","PointSelectDialog","handleCancel","listItems","pointList","point","stopPropagation","BasicIcon","alt","style","width","ConfirmDialog","onConfirm","NavItem","fg","tabName","tabValue","selectedIndex","handleClick","tabindex","selected","flexGrow","getPointName","pointName","PlaceButton","dialogOpen","useState","setName","pointExist","useEffect","dispatchSetPointId","MenuIcon","Navigation","dispatchSetTabId","setLogoutOpen","onLogout","logoutOpen","getPointList","dispatchSetPointList","results","dispatchUpdateLoginStatus","paths","location","includes","tabInfo","window","innerWidth","mbNavigation","systemReducer","applyChange","setPointId","setPointList","ArrowIconForListItem","prefix","ReservationListHeader","ReservationList","reservationList","row","active","startPoint","ReservationListItem","callPoint","destinationPoint","cancelEnabled","reservation_id","ReservationListMb","ReservationItemCancelEnabled","ReservationItemCancelDisabled","pointLength","cancelButton","ReservationListPage","getReservations","reservation","mbRender","withRouter","IconSmallArrowLeft","BackButton","handleBack","VehicleIcon","EnableArrowIcon","DisableArrowIcon","TargetPoint","targetLabel","EnableTargetPoint","DisableTargetPoint","ReservationCancelConfirmPage","handleNext","handleSetApiExecFlg","ref","prefixName","dropoff_point_id","Loading","SuccessIcon","WhiteButton","CautionIcon","SuccessMsg","CautionMsg","CancelComplete","handleTop","RegistedSchedule","handleSchedules","ReservationCancelCompletePage","apiExecFlg","replace","cancelReservation","dispatchSetIsLoading","is_active","result","update_status","finally","component","ReservationPage","execFlg","exact","path","ScheduleListHeader","ScheduleList","scheduleList","Schedule","no","vehicleName","vehicle_name","callPointName","pickup_point_id","destinationPointName","vehicle_status","registerDate","register_date","handleRunView","vehicle_id","ScheduleListMb","ScheduleItemMb","date","yyyymmdd","getFullYear","getMonth","getDate","hhmm","toDoubleDigits","getStatusComponent","pointComponent","isLongName","getMbPointComponent","getStatusComponentMb","num","SchedulesPage","updateTime","getSchedules","updateSchedules","stopInterval","nowDt","time","getSeconds","CautionIconColorRed","SlideButton","backgroundSize","isMobile","posX","isMove","isMax","handleMouseUp","left","handleMouseOut","button","backgroundImage","onTouchStart","changedTouches","clientX","handleTouchStart","onTouchMove","maxWidth","parentElement","offsetWidth","newPosX","handleTouchMove","onTouchEnd","onMouseOut","onMouseDown","handleMouseDown","onMouseMove","handleMouseMove","onMouseUp","VehicleRunConfirmPage","destinationPointId","runButton","backButtonName","SucceededComponent","PreconditionFailedComponent","FailedComponent","VehicleRunCompletePage","startVehicle","goBack","SchedulePage","handleRunViewComplete","handleRunViewBack","vehicleId","Task","icon","goTo","link","TopPage","pushState","href","PullDownSelectedItem","PullDownItem","VehiclePulldownList","selectedVehicle","vehicleList","handleSelected","VehicleComponents","QuestionMsgDialog","iconPrefix","PullDownIcon","VehiclePulldown","handleOpen","VehiclePulldownMb","QuestionIcon","Question","checkAreaMapVersionId","changed_cb","error_cb","areaMapVersionIdChanged","ReturnSelectVehiclePage","openQuestion","openVehicleList","confirmOpen","handleQuestion","handleVehicleListOpen","handleVehicleListClose","handleOnChange","setConfirmOpen","onNext","getVehicles","isFirst","area_map_version_id","vehicles","home_position_id","handleSetVehicle","pullDownComponent","mbPullDown","pullDown","ReturnConfirmPage","ScheduleRegistComplete","runViewComponent","RunViewComponent","ReturnCompletePage","registSchedule","is_home","ReturnPage","List","PointList","targetPointId","columnCount","Math","floor","getListItem","CallSelectDestinationPage","reserveCount","updateReservationCount","onItemClick","CallConfirmPage","Reservation","handleReservation","schedule","plan_start_time","setMinutes","setHours","handleSchedule","CallCompletePage","registReservation","reserve_exist_flg","is_regist_check","checkScedule","CallPage","handleSetDestinationPoint","SendSelectVehiclePage","SendSelectDestinationPage","SendConfirmPage","SendCompletePage","SendPage","OneTripPage","HomeIcon","VehicleListHeader","VehicleList","Vehicle","homeName","handleSetting","VehicleListMb","VehicleMb","SettingsVehicleListPage","handleSettingsMenu","initialState","vehicleTableComponent","mbVehicleTable","vehicleTable","SettingsSelectHomePage","handleSetHomePosition","SelectedHome","SettingsHomeConfirmPage","homePositionId","initialAdminPassword","adminPassword","match","SettingComplete","handleSelectVehicle","InvalidAdminPassword","SettingsHomeCompletePage","setHome","admin_password","settingsMenu","menuName","SettingsMenuPage","menu","handleMenu","SettingsAdminPasswordCompletePage","changeAdminPassword","new_admin_password","InputPassword","handlePreview","preview","SettingsAdminPasswordInputPage","new_adminpassword_preview","adminpassword_preview","handleAdminPasswordPreview","handleNewAdminPasswordPreview","SettingsAdminPasswordPage","test","SettingsPasswordCompletePage","changePassword","new_password","SettingsPasswordInputPage","handleNewPasswordPreview","new_password_preview","admin_password_preview","SettingsPasswordPage","SettingsSyncVehiclesInputPage","SettingsSyncVehiclesCompletePage","handleSyncVehicles","SettingsSyncVehiclesPage","InputRange","min","max","step","captionHead","captionBottom","htmlFor","isNotificationOn","NotificationSwitch","NotificationVolumeControl","NotificationVolumeMute","NotificationVolumeMax","audioCtx","AudioContext","webkitAudioContext","resumeAudioContext","resume","AudioPlayer","Audio","one","next","onended","play","first","NotificationForVehicles","ntfConfig","getVolume","handleDepartureNotificationToggle","handleArrivalNotificationToggle","handleVolumeChange","handleVolumeMute","handleVolumeMax","setVolume","isOn","setArrivalOn","disableIcon","setDepartureOn","setDepartureOff","SettingsNotificationPage","SettingsPage","handleInitialState","handleInitialAdminPassword","getNotificationDetail","query","LoadingIcon","ArrivalIcon","DepartureIcon","byTime","a","b","prependArrivedVehicles","list","sort","clearOldData","concat","NoScheduleContent","msgDeparture","msgArrival","NotificationListItem","item","point_name","DepartureSchedule","ArrivalSchedule","NotificationDetailDialog","isError","errorMessage","handleClose","ok","statusText","getByKeys","startTime","keyValues","clearExceptForKeys","detail","start_time","renderSchedules","dialogTitle","createDialogTitle","NotificationPresentation","showIcon","showDialog","handleNotificationRaised","handleIconClicked","handleDialogClosed","addListener","hasOwnProperty","audioPlayer","departures","putNewKeys","enableIcon","putNewData","isTopPage","dialog","isIconRequired","renderIcon","isDialogRequired","renderDialog","PrivatePage","to","ErrorPage","toLogin","toTop","App","dispatchUpdateEnableRunViewStatus","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","combineReducers","assign","store","createStore","applyMiddleware","thunk","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.aa1ca46d.chunk.js","sourcesContent":["export const IS_LOGGED_IN = 'user/isLoggedIn';\r\nexport const ENABLE_RUN_VIEW = 'user/enableRunView';\r\n\r\nexport function updateLoginStatus(){\r\n return dispatch =>{\r\n const jwt = localStorage.getItem('eva_calls_jwt')\r\n const is_LoggedIn = jwt ? true : false;\r\n dispatch(\r\n {\r\n type : IS_LOGGED_IN,\r\n is_LoggedIn : is_LoggedIn\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function updateRunViewStatus(){\r\n return dispatch =>{\r\n const auth = localStorage.getItem('enable_run_view')\r\n const enableRunView = auth == 1 ? true : false;\r\n dispatch(\r\n {\r\n type : ENABLE_RUN_VIEW,\r\n enableRunView : enableRunView\r\n }\r\n )\r\n }\r\n}","const host = process.env.REACT_APP_URL\r\n\r\nfunction getJWT(itemName) {\r\n return localStorage.getItem(itemName)\r\n }\r\n\r\nconst request =(url,data,method) =>{\r\n url = host + url;\r\n const jwt = getJWT('eva_calls_jwt');\r\n const headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n \"Authorization\":`JWT ${jwt}`\r\n };\r\n if(method === \"GET\"){\r\n return fetch(url,{headers:headers})\r\n }else if(method === \"POST\"||method === \"PATCH\"){\r\n const body = JSON.stringify(data);\r\n return fetch(url,{method:method,headers:headers,body:body})\r\n }\r\n}\r\n\r\nconst RequestClient ={\r\n get:function(url){\r\n return request(url,null,\"GET\")\r\n },\r\n post:function(url,data){\r\n return request(url,data,\"POST\")\r\n },\r\n patch:function(url,data){\r\n return request(url,data,\"PATCH\")\r\n }\r\n}\r\nexport default RequestClient;","import './Button.css';\r\n\r\nfunction BasicButton(props) {\r\n \r\n return(\r\n
\r\n
\r\n
\r\n {props.buttonName}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default BasicButton","import BasicButton from \"./BasicButton\";\r\n\r\nfunction GreenButton(props) {\r\n return \r\n}\r\n\r\nexport default GreenButton;","import './Input.css'\r\n\r\nfunction Input(props){\r\n return(\r\n
\r\n
{props.title}
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Input","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport './AlertDialog.css'\n\nconst AlertDialog = (props) => {\n const { title, children, open, setOpen } = props;\n return (\n setOpen(false)}>\n {title}\n {children}\n \n \n \n \n );\n};\nexport default AlertDialog;","/* eslint no-restricted-globals: [\"error\"] */\n\nexport default () => {\n let intervalId = undefined;\n\n function intervalCallback(url, jwt, point_id, departure, arrival) {\n const headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n \"Authorization\": \"JWT \" + jwt\n };\n const requestURL = url + '?point_id=' + encodeURIComponent(point_id) + '&departure=' + encodeURIComponent(departure) + '&arrival=' + encodeURIComponent(arrival);\n const request = new Request(requestURL);\n fetch(request, {headers: headers})\n .then(response => {\n if (response.status === 200) {\n return response.json();\n } else {\n console.debug(\"notification-check-fetch response not ok.\", response);\n postMessage({\n msg: 'error',\n status: response.status\n });\n }\n })\n .then(data => {\n if ((data) && (data.schedules)) {\n if (Object.keys(data.schedules).length > 0) {\n postMessage({\n msg: 'schedules',\n schedules: data.schedules\n });\n }\n }\n })\n .catch((reason) => {\n console.debug(\"notification-check-fetch failed.\", reason);\n postMessage({\n msg: 'error',\n status: reason\n });\n });\n }\n\n function start(e) {\n if (intervalId !== undefined) {\n // 既に実施しているポーリングがある。\n throw new Error('Polling already running, intervalId: ' + intervalId)\n }\n intervalId = setInterval(intervalCallback, e.data.interval, e.data.url, e.data.jwt, e.data.point_id, e.data.departure, e.data.arrival);\n }\n\n function stop(e) {\n if (intervalId === undefined) {\n // 実施しているポーリングがない。\n throw new Error('No polling running.')\n }\n clearInterval(intervalId)\n intervalId = undefined;\n }\n\n self.addEventListener(\n 'message',\n function (ev) {\n console.debug(\"worker event fired\", ev.data)\n\n try {\n if (ev.data.action === 'start') {\n start(ev)\n postMessage({\n msg: 'polling started: ' + intervalId\n });\n }\n\n if (ev.data.action === 'stop') {\n stop(ev)\n postMessage({\n msg: 'polling stopped'\n });\n }\n } catch (err) {\n console.debug(err.message, ev);\n postMessage({\n msg: err.message\n });\n }\n },\n false\n );\n};\n","import createWorker from \"./createWorker\";\nimport notificationWorker from \"./notificationWorker\";\n\n/**\n * 通知ワーカーを操作するオブジェクト\n * @type {NotificationWorkerControl}\n */\nlet workerControl = undefined;\n\n/**\n * 許容するエラー数\n */\nconst CONSECUTIVE_ERRORS_NUM_LIMIT = 3;\n\n/**\n * 通知ワーカーコントロールをインスタンス化して返す。\n * シングルトンパターン\n * @returns {NotificationWorkerControl} 通知ワーカーコントロールのインスタンス\n */\nexport function getNotificationWorkerControl() {\n if (workerControl !== undefined) {\n return workerControl;\n }\n workerControl = new NotificationWorkerControl();\n return workerControl;\n}\n\n/**\n * 設定パラメータをチェックする。\n * @param config {{interval: number|null, url: string|null, jwt: string|null, point_id: number|null, departure: boolean, arrival: boolean}} 設定パラメータ\n */\nfunction checkConfig(config) {\n if (config === undefined) {\n throw new Error(\"Notification configuration object is undefined!\");\n }\n if ((config.interval === undefined) || (config.interval === null)) {\n throw new Error(\"interval required\");\n }\n if ((config.url === undefined) || (config.url === null)) {\n throw new Error(\"url required\");\n }\n if ((config.jwt === undefined) || (config.jwt === null)) {\n throw new Error(\"jwt required\");\n }\n if ((config.point_id === undefined) || (config.point_id === null)) {\n throw new Error(\"point_id required\");\n }\n if (config.departure === undefined) {\n throw new Error(\"departure required\");\n }\n if (config.arrival === undefined) {\n throw new Error(\"arrival required\");\n }\n}\n\n/**\n * ポーリングが連続してエラーだった場合、無駄なリクエストを抑制するためワーカーを停止する。\n */\nclass ConsecutiveErrors {\n // エラーリスト\n #errors;\n\n // 許容するエラー数\n #limit;\n\n /**\n * @param limit {number} 許容する最大値\n */\n constructor(limit) {\n this.#errors = [];\n this.#limit = limit;\n }\n\n clear() {\n this.#errors = [];\n }\n\n incr(e) {\n this.#errors.push(e);\n }\n\n isOverLimit() {\n return (this.#errors.length > this.#limit);\n }\n}\n\n/**\n * エラーを繰り返したらワーカーをストップするリスナー\n * @param e {MessageEvent} ワーカーからのメッセージイベント\n */\nfunction stopListener(e) {\n if (e.data.msg === undefined) {\n return;\n }\n if (e.data.msg === 'schedules') {\n consecutiveErrors.clear();\n }\n if (e.data.msg === 'error') {\n consecutiveErrors.incr(e.data);\n if (consecutiveErrors.isOverLimit()) {\n console.debug(\"consecutive errors reached the limit, stopping worker.\", consecutiveErrors);\n workerControl.stop();\n }\n }\n}\n\n/**\n * デフォルトのリスナー\n * Reactコンポーネントのイベントハンドラに置き換えられる。\n * @param e {MessageEvent} ワーカーからのメッセージイベント\n */\nfunction defaultListener(e) {\n console.debug(e.data.msg)\n}\n\n/**\n * 通知ワーカーを制御するクラス\n * ワーカーを直接操作するAPIを提供する。\n * どんな操作を行うかの判断はAPIのクライアントが行い、このクラスでは行わない。\n */\nclass NotificationWorkerControl {\n /**\n * 通知ワーカー\n * @type {Worker}\n */\n #worker = undefined;\n\n /**\n * ワーカーが実行中のときtrue\n * @type {boolean}\n */\n #isRunning = false;\n\n /**\n * ワーカーからのメッセージに対応するイベントリスナー\n * @type {EventListener}\n */\n #eventListener = undefined;\n\n constructor() {\n console.debug(\"WorkerControl initialized: \", this)\n this.#worker = createWorker(notificationWorker);\n this.#eventListener = defaultListener;\n this.#worker.addEventListener('message', defaultListener)\n this.#worker.addEventListener('message', stopListener);\n }\n\n /**\n * ワーカーの状態を取得する。\n * @returns {{isRunning: boolean}}\n */\n getStatus() {\n return {\n isRunning: this.#isRunning\n }\n }\n\n /**\n * 発進通知のポーリングを開始する。\n * @param config {{interval: number|null, url: string|null, jwt: string|null, point_id: number|null, departure: boolean, arrival: boolean}} 設定パラメータ\n */\n start(config) {\n if (this.#isRunning) {\n throw new Error(\"Worker is already running.\")\n }\n checkConfig(config);\n this.#worker.postMessage({\n 'action': 'start',\n 'interval': config.interval,\n 'url': config.url,\n 'jwt': config.jwt,\n 'point_id': config.point_id,\n 'departure': config.departure,\n 'arrival': config.arrival\n });\n consecutiveErrors.clear();\n this.#isRunning = true;\n }\n\n /**\n * 発進通知のポーリングを停止する。\n */\n stop() {\n this.#worker.postMessage({\n action: 'stop'\n });\n this.#isRunning = false;\n }\n\n /**\n * ワーカーからのメッセージイベントリスナーを置き換える。\n * Reactコンポーネントのstateハンドラに置き換えられる想定。\n *\n * 注意:\n * ワーカーの起動/停止とリスナー紐づけ/紐付け解除は一般に関連しないことに注意する。\n * * ワーカーの起動/停止に関わらずリスナー登録/解除は可能である。\n * * ワーカーの起動中であっても、Reactコンポーネント(インスタンス)の生存期間によっては解除され再登録される。(componentDidMount/componentWillUnmount)\n * すなわち、ワーカーを停止する際にリスナーを解除してはならないし、ワーカーを起動する際にリスナー登録しなければならない訳ではない。\n * removeListener() も参照。\n * @param newListener {EventListener} メッセージイベントハンドラ\n */\n replaceListener(newListener) {\n console.debug(\"listener replaced with: \" + newListener.name)\n const currentListener = this.#eventListener;\n this.#worker.removeEventListener('message', currentListener);\n this.#eventListener = newListener;\n this.#worker.addEventListener('message', newListener);\n }\n\n /**\n * ワーカーからのメッセージイベントリスナーをデフォルトのリスナーに置き換える。\n * Reactコンポーネントのstateハンドラが削除される時(componentWillUnmountが呼び出された時)に必要。\n * replaceListener() のコメントも参照。\n */\n removeListener() {\n this.replaceListener(defaultListener);\n }\n}\n\n/**\n * 連続エラーを管理するオブジェクト\n */\nconst consecutiveErrors = new ConsecutiveErrors(CONSECUTIVE_ERRORS_NUM_LIMIT);\n","export default function createWorker(workerFunc) {\n let code = workerFunc.toString();\n code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'));\n\n const blob = new Blob([code], { type: 'application/javascript' });\n return new Worker(URL.createObjectURL(blob));\n}\n","/**\n * LocalStorageContext class\n * 保存するデータはPlainオブジェクトを想定\n */\nimport PersistentContext from \"./PersistentContext\";\n\nclass LocalStorageContext extends PersistentContext {\n constructor(name) {\n super(name);\n }\n\n initialize() {\n this.save({})\n }\n\n restore() {\n return JSON.parse(localStorage.getItem(this.getName()))\n }\n\n save(data) {\n localStorage.setItem(this.getName(), JSON.stringify(data))\n }\n\n update(key, value) {\n const data = this.restore();\n data[key] = value;\n this.save(data);\n }\n\n getByKey(key) {\n const data = this.restore();\n return data[key];\n }\n}\n\nexport default LocalStorageContext\n","/**\n * PersistentContext abstract class\n */\nclass PersistentContext {\n #name;\n #data;\n\n constructor(name) {\n this.#name = name\n this.#data = {}\n }\n\n getName() {\n return this.#name\n }\n\n initialize() {\n this.#data = {}\n }\n\n restore() {\n return this.#data\n }\n\n save(data) {\n this.#data = data\n }\n}\n\nexport default PersistentContext\n","import LocalStorageContext from \"./LocalStorageContext\";\n\nconst NOTIFICATION_INIT_VALUE = false;\nconst NOTIFICATION_INIT_VOLUME = 20;\nconst NOTIFICATION_ARRIVAL_INIT_VALUE = false;\n\nconst SWITCH_KEY_NAME = \"ntfOn\";\nconst VOLUME_KEY_NAME = \"ntfVolume\";\nconst SWITCH_ARRIVAL_KEY_NAME = \"ntfArrivalOn\";\n\nclass NotificationConfig extends LocalStorageContext {\n constructor() {\n super(\"ntf_config\");\n }\n\n initialize() {\n const data = {\n [SWITCH_KEY_NAME]: NOTIFICATION_INIT_VALUE,\n [SWITCH_ARRIVAL_KEY_NAME]: NOTIFICATION_ARRIVAL_INIT_VALUE,\n [VOLUME_KEY_NAME]: NOTIFICATION_INIT_VOLUME,\n }\n this.save(data);\n }\n\n isAllOff() {\n return (!this.isDepartureOn()) && (!this.isArrivalOn());\n }\n\n isAnyOn() {\n return (this.isDepartureOn()) || (this.isArrivalOn());\n }\n\n isDepartureOn() {\n return this.getByKey(SWITCH_KEY_NAME);\n }\n\n isArrivalOn() {\n return this.getByKey(SWITCH_ARRIVAL_KEY_NAME);\n }\n\n getVolume() {\n return this.getByKey(VOLUME_KEY_NAME);\n }\n\n setDepartureOn() {\n this.update(SWITCH_KEY_NAME, true);\n }\n\n setDepartureOff() {\n this.update(SWITCH_KEY_NAME, false);\n }\n\n setArrivalOn() {\n this.update(SWITCH_ARRIVAL_KEY_NAME, true);\n }\n\n setArrivalOff() {\n this.update(SWITCH_ARRIVAL_KEY_NAME, false);\n }\n\n setVolume(volume) {\n this.update(VOLUME_KEY_NAME, volume);\n }\n}\n\nconst config = new NotificationConfig();\n\n// ロードされた時点でストレージに初期化データを保存する。\nif (config.restore() === null) {\n config.initialize();\n}\n// 通知機能リリース後、到着通知リリース前に使っていた場合、到着通知ON/OFF設定がundefinedになるのでfalseで保存する。\nif (config.isArrivalOn() === undefined) {\n config.setArrivalOff();\n}\n\nfunction getNotificationConfig() {\n return config;\n}\n\nexport {getNotificationConfig, SWITCH_KEY_NAME, VOLUME_KEY_NAME, SWITCH_ARRIVAL_KEY_NAME}\n","/**\n * 発進通知を開始/停止する。\n */\nimport {getNotificationWorkerControl} from \"./NotificationWorkerControl\";\nimport {getNotificationConfig} from \"../common/NotificationConfig\";\n\n/**\n * ポーリング間隔\n * @type {number}\n */\nconst POLLING_INTERVAL = 20000;\n\n/**\n * ワーカー制御オブジェクト\n * @type {NotificationWorkerControl}\n */\nconst workerControl = getNotificationWorkerControl();\n\n/**\n * 通知エージェントを取得する。\n * @returns {NotificationAgent}\n */\nfunction getNotificationAgent() {\n return notificationAgent;\n}\n\n/**\n * ワーカー設定を返す。\n * @return config {{interval: number, url: string, jwt: string, point_id: number, departure: boolean, arrival: boolean}} 設定パラメータ\n */\nfunction getWorkerConfig() {\n return {\n 'interval': POLLING_INTERVAL,\n 'url': process.env.REACT_APP_URL + '/api/notification/check',\n 'jwt': localStorage.getItem('eva_calls_jwt'),\n 'point_id': localStorage.getItem('point_id'),\n 'departure': getNotificationConfig().isDepartureOn() ? 'true' : 'false',\n 'arrival': getNotificationConfig().isArrivalOn() ? 'true' : 'false',\n }\n}\n\n/**\n * Reactアプリケーション上で発進通知機能のワーカー起動/停止操作のインタフェースとなるラッパークラス。\n * ワーカーに関するクラスは、他に notificationWorker (ワーカーそのもの)や NotificationWorkerControl\n * (ワーカーを制御)するクラスがあるが、それらはReactアプリケーションで直接使わず、このクラスを介して使うことにする。\n * このクラスが提供するインタフェースによって、Reactアプリケーションからはワーカー制御をこのクラスに任せることができるようにすることが目的。\n * このクラスのオブジェクトはReactアプリケーションでただ一つとし、必ず getNotificationAgent() によってアクセスする。\n */\nclass NotificationAgent {\n\n /**\n * 現在のワーカー設定。\n */\n #currentConfig;\n\n constructor() {\n console.debug(\"NotificationAgent initialized.\", this);\n this.#currentConfig = null;\n }\n\n /**\n * 指定されたワーカー設定でワーカー処理を起動する。\n * WorkerControl.start(config) へ処理を渡す前に設定パラメータをチェックしている。\n * WorkerControl.start(config) では例外は発生しないようにする。\n * しかし、もしWorkerControl内で例外が発生した場合でもデバッグログとする。\n * ブラウザでエラーログとして出力しても打つ手がないため。\n * @param config {{}} ワーカー設定\n */\n safe_start(config) {\n if (config.point_id == null) {\n console.debug(\"Notification agent cannot start worker since point_id is null.\");\n return;\n }\n if (config.jwt == null) {\n console.debug(\"Notification agent cannot start worker since jwt is null.\");\n return;\n }\n try {\n workerControl.start(config);\n this.#currentConfig = config;\n } catch (e) {\n console.debug(\"Notification agent cannot start worker since: \" + e.message);\n }\n }\n\n /**\n * ログインした際に呼び出す。\n */\n start() {\n console.debug(\"Notification agent start\")\n const notificationConfig = getNotificationConfig();\n\n // 通知設定OFFのとき\n if (notificationConfig.isAllOff()) {\n return;\n }\n\n // 発進通知設定ONのとき\n // 通知ワーカーが起動していないとき\n if (!workerControl.getStatus().isRunning) {\n const config = getWorkerConfig();\n this.safe_start(config);\n }\n }\n\n /**\n * 以下の際に呼び出す。\n * * 通知設定On/Offを変更した時\n * * 停車場を変更した時\n */\n applyChange() {\n console.debug(\"Notification agent apply-change\")\n const notificationConfig = getNotificationConfig();\n\n // 通知設定OFFのとき\n if (notificationConfig.isAllOff()) {\n // ワーカーが起動中なら停止する。\n if (workerControl.getStatus().isRunning) {\n workerControl.stop();\n this.#currentConfig = null;\n }\n return;\n }\n\n // (発進 and/or 到着)通知設定ONのとき\n\n // 通知ワーカーが起動していない場合は起動する。\n if (!workerControl.getStatus().isRunning) {\n this.safe_start(getWorkerConfig());\n return;\n }\n\n // 通知ONかつ通知ワーカーが起動中のとき\n const config = getWorkerConfig();\n // 発進通知ON/OFF、到着通知ON/OFF、停車場のいずれも変更していない場合は何もしない。\n if ((config.point_id === this.#currentConfig.point_id)\n && (config.departure === this.#currentConfig.departure)\n && (config.arrival === this.#currentConfig.arrival)) {\n return;\n }\n // 発進通知ON/OFF、到着通知ON/OFF、停車場のいずれかを変更した場合は再起動する。\n workerControl.stop();\n this.safe_start(config);\n }\n\n /**\n * 通知機能を停止する。\n * ログアウトの際に呼び出す。\n */\n quit() {\n console.debug(\"Notification agent quit\")\n if (workerControl.getStatus().isRunning) {\n workerControl.stop();\n this.#currentConfig = null;\n }\n }\n\n /**\n * ワーカーのメッセージイベントハンドラを追加する。\n * @param listener {EventListener} ワーカーのメッセージイベントハンドラ\n */\n addListener(listener) {\n workerControl.replaceListener(listener);\n }\n\n /**\n * ワーカーのメッセージイベントハンドラを削除する。(実際はデフォルトのハンドラに置き換わる。)\n */\n removeListener() {\n workerControl.removeListener();\n }\n}\n\n/**\n * 通知エージェント\n * @type {NotificationAgent}\n */\nconst notificationAgent = new NotificationAgent();\n\nexport {getNotificationAgent}\n","import LocalStorageContext from \"./LocalStorageContext\";\n\n/**\n * 通知された発進通知のスケジュールIDと発進時刻を管理する。\n * FMSスケジュールIDをキー、発進時刻を値とするハッシュテーブル。\n */\nclass NotifiedSchedules extends LocalStorageContext {\n constructor() {\n super(\"notified_schedules\");\n }\n\n /**\n * 受け取った通知スケジュールがデータベースに登録されていない場合は追加する。\n * 戻り値がtrueの場合、新規通知があったことを意味する。\n * 通知詳細APIのスケジュールを受け取ることはできないことに注意する。\n * @param schedules {{}} 通知チェックAPIのスケジュール\n * @returns {boolean} 追加したエントリが1件以上あればtrue。\n */\n putNewKeys(schedules) {\n let foundNewKey = false;\n const db = this.restore();\n for (const [key, val] of Object.entries(schedules)) {\n if (db[key] === undefined) {\n db[key] = val;\n foundNewKey = true;\n }\n }\n if (foundNewKey) {\n this.save(db);\n }\n return foundNewKey;\n }\n\n /**\n * 受け取った通知スケジュールがデータベースに登録されている場合はそのキーと値のペアを返す。\n * 発進車両の詳細情報を表示する際、同じスケジュールIDならばデータベースに登録されている方の時刻を表示させるために使用する。\n * @param schedules {{}} 受け取ったスケジュール\n * @returns {{}} スケジュールIDと発進日時のペア\n */\n getByKeys(schedules) {\n let found = {};\n const db = this.restore();\n Object.keys(schedules).forEach((key) => {\n if (db[key] !== undefined) {\n found[key] = db[key];\n }\n })\n return found;\n }\n\n /**\n * 受け取った通知スケジュール以外のキーと値のペアをデータベースから削除する。\n * 通知詳細を表示した後、それ以前の古いスケジュールをデータベースから削除しデータベースのサイズを小さくするために使用する。\n * 通知詳細API戻り値のスケジュールを渡す場合は、値を通知詳細オブジェクトから発進時刻にmapしてから渡す。\n * @param schedules {{}} 受け取ったスケジュール\n */\n clearExceptForKeys(schedules) {\n // 新データベース\n const newDb = {};\n // 既存データベース\n const currentDb = this.restore();\n Object.keys(schedules).forEach((scheduleId) => {\n if (currentDb[scheduleId] !== undefined) {\n // 既存データベースにキーがある場合はそれを採用する。\n newDb[scheduleId] = currentDb[scheduleId];\n } else {\n // 既存データベースにキーがない場合は受け取ったスケジュールの方を採用する。\n newDb[scheduleId] = schedules[scheduleId];\n }\n });\n this.save(newDb);\n }\n}\n\nconst notifiedSchedules = new NotifiedSchedules();\n\n// 発進通知を使用しない場合でもロードされた時点でストレージに初期化データを保存する。\nif (notifiedSchedules.restore() === null) {\n notifiedSchedules.initialize();\n}\n\nfunction getNotifiedSchedules() {\n return notifiedSchedules;\n}\n\nexport {getNotifiedSchedules}\n","/**\n * 日時のユーティリティ\n */\n\n/**\n * ISOフォーマットの日時文字列をパースしてDateオブジェクトを返す。\n * @param s ISOフォーマット文字列\n * @returns {Date}\n */\nfunction parseISOString(s) {\n return new Date(Date.parse(s));\n}\n\n/**\n * 発進通知の日時表示用にDateオブジェクトをフォーマットする。\n * @param d {Date}\n * @returns {string} フォーマットした日時分\n */\nfunction formatDateHourMin(d) {\n return `${d.getFullYear()}年${(d.getMonth()+1).toString()}月${d.getDate().toString()}日 ${d.getHours()}時${d.getMinutes()}分`;\n}\n\n/**\n * 発進通知の日時表示用にDateオブジェクトをフォーマットする。\n * @param d {Date}\n * @returns {string} フォーマットした日時分\n */\nfunction formatHourMin(d) {\n return `${d.getHours()}時${d.getMinutes()}分`;\n}\n\nexport {parseISOString, formatDateHourMin, formatHourMin}\n","import LocalStorageContext from \"./LocalStorageContext\";\nimport {parseISOString} from \"./DateTimeUtil\";\n\nconst ARRIVED_TIME_TOO_OLD_SEC = 25.0;\n\n/**\n * 通知された到着通知のスケジュールIDと車両情報、到着時刻を管理する。\n * FMSスケジュールIDをキー、到着車両、到着時刻等を含むオブジェクトを値とするハッシュテーブル。\n */\nclass ArrivedVehicles extends LocalStorageContext {\n constructor() {\n super(\"arrived_vehicles\");\n }\n\n /**\n * 受け取った車両情報がデータベースに登録されていない場合は追加する。\n * 戻り値がtrueの場合、新規通知があったことを意味する。\n * @param vehicle {{schedule_id: string, vehicle_id: string, vehicle_name: string, arrival_time: string}} 到着した車両データ\n * @returns {boolean} 追加したエントリがあればtrue。\n */\n putNewData(vehicle) {\n const key = vehicle.schedule_id;\n if (key === undefined) {\n return false;\n }\n const db = this.restore();\n if (db[key] === undefined) {\n vehicle['shown'] = false;\n db[key] = vehicle;\n this.save(db);\n return true;\n }\n return false;\n }\n\n /**\n * 古い通知データをデータベースから削除する。\n * 通知ダイアログを表示した後、もはや通知されることのない古いデータをデータベースから削除しデータベースのサイズを小さくするために使用する。\n * 到着通知は現在日時から20秒以上前に到着した情報は到着通知不要と判断する。\n * 通知ダイアログに表示するまではこのメソッドを呼び出さないことに注意する。呼び出すと到着データを表示できなくなる。\n * 一度表示した車両情報には表示された旨のフラグ(shown)をtrueにセットする。\n */\n clearOldData() {\n // 新データベース\n const newDb = {};\n // 既存データベース\n const currentDb = this.restore();\n const now = new Date().getTime();\n Object.keys(currentDb).forEach((scheduleId) => {\n const vehicle = currentDb[scheduleId];\n const arrived_time = parseISOString(vehicle.arrival_time).getTime();\n if ((now - arrived_time) / 1000 <= ARRIVED_TIME_TOO_OLD_SEC) {\n vehicle.shown = true;\n newDb[scheduleId] = vehicle;\n }\n });\n this.save(newDb);\n }\n}\n\nconst arrivedVehicles = new ArrivedVehicles();\n\n// 到着通知を使用しない場合でもロードされた時点でストレージに初期化データを保存する。\nif (arrivedVehicles.restore() === null) {\n arrivedVehicles.initialize();\n}\n\nfunction getArrivedVehicles() {\n return arrivedVehicles;\n}\n\nexport {getArrivedVehicles}\n","import LocalStorageContext from \"./LocalStorageContext\";\n\n/**\n * 通知アイコンの表示要否を表す。\n * 値がtrueのとき、通知アイコンを表示する。\n * @type {string}\n */\nconst ICON_KEY_NAME = \"icon\";\n\n/**\n * 通知のビューに関する状態を管理する。\n */\nclass NotificationView extends LocalStorageContext {\n constructor() {\n super(\"ntf_view\");\n }\n\n initialize() {\n const data = {\n [ICON_KEY_NAME]: false,\n }\n this.save(data);\n }\n\n /**\n * アイコン表示要否を判定する。\n * @returns {boolean} trueのときアイコン表示する。\n */\n isIcon() {\n return this.getByKey(ICON_KEY_NAME);\n }\n\n /**\n * アイコンを非表示状態にする。\n */\n disableIcon() {\n this.setIcon(false);\n }\n\n /**\n * アイコンを表示状態にする。\n */\n enableIcon() {\n this.setIcon(true);\n }\n\n /**\n * アイコン表示要否を設定する。\n * @param isIcon {boolean} アイコン表示のときtrue。\n */\n setIcon(isIcon) {\n this.update(ICON_KEY_NAME, isIcon);\n }\n}\n\nconst view = new NotificationView();\n\n// ロードされた時点でストレージに初期化データを保存する。\nif (view.restore() === null) {\n view.initialize();\n}\n\nfunction getNotificationView() {\n return view;\n}\n\nexport {getNotificationView}\n","import LocalStorageContext from \"./LocalStorageContext\";\n\n// area_map_version_idの値を設定するキー\nconst VERSION_ID_KEY_NAME = \"version_id\";\n\n// area_map_version_idが設定されていない時の初期値\nconst VERSION_ID_INIT_VALUE = null;\n\nclass AreaMap extends LocalStorageContext {\n constructor() {\n super(\"area_map\");\n }\n\n initialize() {\n const data = {\n [VERSION_ID_KEY_NAME]: VERSION_ID_INIT_VALUE,\n }\n this.save(data);\n }\n\n getVersionId() {\n return this.getByKey(VERSION_ID_KEY_NAME);\n }\n\n setVersionId(versionId) {\n this.update(VERSION_ID_KEY_NAME, versionId);\n }\n}\n\nconst area_map = new AreaMap();\n\n// ロードされた時点でストレージに初期化データを保存する。\nif (area_map.restore() === null) {\n area_map.initialize();\n}\n\nfunction getAreaMap() {\n return area_map;\n}\n\nexport {getAreaMap}\n","/**\n * ログイン/ログアウトの関数\n */\nimport {getNotificationAgent} from \"../workers/NotificationAgent\";\nimport {getNotifiedSchedules} from \"./NotifiedSchedules\";\nimport {getArrivedVehicles} from \"./ArrivedVehicles\";\nimport {getNotificationView} from \"./NotificationView\";\nimport {getAreaMap} from \"./AreaMap\";\n\n/**\n * ローカルストレージのエリアマップバージョンIDが変わっていたら更新する。\n * エリアマップバージョンIDが未設定の場合は設定する。\n * @param data ログインAPIのレスポンスデータ\n * @returns {boolean} エリアマップバージョンIDが更新されていた場合は true を、それ以外の場合は false を返す。\n */\nconst updateMapVersion = (data) => {\n const area_map = getAreaMap();\n const current_version = area_map.getVersionId();\n if (current_version === null) {\n area_map.setVersionId(data[\"area_map_version_id\"]);\n return false;\n }\n if (current_version !== data[\"area_map_version_id\"]) {\n area_map.setVersionId(data[\"area_map_version_id\"]);\n return true;\n }\n return false;\n}\n\n/**\n * ログイン処理\n * @param data ログインAPIのレスポンスデータ\n */\nconst login = (data) => {\n localStorage.setItem(\"eva_calls_jwt\", data[\"token\"]);\n localStorage.setItem(\"enable_run_view\", data[\"is_allowed_start_vehicle\"]);\n if (updateMapVersion(data)) {\n localStorage.setItem(\"point_id\", \"-1\");\n }\n getNotifiedSchedules().initialize();\n getArrivedVehicles().initialize();\n getNotificationView().initialize();\n}\n\n/**\n * ログアウト処理\n */\nconst logout = () => {\n localStorage.removeItem(\"eva_calls_jwt\")\n localStorage.removeItem(\"enable_run_view\")\n getNotificationAgent().quit();\n}\n\nexport {login, logout}\n","import React from 'react';\r\nimport RequestClient from \"../common/requestClient.js\"\r\nimport {updateLoginStatus, updateRunViewStatus} from '../actions/userAction';\r\nimport {connect} from 'react-redux';\r\nimport \"./Login.css\"\r\nimport GreenButton from '../components/buttons/GreenButton.js';\r\nimport Input from '../components/Input.js';\r\nimport AlertDialog from '../components/AlertDialog.js';\r\nimport {getNotificationAgent} from \"../workers/NotificationAgent\";\r\nimport {login} from \"../common/AuthUtil\";\r\n\r\nclass Login extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.handleSubmit = this.handleSubmit.bind(this)\r\n this.handleChange = this.handleChange.bind(this)\r\n this.setAlertOpen = this.setAlertOpen.bind(this)\r\n this.state = {\r\n workspace_cd: \"\",\r\n password: \"\",\r\n alertOpen: false,\r\n alertMsg: \"\",\r\n }\r\n if (this.props.is_LoggedIn) {\r\n alert(\"すでにログイン済みです\")\r\n this.props.history.push(\"/\")\r\n } else {\r\n getNotificationAgent().quit();\r\n }\r\n }\r\n\r\n setAlertOpen(isOpen) {\r\n this.setState({alertOpen: isOpen});\r\n }\r\n\r\n setAlertMsg(msg) {\r\n this.setState({alertMsg: msg});\r\n }\r\n\r\n login() {\r\n const url = \"/api/auth\";\r\n RequestClient.post(url, this.state)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else {\r\n this.setAlertMsg(`ステータスコード:${response.status} \\n認証に失敗しました`)\r\n this.setAlertOpen(true)\r\n }\r\n })\r\n .then(data => {\r\n if (data) {\r\n login(data);\r\n this.props.dispatchLogin()\r\n this.props.dispatchRunView()\r\n this.props.history.push(\"/\")\r\n }\r\n }).catch((error) => {\r\n this.props.history.push({pathname: \"/error\", state: {message: \"ログイン処理に失敗しました。\"}})\r\n });\r\n }\r\n\r\n handleSubmit(e) {\r\n e.preventDefault();\r\n if (this.validation()) {\r\n this.login()\r\n }\r\n }\r\n\r\n handleChange(e) {\r\n this.setState({[e.target.id]: e.target.value});\r\n }\r\n\r\n validation() {\r\n if (!this.state.workspace_cd) {\r\n this.setAlertMsg(\"ログインIDを入力してください\")\r\n this.setAlertOpen(true)\r\n return false;\r\n } else if (!this.state.password) {\r\n this.setAlertMsg(\"パスワードを入力してください\")\r\n this.setAlertOpen(true)\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n render() {\r\n const breakedText = this.state.alertMsg.split(\"\\n\").map((line, key) => {line}
);\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {breakedText}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n is_LoggedIn: state.userReducer.is_LoggedIn\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchLogin: () => dispatch(updateLoginStatus()),\r\n dispatchRunView: () => dispatch(updateRunViewStatus()),\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Login)\r\n","export const tabInfos = [\r\n {\"tabname\":\"Top\", \"tabvalue\":\"TOP\",\"path\":\"/\"},\r\n {\"tabname\":'Reservation', \"tabvalue\":\"予約一覧\",\"path\":'/reservations'},\r\n {\"tabname\":'Schedule', \"tabvalue\":\"スケジュール\",\"path\":'/schedules'},\r\n {\"tabname\":'Setting', \"tabvalue\":\"設定\",\"path\":'/settings'},\r\n]\r\n\r\nexport function getTabIndex(tabname){\r\n var index = 0\r\n for(var i= 0;i{\r\n dispatch(\r\n {\r\n type : TAB_INDEX,\r\n tabIndex : tabIndex\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function setPointId(pointId){\r\n localStorage.setItem('point_id',pointId)\r\n getNotificationAgent().applyChange();\r\n getNotifiedSchedules().initialize();\r\n getArrivedVehicles().initialize();\r\n getNotificationView().initialize();\r\n return dispatch =>{\r\n dispatch(\r\n {\r\n type : POINT_ID,\r\n pointId : pointId\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function setIsLoading(isLoading){\r\n return dispatch =>{\r\n dispatch(\r\n {\r\n type : IS_LOADING,\r\n isLoading : isLoading\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function setPointList(pointList){\r\n \r\n return dispatch =>{\r\n dispatch({\r\n type : POINT_LIST,\r\n pointList : pointList\r\n });\r\n }\r\n}","import React from 'react';\r\nimport './PointSelectDialog.css'\r\n\r\nfunction CarStopList(props) {\r\n const {children} = props\r\n return(\r\n
props.handleListItemClick(event,props.pointId)}>\r\n
\r\n
\r\n
{children}
\r\n
\r\n
\r\n
\r\n )\r\n \r\n}\r\n\r\nclass PointSelectDialog extends React.Component{\r\n\r\n constructor(props){\r\n super(props)\r\n this.handleCancel.bind(this)\r\n this.handleListItemClick.bind(this)\r\n }\r\n\r\n handleCancel = ()=>{\r\n this.props.onClose()\r\n }\r\n\r\n handleListItemClick = (event, point_id) => {\r\n this.props.onClose(point_id)\r\n }\r\n\r\n render(){\r\n if(!this.props.open){\r\n return \"\"\r\n }else{\r\n const listItems = this.props.pointList.map((point) =>{\r\n if(point[\"point_id\"]==this.props.point_id){\r\n return \"\"\r\n }else{\r\n return {point[\"name\"]}\r\n }\r\n })\r\n return(\r\n
\r\n
e.stopPropagation()}>\r\n
使用場所を選んでください
\r\n {listItems}\r\n
\r\n
\r\n )\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default PointSelectDialog","import './BasicIcon.css';\r\n\r\nfunction BasicIcon(props) {\r\n const {className, src, onClick, alt} = props\r\n return(\r\n
\r\n {alt}/\r\n
\r\n )\r\n}\r\n\r\nexport default BasicIcon","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport './ConfirmDialog.css'\n\nconst ConfirmDialog = (props) => {\n const { title, children, open, setOpen, onConfirm } = props;\n return (\n setOpen(false)}>\n {title}\n {children}\n \n \n \n \n \n );\n};\nexport default ConfirmDialog;","import React, { useEffect } from 'react';\r\nimport {tabInfos, getTabIndex} from '../conf/urlInfo'\r\nimport {setTabIndex, setPointId, setPointList} from '../actions/systemAction';\r\nimport {updateLoginStatus} from '../actions/userAction';\r\nimport { connect } from 'react-redux';\r\nimport PointSelectDialog from './PointSelectDialog';\r\nimport RequestClient from '../common/requestClient';\r\nimport './Navigation.css'\r\nimport BasicIcon from './icons/BasicIcon';\r\nimport ConfirmDialog from './ConfirmDialog';\r\nimport AlertDialog from './AlertDialog';\r\nimport {logout} from \"../common/AuthUtil\";\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n tabIndex:state.systemReducer.tabIndex,\r\n pointList:state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n isLoading:state.systemReducer.isLoading\r\n };\r\n };\r\n const mapDispatchToProps = dispatch=>({\r\n dispatchUpdateLoginStatus: () => dispatch(updateLoginStatus()),\r\n dispatchSetTabId:tabIndex=>dispatch(setTabIndex(tabIndex)),\r\n dispatchSetPointId:pointId=>dispatch(setPointId(pointId)),\r\n dispatchSetPointList:pointList=>dispatch(setPointList(pointList))\r\n })\r\n\r\nfunction NavItem(props){\r\n const {fg, tabName, tabValue, selectedIndex, handleClick} = props\r\n const tabindex = getTabIndex(tabName)\r\n const selected = tabindex==selectedIndex\r\n var flexGrow=null\r\n if(fg){\r\n flexGrow =
\r\n }\r\n return(\r\n <>\r\n {flexGrow}\r\n
handleClick(tabindex)}>\r\n
{tabValue}
\r\n
\r\n \r\n \r\n )\r\n}\r\n\r\nfunction getPointName(pointList,pointId){\r\n var pointName = \"\"\r\n for(var i=0;i{\r\n for(var i=0;i{\r\n if(pointId && pointExist(pointId) ){\r\n props.dispatchSetPointId(pointId)\r\n setName(getPointName(props.pointList,pointId))\r\n props.history.push(\"/\")\r\n }\r\n if((!pointId || !pointExist(pointId)) && props.pointId <0){\r\n props.setAlertOpen(true)\r\n }else{\r\n props.dialogOpen(false)\r\n }\r\n }\r\n\r\n useEffect(()=>{\r\n setName(getPointName(props.pointList,props.pointId))\r\n },[props.pointList,props.pointId])\r\n\r\n return(\r\n <>\r\n
\r\n
dialogOpen(true)}>\r\n \r\n
\r\n {name}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\n\r\nfunction MenuIcon(props) {\r\n return(\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nclass Navigation extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.handleClick = this.handleClick.bind(this)\r\n this.dialogOpen = this.dialogOpen.bind(this)\r\n this.setLogoutOpen = this.setLogoutOpen.bind(this)\r\n this.onLogout = this.onLogout.bind(this)\r\n this.setAlertOpen = this.setAlertOpen.bind(this)\r\n this.state = {\r\n open:false,\r\n logoutOpen:false,\r\n alertOpen:false,\r\n }\r\n }\r\n\r\n componentDidMount(){\r\n // ローカルストレージの値と同期させる。\r\n this.props.dispatchSetPointId(localStorage.getItem(\"point_id\"))\r\n this.getPointList()\r\n if(this.props.pointId < 0 ){\r\n this.setState({open:true})\r\n }\r\n }\r\n\r\n getPointList(){\r\n RequestClient.get(`/api/places`)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n }\r\n })\r\n .then(data => {\r\n if (data) {\r\n this.props.dispatchSetPointList(data.results)\r\n var open = true \r\n for(var i=0;i {\r\n if(this.props.isLoading){\r\n return\r\n }\r\n this.props.dispatchSetTabId(tabIndex);\r\n this.props.history.push({pathname:tabInfos[tabIndex][\"path\"]})\r\n };\r\n\r\n logout =()=>{\r\n if(this.props.isLoading){\r\n return\r\n }\r\n this.setLogoutOpen(true)\r\n }\r\n setLogoutOpen(isOpen){\r\n this.setState({logoutOpen:isOpen});\r\n }\r\n onLogout(){\r\n logout();\r\n this.props.dispatchUpdateLoginStatus()\r\n this.props.history.push(\"/login\")\r\n }\r\n setAlertOpen(isOpen){\r\n this.setState({alertOpen:isOpen});\r\n }\r\n\r\n mbNavigation(){\r\n const paths = this.props.location.pathname.split(\"/\") \r\n if (paths.length > 2 || paths.includes(\"call\") || paths.includes(\"send\")|| paths.includes(\"returnhome\")){\r\n return \"\"\r\n }\r\n return(\r\n
\r\n
\r\n \r\n
\r\n \r\n ログアウトしますか?\r\n 使用場所を選択してください。\r\n
\r\n
\r\n
\r\n {tabInfos.map((tabInfo, index)=>{\r\n if (index>0){\r\n return \r\n }\r\n return \r\n }\r\n )} \r\n
\r\n
\r\n
\r\n )\r\n }\r\n render(){\r\n const isMobile = window.innerWidth < 1024\r\n if(isMobile){\r\n return this.mbNavigation()\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n {tabInfos.map((tabInfo)=>\r\n \r\n )} \r\n
\r\n
\r\n
\r\n \r\n
\r\n ログアウト\r\n
\r\n ログアウトしますか?\r\n 使用場所を選択してください。\r\n
\r\n \r\n )\r\n }\r\n}\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Navigation)","import BasicIcon from './BasicIcon';\r\n\r\nfunction ArrowIconForListItem(props) {\r\n const prefix = window.innerWidth < 1024 ? \"_mb\" : \"\"\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default ArrowIconForListItem","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router';\r\nimport RequestClient from '../../common/requestClient';\r\nimport './ReservationListPage.css'\r\nimport ArrowIconForListItem from '../../components/icons/ArrowIconForListItem';\r\n\r\nfunction ReservationListHeader(props) {\r\n return(\r\n
\r\n
\r\n
No.
\r\n
呼び出す場所
\r\n
行き先
\r\n
\r\n
\r\n )\r\n}\r\nfunction ReservationList(props) {\r\n \r\n return(\r\n
\r\n {props.reservationList.map((row, index) => {\r\n const active = row[\"pickup_point_id\"] == props.startPoint\r\n return props.handleCancel(event, row)}\r\n cancelEnabled={active}\r\n />\r\n })}\r\n
\r\n\r\n )\r\n \r\n}\r\nfunction ReservationListMb(props) {\r\n return(\r\n
\r\n {props.reservationList.map((row, index) => {\r\n const active = row[\"pickup_point_id\"] == props.startPoint\r\n if(active){\r\n return props.handleCancel(event, row)}\r\n cancelEnabled={active}\r\n />\r\n }else{\r\n return props.handleCancel(event, row)}\r\n cancelEnabled={active}\r\n />\r\n }\r\n })}\r\n
\r\n )\r\n\r\n}\r\nfunction ReservationItemCancelEnabled(props) {\r\n const pointLength = props.callPoint.length>=props.destinationPoint.length ? props.callPoint.length : props.destinationPoint.length\r\n if(pointLength > 10){\r\n return(\r\n
\r\n
\r\n
{props.index + 1}
\r\n
\r\n
{props.callPoint}
\r\n
\r\n
\r\n \r\n
\r\n
{props.destinationPoint}
\r\n
\r\n
\r\n
\r\n
\r\n
キャンセル
\r\n
\r\n
\r\n )\r\n }\r\n return(\r\n
\r\n
\r\n
{props.index + 1}
\r\n
\r\n
{props.callPoint}
\r\n
\r\n \r\n
\r\n
{props.destinationPoint}
\r\n
\r\n
\r\n
\r\n
キャンセル
\r\n
\r\n
\r\n )\r\n}\r\nfunction ReservationItemCancelDisabled(props) {\r\n const pointLength = props.callPoint.length>=props.destinationPoint.length ? props.callPoint.length : props.destinationPoint.length\r\n if(pointLength > 10){\r\n console.debug(pointLength)\r\n return(
\r\n
\r\n
{props.index + 1}
\r\n
\r\n
{props.callPoint}
\r\n
\r\n
\r\n \r\n
\r\n
{props.destinationPoint}
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n \r\n return(\r\n
\r\n
\r\n
{props.index + 1}
\r\n
\r\n
{props.callPoint}
\r\n
\r\n \r\n
\r\n\r\n
{props.destinationPoint}
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\nfunction ReservationListItem(props) {\r\n const cancelButton = props.cancelEnabled ? \r\n
キャンセル
:
キャンセル
\r\n\r\n return(\r\n
\r\n
\r\n
\r\n
{props.index + 1}
\r\n
\r\n
\r\n
{props.callPoint}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{props.destinationPoint}
\r\n
\r\n
\r\n {cancelButton}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nfunction getPointName(pointList, pointId) {\r\n var pointName = \"\"\r\n for (var i = 0; i < pointList.length; i++) {\r\n if (pointList[i][\"point_id\"] == pointId) {\r\n pointName = pointList[i][\"name\"]\r\n }\r\n }\r\n return pointName\r\n}\r\n\r\nclass ReservationListPage extends React.Component{\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n reservationList: []\r\n }\r\n this.handleCancel = this.handleCancel.bind(this)\r\n }\r\n componentDidMount() {\r\n this.getReservations()\r\n }\r\n handleCancel(event, reservation) {\r\n this.props.handleCancel(reservation)\r\n }\r\n getReservations() {\r\n const url = \"/api/reservations\"\r\n RequestClient.get(url)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n this.setState({ reservationList: data.results })\r\n }\r\n }\r\n )\r\n }\r\n mbRender(){\r\n return(\r\n
\r\n \r\n
\r\n )\r\n }\r\n render(){\r\n const isMobile = window.innerWidth < 1024\r\n if(isMobile){\r\n return this.mbRender()\r\n }\r\n return(\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return {\r\n pointId: state.systemReducer.pointId,\r\n pointList: state.systemReducer.pointList,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(withRouter(ReservationListPage))","import './BackButton.css';\r\nimport BasicIcon from './icons/BasicIcon';\r\n\r\nfunction BackButton(props) {\r\n \r\n const buttonName = props.buttonName ? props.buttonName : \"戻る\"\r\n return(\r\n
\r\n \r\n
{buttonName}
\r\n
\r\n )\r\n}\r\n\r\nfunction IconSmallArrowLeft(props) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default BackButton","import BasicIcon from './BasicIcon';\r\n\r\nfunction VehicleIcon(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default VehicleIcon","import BasicIcon from './BasicIcon';\r\n\r\nfunction EnableArrowIcon(props) {\r\n const prefix = window.innerWidth < 1024 ? \"_mb\" : \"\"\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default EnableArrowIcon","import BasicIcon from './BasicIcon';\r\n\r\nfunction DisableArrowIcon(props) {\r\n const prefix = window.innerWidth < 1024 ? \"_mb\" : \"\"\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default DisableArrowIcon","import './TargetPoint.css';\n\nfunction TargetPoint(props){\n return(\n
\n
\n
\n {props.targetLabel}\n
\n
\n
\n {props.children}\n
\n
\n )\n}\n\nexport default TargetPoint","import TargetPoint from \"./TargetPoint\";\n\nfunction EnableTargetPoint(props) {\n return \n}\n\nexport default EnableTargetPoint;","import TargetPoint from \"./TargetPoint\";\n\nfunction DisableTargetPoint(props) {\n return \n}\n\nexport default DisableTargetPoint;","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './ReservationCancelConfirmPage.css';\r\nimport { withRouter } from 'react-router';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport VehicleIcon from '../../components/icons/VehicleIcon';\r\nimport EnableArrowIcon from '../../components/icons/EnableArrowIcon';\r\nimport DisableArrowIcon from '../../components/icons/DisableArrowIcon';\r\nimport EnableTargetPoint from '../../components/TargetPoints/EnableTargetPoint';\r\nimport DisableTargetPoint from '../../components/TargetPoints/DisableTargetPoint';\r\n\r\nclass ReservationCancelConfirmPage extends React.Component{\r\n\r\n constructor(props){\r\n super(props)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n }\r\n \r\n componentDidMount(){\r\n if(!Object.keys(this.props.reservation).length || this.props.pointId < 0){\r\n this.props.history.push(\"/reservations\")\r\n }\r\n }\r\n\r\n handleBack(){\r\n this.props.history.push(\"/reservations\")\r\n }\r\n\r\n handleNext(){\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/reservations/cancel/complete\", state: { ref: \"/reservations/cancel/confirm\" } })\r\n }\r\n \r\n getPointName(pointList, pointId){\r\n var pointName = \"\"\r\n for(var i=0;i以下の予約を
キャンセルしますか? : <>以下の予約をキャンセルしますか?\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
{title}
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.getPointName(this.props.pointList,this.props.pointId)}\r\n \r\n {this.getPointName(this.props.pointList,this.props.reservation.dropoff_point_id)}\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointList:state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n };\r\n };\r\nexport default connect(mapStateToProps,null)(withRouter(ReservationCancelConfirmPage));\r\n","import React from 'react';\r\nimport './Loading.css';\r\nimport VehicleIcon from './icons/VehicleIcon';\r\nfunction Loading(props){\r\n const {children} = props\r\n return(\r\n <>\r\n \r\n
\r\n {children ? children :<>車を手配しています...
画面が切り替わるまでお待ちください...}\r\n
\r\n \r\n )\r\n}\r\nexport default Loading","import BasicIcon from './BasicIcon';\r\n\r\nfunction SuccessIcon(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default SuccessIcon","import BasicButton from \"./BasicButton\";\r\n\r\nfunction WhiteButton(props) {\r\n return \r\n}\r\n\r\nexport default WhiteButton;","import BasicIcon from './BasicIcon';\r\n\r\nfunction CautionIcon(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default CautionIcon","import './SimpleMsges.css';\r\nimport SuccessIcon from './icons/SuccessIcon';\r\nimport Button from './buttons/WhiteButton';\r\nimport CautionIcon from './icons/CautionIcon';\r\n\r\nfunction SuccessMsg(props){\r\n return(\r\n <>\r\n
\r\n \r\n
{props.message}
\r\n <>{props.children}\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nfunction CautionMsg(props){\r\n return(\r\n <>\r\n
\r\n \r\n
{props.message}
\r\n <>{props.children}\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport {SuccessMsg, CautionMsg}","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './ReservationCancelCompletePage.css';\r\nimport { withRouter } from 'react-router';\r\nimport { setIsLoading } from '../../actions/systemAction';\r\nimport RequestClient from '../../common/requestClient';\r\nimport Loading from '../../components/Loading';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport {SuccessMsg,CautionMsg} from '../../components/SimpleMsges';\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_CANCEL = 1\r\nconst STATUS_REGIST_SCHEDULE = 2\r\nconst STATUS_CANCELED = 3\r\n\r\nfunction CancelComplete(props) {\r\n return(\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nfunction RegistedSchedule(props){\r\n return(\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nclass ReservationCancelCompletePage extends React.Component{\r\n \r\n constructor(props) {\r\n super(props)\r\n this.state = { status: STATUS_API_CALLING }\r\n this.handleSchedules = this.handleSchedules.bind(this)\r\n this.handleTop = this.handleTop.bind(this)\r\n }\r\n \r\n componentDidMount() {\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/reservations/cancel/confirm' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n } else {\r\n this.cancelReservation()\r\n }\r\n }\r\n componentWillUnmount() {\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n\r\n handleSchedules() {\r\n this.props.history.push('/schedules')\r\n }\r\n handleTop(){\r\n this.props.history.push('/')\r\n }\r\n\r\n cancelReservation() {\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n const url = \"/api/reservations\"\r\n const data = {\r\n reservation_id: this.props.reservation.reservation_id,\r\n is_active:0\r\n\r\n };\r\n RequestClient.patch(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n if (data.result.update_status == 1) {\r\n this.setState({ status: STATUS_CANCEL })\r\n } else if (data.result.update_status == 2) {\r\n this.setState({ status: STATUS_CANCELED })\r\n } else if (data.result.update_status == 3) {\r\n this.setState({ status: STATUS_REGIST_SCHEDULE })\r\n }\r\n }\r\n }).finally(() => { this.props.dispatchSetIsLoading(false) })\r\n }\r\n\r\n render(){\r\n var component = \"\"\r\n if (this.state.status == STATUS_API_CALLING) {\r\n component=
予約をキャンセルしています...
画面が切り替わるまでお待ちください...
\r\n }else if (this.state.status == STATUS_REGIST_SCHEDULE) {\r\n component= \r\n }else{\r\n component= \r\n }\r\n return(\r\n <>\r\n {component}\r\n \r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(ReservationCancelCompletePage));","import React from 'react';\r\nimport {setTabIndex} from '../../actions/systemAction';\r\nimport { connect } from 'react-redux';\r\nimport {getTabIndex} from '../../conf/urlInfo'\r\nimport ReservationListPage from './ReservationListPage';\r\nimport { Route, Switch} from 'react-router-dom'\r\nimport ReservationCancelConfirmPage from './ReservationCancelConfirmPage';\r\nimport ReservationCancelCompletePage from './ReservationCancelCompletePage';\r\n\r\nclass ReservationPage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n reservation:{},\r\n apiExecFlg:true\r\n }\r\n this.handleCancel = this.handleCancel.bind(this)\r\n this.handleSetApiExecFlg = this.handleSetApiExecFlg.bind(this)\r\n }\r\n componentDidMount(){\r\n const index = getTabIndex(\"Reservation\")\r\n this.props.dispatchSetTabId(index)\r\n \r\n\r\n }\r\n handleCancel(reservation){\r\n this.setState({reservation:reservation})\r\n this.props.history.push('/reservations/cancel/confirm')\r\n }\r\n \r\n handleSetApiExecFlg(execFlg){\r\n this.setState({apiExecFlg:execFlg})\r\n }\r\n\r\n render(){\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return { \r\n };\r\n };\r\nconst mapDispatchToProps = dispatch=>({\r\n dispatchSetTabId:tabIndex=>dispatch(setTabIndex(tabIndex)),\r\n })\r\nexport default connect(mapStateToProps,mapDispatchToProps)(ReservationPage)","import React from 'react';\r\nimport \"./SchedulesPage.css\"\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router';\r\nimport RequestClient from '../../common/requestClient';\r\nimport BasicIcon from '../../components/icons/BasicIcon';\r\nimport ArrowIconForListItem from '../../components/icons/ArrowIconForListItem';\r\n\r\nfunction ScheduleListHeader(props) {\r\n return(\r\n
\r\n
\r\n
\r\n
No.
\r\n
\r\n
\r\n
車両名
\r\n
\r\n
\r\n
呼び出す場所
\r\n
\r\n
\r\n
行き先
\r\n
\r\n
\r\n
ステータス
\r\n
\r\n
\r\n
登録日時
\r\n
\r\n
\r\n
\r\n )\r\n}\r\nfunction ScheduleList(props){\r\n return(\r\n
\r\n {props.scheduleList.map((row, index) => {\r\n return (props.handleRunView(row.vehicle_id, row.vehicle_name, row.pickup_point_id)}/>)\r\n })}\r\n \r\n \r\n
\r\n )\r\n}\r\nfunction ScheduleListMb(props) {\r\n return(\r\n
\r\n {props.scheduleList.map((row, index) => {\r\n return(props.handleRunView(row.vehicle_id, row.vehicle_name, row.pickup_point_id)}/>)\r\n })}\r\n
\r\n )\r\n}\r\n\r\nfunction Schedule(props) {\r\n const {no, vehicleName, callPointName, destinationPointName, status, registerDate, enableRunView, handleRunView} = props\r\n const date = new Date(registerDate)\r\n const yyyymmdd = date.getFullYear() + \"/\" + (date.getMonth() + 1) + \"/\" + date.getDate();\r\n const hhmm = date.getHours() + \":\" + toDoubleDigits(date.getMinutes());\r\n return(\r\n
\r\n
\r\n
\r\n
\r\n {no}\r\n
\r\n
\r\n
\r\n
\r\n {vehicleName}\r\n
\r\n
\r\n
\r\n
\r\n {callPointName}\r\n
\r\n
\r\n
\r\n
\r\n {destinationPointName}\r\n
\r\n
\r\n
\r\n {getStatusComponent(status , enableRunView, handleRunView)}\r\n
\r\n
\r\n
\r\n {yyyymmdd}\r\n
\r\n
{hhmm}
\r\n
\r\n
\r\n\r\n
\r\n )\r\n}\r\nfunction ScheduleItemMb(props) {\r\n const {no, vehicleName, callPointName, destinationPointName, status, registerDate, enableRunView, handleRunView} = props\r\n const date = new Date(registerDate)\r\n const yyyymmdd = date.getFullYear() + \"/\" + (date.getMonth() + 1) + \"/\" + date.getDate();\r\n const hhmm = date.getHours() + \":\" + toDoubleDigits(date.getMinutes());\r\n const pointLength = callPointName.length>=destinationPointName.length ? callPointName.length : destinationPointName.length\r\n const pointComponent = getMbPointComponent(pointLength > 12 ,callPointName,destinationPointName)\r\n return(\r\n
\r\n
\r\n
\r\n {no}\r\n
\r\n \r\n
\r\n
\r\n {vehicleName}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {yyyymmdd} {hhmm}\r\n
\r\n
\r\n
\r\n {pointComponent} \r\n {getStatusComponentMb(status, enableRunView, handleRunView)}\r\n
\r\n )\r\n}\r\nfunction getMbPointComponent(isLongName, callPointName, destinationPointName){\r\n if(isLongName){\r\n return(\r\n
\r\n
\r\n {callPointName}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {destinationPointName}\r\n
\r\n
\r\n
\r\n ) \r\n }\r\n return(\r\n
\r\n
\r\n {callPointName}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {destinationPointName}\r\n
\r\n
\r\n )\r\n}\r\nfunction getPointName(pointList, pointId) {\r\n var pointName = \"\"\r\n for (var i = 0; i < pointList.length; i++) {\r\n if (pointList[i][\"point_id\"] == pointId) {\r\n pointName = pointList[i][\"name\"]\r\n }\r\n }\r\n return pointName\r\n}\r\nfunction toDoubleDigits(num) {\r\n num += \"\";\r\n if (num.length === 1) {\r\n num = \"0\" + num;\r\n }\r\n return num; \r\n}\r\nfunction getStatus(status, enableRunView){\r\n var value=\"\"\r\n if(status == 1 && enableRunView){\r\n value = \"発進手続きへ\"\r\n }\r\n else if(status == 1){\r\n value = \"発車待ち\"\r\n }else if(status == 2){\r\n value = \"呼び出し中\"\r\n }else if(status == 3){\r\n value = \"荷役待ち\"\r\n }else{\r\n value = \"エラー\"\r\n }\r\n return value\r\n}\r\nfunction getStatusComponent(status,enableRunView,handleClick) {\r\n if(status == 1 && enableRunView){\r\n return (\r\n
\r\n
\r\n {getStatus(status,enableRunView)}\r\n
\r\n
\r\n )\r\n }\r\n return(\r\n
\r\n {getStatus(status,enableRunView)}\r\n
\r\n )\r\n}\r\nfunction getStatusComponentMb(status,enableRunView,handleClick) {\r\n if(status == 1 && enableRunView){\r\n return (\r\n
\r\n
\r\n {getStatus(status,enableRunView)}\r\n
\r\n
\r\n )\r\n }\r\n return(\r\n
\r\n
\r\n {getStatus(status,enableRunView)}\r\n
\r\n
\r\n )\r\n}\r\n\r\nclass SchedulesPage extends React.Component{\r\n \r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n scheduleList: [],\r\n updateTime: \"\",\r\n intervalId: -1\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.getSchedules()\r\n this.updateSchedules()\r\n }\r\n componentWillUnmount() {\r\n this.stopInterval()\r\n }\r\n updateSchedules() {\r\n const intervalId = setInterval(() => this.getSchedules(), 60000)\r\n this.setState({ intervalId: intervalId })\r\n }\r\n \r\n toDoubleDigits(num) {\r\n num += \"\";\r\n if (num.length === 1) {\r\n num = \"0\" + num;\r\n }\r\n return num; \r\n };\r\n\r\n stopInterval() {\r\n if (this.state.intervalId > -1) {\r\n clearInterval(this.state.intervalId)\r\n }\r\n }\r\n\r\n getSchedules() {\r\n const url = \"/api/schedules?point_id=\" + this.props.pointId\r\n RequestClient.get(url)\r\n .then(response =>{\r\n if (response.status===200){\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n const nowDt = new Date();\r\n const yyyymmdd = nowDt.getFullYear() + \"/\" + this.toDoubleDigits(nowDt.getMonth() + 1) + \"/\" + this.toDoubleDigits(nowDt.getDate());\r\n const hhmmss = this.toDoubleDigits(nowDt.getHours()) + \":\" + this.toDoubleDigits(nowDt.getMinutes()) + \":\" + this.toDoubleDigits(nowDt.getSeconds());\r\n const time = yyyymmdd + \" \" + hhmmss;\r\n this.setState({ scheduleList: data.results, updateTime: time })\r\n } \r\n }\r\n )\r\n }\r\n \r\n mbRender(){\r\n return(\r\n
\r\n \r\n
\r\n )\r\n }\r\n render(){\r\n const isMobile = window.innerWidth < 1024\r\n if(isMobile){\r\n return this.mbRender()\r\n }\r\n return(\r\n
\r\n \r\n
\r\n \r\n
\r\n )\r\n }\r\n \r\n \r\n\r\n}\r\n\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointId: state.systemReducer.pointId,\r\n pointList: state.systemReducer.pointList,\r\n enableRunView:state.userReducer.enableRunView,\r\n };\r\n };\r\n \r\n export default connect(mapStateToProps, null)(withRouter(SchedulesPage));","import BasicIcon from './BasicIcon';\r\n\r\nfunction CautionIconColorRed(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default CautionIconColorRed","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport './VehicleRunConfirmPage.css'\r\nimport { connect } from 'react-redux';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport VehicleIcon from '../../components/icons/VehicleIcon';\r\nimport CautionIconColorRed from '../../components/icons/CautionIconColorRed';\r\nimport EnableTargetPoint from '../../components/TargetPoints/EnableTargetPoint';\r\nimport EnableArrowIcon from '../../components/icons/EnableArrowIcon';\r\n\r\nfunction CautionMsg(props){\r\n return(\r\n
\r\n \r\n
車が動きます。
周囲の安全を確認してください。
\r\n
\r\n )\r\n}\r\n\r\nfunction SlideButton(props){\r\n \r\n const backgroundSize = props.isMobile? \"35px 35px\":\"48px 48px\" \r\n\r\n var posX = 0\r\n var isMove = false\r\n var isMax = false\r\n function handleMouseDown(e) {\r\n posX = e.clientX\r\n isMove = true\r\n }\r\n function handleTouchStart(e) {\r\n posX = e.changedTouches[0].clientX\r\n isMove = true\r\n }\r\n function handleMouseUp(e) {\r\n if(isMax){\r\n isMax = false\r\n props.handleNext()\r\n }\r\n \r\n isMove = false\r\n e.target.style.left = 0 + \"px\"\r\n }\r\n function handleMouseMove(e) {\r\n if(!isMove){\r\n return\r\n }\r\n const maxWidth = e.target.parentElement.offsetWidth - e.target.offsetWidth;\r\n var newPosX = (e.clientX - posX)\r\n if (newPosX >= maxWidth){\r\n newPosX = maxWidth\r\n isMax = true;\r\n }else if (newPosX <0){\r\n newPosX = 0\r\n }\r\n e.target.style.left = newPosX + \"px\"\r\n }\r\n function handleTouchMove(e) {\r\n if(!isMove){\r\n return\r\n }\r\n const maxWidth = e.target.parentElement.offsetWidth - e.target.offsetWidth;\r\n var newPosX = (e.changedTouches[0].clientX - posX)\r\n if (newPosX >= maxWidth){\r\n newPosX = maxWidth\r\n isMax = true;\r\n }else if (newPosX <0){\r\n newPosX = 0\r\n }\r\n e.target.style.left = newPosX + \"px\"\r\n }\r\n function handleMouseOut(e){\r\n isMove = false\r\n e.target.style.left = 0 + \"px\"\r\n }\r\n function touchButton() {\r\n return
handleTouchStart(e)} \r\n onTouchMove={(e)=>handleTouchMove(e)} onTouchEnd={(e)=>handleMouseUp(e)} onMouseOut={(e)=>{handleMouseOut(e)}}>\r\n
\r\n }\r\n function mouseButton() {\r\n return
handleMouseDown(e)} \r\n onMouseMove={(e)=>handleMouseMove(e)} onMouseUp={(e)=>handleMouseUp(e)} onMouseOut={(e)=>{handleMouseOut(e)}}>\r\n
\r\n }\r\n const button = 'ontouchstart' in window ? touchButton() :mouseButton()\r\n return(\r\n
\r\n
\r\n {button}\r\n
スライドして発進する
\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nclass VehicleRunConfirmPage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n }\r\n componentDidMount() {\r\n if (typeof this.props.location.state === 'undefined'\r\n || (this.props.location.state.ref !== '/send/complete' && this.props.location.state.ref !== '/returnhome/complete' && this.props.location.state.ref !== '/schedules')\r\n || this.props.destinationPointId < 0 ||typeof this.props.vehicle.vehicle_id === 'undefined') {\r\n this.props.history.replace('/');\r\n } \r\n }\r\n getPointName(pointList, pointId){\r\n var pointName = \"\"\r\n for(var i=0;i :\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {this.props.vehicle.vehicle_name}\r\n を本当に発進しますか?\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.getPointName(this.props.pointList,this.props.destinationPointId)}\r\n
\r\n \r\n {runButton}\r\n
\r\n ) \r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return {\r\n pointList: state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(withRouter(VehicleRunConfirmPage));","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport { setIsLoading } from '../../actions/systemAction';\r\nimport RequestClient from '../../common/requestClient';\r\nimport Loading from '../../components/Loading';\r\nimport {CautionMsg,SuccessMsg} from '../../components/SimpleMsges';\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_API_SUCCEEDED = 1\r\nconst STATUS_API_FAILED = 2\r\nconst STATUS_API_PRECONDITION_FAILED = 3\r\n\r\nfunction SucceededComponent(props){\r\n return (\r\n \r\n \r\n )\r\n}\r\nfunction PreconditionFailedComponent(props){\r\n return(\r\n \r\n \r\n )\r\n}\r\nfunction FailedComponent(props){\r\n return(\r\n \r\n \r\n )\r\n}\r\n\r\nclass VehicleRunCompletePage extends React.Component{\r\n\r\n constructor(props){\r\n super(props)\r\n this.state = { status: STATUS_API_CALLING }\r\n this.handleTop = this.handleTop.bind(this)\r\n this.handleBack = this.handleBack.bind(this)\r\n }\r\n componentDidMount(){\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/vehicle_run/confirm' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n }else{\r\n this.startVehicle()\r\n } \r\n }\r\n componentWillUnmount() {\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n\r\n handleTop(){\r\n this.props.history.push(\"/\")\r\n }\r\n handleBack(){\r\n this.props.history.goBack()\r\n }\r\n startVehicle() {\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n const url = \"/api/start_vehicle\"\r\n const data = {\r\n vehicle_id: this.props.vehicle.vehicle_id\r\n };\r\n RequestClient.post(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status === 409){\r\n this.setState({\r\n status:STATUS_API_PRECONDITION_FAILED\r\n })\r\n } else if(response.status >= 400){\r\n this.setState({\r\n status:STATUS_API_FAILED\r\n })\r\n }\r\n })\r\n .then(data => {\r\n if (data) {\r\n this.setState({\r\n status:STATUS_API_SUCCEEDED\r\n })\r\n }\r\n }).finally(() => { this.props.dispatchSetIsLoading(false) })\r\n \r\n \r\n }\r\n render(){\r\n var component = \"\"\r\n if (this.state.status == STATUS_API_CALLING) {\r\n component = \r\n }else if(this.state.status == STATUS_API_SUCCEEDED){\r\n component = \r\n }else if(this.state.status == STATUS_API_PRECONDITION_FAILED){\r\n component = \r\n }else{\r\n component = \r\n }\r\n return(\r\n
\r\n {component}\r\n
\r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(VehicleRunCompletePage));","import React from 'react';\r\nimport {setTabIndex} from '../../actions/systemAction';\r\nimport { connect } from 'react-redux';\r\nimport {getTabIndex} from '../../conf/urlInfo'\r\nimport { Route, Switch} from 'react-router-dom'\r\nimport SchedulesPage from './SchedulesPage';\r\nimport VehicleRunConfirmPage from '../vehicle_run/VehicleRunConfirmPage';\r\nimport VehicleRunCompletePage from '../vehicle_run/VehicleRunCompletePage';\r\n\r\nclass SchedulePage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n vehicle:{},\r\n destinationPointId:-1,\r\n apiExecFlg:true\r\n }\r\n this.handleSetApiExecFlg = this.handleSetApiExecFlg.bind(this)\r\n this.handleRunView = this.handleRunView.bind(this)\r\n this.handleRunViewComplete = this.handleRunViewComplete.bind(this)\r\n this.handleRunViewBack = this.handleRunViewBack.bind(this)\r\n }\r\n componentDidMount() {\r\n const index = getTabIndex(\"Schedule\")\r\n this.props.dispatchSetTabId(index)\r\n }\r\n \r\n handleSetApiExecFlg(execFlg){\r\n this.setState({apiExecFlg:execFlg})\r\n }\r\n handleRunView(vehicleId,vehicleName,destinationPointId){\r\n this.setState({\r\n vehicle:{\r\n vehicle_name:vehicleName,\r\n vehicle_id:vehicleId\r\n },\r\n destinationPointId:destinationPointId\r\n })\r\n this.props.history.push({ pathname: \"/schedules/vehicle_run/confirm\", state: { ref: \"/schedules\" } })\r\n }\r\n handleRunViewComplete(){\r\n this.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/schedules/vehicle_run/complete\", state: { ref: \"/vehicle_run/confirm\" } })\r\n }\r\n handleRunViewBack(){\r\n this.props.history.push('/schedules')\r\n }\r\n \r\n render(){\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return { \r\n };\r\n };\r\nconst mapDispatchToProps = dispatch=>({\r\n dispatchSetTabId:tabIndex=>dispatch(setTabIndex(tabIndex)),\r\n})\r\nexport default connect(mapStateToProps,mapDispatchToProps)(SchedulePage)","import React from 'react';\r\nimport './TopPage.css'\r\nimport BasicIcon from '../components/icons/BasicIcon';\r\n\r\nfunction Task(props){\r\n const {isMobile, icon} = props\r\n const goTo =()=>{\r\n props.history.push(props.link)\r\n }\r\n if(isMobile){\r\n return(\r\n
\r\n
\r\n \r\n
{props.children}
\r\n
\r\n
\r\n )\r\n }\r\n return(\r\n
\r\n \r\n
{props.children}
\r\n
\r\n )\r\n}\r\n\r\nclass TopPage extends React.Component{\r\n componentDidMount() {\r\n window.history.pushState(null,null,window.location.href);\r\n window.addEventListener('popstate', (e) => {\r\n if(window.location.pathname === '/'){\r\n this.props.history.push('/');\r\n }\r\n });\r\n }\r\n render(){\r\n const isMobile = window.innerWidth < 1024\r\n return(\r\n
\r\n
\r\n 車を呼ぶ\r\n 車を送る\r\n ホームに戻す\r\n
\r\n
\r\n )\r\n }\r\n}\r\nexport default TopPage","import React from 'react';\r\nimport './VehicleSelectDialog.css';\r\n\r\nfunction VehiclePulldownList(props) {\r\n const {selectedVehicle, vehicleList, handleSelected, handleCancel} = props\r\n const VehicleComponents = vehicleList.map((vehicle)=>{\r\n if(vehicle[\"vehicle_id\"]==selectedVehicle[\"vehicle_id\"]){\r\n return handleSelected(vehicle)} key={vehicle[\"vehicle_id\"]} vehicle={vehicle}/>\r\n }else{\r\n return handleSelected(vehicle)} key={vehicle[\"vehicle_id\"]} vehicle={vehicle}/>\r\n }\r\n })\r\n return(\r\n
\r\n
e.stopPropagation()}>\r\n {VehicleComponents}\r\n
\r\n
\r\n )\r\n \r\n}\r\n\r\nfunction PullDownSelectedItem(props) {\r\n const {vehicle, onClick} = props\r\n\r\n return (\r\n
\r\n
\r\n \r\n
{vehicle[\"vehicle_name\"]}
\r\n
\r\n\r\n
\r\n )\r\n}\r\nfunction PullDownItem(props) {\r\n const {vehicle, onClick} = props\r\n return (\r\n
\r\n
\r\n {vehicle[\"vehicle_name\"]}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default VehiclePulldownList","import React from 'react';\r\nimport './QuestionMsgDialog.css';\r\n\r\nfunction QuestionMsgDialog(props) {\r\n const {children,handleCancel} = props\r\n const isMobile = window.innerWidth < 1024\r\n const iconPrefix = isMobile ? \"_mb\" : \"\"\r\n return(\r\n
\r\n
\r\n
e.stopPropagation()}>\r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default QuestionMsgDialog","import BasicIcon from './BasicIcon';\r\n\r\nfunction PullDownIcon(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default PullDownIcon","import PullDownIcon from './icons/PullDownIcon';\r\nimport './VehiclePulldown.css';\r\n\r\nfunction VehiclePulldown(props) {\r\n var vehicleName = \"\"\r\n if (props.vehicle && props.vehicle[\"vehicle_name\"]) {\r\n vehicleName = props.vehicle[\"vehicle_name\"]\r\n }\r\n return(\r\n
\r\n
{vehicleName}
\r\n
\r\n \r\n\r\n
\r\n )\r\n}\r\n\r\nfunction VehiclePulldownMb(props) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport {VehiclePulldown, VehiclePulldownMb}","import BasicIcon from './BasicIcon';\r\n\r\nfunction QuestionIcon(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default QuestionIcon","import QuestionIcon from './icons/QuestionIcon';\r\nimport './Question.css'\r\nfunction Question(props){\r\n return(\r\n
\r\n \r\n
{props.children}
\r\n
\r\n )\r\n\r\n}\r\n\r\nexport default Question","/**\n * エリアマップバージョンに関する関数\n */\nimport RequestClient from \"./requestClient\";\nimport {getAreaMap} from \"./AreaMap\";\nimport {logout} from \"./AuthUtil\";\n\n/**\n * フロントで保持しているエリアマップバージョンIDが最新か否かをチェックする。\n * @param changed_cb エリアマップバージョンIDが変わっていた際のコールバック関数(Reactコンポーネントからは画面遷移処理などを行う)\n * @param error_cb 処理に失敗した際のコールバック関数(Reactコンポーネントからは画面遷移処理などを行う)\n */\nconst checkAreaMapVersionId = (changed_cb, error_cb) => {\n const current_version = getAreaMap().getVersionId();\n RequestClient.get(\"/api/map/version\")\n .then(response => {\n if (response.status === 200) {\n return response.json();\n } else {\n error_cb(response);\n }\n })\n .then(data => {\n if (data) {\n if (current_version !== data[\"area_map_version_id\"]) {\n changed_cb();\n }\n }\n })\n}\n\n/**\n * フロントで保持しているエリアマップバージョンIDが最新でない場合の処理\n */\nconst areaMapVersionIdChanged = () => {\n localStorage.setItem(\"point_id\", \"-1\");\n logout();\n}\n\nexport {checkAreaMapVersionId, areaMapVersionIdChanged}\n","import React from 'react';\r\nimport './ReturnSelectVehiclePage.css';\r\nimport { withRouter } from 'react-router';\r\nimport RequestClient from '../../common/requestClient';\r\nimport VehiclePulldownList from '../../components/VehicleSelectDialog';\r\nimport QuestionMsgDialog from '../../components/QuestionMsgDialog';\r\nimport { connect } from 'react-redux';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport { VehiclePulldown, VehiclePulldownMb} from '../../components/VehiclePulldown';\r\nimport Question from '../../components/Question';\r\nimport ConfirmDialog from '../../components/ConfirmDialog';\r\nimport AlertDialog from '../../components/AlertDialog';\r\nimport {areaMapVersionIdChanged} from \"../../common/AreaMapUtil\";\r\nimport {getAreaMap} from \"../../common/AreaMap\";\r\n\r\nclass ReturnSelectVehiclePage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.state={\r\n openQuestion:false,\r\n openVehicleList:false,\r\n vehicle: {},\r\n vehicleList: [],\r\n confirmOpen:false,\r\n alertOpen:false,\r\n }\r\n this.handleQuestion=this.handleQuestion.bind(this)\r\n this.handleVehicleListOpen=this.handleVehicleListOpen.bind(this)\r\n this.handleVehicleListClose=this.handleVehicleListClose.bind(this)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n this.handleCancel = this.handleCancel.bind(this)\r\n this.handleOnChange = this.handleOnChange.bind(this)\r\n this.setConfirmOpen = this.setConfirmOpen.bind(this)\r\n this.onConfirm = this.onNext.bind(this)\r\n this.setAlertOpen = this.setAlertOpen.bind(this)\r\n }\r\n \r\n componentDidMount() {\r\n this.getVehicles(true)\r\n }\r\n\r\n getVehicles(isFirst) {\r\n const pointExist = (pointId)=>{\r\n for(var i=0;i {\r\n if (response.status === 200) {\r\n return response.json()\r\n }\r\n if (response.status === 409) {\r\n areaMapVersionIdChanged();\r\n }\r\n if (response.status >= 400) {\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n var vehicles =[]\r\n data.results.forEach(vehicle => {\r\n if(pointExist(vehicle.home_position_id)){\r\n vehicles.push(vehicle)\r\n }\r\n });\r\n if (isFirst) {\r\n this.setState({ vehicle: vehicles.length >0 ? vehicles[0]:{}, vehicleList: vehicles })\r\n } else {\r\n this.setState({ vehicleList: vehicles })\r\n }\r\n\r\n }\r\n }\r\n )\r\n }\r\n\r\n handleCancel(){\r\n this.setState({\r\n openQuestion:false,\r\n openVehicleList:false\r\n })\r\n }\r\n\r\n handleQuestion(){\r\n this.setState({\r\n openQuestion:!this.state.openQuestion\r\n })\r\n }\r\n \r\n handleBack() {\r\n this.props.history.push(\"/\")\r\n }\r\n\r\n handleNext() {\r\n if (\"vehicle_id\" in this.state.vehicle) {\r\n if (this.state.vehicle.home_position_id == this.props.pointId){\r\n this.setConfirmOpen(true)\r\n }else{\r\n this.onNext()\r\n }\r\n } else {\r\n this.setAlertOpen(true)\r\n }\r\n }\r\n setConfirmOpen(isOpen){\r\n this.setState({confirmOpen:isOpen});\r\n }\r\n setAlertOpen(isOpen){\r\n this.setState({alertOpen:isOpen});\r\n }\r\n onNext(){\r\n this.props.handleSetVehicle(this.state.vehicle)\r\n this.props.history.push({pathname:\"/returnhome/confirm\",state:{ref:\"/returnhome\"}})\r\n } \r\n\r\n handleVehicleListOpen(){\r\n if(!this.state.openVehicleList){\r\n this.getVehicles(false)\r\n }\r\n this.setState({\r\n openVehicleList:true\r\n })\r\n }\r\n handleVehicleListClose(vehicle){\r\n this.setState({\r\n vehicle:vehicle,\r\n openVehicleList:false\r\n })\r\n }\r\n handleOnChange(e){\r\n this.state.vehicleList.map((vehicle)=>{\r\n if(vehicle[\"vehicle_id\"]==e.target.value){\r\n this.setState({vehicle:vehicle})\r\n }\r\n })\r\n }\r\n pullDown(){\r\n return(\r\n <>\r\n \r\n {this.state.openVehicleList && ()}\r\n \r\n )\r\n }\r\n mbPullDown(){\r\n return(\r\n this.getVehicles(false)} onChange={this.handleOnChange}/>\r\n )\r\n }\r\n \r\n render(){\r\n const isMobile = window.innerWidth < 1024\r\n const pullDownComponent = isMobile ? this.mbPullDown() : this.pullDown()\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
ホームに戻す車両を選んでください
\r\n
\r\n
\r\n {pullDownComponent}\r\n {this.state.openQuestion && (車両の占有LEDは消灯していますか?
車両にホームが設定されていますか?
車両の走行環境変更は行いましたか?
)}\r\n 車が表示されない場合\r\n \r\n \r\n 使用場所と車両に設定されているホーム地点が同一です。
既に車両がホーム地点にある場合、この操作はエラーとなりますがよろしいですか?\r\n
\r\n 車両が選択されていません。\r\n
\r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointId:state.systemReducer.pointId,\r\n pointList:state.systemReducer.pointList,\r\n };\r\n };\r\n\r\nexport default connect(mapStateToProps,null)(withRouter(ReturnSelectVehiclePage));","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './ReturnConfirmPage.css';\r\nimport { withRouter } from 'react-router';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport EnableArrowIcon from '../../components/icons/EnableArrowIcon';\r\nimport EnableTargetPoint from '../../components/TargetPoints/EnableTargetPoint';\r\n\r\nclass ReturnConfirmPage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n }\r\n \r\n componentDidMount(){\r\n if(!Object.keys(this.props.vehicle).length){\r\n this.props.history.push(\"/return\")\r\n }else if(this.props.destinationPointId < 0){\r\n this.props.history.push(\"/return/destination\")\r\n }\r\n \r\n }\r\n\r\n handleBack() {\r\n this.props.history.push({ pathname: \"/returnhome\", state: { ref: \"/returnhome/confirm\" } })\r\n }\r\n handleNext() {\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/returnhome/complete\", state: { ref: \"/returnhome/confirm\" } })\r\n }\r\n getPointName(pointList, pointId){\r\n var pointName = \"\"\r\n for(var i=0;i\r\n
\r\n \r\n
\r\n
\r\n \r\n {this.props.vehicle[\"vehicle_name\"]}\r\n \r\n をホームに戻しますか?\r\n
\r\n
\r\n
\r\n
\r\n {this.getPointName(this.props.pointList,this.props.pointId)}\r\n \r\n {this.getPointName(this.props.pointList,this.props.vehicle.home_position_id)}\r\n
\r\n \r\n \r\n\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointList: state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(withRouter(ReturnConfirmPage));","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './ReturnCompletePage.css';\r\nimport { withRouter } from 'react-router';\r\nimport { setIsLoading } from '../../actions/systemAction';\r\nimport RequestClient from '../../common/requestClient';\r\nimport Loading from '../../components/Loading';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport {SuccessMsg} from '../../components/SimpleMsges';\r\nimport {getAreaMap} from \"../../common/AreaMap\";\r\nimport {areaMapVersionIdChanged} from \"../../common/AreaMapUtil\";\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_COMPLETE = 1\r\n\r\nfunction ScheduleRegistComplete(props) {\r\n const {enableRunView, handleRunView} = props \r\n const runViewComponent = enableRunView ? :\"\"\r\n return(\r\n
\r\n \r\n {runViewComponent}\r\n \r\n
\r\n )\r\n}\r\nfunction RunViewComponent(props) {\r\n return (\r\n <>\r\n
もしくは
\r\n \r\n \r\n )\r\n}\r\n\r\nclass ReturnCompletePage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = { status: STATUS_API_CALLING }\r\n this.handleTop = this.handleTop.bind(this)\r\n this.handleRunView = this.handleRunView.bind(this)\r\n }\r\n \r\n componentDidMount() {\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/returnhome/confirm' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n } else {\r\n this.registSchedule()\r\n }\r\n }\r\n componentWillUnmount() {\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n handleTop() {\r\n this.props.history.push('/')\r\n }\r\n handleRunView(){\r\n this.props.history.push({ pathname: \"/returnhome/vehicle_run/confirm\", state: { ref: \"/returnhome/complete\" } })\r\n }\r\n\r\n registSchedule() {\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n const url = \"/api/schedules\"\r\n const data = {\r\n dropoff_point_id:this.props.vehicle[\"home_position_id\"],\r\n vehicle_id: this.props.vehicle[\"vehicle_id\"],\r\n is_home:1,\r\n area_map_version_id: getAreaMap().getVersionId()\r\n };\r\n RequestClient.post(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n }\r\n if (response.status === 409) {\r\n areaMapVersionIdChanged();\r\n }\r\n if (response.status >= 400) {\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if(data){\r\n if (data[\"result\"][\"result_id\"]) {\r\n this.setState({ status: STATUS_COMPLETE })\r\n }else{\r\n this.props.history.push({ pathname: \"/error\", state: { message: \"車両の手配ができませんでした。\" } })\r\n }\r\n }\r\n }).finally(() => { this.props.dispatchSetIsLoading(false) })\r\n }\r\n \r\n render(){\r\n var component = \"\"\r\n if (this.state.status == STATUS_API_CALLING) {\r\n component=
\r\n } else if (this.state.status == STATUS_COMPLETE) {\r\n component =\r\n }\r\n \r\n \r\n return(\r\n <>\r\n {component} \r\n \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n enableRunView:state.userReducer.enableRunView,\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(ReturnCompletePage));\r\n","import React from 'react';\r\nimport {Route, Switch} from 'react-router-dom'\r\nimport ReturnSelectVehiclePage from './ReturnSelectVehiclePage';\r\nimport ReturnConfirmPage from './ReturnConfirmPage';\r\nimport ReturnCompletePage from './ReturnCompletePage'\r\nimport VehicleRunConfirmPage from '../vehicle_run/VehicleRunConfirmPage';\r\nimport VehicleRunCompletePage from '../vehicle_run/VehicleRunCompletePage';\r\nimport { withRouter } from 'react-router';\r\n\r\nclass ReturnPage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n vehicle:{},\r\n apiExecFlg:true\r\n }\r\n this.handleSetVehicle = this.handleSetVehicle.bind(this)\r\n this.handleSetApiExecFlg = this.handleSetApiExecFlg.bind(this)\r\n this.handleRunViewComplete = this.handleRunViewComplete.bind(this)\r\n this.handleRunViewBack = this.handleRunViewBack.bind(this)\r\n }\r\n \r\n\r\n handleSetVehicle(vehicle){\r\n this.setState({vehicle:vehicle})\r\n }\r\n\r\n handleSetApiExecFlg(execFlg){\r\n this.setState({apiExecFlg:execFlg})\r\n }\r\n handleRunViewComplete(){\r\n this.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/returnhome/vehicle_run/complete\", state: { ref: \"/vehicle_run/confirm\" } })\r\n }\r\n handleRunViewBack(){\r\n this.props.history.push('/')\r\n }\r\n\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(ReturnPage);","import React from 'react';\r\nimport './DestinationList.css';\r\n\r\nfunction List(props) {\r\n const {itemName} = props;\r\n return (\r\n
\r\n
\r\n
\r\n {itemName}\r\n
\r\n\r\n
\r\n
\r\n )\r\n}\r\nfunction getListItem(targetPointId, pointId, name,handleNext){\r\n if (pointId == targetPointId){\r\n return null;\r\n }\r\n return( \r\n handleNext(event,pointId)}/>\r\n );\r\n}\r\n\r\nfunction PointList(props){\r\n const {pointList, targetPointId, handleNext} = props\r\n var columnCount = targetPointId ? Math.floor((pointList.length - 1)/4):Math.floor((pointList.length)/4)\r\n if (targetPointId && (pointList.length-1) %4 !=0){\r\n columnCount = columnCount + 1\r\n }else if (!targetPointId && (pointList.length) %4 !=0){\r\n columnCount = columnCount + 1\r\n }\r\n columnCount = columnCount <3 ? columnCount : 3\r\n return(\r\n
\r\n {pointList.map((point)=>getListItem(targetPointId, point[\"point_id\"], point[\"name\"], handleNext))}\r\n
\r\n )\r\n}\r\n\r\nexport default PointList","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './CallSelectDestinationPage.css';\r\nimport RequestClient from '../../common/requestClient';\r\nimport { withRouter } from 'react-router';\r\nimport PointList from '../../components/DestinationList';\r\nimport BackButton from '../../components/BackButton';\r\nimport {areaMapVersionIdChanged, checkAreaMapVersionId} from \"../../common/AreaMapUtil\";\r\n\r\n\r\n\r\nfunction getPointName(pointList,pointId){\r\n var pointName = \"\"\r\n for(var i=0;i {\r\n areaMapVersionIdChanged();\r\n this.props.history.push({ pathname: \"/error\", state: {status: 409} })\r\n }, (response) => {\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n })\r\n }\r\n updateReservationCount(){\r\n const url = \"/api/reservations\"\r\n RequestClient.get(url)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data =>{\r\n if(data){\r\n this.setState({reserveCount:data.results.length})\r\n }\r\n }\r\n )\r\n \r\n }\r\n handleNext(event,pointId){\r\n this.props.onItemClick(pointId)\r\n this.props.history.push(\"/call/confirm\")\r\n }\r\n\r\n render(){\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {getPointName(this.props.pointList, this.props.pointId)} \r\n に呼び出す車の行き先を選んでください\r\n
\r\n
\r\n
\r\n
\r\n
予約件数:{this.state.reserveCount}件
\r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointList:state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n };\r\n };\r\nexport default connect(mapStateToProps,null)(withRouter(CallSelectDestinationPage));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './CallConfirmPage.css';\r\nimport { withRouter } from 'react-router';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport VehicleIcon from '../../components/icons/VehicleIcon';\r\nimport EnableArrowIcon from '../../components/icons/EnableArrowIcon';\r\nimport DisableArrowIcon from '../../components/icons/DisableArrowIcon';\r\nimport EnableTargetPoint from '../../components/TargetPoints/EnableTargetPoint';\r\nimport DisableTargetPoint from '../../components/TargetPoints/DisableTargetPoint';\r\n\r\nclass CallConfirmPage extends React.Component{\r\n\r\n constructor(props){\r\n super(props)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n }\r\n \r\n componentDidMount(){\r\n if(this.props.destinationPointId < 0 || this.props.pointId < 0){\r\n this.props.history.push(\"/call\")\r\n }\r\n }\r\n\r\n handleBack(){\r\n this.props.history.push(\"/call\")\r\n }\r\n\r\n handleNext(){\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({pathname:\"/call/complete\",state:{ref:\"/call/confirm\"}})\r\n }\r\n \r\n getPointName(pointList, pointId){\r\n var pointName = \"\"\r\n for(var i=0;iこの経路で空き車両を
呼び出しますか?: <>この経路で空き車両を呼び出しますか? \r\n \r\n return(\r\n
\r\n
\r\n \r\n
\r\n
{title}
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.getPointName(this.props.pointList,this.props.pointId)}\r\n \r\n {this.getPointName(this.props.pointList,this.props.destinationPointId)}\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointList:state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n };\r\n };\r\nexport default connect(mapStateToProps,null)(withRouter(CallConfirmPage));","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './CallCompletePage.css';\r\nimport { withRouter } from 'react-router';\r\nimport { setIsLoading } from '../../actions/systemAction';\r\nimport RequestClient from '../../common/requestClient';\r\nimport Loading from '../../components/Loading';\r\nimport GreenButton from '../../components/buttons/GreenButton';\r\nimport {SuccessMsg,CautionMsg} from '../../components/SimpleMsges';\r\nimport {getAreaMap} from \"../../common/AreaMap\";\r\nimport {areaMapVersionIdChanged} from \"../../common/AreaMapUtil\";\r\n\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_REGIST_RESERVE = 1\r\nconst STATUS_REGIST_SCHEDULE = 2\r\n\r\nfunction Reservation(props) {\r\n return(\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nfunction toDoubleDigits(num) {\r\n num += \"\";\r\n if (num.length === 1) {\r\n num = \"0\" + num;\r\n }\r\n return num; \r\n };\r\n\r\nfunction Schedule(props) {\r\n var date = new Date(props.schedule.plan_start_time)\r\n date.setMinutes(date.getMinutes() + 3)\r\n date.setHours(date.getHours() + 9)\r\n const time = toDoubleDigits(date.getHours()) + \":\" + toDoubleDigits(date.getMinutes());\r\n return (\r\n
\r\n \r\n
\r\n
\r\n 到着目安\r\n
\r\n
{time}
\r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\nclass CallCompletePage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n status: STATUS_API_CALLING,\r\n intervalId: -1,\r\n reservation: {},\r\n schedule: {}\r\n }\r\n this.handleTop = this.handleTop.bind(this)\r\n this.handleReservation = this.handleReservation.bind(this)\r\n this.handleSchedule = this.handleSchedule.bind(this)\r\n }\r\n \r\n componentDidMount() {\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/call/confirm' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n } else {\r\n this.registReservation()\r\n }\r\n\r\n }\r\n\r\n componentWillUnmount() {\r\n this.stopInterval()\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n\r\n registReservation() {\r\n\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n\r\n const url = \"/api/reservations\"\r\n const data = {\r\n pickup_point_id: this.props.pointId,\r\n dropoff_point_id: this.props.destinationPointId,\r\n area_map_version_id: getAreaMap().getVersionId()\r\n };\r\n RequestClient.post(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n }\r\n if (response.status === 409) {\r\n areaMapVersionIdChanged();\r\n }\r\n if(response.status >= 400) {\r\n this.props.dispatchSetIsLoading(false)\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n if (data.result.reserve_exist_flg == 1) {\r\n this.setState({ status: STATUS_REGIST_RESERVE })\r\n this.props.dispatchSetIsLoading(false)\r\n } else {\r\n if (data.result.is_regist_check == 1) {\r\n if (data.result.is_active == 0) {\r\n this.setState({ schedule: data.result, status: STATUS_REGIST_SCHEDULE })\r\n } else {\r\n this.setState({ status: STATUS_REGIST_RESERVE })\r\n }\r\n this.props.dispatchSetIsLoading(false)\r\n } else {\r\n const intervalId = setInterval(() => this.checkScedule(), 5000)\r\n this.setState({ intervalId: intervalId, reservation: data.result })\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n checkScedule() {\r\n if (this.state.status == 0) {\r\n const url = \"/api/reservation/\" + this.state.reservation.reservation_id\r\n RequestClient.get(url)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.dispatchSetIsLoading(false)\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n if (data.result.is_regist_check == 1) {\r\n if (data.result.is_active == 0) {\r\n this.setState({ schedule: data.result, status: STATUS_REGIST_SCHEDULE })\r\n } else {\r\n this.setState({ status: STATUS_REGIST_RESERVE })\r\n }\r\n this.stopInterval()\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n }\r\n }\r\n )\r\n }\r\n }\r\n\r\n stopInterval() {\r\n if (this.state.intervalId > -1) {\r\n clearInterval(this.state.intervalId)\r\n }\r\n }\r\n handleTop() {\r\n this.props.history.push('/')\r\n }\r\n handleReservation() {\r\n this.props.history.push('/reservations')\r\n }\r\n handleSchedule() {\r\n this.props.history.push('/schedules')\r\n }\r\n\r\n render(){\r\n var component = \"\"\r\n if (this.state.status == 0) {\r\n component =
\r\n }\r\n else if(this.state.status == 1){\r\n component =\r\n }\r\n else if(this.state.status == 2){\r\n component =\r\n }\r\n return(\r\n <>\r\n {component}\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointId: state.systemReducer.pointId,\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(CallCompletePage));","import React from 'react';\r\nimport CallSelectDestinationPage from './CallSelectDestinationPage';\r\nimport { Route, Switch} from 'react-router-dom'\r\nimport CallConfirmPage from './CallConfirmPage';\r\nimport CallCompletePage from './CallCompletePage';\r\n\r\nclass CallPage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n destinationPointId:-1,\r\n apiExecFlg:true\r\n }\r\n this.handleSetDestinationPoint = this.handleSetDestinationPoint.bind(this)\r\n this.handleSetApiExecFlg = this.handleSetApiExecFlg.bind(this)\r\n }\r\n handleSetDestinationPoint(destinationPointId){\r\n this.setState({destinationPointId:destinationPointId})\r\n }\r\n handleSetApiExecFlg(execFlg){\r\n this.setState({apiExecFlg:execFlg})\r\n }\r\n render(){\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n}\r\n\r\nexport default CallPage;","import React from 'react';\r\nimport './SendSelectVehiclePage.css';\r\nimport { withRouter } from 'react-router';\r\nimport RequestClient from '../../common/requestClient';\r\nimport VehiclePulldownList from '../../components/VehicleSelectDialog';\r\nimport QuestionMsgDialog from '../../components/QuestionMsgDialog';\r\nimport Button from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport { VehiclePulldown, VehiclePulldownMb} from '../../components/VehiclePulldown';\r\nimport Question from '../../components/Question';\r\nimport AlertDialog from '../../components/AlertDialog';\r\nimport {getAreaMap} from \"../../common/AreaMap\";\r\nimport {areaMapVersionIdChanged} from \"../../common/AreaMapUtil\";\r\n\r\nclass SendSelectVehiclePage extends React.Component{\r\n \r\n constructor(props){\r\n super(props)\r\n this.state={\r\n openQuestion:false,\r\n openVehicleList:false,\r\n vehicle: {},\r\n vehicleList: [],\r\n alertOpen:false,\r\n }\r\n this.handleQuestion=this.handleQuestion.bind(this)\r\n this.handleVehicleListOpen=this.handleVehicleListOpen.bind(this)\r\n this.handleVehicleListClose=this.handleVehicleListClose.bind(this)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n this.handleCancel = this.handleCancel.bind(this)\r\n this.handleOnChange = this.handleOnChange.bind(this)\r\n this.setAlertOpen = this.setAlertOpen.bind(this)\r\n }\r\n componentDidMount() {\r\n this.getVehicles(true)\r\n }\r\n \r\n handleCancel(){\r\n this.setState({\r\n openQuestion:false,\r\n openVehicleList:false\r\n })\r\n }\r\n getVehicles(isFirst) {\r\n const area_map_version_id = getAreaMap().getVersionId();\r\n const url = `/api/vehicles?is_home=0&area_map_version_id=${encodeURIComponent(area_map_version_id)}`\r\n RequestClient.get(url)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n }\r\n if (response.status === 409) {\r\n areaMapVersionIdChanged();\r\n }\r\n if (response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n if (isFirst) {\r\n this.setState({ vehicle: data.results.length >0 ? data.results[0]:{}, vehicleList: data.results })\r\n } else {\r\n this.setState({ vehicleList: data.results })\r\n }\r\n\r\n }\r\n })\r\n }\r\n\r\n handleQuestion(){\r\n this.setState({\r\n openQuestion:!this.state.openQuestion\r\n })\r\n }\r\n \r\n handleBack() {\r\n this.props.history.push(\"/\")\r\n }\r\n\r\n handleNext() {\r\n if (\"vehicle_id\" in this.state.vehicle) {\r\n this.props.handleSetVehicle(this.state.vehicle)\r\n this.props.history.push({pathname:\"/send/destination\",state:{ref:\"/send\"}})\r\n } else {\r\n this.setAlertOpen(true)\r\n }\r\n }\r\n\r\n setAlertOpen(isOpen){\r\n this.setState({alertOpen:isOpen});\r\n }\r\n\r\n handleVehicleListOpen(){\r\n if(!this.state.openVehicleList){\r\n this.getVehicles(false)\r\n }\r\n this.setState({\r\n openVehicleList:true\r\n })\r\n }\r\n handleVehicleListClose(vehicle){\r\n this.setState({\r\n vehicle:vehicle,\r\n openVehicleList:false\r\n })\r\n }\r\n handleOnChange(e){\r\n this.state.vehicleList.map((vehicle)=>{\r\n if(vehicle[\"vehicle_id\"]==e.target.value){\r\n this.setState({vehicle:vehicle})\r\n }\r\n })\r\n }\r\n mbPullDown(){\r\n return(\r\n this.getVehicles(false)} onChange={this.handleOnChange}/>\r\n )\r\n }\r\n pullDown(){\r\n return(\r\n <>\r\n \r\n {this.state.openVehicleList && ()}\r\n \r\n )\r\n }\r\n render(){\r\n const isMobile = window.innerWidth < 1024\r\n const pullDownComponent = isMobile ? this.mbPullDown():this.pullDown()\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
配送する車両を選んでください
\r\n
\r\n
\r\n {pullDownComponent}\r\n {this.state.openQuestion && (車両の占有LEDは点灯していますか?
車両の走行環境変更は行いましたか?
)}\r\n 車が表示されない場合\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SendSelectVehiclePage);","import React from 'react';\r\nimport './SendSelectDestinationPage.css';\r\nimport { withRouter } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport PointList from '../../components/DestinationList';\r\nimport BackButton from '../../components/BackButton';\r\n\r\nclass SendSelectDestinationPage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n }\r\n\r\n componentDidMount(){\r\n if (typeof this.props.location.state === 'undefined' || !(this.props.location.state.ref == '/send'|| this.props.location.state.ref == '/send/confirm')) {\r\n this.props.history.replace('/');\r\n }\r\n if(!Object.keys(this.props.selectedVehicle).length){\r\n this.props.history.push(\"/send\")\r\n }\r\n }\r\n \r\n handleBack(){\r\n this.props.history.push(\"/send\")\r\n }\r\n \r\n handleNext(event,pointId){\r\n this.props.onItemClick(pointId)\r\n this.props.history.push(\"/send/confirm\")\r\n \r\n }\r\n render(){\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {this.props.selectedVehicle[\"vehicle_name\"]}\r\n の行き先を選んでください\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n pointList:state.systemReducer.pointList,\r\n pointId:state.systemReducer.pointId,\r\n };\r\n };\r\nexport default connect(mapStateToProps,null)(withRouter(SendSelectDestinationPage));","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './SendConfirmPage.css';\r\nimport { withRouter } from 'react-router';\r\nimport Button from '../../components/buttons/GreenButton';\r\nimport BackButton from '../../components/BackButton';\r\nimport EnableArrowIcon from '../../components/icons/EnableArrowIcon';\r\nimport EnableTargetPoint from '../../components/TargetPoints/EnableTargetPoint';\r\n\r\nclass SendConfirmPage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.handleNext = this.handleNext.bind(this)\r\n }\r\n \r\n componentDidMount(){\r\n if(!Object.keys(this.props.vehicle).length){\r\n this.props.history.push(\"/send\")\r\n }else if(this.props.destinationPointId < 0){\r\n this.props.history.push(\"/send/destination\")\r\n }\r\n \r\n }\r\n\r\n handleBack() {\r\n this.props.history.push({ pathname: \"/send/destination\", state: { ref: \"/send/confirm\" } })\r\n }\r\n handleNext() {\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/send/complete\", state: { ref: \"/send/confirm\" } })\r\n }\r\n getPointName(pointList, pointId){\r\n var pointName = \"\"\r\n for(var i=0;i\r\n
\r\n \r\n
\r\n
\r\n \r\n {this.props.vehicle[\"vehicle_name\"]}\r\n \r\n をこの経路で送りますか?\r\n
\r\n
\r\n
\r\n
\r\n {this.getPointName(this.props.pointList,this.props.pointId)}\r\n \r\n {this.getPointName(this.props.pointList,this.props.destinationPointId)}\r\n
\r\n \r\n })}\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(SettingsMenuPage)","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport { setIsLoading } from '../../../actions/systemAction';\r\nimport RequestClient from '../../../common/requestClient';\r\nimport Loading from '../../../components/Loading';\r\nimport {SuccessMsg} from '../../../components/SimpleMsges';\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_COMPLETE = 1\r\n\r\nfunction SettingComplete(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nclass SettingsAdminPasswordCompletePage extends React.Component{\r\n \r\n constructor(props) {\r\n super(props)\r\n this.state = { status: STATUS_API_CALLING }\r\n this.handleTop = this.handleTop.bind(this)\r\n }\r\n\r\n handleTop() {\r\n this.props.history.push('/')\r\n }\r\n\r\n componentDidMount() {\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/settings/admin_password' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n } else {\r\n this.changeAdminPassword()\r\n }\r\n }\r\n componentWillUnmount() {\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n\r\n changeAdminPassword() {\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n const url = \"/api/admin_password\"\r\n const data = {\r\n admin_password: this.props.admin_password,\r\n new_admin_password: this.props.new_admin_password\r\n\r\n };\r\n RequestClient.patch(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n this.setState({status: STATUS_COMPLETE})\r\n }\r\n }).finally(() => { this.props.dispatchSetIsLoading(false) })\r\n }\r\n\r\n render(){\r\n var component =\"\"\r\n if (this.state.status == STATUS_API_CALLING) {\r\n component = 管理者パスワードを変更しています...
画面が切り替わるまでお待ちください...
\r\n }else{\r\n component = \r\n }\r\n return (\r\n
\r\n {component}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(SettingsAdminPasswordCompletePage));","import './InputPassword.css'\r\n\r\nfunction InputPassword(props){\r\n const {title, prefixName, id, placeholder, handlePreview, preview} = props\r\n return(\r\n
\r\n
{title}
\r\n
\r\n \r\n
handlePreview(!preview)}>表示
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default InputPassword","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport BackButton from '../../../components/BackButton';\r\nimport Button from '../../../components/buttons/GreenButton';\r\nimport InputPassword from '../../../components/InputPassword';\r\nimport './SettingsAdminPasswordInputPage.css';\r\n\r\nclass SettingsAdminPasswordInputPage extends React.Component{\r\n \r\n constructor(props){\r\n super(props)\r\n this.handleBack = this.handleBack.bind(this)\r\n this.state = {\r\n new_adminpassword_preview:false,\r\n adminpassword_preview:false\r\n }\r\n this.handleAdminPasswordPreview = this.handleAdminPasswordPreview.bind(this)\r\n this.handleNewAdminPasswordPreview = this.handleNewAdminPasswordPreview.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n this.props.clear()\r\n }\r\n\r\n handleBack() {\r\n this.props.history.push({ pathname: \"/settings\", state: { ref: \"/settings/admin_password\" } })\r\n }\r\n\r\n handleNewAdminPasswordPreview(preview){\r\n this.setState(\r\n {\r\n new_adminpassword_preview:preview\r\n }\r\n )\r\n }\r\n handleAdminPasswordPreview(preview){\r\n this.setState(\r\n {\r\n adminpassword_preview:preview\r\n }\r\n )\r\n }\r\n \r\n render(){\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
管理者パスワード変更
\r\n
\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\nexport default withRouter(SettingsAdminPasswordInputPage)","import React from 'react';\r\nimport {Route, Switch} from 'react-router-dom'\r\nimport { withRouter } from 'react-router';\r\nimport SettingsAdminPasswordCompletePage from './SettingsAdminPasswordCompletePage';\r\nimport SettingsAdminPasswordInputPage from './SettingsAdminPasswordInputPage';\r\nimport ConfirmDialog from '../../../components/ConfirmDialog';\r\nimport AlertDialog from '../../../components/AlertDialog';\r\n\r\nclass SettingsAdminPasswordPage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state ={\r\n admin_password:\"\",\r\n new_admin_password:\"\",\r\n confirmOpen:false,\r\n alertOpen:false,\r\n alertMsg:\"\",\r\n }\r\n this.handleChange = this.handleChange.bind(this)\r\n this.handleOnChange = this.handleOnChange.bind(this)\r\n this.setConfirmOpen = this.setConfirmOpen.bind(this)\r\n this.onConfirm = this.onChange.bind(this)\r\n this.setAlertOpen = this.setAlertOpen.bind(this)\r\n this.setAlertMsg = this.setAlertMsg.bind(this)\r\n this.clear = this.clear.bind(this)\r\n }\r\n \r\n validation(){\r\n const regAlphabet = /[a-zA-Z]/\r\n const regNumber = /[0-9]/\r\n if(!this.state.admin_password){\r\n this.setAlertMsg(\"管理者パスワードが入力されていません\")\r\n }else if(!this.state.new_admin_password){\r\n this.setAlertMsg(\"新しい管理者パスワードが入力されていません\")\r\n }else if(this.state.new_admin_password.length<8){\r\n this.setAlertMsg(\"新しい管理者パスワードは8文字以上である必要があります\")\r\n }else if(!regAlphabet.test(this.state.new_admin_password)){\r\n this.setAlertMsg(\"新しい管理者パスワードは半角英字を含む必要があります\")\r\n }else if(!regNumber.test(this.state.new_admin_password)){\r\n this.setAlertMsg(\"新しい管理者パスワードは半角数字を含む必要があります\")\r\n }else if(this.state.new_admin_password.match(/[^A-Za-z0-9]+/)){\r\n this.setAlertMsg(\"新しい管理者パスワードは半角英数字のみである必要があります\")\r\n }else{\r\n return true; \r\n }\r\n this.setAlertOpen(true)\r\n return false;\r\n }\r\n handleChange(e) {\r\n e.preventDefault();\r\n if(this.validation()){\r\n this.setConfirmOpen(true)\r\n } \r\n }\r\n setConfirmOpen(isOpen){\r\n this.setState({confirmOpen:isOpen});\r\n }\r\n onChange(){\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/settings/admin_password/complete\", state: { ref: \"/settings/admin_password\" } })\r\n }\r\n\r\n handleOnChange(e){\r\n this.setState({ [e.target.id]: e.target.value});\r\n }\r\n setAlertOpen(isOpen){\r\n this.setState({alertOpen:isOpen});\r\n }\r\n setAlertMsg(msg){\r\n this.setState({alertMsg:msg});\r\n }\r\n\r\n clear(){\r\n this.setState({new_admin_password:\"\",admin_password:\"\"})\r\n }\r\n\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n 管理者パスワードを変更します。よろしいですか?\r\n \r\n {this.state.alertMsg}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SettingsAdminPasswordPage)","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport { setIsLoading } from '../../../actions/systemAction';\r\nimport RequestClient from '../../../common/requestClient';\r\nimport Loading from '../../../components/Loading';\r\nimport {SuccessMsg} from '../../../components/SimpleMsges';\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_COMPLETE = 1\r\n\r\nfunction SettingComplete(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nclass SettingsPasswordCompletePage extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state = { status: STATUS_API_CALLING }\r\n this.handleTop = this.handleTop.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/settings/password' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n } else {\r\n this.changePassword()\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n handleTop() {\r\n this.props.history.push('/')\r\n }\r\n changePassword() {\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n const url = \"/api/password\"\r\n const data = {\r\n admin_password: this.props.admin_password,\r\n new_password: this.props.new_password\r\n\r\n };\r\n RequestClient.patch(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n this.setState({status: STATUS_COMPLETE})\r\n }\r\n }).finally(() => { this.props.dispatchSetIsLoading(false) })\r\n }\r\n\r\n\r\n render(){\r\n var component =\"\"\r\n if (this.state.status == STATUS_API_CALLING) {\r\n component = パスワードを変更しています...
画面が切り替わるまでお待ちください...
\r\n }else{\r\n component = \r\n }\r\n return (\r\n
\r\n {component}\r\n
\r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(SettingsPasswordCompletePage));","import React from 'react';\r\nimport './SettingsPasswordInputPage.css';\r\nimport { withRouter } from 'react-router';\r\nimport Button from '../../../components/buttons/GreenButton';\r\nimport BackButton from '../../../components/BackButton';\r\nimport InputPassword from '../../../components/InputPassword';\r\n\r\nclass SettingsPasswordInputPage extends React.Component{\r\n \r\n constructor(props){\r\n super(props)\r\n this.handleSettingsMenu = this.handleSettingsMenu.bind(this)\r\n this.handleNewPasswordPreview = this.handleNewPasswordPreview.bind(this)\r\n this.handleAdminPasswordPreview = this.handleAdminPasswordPreview.bind(this)\r\n this.state={\r\n new_password_preview:false,\r\n admin_password:false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.props.clear()\r\n }\r\n \r\n handleSettingsMenu() {\r\n this.props.history.push({ pathname: \"/settings\", state: { ref: \"/settings/admin_password\" } })\r\n }\r\n handleNewPasswordPreview(preview){\r\n this.setState(\r\n {\r\n new_password_preview:preview\r\n }\r\n )\r\n }\r\n handleAdminPasswordPreview(preview){\r\n this.setState(\r\n {\r\n admin_password_preview:preview\r\n }\r\n )\r\n }\r\n \r\n render(){\r\n return(\r\n
\r\n
\r\n \r\n
\r\n
パスワード変更
\r\n
\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SettingsPasswordInputPage)","import React from 'react';\r\nimport {Route, Switch} from 'react-router-dom'\r\nimport { withRouter } from 'react-router';\r\nimport SettingsPasswordCompletePage from './SettingsPasswordCompletePage';\r\nimport SettingsPasswordInputPage from './SettingsPasswordInputPage';\r\nimport ConfirmDialog from '../../../components/ConfirmDialog';\r\nimport AlertDialog from '../../../components/AlertDialog';\r\n\r\nclass SettingsPasswordPage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.state ={\r\n admin_password:\"\",\r\n new_password:\"\",\r\n confirmOpen:false,\r\n alertOpen:false,\r\n alertMsg:\"\",\r\n }\r\n this.handleChange = this.handleChange.bind(this)\r\n this.handleOnChange = this.handleOnChange.bind(this)\r\n this.setConfirmOpen = this.setConfirmOpen.bind(this)\r\n this.onConfirm = this.onChange.bind(this)\r\n this.setAlertOpen = this.setAlertOpen.bind(this)\r\n this.setAlertMsg = this.setAlertMsg.bind(this)\r\n this.clear = this.clear.bind(this)\r\n }\r\n \r\n validation(){\r\n const regAlphabet = /[a-zA-Z]/\r\n const regNumber = /[0-9]/\r\n if(!this.state.admin_password){\r\n this.setAlertMsg(\"管理者パスワードが入力されていません\")\r\n }else if(!this.state.new_password){\r\n this.setAlertMsg(\"新しいパスワードが入力されていません\")\r\n }else if(this.state.new_password.length<8){\r\n this.setAlertMsg(\"新しいパスワードは8文字以上である必要があります\")\r\n }else if(!regAlphabet.test(this.state.new_password)){\r\n this.setAlertMsg(\"新しいパスワードは半角英字を含む必要があります\")\r\n }else if(!regNumber.test(this.state.new_password)){\r\n this.setAlertMsg(\"新しいパスワードは半角数字を含む必要があります\")\r\n }else if(this.state.new_password.match(/[^A-Za-z0-9]+/)){\r\n this.setAlertMsg(\"新しいパスワードは半角英数字のみである必要があります\")\r\n }else{\r\n return true;\r\n }\r\n this.setAlertOpen(true)\r\n return false;\r\n }\r\n handleChange(e) {\r\n e.preventDefault();\r\n if(this.validation()){\r\n this.setConfirmOpen(true)\r\n } \r\n }\r\n setConfirmOpen(isOpen){\r\n this.setState({confirmOpen:isOpen});\r\n }\r\n onChange(){\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname: \"/settings/password/complete\", state: { ref: \"/settings/password\" } })\r\n }\r\n \r\n handleOnChange(e){\r\n this.setState({ [e.target.id]: e.target.value});\r\n }\r\n setAlertOpen(isOpen){\r\n this.setState({alertOpen:isOpen});\r\n }\r\n setAlertMsg(msg){\r\n this.setState({alertMsg:msg});\r\n }\r\n\r\n clear(){\r\n this.setState({new_password:\"\",admin_password:\"\"})\r\n }\r\n\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n パスワードを変更します。よろしいですか?\r\n \r\n {this.state.alertMsg}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SettingsPasswordPage)","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport Button from '../../../components/buttons/GreenButton';\r\nimport \"./SettingsSyncVehiclesInputPage.css\"\r\nimport BackButton from '../../../components/BackButton';\r\nimport {areaMapVersionIdChanged, checkAreaMapVersionId} from \"../../../common/AreaMapUtil\";\r\n\r\nclass SettingsSyncVehiclesInputPage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n this.handleSettingsMenu = this.handleSettingsMenu.bind(this)\r\n this.handleChange = this.handleChange.bind(this)\r\n }\r\n\r\n componentDidMount(){\r\n checkAreaMapVersionId(() => {\r\n areaMapVersionIdChanged();\r\n this.props.history.push({ pathname: \"/error\", state: {status: 409} })\r\n }, (response) => {\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n })\r\n }\r\n\r\n handleSettingsMenu() {\r\n this.props.history.push(\"/settings\")\r\n }\r\n handleChange(){\r\n this.props.handleSetApiExecFlg(false)\r\n this.props.history.push({ pathname:\"/settings/sync_vehicles/complete\" , state: { ref: \"/settings/sync_vehicles\" }})\r\n }\r\n\r\n render(){\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
車両と走行環境の同期を行います。
よろしいですか?
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SettingsSyncVehiclesInputPage);","import React from 'react';\r\nimport { withRouter } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport { setIsLoading } from '../../../actions/systemAction';\r\nimport RequestClient from '../../../common/requestClient';\r\nimport Loading from '../../../components/Loading';\r\nimport {SuccessMsg} from '../../../components/SimpleMsges';\r\n\r\nconst STATUS_API_CALLING = 0\r\nconst STATUS_API_SUCCEEDED = 1\r\n\r\nfunction SucceededComponent(props){\r\n return(\r\n \r\n )\r\n}\r\n\r\nclass SettingsSyncVehiclesCompletePage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.state = { status: STATUS_API_CALLING }\r\n this.handleTop = this.handleTop.bind(this)\r\n this.handleSyncVehicles = this.handleSyncVehicles.bind(this)\r\n }\r\n componentDidMount(){\r\n if (typeof this.props.location.state === 'undefined' || this.props.location.state.ref !== '/settings/sync_vehicles' || this.props.apiExecFlg) {\r\n this.props.history.replace('/');\r\n }else{\r\n this.handleSyncVehicles()\r\n } \r\n }\r\n componentWillUnmount() {\r\n this.props.dispatchSetIsLoading(false)\r\n }\r\n\r\n handleTop(){\r\n this.props.history.push(\"/\")\r\n }\r\n handleSyncVehicles(){\r\n this.props.handleSetApiExecFlg(true)\r\n this.props.dispatchSetIsLoading(true)\r\n const url = \"/api/vehicle_relocation\"\r\n const data ={}\r\n RequestClient.patch(url, data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n return response.json()\r\n } else if(response.status >= 400){\r\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\r\n } \r\n })\r\n .then(data => {\r\n if (data) {\r\n this.setState({\r\n status:STATUS_API_SUCCEEDED\r\n })\r\n }\r\n }).finally(() => { this.props.dispatchSetIsLoading(false) })\r\n }\r\n\r\n render(){\r\n var component = \"\"\r\n if (this.state.status == STATUS_API_CALLING) {\r\n component = 走行環境を同期しています...
画面が切り替わるまでお待ちください...
\r\n }else if(this.state.status == STATUS_API_SUCCEEDED){\r\n component = \r\n }\r\n return(\r\n
\r\n {component}\r\n
\r\n )\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return {\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetIsLoading: isLoading => dispatch(setIsLoading(isLoading))\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(SettingsSyncVehiclesCompletePage));","import React from 'react';\r\nimport {Route, Switch} from 'react-router-dom'\r\nimport { withRouter } from 'react-router';\r\nimport SettingsSyncVehiclesInputPage from './SettingsSyncVehiclesInputPage';\r\nimport SettingsSyncVehiclesCompletePage from './SettingsSyncVehiclesCompletePage';\r\n\r\nclass SettingsSyncVehiclesPage extends React.Component{\r\n\r\n constructor(props) {\r\n super(props)\r\n }\r\n\r\n \r\n \r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(SettingsSyncVehiclesPage);","import './InputRange.css'\r\n\r\n/**\r\n * 範囲を表す(スライダー)コンポーネント\r\n *\r\n * html構造の説明\r\n * * 全体をdiv.input-range-frameで囲んでいる。\r\n * * div.input-range-frame配下のdivでラベルに紐づくコンテンツ全体を囲んでいる。\r\n * * input要素の前後に必要に応じてキャプションをつけることができる。\r\n * * キャプションが構造を持つ場合はスタイルの設定が必要になるだろう。\r\n *\r\n */\r\nfunction InputRange(props) {\r\n const {min = \"0\", max = \"10\", step = \"1\", captionHead = \"\", captionBottom = \"\"} = props\r\n return (\r\n
\r\n \r\n
\r\n {captionHead}\r\n \r\n {captionBottom}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default InputRange\r\n","import InputRange from '../InputRange';\n\nconst NOTIFICATION_ON = \"1\"\nconst NOTIFICATION_OFF = \"0\"\n\nfunction isNotificationOn(value) {\n return value === NOTIFICATION_ON\n}\n\nfunction NotificationSwitch(props) {\n return(\n \n )\n}\n\nexport {NotificationSwitch, isNotificationOn, NOTIFICATION_ON, NOTIFICATION_OFF}\n","import InputRange from '../InputRange';\n\nfunction NotificationVolumeControl(props) {\n return(\n \n )\n}\n\nexport default NotificationVolumeControl\n","import BasicIcon from '../icons/BasicIcon';\r\n\r\nfunction NotificationVolumeMute(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default NotificationVolumeMute\r\n","import BasicIcon from '../icons/BasicIcon';\r\n\r\nfunction NotificationVolumeMax(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default NotificationVolumeMax\r\n","/**\n * 指定された音声をAPIで再生する。\n *\n * APIによる音声再生はブラウザによってブロックされたり、古いブラウザではAPIが異なったりする。\n * 詳細は以下を参照。\n * https://developer.mozilla.org/en-US/docs/web/api/htmlmediaelement/play\n * https://developer.mozilla.org/ja/docs/Web/Media/Autoplay_guide\n * https://webkit.org/blog/7734/auto-play-policy-changes-for-macos/\n * https://developer.chrome.com/blog/autoplay/\n *\n * サーバ側のHTTPヘッダに関する説明もMDNにあった。(GoogleとWebKitにはそのような記述はなかった。)\n * https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Feature-Policy\n */\n\nconst VEHICLE_DEPARTED = \"/vehicle_coming.wav\";\nconst VEHICLE_ARRIVED = \"/vehicle_arrived.wav\";\n\n/**\n * Google's Audio autoplay API usage procedure\n */\nlet audioCtx = window.AudioContext || window.webkitAudioContext;\nif (audioCtx !== undefined) {\n audioCtx = new audioCtx();\n}\n\n/**\n * オーディオコンテキストを開始する。\n */\nfunction resumeAudioContext() {\n if (audioCtx === undefined) {\n console.debug(\"cannot resume AudioContext since it is undefined.\");\n return;\n }\n console.debug(\"AudioContext (before resume): \", audioCtx);\n audioCtx.resume()\n .then(() => {\n console.debug(\"AudioContext (after resume): \", audioCtx);\n })\n .catch(reason => {\n console.debug(\"AudioContext-resume seems failed.\", audioCtx);\n });\n}\n\n/**\n * オーディオプレーヤー\n */\nclass AudioPlayer {\n #audios;\n\n constructor() {\n this.#audios = [];\n }\n\n push(url) {\n this.#audios.push(new Audio(url));\n }\n\n play(volume) {\n if (this.#audios.length === 0) {\n return;\n }\n for (let i = 0; i < this.#audios.length; i++) {\n let one = this.#audios[i];\n let next = null;\n one.volume = volume;\n if (i < (this.#audios.length - 1)) {\n next = this.#audios[i+1];\n one.onended = (event) => {\n next.play()\n .then(() => {\n console.debug(\"Audio-play seems complete.\");\n })\n .catch((reason) => {\n console.debug(\"Audio-play seems failed.\", reason);\n })\n }\n }\n }\n const first = this.#audios[0];\n resumeAudioContext();\n first.play()\n .then(() => {\n console.debug(\"Audio-play seems complete.\");\n })\n .catch((reason) => {\n console.debug(\"Audio-play seems failed.\", reason);\n });\n this.#audios.length = 0;\n }\n}\n\nexport {resumeAudioContext, AudioPlayer, VEHICLE_DEPARTED, VEHICLE_ARRIVED}\n","import React from 'react';\nimport './NotificationForVehicles.css';\nimport {isNotificationOn, NotificationSwitch} from \"./NotificationSwitch\";\nimport NotificationVolumeControl from \"./NotificationVolumeControl\";\nimport {\n getNotificationConfig,\n SWITCH_ARRIVAL_KEY_NAME,\n SWITCH_KEY_NAME,\n VOLUME_KEY_NAME\n} from \"../../common/NotificationConfig\";\nimport {getNotificationAgent} from \"../../workers/NotificationAgent\";\nimport {getNotifiedSchedules} from \"../../common/NotifiedSchedules\";\nimport NotificationVolumeMute from \"./NotificationVolumeMute\";\nimport NotificationVolumeMax from \"./NotificationVolumeMax\";\nimport {resumeAudioContext} from \"../../common/AudioPlayer\";\nimport {getArrivedVehicles} from \"../../common/ArrivedVehicles\";\nimport {getNotificationView} from \"../../common/NotificationView\";\n\nclass NotificationForVehicles extends React.Component {\n\n constructor(props) {\n super(props)\n const ntfConfig = getNotificationConfig();\n this.state = {\n [SWITCH_KEY_NAME]: ntfConfig.isDepartureOn(),\n [VOLUME_KEY_NAME]: ntfConfig.getVolume(),\n [SWITCH_ARRIVAL_KEY_NAME]: ntfConfig.isArrivalOn(),\n }\n this.handleDepartureNotificationToggle = this.handleDepartureNotificationToggle.bind(this);\n this.handleArrivalNotificationToggle = this.handleArrivalNotificationToggle.bind(this);\n this.handleVolumeChange = this.handleVolumeChange.bind(this);\n this.handleVolumeMute = this.handleVolumeMute.bind(this);\n this.handleVolumeMax = this.handleVolumeMax.bind(this);\n this.setVolume = this.setVolume.bind(this);\n }\n\n /**\n * ボリュームを設定する\n * @param volume {number} 通知音量(0 <= volume <= 100)\n */\n setVolume(volume) {\n getNotificationConfig().setVolume(volume);\n this.setState((state) => {\n return {\n [VOLUME_KEY_NAME]: volume\n }\n })\n }\n\n handleVolumeChange(e) {\n this.setVolume(e.target.value);\n }\n\n handleVolumeMute(e) {\n this.setVolume(0);\n }\n\n handleVolumeMax(e) {\n this.setVolume(100);\n }\n\n handleArrivalNotificationToggle(e) {\n const isOn = isNotificationOn(e.target.value);\n if (isOn) {\n getNotificationConfig().setArrivalOn();\n // オーディオコンテキストを再開。\n resumeAudioContext();\n } else {\n getNotificationConfig().setArrivalOff();\n // 通知がOFFになったら通知済みスケジュールテーブルをクリアする。\n getArrivedVehicles().initialize();\n if (!getNotificationConfig().isDepartureOn()) {\n // 発進通知もOFFならば通知アイコンはfalseにセット。\n // 発進通知リストが空の場合は、あえて通知アイコンをfalseにはしないこと(通知されたのにアイコンが表示されないのを防ぐため)。\n // このため、通知設定をOFFにしたのと同時に通知があった場合、通知アイコンが表示されてしまう可能性が残るが、その事象を起こすのはかなり難しいだろう。\n getNotificationView().disableIcon();\n }\n }\n getNotificationAgent().applyChange();\n this.setState((state) => {\n return {\n [SWITCH_ARRIVAL_KEY_NAME]: isOn\n }\n })\n }\n\n handleDepartureNotificationToggle(e) {\n const isOn = isNotificationOn(e.target.value);\n if (isOn) {\n getNotificationConfig().setDepartureOn();\n // オーディオコンテキストを再開。\n resumeAudioContext();\n } else {\n getNotificationConfig().setDepartureOff();\n // 通知がOFFになったら通知済みスケジュールテーブルをクリアする。\n getNotifiedSchedules().initialize();\n if (!getNotificationConfig().isArrivalOn()) {\n // 到着通知もOFFならば通知アイコンはfalseにセット。\n // 到着通知リストが空の場合は、あえて通知アイコンをfalseにはしないこと(通知されたのにアイコンが表示されないのを防ぐため)。\n // このため、通知設定をOFFにしたのと同時に通知があった場合、通知アイコンが表示されてしまう可能性が残るが、その事象を起こすのはかなり難しいだろう。\n getNotificationView().disableIcon();\n }\n }\n getNotificationAgent().applyChange();\n this.setState((state) => {\n return {\n [SWITCH_KEY_NAME]: isOn\n }\n })\n }\n\n render() {\n return (\n
\n
\n 発進通知\n
\n OFF
}\n captionBottom={
ON
}\n />\n \n
\n
\n 到着通知\n
\n OFF
}\n captionBottom={
ON
}\n />\n \n
\n
\n ボリューム\n
\n }\n captionBottom={}\n />\n
\n
\n
\n )\n }\n}\n\nexport default NotificationForVehicles\n","import React from 'react';\nimport {withRouter} from 'react-router';\nimport BackButton from '../../../components/BackButton';\nimport \"./SettingsNotificationPage.css\";\nimport NotificationForVehicles from \"../../../components/notifications/NotificationForVehicles\";\nimport {areaMapVersionIdChanged, checkAreaMapVersionId} from \"../../../common/AreaMapUtil\";\n\nclass SettingsNotificationPage extends React.Component {\n constructor(props) {\n super(props)\n this.handleSettingsMenu = this.handleSettingsMenu.bind(this)\n }\n\n componentDidMount(){\n checkAreaMapVersionId(() => {\n areaMapVersionIdChanged();\n this.props.history.push({ pathname: \"/error\", state: {status: 409} })\n }, (response) => {\n this.props.history.push({ pathname: \"/error\", state: {status: response.status} })\n })\n }\n\n handleSettingsMenu() {\n this.props.history.push(\"/settings\")\n }\n\n render() {\n return (\n
\n
\n \n
\n
通知設定
\n
\n
\n \n
\n )\n }\n}\n\nexport default withRouter(SettingsNotificationPage)\n","import React from 'react';\r\nimport {Route, Switch} from 'react-router-dom'\r\nimport {setTabIndex} from '../../actions/systemAction';\r\nimport {connect} from 'react-redux';\r\nimport {getTabIndex} from '../../conf/urlInfo'\r\nimport SettingsVehicleListPage from './home/SettingsVehicleListPage';\r\nimport SettingsSelectHome from './home/SettingsSelectHomePage';\r\nimport SettingsHomeConfirmPage from './home/SettingsHomeConfirmPage';\r\nimport SettingsHomeCompletePage from './home/SettingsHomeCompletePage';\r\nimport SettingsMenuPage from './SettingsMenuPage';\r\nimport SettingsAdminPasswordPage from './admin_password/SettingsAdminPasswordPage';\r\nimport SettingsPasswordPage from './password/SettingsPasswordPage';\r\nimport SettingsSyncVehiclesPage from './sync/SettingsSyncVehiclesPage';\r\nimport SettingsNotificationPage from './notification/SettingsNotificationPage'\r\n\r\nclass SettingsPage extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n vehicle: {},\r\n homePositionId: -1,\r\n adminPassword: \"\",\r\n apiExecFlg: true\r\n }\r\n this.handleSetting = this.handleSetting.bind(this)\r\n this.handleInitialState = this.handleInitialState.bind(this)\r\n this.handleSetApiExecFlg = this.handleSetApiExecFlg.bind(this)\r\n this.handleSetHomePosition = this.handleSetHomePosition.bind(this)\r\n this.handleInitialAdminPassword = this.handleInitialAdminPassword.bind(this)\r\n this.handleOnChange = this.handleOnChange.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n const index = getTabIndex(\"Setting\")\r\n this.props.dispatchSetTabId(index)\r\n }\r\n\r\n handleSetApiExecFlg(execFlg) {\r\n this.setState({apiExecFlg: execFlg})\r\n }\r\n\r\n handleSetting(vehicle) {\r\n this.setState({vehicle: vehicle})\r\n this.props.history.push('/settings/vehicles/home')\r\n }\r\n\r\n handleSetHomePosition(pointId) {\r\n this.setState({homePositionId: pointId})\r\n }\r\n\r\n handleOnChange(e) {\r\n this.setState({[e.target.id]: e.target.value});\r\n }\r\n\r\n\r\n handleInitialState() {\r\n this.setState(\r\n {\r\n vehicle: {},\r\n homePositionId: -1,\r\n adminPassword: \"\"\r\n }\r\n )\r\n }\r\n\r\n handleInitialAdminPassword() {\r\n this.setState(\r\n {adminPassword: \"\"}\r\n )\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {};\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n dispatchSetTabId: tabIndex => dispatch(setTabIndex(tabIndex)),\r\n})\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SettingsPage)","import RequestClient from '../../common/requestClient';\n\nfunction getPointId() {\n return localStorage.getItem('point_id');\n}\n\n/**\n * 発進通知の詳細情報を取得する。\n * @returns {Promise}\n */\nfunction getNotificationDetail() {\n const point_id = getPointId();\n const query = '/api/notification/coming/detail?point_id=' + encodeURIComponent(point_id);\n return RequestClient.get(query);\n}\n\nexport default getNotificationDetail\n","import BasicIcon from './BasicIcon';\r\n\r\nfunction LoadingIcon(props) {\r\n return(\r\n \r\n )\r\n}\r\n\r\nexport default LoadingIcon","import BasicIcon from './BasicIcon';\r\n\r\nfunction ArrivalIcon(props) {\r\n return(\r\n
到着
\r\n )\r\n}\r\n\r\nexport default ArrivalIcon\r\n","import BasicIcon from './BasicIcon';\r\n\r\nfunction DepartureIcon(props) {\r\n return(\r\n
発進
\r\n )\r\n}\r\n\r\nexport default DepartureIcon\r\n","import React from 'react';\r\nimport './NotificationDetailDialog.css';\r\nimport getNotificationDetail from \"./getNotificationDetail\";\r\nimport {getNotifiedSchedules} from \"../../common/NotifiedSchedules\";\r\nimport {formatHourMin, parseISOString} from \"../../common/DateTimeUtil\";\r\nimport LoadingIcon from \"../icons/LoadingIcon\";\r\nimport {getArrivedVehicles} from \"../../common/ArrivedVehicles\";\r\nimport {getNotificationConfig} from \"../../common/NotificationConfig\";\r\nimport ArrivalIcon from \"../icons/ArrivalIcon\";\r\nimport DepartureIcon from \"../icons/DepartureIcon\";\r\n\r\nfunction createDialogTitle() {\r\n const ntfConfig = getNotificationConfig();\r\n if (ntfConfig.isDepartureOn() && !ntfConfig.isArrivalOn()) {\r\n return \"発進車両\";\r\n }\r\n if (!ntfConfig.isDepartureOn() && ntfConfig.isArrivalOn()) {\r\n return \"到着車両\";\r\n }\r\n return \"到着/発進車両\";\r\n}\r\n\r\n/**\r\n * ソートのロジック\r\n * @param a {{time: string}}\r\n * @param b {{time: string}}\r\n * @returns {number}\r\n */\r\nfunction byTime(a, b) {\r\n return (a.time > b.time) ? 1 : ((a.time === b.time) ? 0 : -1);\r\n}\r\n\r\n/**\r\n * 通知ダイアログに表示するデータの配列に到着通知の車両データを追加する。\r\n * @param list {[{type:string, scheduleId:string, vehicle_id:string, point_id:number, point_name:string, time:string}]} 通知ダイアログに表示するデータの配列\r\n * @returns {[{type:string, scheduleId:string, vehicle_id:string, point_id:number, point_name:string, time:string}]}\r\n */\r\nfunction prependArrivedVehicles(list) {\r\n const vehicles = []\r\n for (const [scheduleId, vehicle] of Object.entries(getArrivedVehicles().restore())) {\r\n if (vehicle.shown) {\r\n continue;\r\n }\r\n vehicles.push(\r\n {\r\n 'type': 'arrival',\r\n 'scheduleId': scheduleId,\r\n 'vehicle_id': vehicle.vehicle_id,\r\n 'vehicle_name': vehicle.vehicle_name,\r\n 'point_id': null,\r\n 'point_name': null,\r\n 'time': vehicle.arrival_time,\r\n }\r\n );\r\n }\r\n vehicles.sort(byTime);\r\n // 古い到着履歴を削除\r\n getArrivedVehicles().clearOldData();\r\n return vehicles.concat(list);\r\n}\r\n\r\nfunction DepartureSchedule(props) {\r\n return (\r\n
\r\n

\r\n {props.vehicle_name}
\r\n {props.point_name}\r\n

\r\n

\r\n {formatHourMin(parseISOString(props.time))}\r\n

\r\n
\r\n )\r\n}\r\n\r\nfunction ArrivalSchedule(props) {\r\n return (\r\n
\r\n

\r\n {props.vehicle_name}\r\n

\r\n

\r\n {formatHourMin(parseISOString(props.time))}\r\n

\r\n
\r\n )\r\n}\r\n\r\nfunction NoScheduleContent(props) {\r\n const msgDeparture = \"発進した車両は既に到着したかスケジュールがキャンセルされました。\";\r\n const msgArrival = \"到着した車両はありません。\";\r\n const ntfConfig = getNotificationConfig();\r\n if (ntfConfig.isDepartureOn() && ntfConfig.isArrivalOn()) {\r\n return (\r\n

\r\n {msgArrival}
\r\n {msgDeparture}
\r\n

\r\n )\r\n }\r\n if (ntfConfig.isDepartureOn()) {\r\n return (\r\n

\r\n {msgDeparture}
\r\n

\r\n )\r\n }\r\n if (ntfConfig.isArrivalOn()) {\r\n return (\r\n

\r\n {msgArrival}
\r\n

\r\n )\r\n }\r\n return (\r\n <>\r\n )\r\n}\r\n\r\nfunction NotificationListItem(props) {\r\n let item, name, icon;\r\n if (props.type === 'departure') {\r\n item = DepartureSchedule(props);\r\n name = \"departure\";\r\n icon = \r\n } else {\r\n item = ArrivalSchedule(props);\r\n name = \"arrival\";\r\n icon = \r\n }\r\n return (\r\n
  • \r\n
    \r\n
    \r\n {icon}\r\n {item}\r\n
    \r\n
    \r\n
  • \r\n )\r\n}\r\n\r\n/**\r\n * 発進通知ダイアログ\r\n * このコンポーネントの表示要否は呼び出し元で管理すること。\r\n */\r\nclass NotificationDetailDialog extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n schedules: [],\r\n isLoading: true,\r\n isError: false,\r\n errorMessage: \"\"\r\n }\r\n this.handleClose = this.handleClose.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.updateSchedules();\r\n }\r\n\r\n handleClose() {\r\n this.props.onClose()\r\n }\r\n\r\n updateSchedules() {\r\n const ntfConfig = getNotificationConfig();\r\n if (!ntfConfig.isDepartureOn()) {\r\n // 発進通知OFFの場合\r\n this.setState({\r\n schedules: prependArrivedVehicles([]),\r\n isLoading: false,\r\n isError: false,\r\n errorMessage: \"\"\r\n })\r\n return;\r\n }\r\n\r\n // 発進通知ONの場合\r\n getNotificationDetail()\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.json();\r\n } else {\r\n throw new Error(`${response.status}: ${response.statusText}`);\r\n }\r\n })\r\n .then((data) => {\r\n if (data[\"schedules\"]) {\r\n return data[\"schedules\"];\r\n }\r\n throw new Error(\"response ok yet no schedules included.\");\r\n })\r\n .then((schedules) => {\r\n // 取得したスケジュールに現在の通知ハッシュテーブルの値(あれば)をマージ\r\n const found = getNotifiedSchedules().getByKeys(schedules);\r\n for (const [scheduleId, startTime] of Object.entries(found)) {\r\n schedules[scheduleId]['start_time'] = startTime;\r\n }\r\n return schedules;\r\n })\r\n .then((schedules) => {\r\n /**\r\n * このスケジュールを通知済みデータベース(NotifiedSchedules)に登録し、それ以外の(おそらく古い)通知を削除する。\r\n * FIXME:\r\n * 上記で通知詳細を取得してからここでデータベースを更新するまでの間に新しい通知が来て\r\n * 通知済みデータベースに登録された場合、一度通知音が鳴るが、以下のコードでそのスケジュールが削除されるため\r\n * 次の通知チェックで同じスケジュールがあった場合、新規通知があったと解釈され再度通知音が鳴ることになる。\r\n * ダイアログを開くタイミングによってはこのような現象が発生する。\r\n * これを防ぐには、以下の処理を行わないことであるが、この処理を行わないと、通知済みデータベースが肥大化する。\r\n * 肥大化した通知済みデータベース(ローカルストレージに保存)をクリアするには、2つの方法がある。\r\n * * 一度ログアウトする。\r\n * * 停車場所を変更する。\r\n * 新規通知音が煩わしい場合は、この処理をスキップするなどの判断をする。\r\n */\r\n const keyValues = {};\r\n Object.keys(schedules).forEach((scheduleId) => {\r\n keyValues[scheduleId] = schedules[scheduleId][\"start_time\"];\r\n });\r\n getNotifiedSchedules().clearExceptForKeys(keyValues);\r\n return schedules;\r\n })\r\n .then((schedules) => {\r\n // オブジェクトを配列に変換する。\r\n const list = [];\r\n for (const [scheduleId, detail] of Object.entries(schedules)) {\r\n list.push(\r\n {\r\n 'type': 'departure',\r\n 'scheduleId': scheduleId,\r\n 'vehicle_id': detail.vehicle_id,\r\n 'vehicle_name': detail.vehicle_name,\r\n 'point_id': detail.point_id,\r\n 'point_name': detail.point_name,\r\n 'time': detail.start_time,\r\n }\r\n );\r\n }\r\n return list;\r\n })\r\n .then((list) => {\r\n // 発進時刻でソート\r\n return list.sort(byTime);\r\n })\r\n .then((list) => {\r\n if (!ntfConfig.isArrivalOn()) {\r\n return list;\r\n }\r\n return prependArrivedVehicles(list);\r\n })\r\n .then((list) => {\r\n // このスケジュールでダイアログの内容を更新する。\r\n this.setState({\r\n schedules: list,\r\n isLoading: false,\r\n isError: false,\r\n errorMessage: \"\"\r\n })\r\n return list;\r\n })\r\n .catch((reason) => {\r\n console.debug(\"failed to fetch notification details: \", reason);\r\n this.setState({\r\n schedules: [],\r\n isLoading: false,\r\n isError: true,\r\n errorMessage:

    通知データを取得できませんでした。

    \r\n })\r\n });\r\n }\r\n\r\n renderSchedules() {\r\n const schedules = this.state.schedules;\r\n if (this.state.isLoading) {\r\n return (\r\n \r\n )\r\n }\r\n if (this.state.isError) {\r\n return (<>);\r\n }\r\n if (schedules.length === 0) {\r\n return (\r\n \r\n )\r\n }\r\n const listItems = schedules.map((item) => {\r\n return \r\n });\r\n return (\r\n
      {listItems}
    \r\n );\r\n }\r\n\r\n render() {\r\n const schedules = this.renderSchedules();\r\n const errorMessage = this.state.errorMessage;\r\n const dialogTitle = createDialogTitle();\r\n return (\r\n
    \r\n
    e.stopPropagation()}>\r\n {dialogTitle}\r\n {schedules}\r\n {errorMessage}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default NotificationDetailDialog\r\n","import React from 'react';\nimport VehicleIcon from \"../icons/VehicleIcon\";\nimport \"./NotificationPresentation.css\";\nimport {getNotificationAgent} from \"../../workers/NotificationAgent\";\nimport {getNotifiedSchedules} from \"../../common/NotifiedSchedules\";\nimport {getNotificationView} from \"../../common/NotificationView\";\nimport NotificationDetailDialog from \"./NotificationDetailDialog\";\nimport {getArrivedVehicles} from \"../../common/ArrivedVehicles\";\nimport {AudioPlayer, VEHICLE_ARRIVED, VEHICLE_DEPARTED} from \"../../common/AudioPlayer\";\nimport {getNotificationConfig} from \"../../common/NotificationConfig\";\n\n/**\n * 発進通知機能\n * 発進通知があったことを知らせるコンポーネント\n */\nclass NotificationPresentation extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n showIcon: getNotificationView().isIcon(),\n showDialog: false,\n };\n\n this.handleNotificationRaised = this.handleNotificationRaised.bind(this);\n this.handleIconClicked = this.handleIconClicked.bind(this);\n this.handleDialogClosed = this.handleDialogClosed.bind(this);\n\n getNotificationAgent().start();\n }\n\n componentDidMount() {\n getNotificationAgent().addListener(this.handleNotificationRaised);\n }\n\n componentWillUnmount() {\n getNotificationAgent().removeListener();\n }\n\n /**\n * ワーカーから通知イベントがあった際に実行するコールバック関数\n * @param e ワーカーからのメッセージ\n */\n handleNotificationRaised(e) {\n if (e.data.msg !== 'schedules') {\n return;\n }\n if (!e.data.hasOwnProperty('schedules')) {\n console.error(\"While a schedule-notification raised, no schedules included.\");\n return;\n }\n\n const audioPlayer = new AudioPlayer();\n const ntfConfig = getNotificationConfig();\n\n // 発進通知があった場合\n if (ntfConfig.isDepartureOn()\n && (e.data.schedules.hasOwnProperty('departures'))\n && (Object.keys(e.data.schedules.departures).length > 0)\n && getNotifiedSchedules().putNewKeys(e.data.schedules.departures)) {\n // 新規通知があったことを意味する。\n // そのときは新規通知アイコンを表示する。\n getNotificationView().enableIcon();\n\n // 発進通知音声を登録\n audioPlayer.push(VEHICLE_DEPARTED);\n }\n // 到着通知があった場合\n if (ntfConfig.isArrivalOn()\n && (e.data.schedules.hasOwnProperty('arrival'))\n && getArrivedVehicles().putNewData(e.data.schedules.arrival)) {\n // 新規通知があったことを意味する。\n // そのときは新規通知アイコンを表示する。\n getNotificationView().enableIcon();\n\n // 到着通知音声を登録\n audioPlayer.push(VEHICLE_ARRIVED);\n }\n audioPlayer.play(ntfConfig.getVolume() / 100);\n\n const isIcon = getNotificationView().isIcon();\n this.setState((state) => {\n return {\n showIcon: isIcon\n };\n });\n }\n\n /**\n * 新規通知アイコンをクリックしたときに実行する。\n * @param e {Event} イベント\n */\n handleIconClicked(e) {\n getNotificationView().disableIcon();\n\n /** 検証用 */\n this.setState((state) => {\n return {\n showIcon: false,\n showDialog: true\n };\n })\n }\n\n /**\n * 通知詳細ダイアログが閉じられた時に実行する。\n * @param e {MouseEvent}\n */\n handleDialogClosed(e) {\n this.setState({\n showDialog: false\n });\n }\n\n renderIcon() {\n return (\n
    \n \n
    \n )\n }\n\n /**\n * 表示中のページがトップページか判定する。\n * @returns {boolean}\n */\n isTopPage() {\n // FIXME: this.props.locationをIDEが解決できない。\n return (this.props.location.pathname === '/');\n }\n\n /**\n * 通知アイコン表示要否を判定する。\n * @returns {boolean}\n */\n isIconRequired() {\n return (\n (this.state.showIcon === true)\n && (this.isTopPage() === true)\n );\n }\n\n /**\n * ダイアログを表示する場合はtrueを返す。\n * @returns {boolean}\n */\n isDialogRequired() {\n return (this.state.showDialog === true);\n }\n\n /**\n * 通知詳細ダイアログを返す。\n * @returns {JSX.Element}\n */\n renderDialog() {\n return (\n \n )\n }\n\n render() {\n let icon = <>;\n let dialog = <>;\n if (this.isIconRequired()) {\n icon = this.renderIcon();\n }\n if (this.isDialogRequired()) {\n dialog = this.renderDialog();\n }\n\n return (\n
    \n {icon}\n {dialog}\n
    \n );\n }\n}\n\nexport default NotificationPresentation\n","import React from 'react';\r\nimport {Redirect, Route, Switch} from 'react-router-dom'\r\nimport {connect} from 'react-redux';\r\nimport Navigation from '../components/Navigation';\r\nimport ReservationPage from './reservations/ReservationPage';\r\nimport SchedulePage from './schedules/SchedulePage';\r\nimport OneTripPage from './OneTripPage';\r\nimport SettingsPage from './settings/SettingsPage';\r\nimport NotificationPresentation from \"../components/notifications/NotificationPresentation\";\r\n\r\nclass PrivatePage extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n if (this.props.is_LoggedIn) {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return \r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n is_LoggedIn: state.userReducer.is_LoggedIn\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(PrivatePage);","import React from 'react';\r\nimport './Error.css';\r\nimport { withRouter } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport {updateLoginStatus} from '../actions/userAction';\r\nimport Button from '../components/buttons/WhiteButton';\r\nimport CautionIcon from '../components/icons/CautionIcon';\r\n\r\nfunction Error(props){\r\n return(\r\n
    \r\n
    \r\n \r\n
    {props.children}
    \r\n
    \r\n
    \r\n )\r\n}\r\nclass ErrorPage extends React.Component{\r\n constructor(props){\r\n super(props)\r\n this.toLogin = this.toLogin.bind(this)\r\n this.toTop = this.toTop.bind(this)\r\n }\r\n toLogin(){\r\n this.props.history.push(\"/login\")\r\n }\r\n toTop(){\r\n this.props.history.push(\"/\")\r\n }\r\n render(){\r\n if(this.props.location.state === undefined){\r\n return (\r\n \r\n 不正な遷移です。\r\n \r\n ) \r\n }else if (this.props.location.state.status === 401){\r\n localStorage.removeItem(\"eva_calls_jwt\")\r\n this.props.dispatchUpdateLoginStatus()\r\n return(\r\n \r\n 認証に失敗しました。
    再ログインしてください。\r\n
    \r\n )\r\n } else if (this.props.location.state.status === 409) {\r\n this.props.dispatchUpdateLoginStatus()\r\n return(\r\n \r\n 地図が更新されました。
    再ログインしてください。\r\n
    \r\n )\r\n }else if (this.props.location.state.status >= 400 && this.props.location.state.status < 500) {\r\n return(\r\n \r\n リクエストに失敗しました。\r\n \r\n ) \r\n }else if(this.props.location.state.status>=500){\r\n return (\r\n \r\n 接続に失敗しました。\r\n \r\n ) \r\n }else{\r\n return (\r\n \r\n {this.props.location.state.message}\r\n \r\n )\r\n }\r\n \r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n };\r\n };\r\n\r\nconst mapDispatchToProps = dispatch=>({\r\n dispatchUpdateLoginStatus: () => dispatch(updateLoginStatus())\r\n })\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(ErrorPage));","import React from 'react';\nimport './App.css';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\nimport {updateLoginStatus, updateRunViewStatus} from './actions/userAction';\nimport Login from './pages/Login';\nimport PrivatePage from './pages/PrivatePage';\nimport Error from './pages/Error';\nimport { connect } from 'react-redux';\n\nclass App extends React.Component{\n\n constructor(props){\n super(props);\n this.props.dispatchUpdateLoginStatus()\n this.props.dispatchUpdateEnableRunViewStatus()\n }\n render(){\n return (\n
    \n \n \n \n \n \n \n \n
    © 2021 eve autonomy, Inc.
    \n
    \n );\n }\n}\n\nconst mapStateToProps = state => {\n return {\n is_LoggedIn: state.userReducer.is_LoggedIn\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n dispatchUpdateLoginStatus: () => dispatch(updateLoginStatus()),\n dispatchUpdateEnableRunViewStatus: () => dispatch(updateRunViewStatus())\n});\nexport default connect(mapStateToProps, mapDispatchToProps)(App);","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import {IS_LOGGED_IN,ENABLE_RUN_VIEW} from '../actions/userAction'\r\n\r\nconst initialState ={\r\n is_LoggedIn : false,\r\n enableRunView:false,\r\n}\r\nexport default function userReducer(state = initialState,action = {}){\r\n switch(action.type){\r\n case IS_LOGGED_IN:\r\n return Object.assign({},state,{is_LoggedIn : action.is_LoggedIn});\r\n case ENABLE_RUN_VIEW:\r\n return Object.assign({},state,{enableRunView : action.enableRunView});\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {TAB_INDEX,POINT_ID,IS_LOADING,POINT_LIST} from '../actions/systemAction'\r\n\r\nconst initialState ={\r\n tabIndex : 0,\r\n pointId : localStorage.getItem('point_id') ? localStorage.getItem('point_id') : -1,\r\n isLoading: false,\r\n pointList:[]\r\n}\r\nexport default function systemReducer(state = initialState,action = {}){\r\n switch(action.type){\r\n case TAB_INDEX:\r\n return Object.assign({},state,{tabIndex : action.tabIndex});\r\n case POINT_ID:\r\n return Object.assign({},state,{pointId : action.pointId});\r\n case IS_LOADING:\r\n return Object.assign({},state,{isLoading : action.isLoading});\r\n case POINT_LIST:\r\n return Object.assign({},state,{pointList : action.pointList});\r\n default:\r\n return state;\r\n }\r\n}","import {combineReducers} from 'redux';\r\nimport userReducer from './userReducer';\r\nimport systemReducer from './systemReducer';\r\nexport default combineReducers({\r\n userReducer,systemReducer\r\n})","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport combineReducers from './reducers/reducer';\nimport { createStore, applyMiddleware } from 'redux';\nimport thunk from 'redux-thunk';\nimport { Provider } from 'react-redux';\n\nconst store = createStore(combineReducers,applyMiddleware(thunk));\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}